以下、この技術的思想の実施形態について図面を参照しながら詳細に説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。なお、以下で説明される各実施形態は、適宜選択的に組み合わされてもよい。
[技術思想]
図1は、本開示の技術思想を説明するための図(その1)である。図1を参照して、コンピュータ200は、ユーザ190が装着しているHMD(Head-Mounted Device)110に仮想空間2を提供している。コンピュータ200は、仮想空間2にパノラマ画像22を展開している。
コンピュータ200は、ユーザ190に対応するアバターオブジェクト1500を仮想空間2に配置する。なお、図1におけるアバターオブジェクト1500はHMD110を装着しているが、これは説明を分かりやすくするためのものであって、実際には装着していない。コンピュータ200はさらに、アバターオブジェクト1500の視界領域に対応する画像をHMD110のモニタに表示する。これによりユーザ190は、パノラマ画像22を視認する。また、コンピュータ200は、撮影機能を有するカメラオブジェクト1810を仮想空間2に配置する。
アバターオブジェクト1500は、ユーザ190の操作に応じて動く。ユーザ190は、アバターオブジェクト1500によりカメラオブジェクト1810を操作して、仮想空間2(に展開されるパノラマ画像22)を撮影できる。
図1に示される例において、カメラオブジェクト1810の撮影範囲1830は、パノラマ画像22の一部である花1840を含む。この状態において、ユーザ190は、カメラオブジェクト1810による撮影を行なうための操作を行なう。コンピュータ200は、当該操作に基づいて、撮影範囲1830に対応する画像を生成する。以下、仮想空間における撮影により生成された画像を「写真画像」とも言う。
コンピュータ200は、仮想空間2における撮影を行なうごとに、当該撮影により生成される写真画像を表す写真オブジェクト2010を生成する。コンピュータ200は、写真オブジェクト2010を仮想空間2の予め定められた位置に配置する。図1の例において、コンピュータ200は、写真オブジェクト2010を机オブジェクト2110の上に配置する。
ユーザ190は、仮想空間2において机オブジェクト2110まで移動して、生成された写真画像を確認する。しかしながら、ユーザ190は、写真オブジェクト2010が配置される位置を知らない場合がある。係る場合、ユーザ190は、仮想空間2を移動して写真オブジェクト2010が配置される位置(机オブジェクト2110)を探さなければならない。以下に、このような課題を解決し得る処理について説明する。
図2は、本開示の技術思想を説明するための図(その2)である。図2の状態において、ユーザ190は、HMD110のモニタに展開される視界画像300を視認している。
視界画像300は、アバターオブジェクト1500の手の部分に相当する手オブジェクト1510と、カメラオブジェクト1810とを含む。カメラオブジェクト1810は、プレビュー画面を有する。図2に示される例において、プレビュー画面は花1840を含む。コンピュータ200は、手オブジェクト1510によるカメラオブジェクト1810に設けられたボタン1820の押下を受け付けると、仮想空間2における撮影を実行する。これにより、コンピュータ200は、写真画像を生成してメモリ(図示しない)に保存する。
さらに、コンピュータ200は、写真画像を表す写真オブジェクト2010を生成し、当該オブジェクトをカメラオブジェクト1810の近くに配置する。コンピュータ200はさらに、写真オブジェクト2010を机オブジェクト2110の位置まで移動させる。
上記によれば、ユーザ190は、写真オブジェクト2010が移動する軌道2020を確認することにより、写真オブジェクト2010が配置される位置を容易に理解できる。以下、このような処理を実現するための具体的な構成および制御について説明する。
[HMDシステムの構成]
図3を参照して、HMDシステム100の構成について説明する。図3は、HMDシステム100の構成の概略を表す。HMDシステム100は、家庭用のシステムとしてあるいは業務用のシステムとして提供される。
HMDシステム100は、HMDセット105A,105B,105C,105Dと、ネットワーク19とサーバ150とを含む。HMDセット105A,105B,105C,105Dの各々は、ネットワーク19を介してサーバ150と通信可能に構成される。以下、HMDセット105A,105B,105C,105Dを総称して、HMDセット105とも言う。なお、HMDシステム100を構成するHMDセット105の数は、4つに限られず、3つ以下でも、5つ以上でもよい。
HMDセット105は、HMD110と、HMDセンサ120と、コンピュータ200とを備える。HMD110は、モニタ112と、カメラ116と、スピーカ118と、マイク119と、注視センサ140とを含む。他の局面において、HMD110は、センサ114をさらに備える。
ある局面において、コンピュータ200は、インターネットその他のネットワーク19に接続可能であり、ネットワーク19に接続されているサーバ150その他のコンピュータ(例えば、他のHMDセット105のコンピュータ)と通信可能である。
HMD110は、ユーザ190の頭部に装着され、動作中に仮想空間をユーザ190に提供し得る。より具体的には、HMD110は、右目用の画像および左目用の画像をモニタ112にそれぞれ表示する。ユーザ190の各目がそれぞれの画像を視認すると、ユーザ190は、両目の視差に基づき当該画像を3次元の画像として認識し得る。HMD110は、モニタを備える所謂ヘッドマウントディスプレイと、スマートフォンその他のモニタを有する端末を装着可能なヘッドマウント機器のいずれをも含み得る。
モニタ112は、例えば、非透過型の表示装置として実現される。ある局面において、モニタ112は、ユーザ190の両目の前方に位置するようにHMD110の本体に配置されている。したがって、ユーザ190は、モニタ112に表示される3次元画像を視認すると、仮想空間に没入できる。ある実施形態において、モニタ112は、所謂スマートフォンその他の情報表示端末が備える液晶モニタまたは有機EL(Electro Luminescence)モニタとして実現され得る。
他の局面において、モニタ112は、透過型の表示装置として実現され得る。この場合、HMD110は、図3に示されるようにユーザ190の目を覆う密閉型ではなく、メガネ型のような開放型であり得る。透過型のモニタ112は、その透過率を調整することにより、一時的に非透過型の表示装置として機能し得る。また、モニタ112は、仮想空間を構成する画像の一部と、現実空間とを同時に表示する構成を含んでいてもよい。例えば、モニタ112は、HMD110に搭載されたカメラで撮影した現実空間の画像を表示してもよいし、一部の透過率を高く設定することにより現実空間を視認可能にしてもよい。
ある局面において、モニタ112は、右目用の画像を表示するためのサブモニタと、左目用の画像を表示するためのサブモニタとを含み得る。別の局面において、モニタ112は、右目用の画像と左目用の画像とを一体として表示する構成であってもよい。この場合、モニタ112は、高速シャッタを含む。高速シャッタは、画像がいずれか一方の目にのみ認識されるように、右目用の画像と左目用の画像とを交互に表示可能に作動する。
カメラ116は、対象物の深度情報を取得可能に構成される。一例として、カメラ116は、TOF(Time Of Flight)方式に従い、対象物の深度情報を取得する。他の例として、カメラ116は、パターン照射方式に従い、対象物の深度情報を取得する。ある実施形態において、カメラ116は、対象物を2つ以上の異なる方向から撮影できるステレオカメラであり得る。また、カメラ116は、人間が不可視な赤外線カメラであり得る。カメラ116は、HMD110に装着され、ユーザ190の身体の一部を撮影する。以下、一例として、カメラ116は、ユーザ190の手を撮影する。カメラ116は取得したユーザ190の手の深度情報をコンピュータ200に出力する。
スピーカ118は、音声信号を音声に変換してユーザ190に出力する。マイク119は、ユーザ190の発話を電気信号である音声信号に変換してコンピュータ200に出力する。なお、他の局面において、HMD110は、スピーカ118に替えてイヤホンを備えるように構成されてもよい。
HMDセンサ120は、HMD110の位置および傾きを検出する。この場合、HMD110は、複数の光源(図示しない)を含む。各光源は例えば、赤外線を発するLED(Light Emitting Diode)により実現される。HMDセンサ120は、各光源が発する光を検出して、HMD110の位置および姿勢を検出するための公知のポジショントラッキング機能を有する。
なお、他の局面において、HMDセンサ120は、カメラにより実現されてもよい。この場合、HMDセンサ120は、カメラから出力されるHMD110の画像情報を用いて、画像解析処理を実行することにより、HMD110の位置および傾きを検出できる。
さらに他の局面において、コンピュータ200は、HMDセンサ120の出力に替えてセンサ114の出力に基づいてHMD110の傾きを検出するように構成されてもよい。センサ114は、例えば、角速度センサ、加速度センサ、地磁気センサにより、またはこれらのセンサの組み合わせにより実現される。コンピュータ200は、センサ114の出力に基づいて、HMD110の傾きを検出する。一例として、センサ114が角速度センサである場合、角速度センサは、現実空間におけるHMD110の3軸周りの角速度を経時的に検出する。コンピュータ200は、各角速度に基づいて、HMD110の3軸周りの角度の各々の時間的変化を算出してHMD110の傾きを算出する。
注視センサ140は、ユーザ190の右目および左目の視線を検出する。当該視線の検出は、例えば、公知のアイトラッキング機能によって実現される。注視センサ140は、当該アイトラッキング機能を有するセンサにより実現される。ある局面において、注視センサ140は、右目用のセンサおよび左目用のセンサを含むことが好ましい。注視センサ140は、例えば、ユーザ190の右目および左目に赤外光を照射するとともに、照射光に対する角膜および虹彩からの反射光を受けることにより各眼球の回転角を検出するセンサであってもよい。注視センサ140は、検出した各回転角に基づいて、ユーザ190の視線を検知できる。
サーバ150は、コンピュータ200にプログラムを送信し得る。別の局面において、サーバ150は、他のユーザによって使用されるHMDに仮想現実を提供するための他のコンピュータ200と通信し得る。例えば、アミューズメント施設において、複数のユーザが参加型のゲームを行なう場合、各コンピュータ200は、各ユーザの動作に基づく信号を他のコンピュータ200と通信して、同じ仮想空間において複数のユーザが共通のゲームを楽しむことを可能にする。
[ハードウェア構成]
図4を参照して、本実施形態に係るコンピュータ200について説明する。図4は、ある局面に従うコンピュータ200のハードウェア構成の一例を表すブロック図である。コンピュータ200は、主たる構成要素として、プロセッサ10と、メモリ11と、ストレージ12と、入出力インターフェイス13と、通信インターフェイス14とを備える。各構成要素は、それぞれ、バス15に接続されている。
プロセッサ10は、コンピュータ200に与えられる信号に基づいて、あるいは、予め定められた条件が成立したことに基づいて、メモリ11またはストレージ12に格納されているプログラムに含まれる一連の命令を実行する。ある局面において、プロセッサ10は、CPU(Central Processing Unit)、MPU(Micro Processor Unit)、FPGA(Field-Programmable Gate Array)その他のデバイスとして実現される。
メモリ11は、プログラムおよびデータを一時的に保存する。プログラムは、例えば、ストレージ12からロードされる。データは、コンピュータ200に入力されたデータと、プロセッサ10によって生成されたデータとを含む。ある局面において、メモリ11は、RAM(Random Access Memory)その他の揮発メモリとして実現される。
ストレージ12は、プログラムおよびデータを永続的に保持する。ストレージ12は、例えば、ROM(Read-Only Memory)、ハードディスク装置、フラッシュメモリ、その他の不揮発記憶装置として実現される。ストレージ12に格納されているプログラムは、HMDシステム100において仮想空間を提供するためのプログラム、シミュレーションプログラム、ゲームプログラム、ユーザ認証プログラム、他のコンピュータ200との通信を実現するためのプログラムを含む。ストレージ12に格納されているデータは、仮想空間を規定するためのデータおよびオブジェクト等を含む。
なお、別の局面において、ストレージ12は、メモリカードのように着脱可能な記憶装置として実現されてもよい。さらに別の局面において、コンピュータ200に内蔵されたストレージ12の代わりに、外部の記憶装置に保存されているプログラムおよびデータを使用する構成が使用されてもよい。このような構成によれば、例えば、アミューズメント施設のように複数のHMDシステム100が使用される場面において、プログラムやデータの更新を一括して行なうことが可能になる。
ある実施形態において、入出力インターフェイス13は、HMD110、およびHMDセンサ120との間で信号を通信する。ある局面において、HMD110に含まれるセンサ114、カメラ116、スピーカ118、およびマイク119は、HMD110の入出力インターフェイス13を介してコンピュータ200との通信を行ない得る。ある局面において、入出力インターフェイス13は、USB(Universal Serial Bus)、DVI(Digital Visual Interface)、HDMI(登録商標)(High-Definition Multimedia Interface)その他の端子を用いて実現される。なお、入出力インターフェイス13は上述のものに限られない。
通信インターフェイス14は、ネットワーク19に接続されて、ネットワーク19に接続されている他のコンピュータ(例えば、サーバ150)と通信する。ある局面において、通信インターフェイス14は、例えば、LAN(Local Area Network)その他の有線通信インターフェイス、あるいは、WiFi(Wireless Fidelity)、Bluetooth(登録商標)、NFC(Near Field Communication)その他の無線通信インターフェイスとして実現される。なお、通信インターフェイス14は上述のものに限られない。
ある局面において、プロセッサ10は、ストレージ12にアクセスし、ストレージ12に格納されている1つ以上のプログラムをメモリ11にロードし、当該プログラムに含まれる一連の命令を実行する。当該1つ以上のプログラムは、コンピュータ200のオペレーティングシステム、仮想空間を提供するためのアプリケーションプログラム、仮想空間で実行可能なゲームソフトウェア等を含み得る。プロセッサ10は、入出力インターフェイス13を介して、仮想空間を提供するための信号をHMD110に送る。HMD110は、その信号に基づいてモニタ112に映像を表示する。
なお、図4に示される例では、コンピュータ200は、HMD110の外部に設けられる構成が示されているが、別の局面において、コンピュータ200は、HMD110に内蔵されてもよい。一例として、モニタ112を含む携帯型の情報通信端末(例えば、スマートフォン)がコンピュータ200として機能してもよい。
また、コンピュータ200は、複数のHMD110に共通して用いられる構成であってもよい。このような構成によれば、例えば、複数のユーザに同一の仮想空間を提供することもできるので、各ユーザは同一の仮想空間で他のユーザと同一のアプリケーションを楽しむことができる。
ある実施形態において、HMDシステム100では、グローバル座標系が予め設定されている。グローバル座標系は、現実空間における鉛直方向、鉛直方向に直交する水平方向、ならびに、鉛直方向および水平方向の双方に直交する前後方向にそれぞれ平行な、3つの基準方向(軸)を有する。本実施形態では、グローバル座標系は視点座標系の一つである。そこで、グローバル座標系における水平方向、鉛直方向(上下方向)、および前後方向は、それぞれ、x軸、y軸、z軸と規定される。より具体的には、グローバル座標系において、x軸は現実空間の水平方向に平行である。y軸は、現実空間の鉛直方向に平行である。z軸は現実空間の前後方向に平行である。
ある局面において、センサ114は、3軸角速度センサと、3軸加速度センサとの組み合わせにより構成される。コンピュータ200は、これらのセンサの出力に基づいて、HMD110の基準方向(例えば、重力(鉛直)方向)に対する角度を算出する。これにより、コンピュータ200は、グローバル座標系におけるHMD110の傾きを取得できる。
他の局面において、HMDセンサ120は、赤外線センサを含む。赤外線センサが、HMD110の各光源から発せられた赤外線をそれぞれ検出すると、HMD110の存在を検出する。HMDセンサ120は、さらに、各光源の位置(グローバル座標系における各座標値)に基づいて、HMD110を装着したユーザ190の動きに応じた、現実空間内におけるHMD110の位置および傾きを検出する。より詳しくは、HMDセンサ120は、経時的に検出された各値を用いて、HMD110の位置および傾きの時間的変化を検出できる。
ある局面において、HMDセンサ120は、赤外線センサからの出力に基づいて取得される赤外線の光強度および複数の点間の相対的な位置関係(例えば、各点間の距離など)に基づいて、HMD110の現実空間内における位置を、HMDセンサ120に対する相対位置として特定し得る。また、プロセッサ10は、特定された相対位置に基づいて、現実空間内(グローバル座標系)におけるHMD110のuvw視野座標系の原点を決定し得る。
グローバル座標系は現実空間の座標系と平行である。したがって、HMDセンサ120によって検出されたHMD110の各傾きは、グローバル座標系におけるHMD110の3軸周りの各傾きに相当する。コンピュータ200は、グローバル座標系におけるHMD110の傾きに基づき、uvw視野座標系をHMD110に設定する。HMD110に設定されるuvw視野座標系は、HMD110を装着したユーザ190が仮想空間において物体を見る際の視点座標系に対応する。
[uvw視野座標系]
図5を参照して、uvw視野座標系について説明する。図5は、ある実施形態に従うHMD110に設定されるuvw視野座標系を概念的に表す模式図である。HMDセンサ120は、HMD110の起動時に、グローバル座標系におけるHMD110の位置および傾きを検出する。プロセッサ10は、検出された値に基づいて、uvw視野座標系をHMD110に設定する。
図5に示されるように、HMD110は、HMD110を装着したユーザ190の頭部を中心(原点)とした3次元のuvw視野座標系を設定する。より具体的には、HMD110は、グローバル座標系を規定する水平方向、鉛直方向、および前後方向(x軸、y軸、z軸)を、グローバル座標系内においてHMD110の各軸周りの傾きだけ各軸周りにそれぞれ傾けることによって新たに得られる3つの方向を、HMD110におけるuvw視野座標系のピッチ軸(u軸)、ヨー軸(v軸)、およびロール軸(w軸)として設定する。
ある局面において、HMD110を装着したユーザ190が直立し、かつ、正面を視認している場合、プロセッサ10は、グローバル座標系に平行なuvw視野座標系をHMD110に設定する。この場合、グローバル座標系における水平方向(x軸)、鉛直方向(y軸)、および前後方向(z軸)は、HMD110におけるuvw視野座標系のピッチ軸(u軸)、ヨー軸(v軸)、およびロール軸(w軸)に一致する。
uvw視野座標系がHMD110に設定された後、HMDセンサ120は、HMD110の動きに基づいて、設定されたuvw視野座標系におけるHMD110の傾き(傾きの変化量)を検出できる。この場合、HMDセンサ120は、HMD110の傾きとして、uvw視野座標系におけるHMD110のピッチ角(θu)、ヨー角(θv)、およびロール角(θw)をそれぞれ検出する。ピッチ角(θu)は、uvw視野座標系におけるピッチ軸周りのHMD110の傾き角度を表す。ヨー角(θv)は、uvw視野座標系におけるヨー軸周りのHMD110の傾き角度を表す。ロール角(θw)は、uvw視野座標系におけるロール軸周りのHMD110の傾き角度を表す。
コンピュータ200は、HMD110の傾き角度に基づいて、HMD110が動いた後のHMD110におけるuvw視野座標系を、HMD110に設定する。HMD110と、HMD110のuvw視野座標系との関係は、HMD110の位置および傾きに関わらず、常に一定である。HMD110の位置および傾きが変わると、当該位置および傾きの変化に連動して、グローバル座標系におけるHMD110のuvw視野座標系の位置および傾きが変化する。
[仮想空間]
図6を参照して、仮想空間についてさらに説明する。図6は、ある実施形態に従う仮想空間2を表現する一態様を概念的に表す模式図である。仮想空間2は、中心21の360度方向の全体を覆う全天球状の構造を有する。図6では、説明を複雑にしないために、仮想空間2のうちの上半分の天球が例示されている。仮想空間2では各メッシュが規定される。各メッシュの位置は、仮想空間2に規定されるXYZ座標系における座標値として予め規定されている。コンピュータ200は、パノラマ画像22を構成する各部分画像を対応する各メッシュに展開する。これにより、ユーザ190は仮想空間2を視認する。
ある局面において、仮想空間2では、中心21を原点とするXYZ座標系が規定される。XYZ座標系は、例えば、グローバル座標系に平行である。XYZ座標系は視点座標系の一種であるため、XYZ座標系における水平方向、鉛直方向(上下方向)、および前後方向は、それぞれX軸、Y軸、Z軸として規定される。したがって、XYZ座標系のX軸(水平方向)がグローバル座標系のx軸と平行であり、XYZ座標系のY軸(鉛直方向)がグローバル座標系のy軸と平行であり、XYZ座標系のZ軸(前後方向)がグローバル座標系のz軸と平行である。
HMD110の起動時、すなわちHMD110の初期状態において、仮想カメラ1が、仮想空間2の中心21に配置される。ある局面において、プロセッサ10は、仮想カメラ1が撮影する画像をHMD110のモニタ112に表示する。仮想カメラ1は、現実空間におけるHMD110の動きに連動して、仮想空間2を同様に移動する。これにより、現実空間におけるHMD110の位置および向きの変化が、仮想空間2において同様に再現され得る。
仮想カメラ1には、HMD110の場合と同様に、uvw視野座標系が規定される。仮想空間2における仮想カメラ1のuvw視野座標系は、現実空間(グローバル座標系)におけるHMD110のuvw視野座標系に連動するように規定されている。したがって、HMD110の傾きが変化すると、それに応じて、仮想カメラ1の傾きも変化する。また、仮想カメラ1は、HMD110を装着したユーザ190の現実空間における移動に連動して、仮想空間2において移動することもできる。
コンピュータ200のプロセッサ10は、仮想カメラ1の位置と、仮想カメラ1の傾き方向(つまり、仮想カメラ1の撮影方向)を示す基準視線5とに基づいて、仮想空間2における視認領域23を規定する。視認領域23は、仮想空間2のうち、HMD110を装着したユーザ190が視認する領域に対応する。上記のように、仮想カメラ1のuvw視野座標系はHMD110のuvw視野座標系に連動している。そのため、基準視線5は、HMD110の傾きによって定まる。
注視センサ140によって検出されるユーザ190の視線は、ユーザ190が物体を視認する際の視点座標系における方向である。HMD110のuvw視野座標系は、ユーザ190がモニタ112を視認する際の視点座標系に等しい。また、仮想カメラ1のuvw視野座標系は、HMD110のuvw視野座標系に連動している。したがって、ある局面に従うHMDシステム100は、注視センサ140によって検出されたユーザ190の視線を、仮想カメラ1のuvw視野座標系におけるユーザ190の視線とみなすことができる。
[ユーザの視線]
図7を参照して、ユーザ190の視線の決定について説明する。図7は、ある実施形態に従うHMD110を装着するユーザ190の頭部を上から表した模式図である。
ある局面において、注視センサ140は、ユーザ190の右目および左目の各視線を検出する。ある局面において、ユーザ190が近くを見ている場合、注視センサ140は、視線R1およびL1を検出する。別の局面において、ユーザ190が遠くを見ている場合、注視センサ140は、視線R2およびL2を検出する。この場合、ロール軸wに対して視線R2およびL2が成す角度は、ロール軸wに対して視線R1およびL1が成す角度よりも小さい。注視センサ140は、検出結果をコンピュータ200に送信する。
コンピュータ200が、視線の検出結果として、視線R1およびL1の検出値を注視センサ140から受信した場合には、その検出値に基づいて、視線R1およびL1の交点である注視点N1を特定する。一方、コンピュータ200は、視線R2およびL2の検出値を注視センサ140から受信した場合には、視線R2およびL2の交点を注視点として特定する。コンピュータ200は、特定した注視点N1の位置に基づき、ユーザ190の視線N0を特定する。コンピュータ200は、例えば、ユーザ190の右目Rと左目Lとを結ぶ直線の中点と、注視点N1とを通る直線の延びる方向を、視線N0として検出する。視線N0は、ユーザ190が両目により実際に視線を向けている方向である。また、視線N0は、視認領域23に対してユーザ190が実際に視線を向けている方向に相当する。
また、別の局面において、HMDシステム100は、テレビジョン放送受信チューナを備えてもよい。このような構成によれば、HMDシステム100は、仮想空間2においてテレビ番組を表示することができる。
さらに別の局面において、HMDシステム100は、インターネットに接続するための通信回路、あるいは、電話回線に接続するための通話機能を備えていてもよい。
[視界領域]
図8および図9を参照して、視認領域23について説明する。図8は、仮想空間2において視認領域23をX方向から見たYZ断面を表す。図9は、仮想空間2において視認領域23をY方向から見たXZ断面を表す。
図8に示されるように、YZ断面における視認領域23は、領域24を含む。領域24は、仮想カメラ1の位置と基準視線5と仮想空間2のYZ断面とによって定義される。プロセッサ10は、仮想空間における基準視線5を中心として極角αを含む範囲を、領域24として規定する。
図9に示されるように、XZ断面における視認領域23は、領域25を含む。領域25は、仮想カメラ1の位置と基準視線5と仮想空間2のXZ断面とによって定義される。プロセッサ10は、仮想空間2における基準視線5を中心とした方位角βを含む範囲を、領域25として規定する。極角αおよびβは、仮想カメラ1の位置と仮想カメラ1の向きとに応じて定まる。
ある局面において、HMDシステム100は、コンピュータ200からの信号に基づいて、視界画像26をモニタ112に表示させることにより、ユーザ190に仮想空間における視界を提供する。視界画像26は、パノラマ画像22のうち視認領域23に重畳する部分に相当する。ユーザ190が、頭に装着したHMD110を動かすと、その動きに連動して仮想カメラ1も動く。その結果、仮想空間2における視認領域23の位置が変化する。これにより、モニタ112に表示される視界画像26は、パノラマ画像22のうち、仮想空間2においてユーザ190が向いた方向の視認領域23に重畳する画像に更新される。ユーザ190は、仮想空間2における所望の方向を視認することができる。
このように、仮想カメラ1の傾きは仮想空間2においてユーザ190が向いている方向(基準視線5)に相当し、仮想カメラ1が配置される位置は、仮想空間2におけるユーザ190の視点に相当する。したがって、仮想カメラ1の位置または傾きが変更されることにより、モニタ112に表示される画像が更新され、ユーザ190の視界が移動される。
ユーザ190は、HMD110を装着している間、現実世界を視認することなく、仮想空間2に展開されるパノラマ画像22のみを視認できる。そのため、HMDシステム100は、仮想空間2への高い没入感覚をユーザ190に与えることができる。
ある実施形態に従うと、仮想カメラ1は、2つの仮想カメラ、すなわち、右目用の画像を提供するための仮想カメラと、左目用の画像を提供するための仮想カメラとを含み得る。また、ユーザ190が3次元の仮想空間2を認識できるように、適切な視差が、2つの仮想カメラに設定される。本実施形態においては、仮想カメラ1が2つの仮想カメラを含み、2つの仮想カメラのロール軸が合成されることによって生成されるロール軸(w)がHMD110のロール軸(w)に適合されるように構成されているものとして、本開示に係る技術思想を例示する。
[HMDの制御装置]
図10を参照して、HMD110の制御装置について説明する。ある実施形態において、制御装置は周知の構成を有するコンピュータ200によって実現される。図10は、ある実施形態に従うコンピュータ200をモジュール構成として表わすブロック図である。
図10に示されるように、コンピュータ200は、表示制御モジュール220と、仮想空間制御モジュール230と、メモリモジュール240と、通信制御モジュール250とを備える。表示制御モジュール220は、サブモジュールとして、仮想カメラ制御モジュール221と、視界領域決定モジュール222と、視界画像生成モジュール223と、傾き特定モジュール224と、トラッキングモジュール225と、視線検出モジュール226とを含む。仮想空間制御モジュール230は、サブモジュールとして、仮想空間定義モジュール231と、仮想オブジェクト生成モジュール232と、操作オブジェクト制御モジュール233と、アバター制御モジュール234と、撮影モジュール235とを含む。
ある実施形態において、表示制御モジュール220と仮想空間制御モジュール230とは、プロセッサ10によって実現される。別の実施形態において、複数のプロセッサ10が表示制御モジュール220と仮想空間制御モジュール230として作動してもよい。メモリモジュール240は、メモリ11またはストレージ12によって実現される。通信制御モジュール250は、通信インターフェイス14によって実現される。
ある局面において、表示制御モジュール220は、HMD110のモニタ112における画像表示を制御する。
仮想カメラ制御モジュール221は、仮想空間2に仮想カメラ1を配置する。また、仮想カメラ制御モジュール221は、仮想空間2における仮想カメラ1の位置と、仮想カメラ1の傾き(撮影方向)を制御する。視界領域決定モジュール222は、仮想カメラ1の位置と傾きとに応じて、視認領域23を規定する。視界画像生成モジュール223は、決定された視認領域23に基づいて、モニタ112に表示される視界画像26を生成する。
傾き特定モジュール224は、センサ114またはHMDセンサ120の出力に基づいて、HMD110の傾き(つまり、基準視線5)を特定する。
トラッキングモジュール225は、ユーザ190の身体の一部の位置を検出(トラッキング)する。ある実施形態において、トラッキングモジュール225は、カメラ116から入力される深度情報に基づいて、HMD110に設定されるuvw視野座標系におけるユーザ190の手の位置を検出する。トラッキングモジュール225の動作は後述される。
視線検出モジュール226は、注視センサ140からの信号に基づいて、ユーザ190の仮想空間2における視線を検出する。
仮想空間制御モジュール230は、ユーザ190に提供される仮想空間2を制御する。仮想空間定義モジュール231は、仮想空間2の大きさおよび形状を定義する。また、仮想空間定義モジュール231は、仮想空間2にパノラマ画像22を展開する。
仮想オブジェクト生成モジュール232は、後述するオブジェクト情報242に基づいて仮想空間2に配置されるオブジェクトを生成する。オブジェクトは、上述のカメラオブジェクト1810を含む。オブジェクトは、その他にも木、動物、人などを含み得る。
操作オブジェクト制御モジュール233は、ユーザ190の操作に応じて動く操作オブジェクトを仮想空間2に配置する。ユーザ190は、操作オブジェクトを動かすことにより、例えば、仮想空間2に配置されるオブジェクトを操作する。ある局面において、操作オブジェクトは、例えば、HMD110を装着したユーザ190の手に相当する手オブジェクトを含み得る。ある局面において、操作オブジェクトは、後述するアバターオブジェクトの手の部分に相当し得る。他の局面において、操作オブジェクトは、アバターオブジェクトによって保持されるオブジェクト(例えば、ステッキ)を含む。
アバター制御モジュール234は、ネットワークを介して接続される他のコンピュータ200のユーザに対応するアバターオブジェクトを仮想空間2に配置するためのデータを生成する。ある局面において、アバター制御モジュール234は、ユーザ190に対応するアバターオブジェクトを仮想空間2に配置するためのデータを生成する。ある局面において、アバター制御モジュール234は、ユーザ190の画像に基づいて、ユーザ190を模したアバターオブジェクトを生成する。他の局面において、アバター制御モジュール234は、複数種類のアバターオブジェクト(例えば、動物を模したオブジェクトや、デフォルメされた人のオブジェクト)の中からユーザ190による選択を受け付けたアバターオブジェクトを仮想空間2に配置するためのデータを生成する。
アバター制御モジュール234は、傾き特定モジュール224により特定される傾きをアバターオブジェクトに反映する。例えば、アバター制御モジュール234は、HMD110が傾いたことに応じて、傾いたアバターオブジェクトのデータを生成する。また、アバター制御モジュール234は、トラッキングモジュール225の出力に基づいて、現実空間のユーザ190の手の動きを、アバターオブジェクトの手に反映する。また、アバター制御モジュール234は、他のコンピュータ200から入力されるデータに基づいて、他のコンピュータのユーザに対応するアバターオブジェクトの動きを制御する。
撮影モジュール235は、写真画像を生成する。より具体的には、撮影モジュール235は、仮想空間2に撮影機能を有するカメラオブジェクトを配置し、ユーザ190の撮影指示に従いカメラオブジェクトの撮影範囲に対応する写真画像を生成する。生成された写真画像は、ストレージ12に保存される。
仮想空間制御モジュール230は、仮想空間2に配置されるオブジェクトが、他のオブジェクトと衝突した場合に、当該衝突を検出する。仮想空間制御モジュール230は、例えば、あるオブジェクトと別のオブジェクトとが触れたタイミングを検出すると、予め定められた処理を行なう。仮想空間制御モジュール230は、オブジェクトとオブジェクトとが触れている状態から離れたタイミングを検出すると、予め定められた処理を行なう。
メモリモジュール240は、コンピュータ200が仮想空間2をユーザ190に提供するために使用されるデータを保持している。ある局面において、メモリモジュール240は、空間情報241と、オブジェクト情報242と、ユーザ情報243と、写真画像DB244とを保持している。
空間情報241は、仮想空間2を提供するために規定された1つ以上のテンプレートを含む。仮想空間定義モジュール231は、このテンプレートに従い仮想空間2を定義する。空間情報241は、仮想空間2に展開される複数のパノラマ画像22をさらに含む。パノラマ画像22は、静止画像および動画像を含み得る。また、パノラマ画像22は、現実空間の画像と非現実空間の画像(例えば、コンピュータグラフィックス)とを含み得る。
オブジェクト情報242は、仮想空間2に配置されるオブジェクトを構成するためのモデリングデータ、およびオブジェクトの初期配置位置の情報などを保持している。
ユーザ情報243は、ユーザ190を識別するユーザIDを含む。ユーザIDは、例えば、ユーザ190が使用するコンピュータ200に設定されるIP(Internet Protocol)アドレスまたはMAC(Media Access Control)アドレスであり得る。他の局面において、ユーザIDはユーザによって設定され得る。ユーザ情報243は、HMDシステム100の制御装置としてコンピュータ200を機能させるためのプログラム等を含む。
写真画像DB244は、撮影モジュール235によって生成された写真画像と、写真画像を識別するための識別情報(以下、写真IDとも言う)とを互いに関連付けて格納する。
メモリモジュール240に格納されているデータおよびプログラムは、HMD110のユーザ190によって入力される。あるいは、プロセッサ10が、当該コンテンツを提供する事業者が運営するコンピュータ(例えば、サーバ150)からプログラムあるいはデータをダウンロードして、ダウンロードされたプログラムあるいはデータをメモリモジュール240に格納する。
通信制御モジュール250は、ネットワーク19を介して、サーバ150その他の情報通信装置と通信し得る。
ある局面において、表示制御モジュール220および仮想空間制御モジュール230の一部は、例えば、ユニティテクノロジーズ社によって提供されるUnity(登録商標)を用いて実現され得る。別の局面において、表示制御モジュール220および仮想空間制御モジュール230は、各処理を実現する回路素子の組み合わせとしても実現され得る。
コンピュータ200における処理は、ハードウェアと、プロセッサ10により実行されるソフトウェアとによって実現される。このようなソフトウェアは、ハードディスクその他のメモリモジュール240に予め格納されている場合がある。また、ソフトウェアは、CD−ROMその他のコンピュータ読み取り可能な不揮発性のデータ記録媒体に格納されて、プログラム製品として流通している場合もある。あるいは、当該ソフトウェアは、インターネットその他のネットワークに接続されている情報提供事業者によってダウンロード可能なプログラム製品として提供される場合もある。このようなソフトウェアは、光ディスク駆動装置その他のデータ読取装置によってデータ記録媒体から読み取られて、あるいは、通信制御モジュール250を介してサーバ150その他のコンピュータからダウンロードされた後、ストレージ12に一旦格納される。そのソフトウェアは、プロセッサ10によってストレージ12から読み出され、実行可能なプログラムの形式でメモリ11に格納される。プロセッサ10は、そのプログラムを実行する。
[手のトラッキング]
次に、図11〜図13を参照して、ユーザ190の手の動きをトラッキング(追跡)する処理について説明する。図11は、手をトラッキングする処理について説明するための図である。
図11を参照して、ユーザ190は、現実空間においてHMD110を装着している。HMD110には、カメラ116が搭載されている。カメラ116は、HMD110の前方の空間1100に含まれる物体の深度情報を取得する。図11に示される例において、カメラ116は、空間1100に含まれるユーザ190の手の深度情報を取得する。
トラッキングモジュール225は、この深度情報に基づき、手の位置情報(以下、「トラッキングデータ」ともいう)を生成する。カメラ116はHMD110に搭載される。そのため、トラッキングデータはHMD110に設定されるuvw視野座標系における位置を示す。
図12は、トラッキングモジュール225の動作を説明するための図である。ある局面において、トラッキングモジュール225は、カメラ116から入力される深度情報に基づいて、ユーザ190の手の関節の動きをトラッキングする。図12に示される例において、トラッキングモジュール225は、ユーザ190の手の関節a、b、c・・・、xの各位置を検出する。
トラッキングモジュール225は、関節a〜xの位置関係に基づいて、ユーザ190の手の形状(指の動き)を認識可能に構成される。トラッキングモジュール225は、例えば、ユーザ190の手が指を指していること、手が開いていること、手が閉じていること、手が何かをつまむ動作をしていること、手がひねられていること、手が握手の形状をしていることなどを認識できる。トラッキングモジュール225はさらに、関節a〜dとその他の関節との位置関係により、認識している手が左手であるか右手であるかを判断できる。このようなカメラ116およびトラッキングモジュール225は、例えば、LeapMotion社によって提供されるLeapMotion(登録商標)によって実現され得る。
図13は、トラッキングデータのデータ構造の一例を表す。トラッキングモジュール225は、各関節a〜xについてのトラッキングデータを取得する。これらトラッキングデータは、HMD110に設定されるuvw視野座標系における位置情報を表す。
アバター制御モジュール234は、検出されたトラッキングデータをアバターオブジェクトに反映する。一例として、アバターオブジェクトの手を構成するポリゴンの頂点のうちいくつかの頂点には、トラッキングデータに対応する頂点が設定されている。アバター制御モジュール234は、これら対応する頂点の位置をトラッキングデータに基づいて移動する。その結果、現実空間のユーザ190の手の動きが、仮想空間のアバターオブジェクトの手の動きに反映される。
[コンピュータ200の制御構造]
次に、図14を参照して、本実施形態に係るコンピュータ200の制御構造について説明する。図14は、HMDシステム100が実行する処理の一例を表わすフローチャートである。
ステップS1405において、コンピュータ200のプロセッサ10は、仮想空間定義モジュール231として、仮想空間2を定義する。
ステップS1410において、プロセッサ10は、パノラマ画像22を用いて仮想空間2を構成する。より具体的には、プロセッサ10は仮想空間2を構成する各メッシュにパノラマ画像22の部分画像を展開する。
ステップS1420において、プロセッサ10は、仮想カメラ1および操作オブジェクトを含む各種オブジェクトを仮想空間2に配置する。このとき、プロセッサ10は、メモリのワーク領域において、仮想カメラ1を仮想空間2において予め規定された中心21に配置する。
ステップS1430において、プロセッサ10は、視界画像生成モジュール223として、初期の視界画像26(パノラマ画像22の一部)を表示するための視界画像データを生成する。生成された視界画像データは、通信制御モジュール250によってHMD110に送信される。
ステップS1432において、HMD110のモニタ112は、コンピュータ200から受信した信号に基づいて、視界画像26を表示する。これにより、HMD110を装着したユーザ190は、仮想空間2を認識する。
ステップS1434において、HMDセンサ120は、HMD110が出力する複数の赤外線光に基づいて、HMD110の位置および傾き(ユーザ190の動き)を検知する。検知結果は、動き検知データとして、コンピュータ200に送信される。
ステップS1440において、プロセッサ10は仮想カメラ制御モジュール221として、HMDセンサ120から入力された動き検知データに基づいて、仮想カメラ1の位置および傾きを変更する。これにより、仮想カメラ1の位置および傾き(基準視線5)は、ユーザ190の頭の動きに連動して更新される。視界領域決定モジュール222は、変更後の仮想カメラ1の位置および傾きに応じて視認領域23を規定する。
ステップS1446において、カメラ116は、ユーザ190の手の深度情報を検出してコンピュータ200に送信する。
ステップS1450において、プロセッサ10はトラッキングモジュール225として受信した深度情報に基づいてuvw視野座標系におけるユーザ190の手の位置を検出する。プロセッサ10は操作オブジェクト制御モジュール233として、検出したユーザ190の手の位置に連動するように操作オブジェクトを移動する。プロセッサ10は、操作オブジェクトが他のオブジェクトに接触するなどして他のオブジェクトに対するユーザ操作を受け付けた場合、操作に対する予め定められた処理を実行する。
なお、上述の通り、操作オブジェクトはユーザ190に対応するアバターオブジェクトの手の部分である場合もある。この場合、プロセッサ10は、アバター制御モジュール234として、ユーザ190の手の位置に連動するようにアバターオブジェクトの手の部分を移動する。
ステップS1460において、プロセッサ10は、視界画像生成モジュール223として、仮想カメラ1が撮影する視界画像26を表示するための視界画像データを生成し、生成した視界画像データをHMD110に出力する。
ステップS1462において、HMD110のモニタ112は、受信した視界画像データに基づいて、更新後の視界画像を表示する。これにより、仮想空間2におけるユーザの視界が更新される。
[アバターオブジェクト]
図15および図16を参照して、実施形態に従うアバターオブジェクトについて説明する。以下、HMDセット105Aのユーザをユーザ190A、HMDセット105Bのユーザをユーザ190B、HMDセット105Cのユーザをユーザ190C、HMDセット105Dのユーザをユーザ190Dと表す。また、HMDセット105Aに関する各構成要素の参照符号にAが付され、HMDセット105Bに関する各構成要素の参照符号にBが付され、HMDセット105Cに関する各構成要素の参照符号にCが付され、HMDセット105Dに関する各構成要素の参照符号にDが付される。例えば、HMD110Aは、HMDセット105Aに含まれる。
図15は、ネットワーク19において、複数のHMD110が、複数のユーザ190にそれぞれ仮想空間を提供する状況を表す模式図である。図15を参照して、コンピュータ200A〜200Dは、HMD110A〜110Dを介して、ユーザ190A〜190Dに、仮想空間2A〜2Dをそれぞれ提供する。図15に示される例において、仮想空間2Aおよび仮想空間2Bは同じデータによって構成されている。換言すれば、コンピュータ200Aとコンピュータ200Bとは同じ仮想空間を共有していることになる。仮想空間2Aおよび仮想空間2Bには、ユーザ190Aに対応するアバターオブジェクト1500Aと、ユーザ190Bに対応するアバターオブジェクト1500Bとが存在する。なお、仮想空間2Aにおけるアバターオブジェクト1500Aおよび仮想空間2Bにおけるアバターオブジェクト1500BがそれぞれHMDを装着しているが、これは説明を分かりやすくするためのものであって、実際にはこれらのオブジェクトはHMDを装着していない。
ある局面において、仮想カメラ制御モジュール221Aは、ユーザ190Aの視界画像26Aを撮影する仮想カメラ1Aを、アバターオブジェクト1500Aの目の位置に配置する。これにより、ユーザ190Aは、仮想空間2Aにおけるアバターオブジェクト1500Aの視界を視認できる。
図16は、図15においてユーザ190Aが視認する視界画像1600を表す。視界画像1600は、HMD110Aのモニタ112Aに表示される画像である。図15において、仮想空間2Aには、現実空間における市街風景のパノラマ画像22が展開されている。また、視界画像1600は、ユーザ190Bのアバターオブジェクト1500Bを含む。なお、特に図示はしていないが、ユーザ190Bの視界画像も同様に、市街風景とユーザ190Aのアバターオブジェクト1500Aとを含む。
図16の状態において、ユーザ190Aはユーザ190Bと対話によるコミュニケーションを図ることができる。より具体的には、マイク119Aにより取得されたユーザ190Aの音声は、サーバ150を介してユーザ190BのHMD110Bに送信され、HMD110Bに設けられたスピーカ118Bから出力される。また、ユーザ190Bの音声は、サーバ150を介してユーザ190AのHMD110Aに送信され、HMD110Aに設けられたスピーカ118Aから出力される。
コンピュータ200Aは、コンピュータ200BからHMD120Bの検出結果およびトラッキングモジュール225Bの検出結果(トラッキングデータ)を受信する。コンピュータ200Aは、アバター制御モジュール234Aとして、受信したデータをアバターオブジェクト1500Bに反映する。これにより、ユーザ190Aは、ユーザ190Bの動きを、アバターオブジェクト1500Bを通じて認識できる。
このように、ユーザ190Aおよびユーザ190Bは、仮想空間上で同じパノラマ画像22を共有しながらコミュニケーションを図ることができる。このパノラマ画像22は、例えば、映画、ライブ映像、観光名所の画像および、ユーザが過去に撮影した画像などを含み得る。
[サーバ150の制御構造]
図17は、サーバ150のハードウェア構成およびモジュール構成を説明する図である。ある実施形態において、サーバ150は、主たるハードウェアとして通信インターフェイス1710と、プロセッサ1720と、ストレージ1730とを備える。
通信インターフェイス1710は、コンピュータ200など外部の通信機器と信号を送受信するための変復調処理などを行なう無線通信用の通信モジュールとして機能する。通信インターフェイス1710は、チューナ、高周波回路等により実現される。
プロセッサ1720は、サーバ150の動作を制御する。プロセッサ1720は、ストレージ1730に格納される各種の制御プログラムを実行することにより、送受信部1722、サーバ処理部1724、マッチング部1726、およびSNS(Social Networking Service)部1728として機能する。
送受信部1722は、各コンピュータ200との間で各種情報を送受信する。例えば、送受信部1722は、仮想空間2にオブジェクトを配置する要求、オブジェクトを仮想空間2から削除する要求、オブジェクトを移動させる要求、ユーザの音声、および仮想空間2を定義するための情報などを各コンピュータ200に送信する。
サーバ処理部1724は、各コンピュータ200から受信した情報に基づいて、後述される写真DB(Data Base)1737およびユーザDB1739を更新する。
マッチング部1726は、複数のユーザを関連付けるための一連の処理を行なう。マッチング部1726は、例えば、複数のユーザが同じ仮想空間2を共有するための入力操作を行った場合に、仮想空間2に属する複数のユーザの各々のユーザIDを関連付ける処理などを行なう。
SNS部1728は、写真DB1737に格納される複数の写真画像のうち、コンピュータ200(ユーザ190)から指定された写真画像を、ユーザ190ごとに予め登録されたSNS(例えば、ネットワーク19に接続される他のサーバ)に投稿する。
ストレージ1730は、仮想空間指定情報1731と、オブジェクト指定情報1733と、パノラマ画像DB1735と、写真DB1737と、ユーザDB1739とを保持する。
仮想空間指定情報1731は、コンピュータ200の仮想空間定義モジュール231が仮想空間2を定義するために用いられる情報である。例えば、仮想空間指定情報1731は、仮想空間2の大きさまたは形状を指定する情報を含む。
オブジェクト指定情報1733は、コンピュータ200の仮想オブジェクト生成モジュール232が仮想空間2に配置(生成)するオブジェクトを指定する。パノラマ画像DB1735は、コンピュータ200に配信するパノラマ画像22と、パノラマ画像22を特定するための識別情報(以下、「パノラマ画像ID」とも言う)とを互いに関連付けて複数格納する。
写真DB1737は、各コンピュータ200から受信した写真画像を格納する。ユーザDB1739は、複数のユーザの各々を識別する情報(ユーザID)と、SNS部1728が写真画像をSNSに投稿するために必要な情報とを互いに関連付けて格納する。
[仮想空間における撮影]
図18は、仮想空間における撮影により写真画像を生成する処理を説明するための図である。図18では、一例として、ユーザ190Aが仮想空間2Aを撮影する様子が示されている。
ユーザ190Aが視認する視界画像1800は、アバターオブジェクト1500Aの右手に相当する右手オブジェクト1510Aと、左手に相当する左手オブジェクト1520Aと、アバターオブジェクト1500Bと、カメラオブジェクト1810Aとを含む。右手オブジェクト1510Aおよび左手オブジェクト1520Aは、操作オブジェクトとして機能する。
カメラオブジェクト1810Aは、撮影機能を有する。一例として、カメラオブジェクト1810Aは矩形のオブジェクトであって、おもて面と裏面とを有し、おもて面がプレビュー画面として機能する。
右手オブジェクト1510Aは、カメラオブジェクト1810Aを支持する棒を握っている。スマートフォン(あるいは撮影機能を有するデバイス)を支持する自撮り棒(セルフィースティック、セルカ棒とも称される)は、広く世間に認知されている。そのため、プレビュー画面を有するカメラオブジェクト1810Aと、棒状の支持部材とを併せて提示することで、ユーザ190Aがカメラオブジェクト1810Aの撮影機能を認知する可能性が高まる。
カメラオブジェクト1810Aは、おもて面側を撮影するインカメラモードと、裏面側を撮影するアウトカメラモードとを切り替え可能に構成される。図18に示される例において、カメラオブジェクト1810Aはインカメラモードとして機能している。そのため、カメラオブジェクト1810Aのおもて面(プレビュー画面)には、アバターオブジェクト1500Aが表示されている。
アバターオブジェクト1500の右腕はUI(User Interface)オブジェクト1530を含む。コンピュータ200Aは、カメラオブジェクト1810Aを支持している腕にUIオブジェクト1530を配置する。ある局面において、UIオブジェクト1530は、カメラオブジェクト1810Aによる撮影のトリガとして機能する。
ユーザ190Aは、左手オブジェクト1520AによりUIオブジェクト1530を押下する。これに応じてコンピュータ200Aは、カメラオブジェクト1810Aの撮影範囲1830に対応する写真画像(つまり、プレビュー画面に表示されている画像)を写真画像DB244Aに格納する。
[写真が配置される位置をユーザに通知する処理]
プロセッサ10Aは、写真画像を生成すると、仮想空間2Aの予め定められた位置(上述の机オブジェクト2110の上)に写真画像を表す写真オブジェクト2010(図1を参照)を配置する。
プロセッサ10Aは、写真オブジェクト2010が配置される位置(以下、「集積場所」とも言う)をユーザ190Aに通知する。これにより、ユーザ190Aは、写真オブジェクト2010がどこに配置されているか迷うことなく、生成された写真画像を容易に確認できる。以下に、プロセッサ10Aがどのように集積場所をユーザ190Aに通知するかを説明する。
(集積場所の方向を通知)
図19は、集積場所の方向をユーザ190Aに通知する処理を説明するための図である。図19を参照して、視界画像1900は、方向オブジェクト1910と、コメントオブジェクト1920とを含む点において、図18で説明した視界画像1800と相違する。
ある局面において、プロセッサ10Aは、ユーザ190Aから撮影指示の入力(例えば、操作オブジェクトによるUIオブジェクト1530の押下)を受け付ける。撮影指示に応答して、プロセッサ10Aは、写真画像を生成する。
プロセッサ10Aはさらに、撮影指示の入力(または写真画像の生成)に応じて、方向オブジェクト1910と、コメントオブジェクト1920とを、視界領域23Aに配置する。これらのオブジェクトは、HMD110Aのモニタ112Aに表示される。
方向オブジェクト1910は、仮想空間2Aにおけるユーザ190Aの位置および視線方向(つまり、仮想カメラ1Aの位置および傾き)を基準として、集積場所の方向を表す。コメントオブジェクト1920は、方向オブジェクト1910に近接して配置され、方向オブジェクト1910が集積場所の方向を表す旨の文字列(例えば「写真があるよ」)を含む。なお、他の局面において、プロセッサ10Aは、撮影指示の入力に応じて、コメントオブジェクト1920を配置せずに方向オブジェクト1910だけを配置するように構成されてもよい。
図19の例において、ユーザ190Aは、方向オブジェクト1910(およびコメントオブジェクト1920)を視認して、自分の右側に集積場所があることを理解できる。
なお、図19の例において方向オブジェクト1910は矢印の形状をしているが、他の局面において、矢印以外の形状であってもよい。係る場合、プロセッサ10Aは、視認領域23のうち集積場所に最も近い位置に方向オブジェクト1910を配置する。これにより、ユーザ190Aは、モニタ112Aにおいて方向オブジェクト1910が配置されている位置によって、集積場所の方向を認識できる。
プロセッサ10Aは、撮影指示の入力を受け付けてから予め定められた時間(例えば3秒間)が経過すると、方向オブジェクト1910およびコメントオブジェクト1920を仮想空間2Aから削除する。
(集積場所までの軌跡を通知)
図20は、集積場所までの軌跡をユーザ190Aに通知する処理を説明するための図である。ユーザ190Aが視認する視界画像2000は、ユーザ190Bに対応するアバターオブジェクト1500Bを含む。
アバターオブジェクト1500Bは、カメラオブジェクト1810Bを保持している。図20に示される例において、カメラオブジェクト1810Bはインカメラモードに設定されている。そのため、カメラオブジェクト1810Bのプレビュー画面には、アバターオブジェクト1500Aおよび1500Bが表示されている。
カメラオブジェクト1810Bは、コンピュータ200Bのユーザ190Bが仮想空間2Bを撮影するために用いられる。上述の通り、コンピュータ200Aおよび200Bは仮想空間を共有する。そのため、プロセッサ10Bは、ユーザ190Bの操作により仮想空間2Bにカメラオブジェクト1810Bを配置すると、配置されたオブジェクトの情報(例えば、モデリングデータ、オブジェクトの位置および傾きなど)をコンピュータ200Aに送信する。プロセッサ10Aは、受信した情報に基づいてカメラオブジェクト1810Bを仮想空間2Aに配置する。
ある局面において、コンピュータ200Bのプロセッサ10Bは、ユーザ190Bからの撮影指示の入力に基づいて、写真画像を生成する。プロセッサ10Bは、生成した写真画像(のデータ)とユーザ190BのユーザIDとをコンピュータ200Aに送信する。プロセッサ10Aは、写真画像とを受信したことに基づいて、当該写真画像を表す写真オブジェクト2010Bを生成する。プロセッサ10Aはさらに、受信したユーザIDに対応するアバターオブジェクト1500Bが保持するカメラオブジェクト1810Bの近くに、写真オブジェクト2010Bを配置する。
ある局面において、プロセッサ10Aは、インスタントカメラのように、写真オブジェクト2010Bがカメラオブジェクト1810Bから出てくるように視界画像を生成する。
プロセッサ10Aはさらに、写真オブジェクト2010Bをカメラオブジェクト1810Bの位置から集積場所に移動させる。ユーザ190Aは、写真オブジェクト2010が移動する軌道2020を確認することにより、集積場所を容易に理解できる。加えて、ユーザ190Aは、カメラオブジェクト1810Bから集積場所まで写真オブジェクト2010Bが移動することにより、ユーザ190Bが撮影を行なったことを理解できる。これにより、ユーザ190Aは、新たに生成された写真画像(を表す写真オブジェクト2010B)を話の種にしてユーザ190Bとのコミュニケーションを促進し得る。
ある局面において、プロセッサ10Aは、軌道2020を表すオブジェクトを予め定められた時間(例えば2秒間)にわたり仮想空間2Aに配置してもよい。係る場合、ユーザ190Aは、移動中の写真オブジェクト2010Bを見逃した場合であっても、軌道2020を表すオブジェクトを確認することにより、ユーザ190Bが撮影を行なったことを理解できる。
なお、他の局面において、プロセッサ10Aは、ユーザ190Aがカメラオブジェクト1810Aにより撮影を行なったときにも、当該撮影により生成される写真オブジェクト2010をカメラオブジェクト1810Aから集積場所に移動させる。これにより、ユーザ190Aは、集積場所がどこなのかを容易に理解できる。
(集積場所に写真オブジェクトが配置されていることを通知)
図21は、集積場所に写真オブジェクト2010が配置されていることをユーザ190Aに通知する処理を説明するための図である。ユーザ190Aが視認する視界画像2100は、机オブジェクト2110と、複数の写真オブジェクト2010と、アイコンオブジェクト2120と、コメントオブジェクト2130とを含む。
ある局面において、プロセッサ10Aは、ユーザ190Aから撮影指示の入力を受け付けると、写真オブジェクト2010を生成して机オブジェクト2110に配置する。つまり、机オブジェクト2110の位置が集積場所である。
プロセッサ10Aは、写真オブジェクト2010を机オブジェクト2110に配置すると、アイコンオブジェクト2120とコメントオブジェクト2130とを机オブジェクト2110の周辺に配置する。図21に示される例において、プロセッサ10Aは、これらのオブジェクトを机オブジェクト2110の上方に配置している。
上記によれば、ユーザ190Aは、アイコンオブジェクト2120(およびコメントオブジェクト2130)を確認することで、仮想空間2Aのどの位置が集積場所であるかを容易に理解できる。つまり、アイコンオブジェクト2120は、集積場所(机オブジェクト2110)に写真オブジェクト2010が配置されていることを表すオブジェクトとして機能する。
なお、他の局面において、プロセッサ10Aは、写真オブジェクト2010を机オブジェクト2110に配置したことに基づいて、コメントオブジェクト2130を配置せずにアイコンオブジェクト2120だけを仮想空間2Aに配置するように構成されてもよい。
さらに他の局面において、プロセッサ10Aは、アイコンオブジェクト2120(およびコメントオブジェクト2130)を、常に机オブジェクト2110の近くに配置するように構成されてもよい。
(制御構造)
図22は、上記一連の集積場所をユーザ190Aに通知する処理を表すフローチャートである。図22に示される処理は、プロセッサ10Aが、メモリモジュール240Aに格納される制御プログラムを読み込んで実行することにより実現される。
ステップS2205において、プロセッサ10Aは、仮想空間定義モジュール231として、仮想空間2Aを定義する。ステップS2210において、プロセッサ10Aは、パノラマ画像22を仮想空間2Aに展開する。
ステップS2215において、プロセッサ10Aは、仮想空間2Aにアバターオブジェクト1500Aを配置する。アバターオブジェクト1500Aの手の部分(右手オブジェクト1510Aおよび左手オブジェクト1520A)は操作オブジェクトとして機能する。
プロセッサ10Aはさらに、ユーザ190Bに対応するアバターオブジェクト1500Bの情報をコンピュータ200Bから受信する。プロセッサ10Aは、受信した情報に基づいて、アバターオブジェクト1500Bを仮想空間2Aに配置する。
ステップS2220において、プロセッサ10Aは、仮想空間2Aにカメラオブジェクト1810Aを配置する。一例として、プロセッサ10Aは、アバターオブジェクト1500Aの腕に表示されるUIオブジェクト1530に対する操作オブジェクトによる操作に応じて、カメラオブジェクト1810Aを配置する。
ステップS2225において、プロセッサ10Aは、ユーザ190Aから撮影指示の入力を受け付けたか否かを判断する。一例として、プロセッサ10Aは、操作オブジェクトによるUIオブジェクト1530に対する操作に基づいて、撮影指示の入力を受け付ける。
プロセッサ10Aは、撮影指示の入力を受け付けたと判断した場合(ステップS2225でYES)、ステップS2227の処理を実行する。そうでない場合(ステップS2225でNO)、プロセッサ10Aは、ステップS2240の処理を実行する。
ステップS2227において、プロセッサ10Aは、カメラオブジェクト1810Aの撮影範囲1830に対応する写真画像を生成する。プロセッサ10Aはさらに、生成した写真画像に対応する写真IDを生成し、写真画像、写真ID、および仮想空間2Aに展開されているパノラマ画像22のパノラマ画像IDを写真画像DB244Aに保存する。また、プロセッサ10Aは、写真画像、写真ID、パノラマ画像ID、およびユーザ190AのユーザIDをサーバ150に送信する。サーバ150は、これら受信した情報に基づいて写真DB1737を更新する。
ある局面において、各コンピュータ200により生成される写真IDは、ユーザIDを含む。当該構成によれば、あるユーザにより使用されるコンピュータが生成する写真IDと、他のユーザにより使用されるコンピュータが生成する写真IDとが異なる。したがって、サーバ150および各コンピュータ200は、写真IDを用いて一の写真画像を特定できる。
他の局面において、サーバ150が、コンピュータ200から写真画像の入力を受け付けるごとに、一意に定まる写真IDを生成してもよい。係る場合、サーバ150は、生成した写真IDを写真画像の送信元のコンピュータ200に送信する。コンピュータ200は、受信した写真IDを写真画像に関連付けて写真画像DB244に保存する。
ステップS2230において、プロセッサ10Aは、生成された写真画像を表す写真オブジェクト2010を予め定められた位置(集積場所)に配置する。
ステップS2235において、プロセッサ10Aは、ユーザ190Aに集積場所を通知する処理を実行する。このとき、プロセッサ10Aは、上述のように視覚的に集積場所をユーザ190Aに通知してもよいし、スピーカ118Aから音声(例えば、「写真は後ろにあるよ」)を出力して聴覚的に集積場所をユーザ190Aに通知してもよい。
ステップS2240において、プロセッサ10Aは、サーバ150を介してコンピュータ200Bから写真画像を受信したか否かを判断する。プロセッサ10Aは、コンピュータ200Bから写真画像を受信した場合(ステップS2240でYES)、ステップS2245の処理を実行する。そうでない場合(ステップS2240でNO)、プロセッサ10Aは、ステップS2225の処理を再び実行する。
ステップS2245において、プロセッサ10Aは、コンピュータ200Bから受信した写真画像を表す写真オブジェクト2010Bを集積場所に配置する。
ステップS2250において、プロセッサ10Aは、集積場所(写真オブジェクト2010Bが配置される位置)をユーザ190Aに通知する。
なお、ステップS2235においてプロセッサ10Aが、写真オブジェクト2010をカメラオブジェクト1810Aから集積場所まで移動させる処理を行なう場合、ステップS2230の処理とステップS2235の処理の順番が入れ替わる。同様に、ステップS2250においてプロセッサ10Aが、写真オブジェクト2010Bをカメラオブジェクト1810Bから集積場所まで移動させる処理を行なう場合、ステップS2245の処理とステップS2250の処理の順番が入れ替わる。
[写真オブジェクトに対する操作]
ユーザ190Aは、操作オブジェクト(アバターオブジェクト1500A)により仮想空間2Aに配置される写真オブジェクト2010を動かしたり、写真オブジェクト2010が表す写真画像を閲覧できる。その他にも、ユーザ190Aは、操作オブジェクトを操作して写真オブジェクト2010または写真オブジェクト2010が表す写真画像に対する処理の指示をコンピュータ200Aに入力できる。
写真オブジェクト2010が表す写真画像に対する処理は、例えば、写真オブジェクト2010が表す写真画像を評価する処理、写真オブジェクト2010が表す写真画像を編集する処理、写真オブジェクト2010が表す写真画像に含まれる被写体の情報を写真画像に関連付ける処理などを含む。写真オブジェクト2010に対する処理は、例えば、仮想空間2Aから写真オブジェクト2010を削除する処理などを含む。以下、これらの処理について説明する。
図23は、写真オブジェクト2010または写真オブジェクト2010が表す写真画像に対する処理を説明するための図である。ユーザ190Aが視認する視界画像2300は、アバターオブジェクト1500Aの右手に相当する右手オブジェクト1510Aおよび左手に相当する左手オブジェクト1520Aと、アバターオブジェクト1500Bと、複数の写真オブジェクト2010と、机オブジェクト2110とを含む。
より具体的には、左手オブジェクト1520Aは写真オブジェクト2010を保持している。また、アバターオブジェクト1500Bも他の写真オブジェクト2010を保持している。これらの写真オブジェクト2010とは別の複数の写真オブジェクト2010が、集積場所として機能する机オブジェクト2110の上に配置されている。
このように、ユーザ190Aおよびユーザ190Bは、生成された写真画像を表す写真オブジェクト2010を話題の種としてコミュニケーションを促進し得る。
写真オブジェクト2010は、写真画像の他にも、複数のアイコン2310〜2340を含む。アイコン2310は、写真オブジェクト2010が表す写真画像に対するユーザ190の肯定的な評価処理を受け付ける。アイコン2320は、写真オブジェクト2010が表す写真画像の編集処理を受け付ける。アイコン2330は、写真オブジェクト2010が表す写真画像に含まれる被写体の情報を当該写真画像に関連付ける処理を受け付ける。アイコン2340は、写真オブジェクト2010を仮想空間2Aから削除する処理を受け付ける。以下、操作オブジェクトによりこれらのアイコンが選択された場合のプロセッサ10Aの処理について説明する。
(写真画像に対する評価を受け付ける処理)
ユーザ190Aは、写真オブジェクト2010が表す写真画像を気に入った場合、操作オブジェクト(例えば、右手オブジェクト1510A)によりアイコン2310を押下する。
プロセッサ10Aは、写真画像DB244Aにアクセスして、アイコン2310が押下されたことを表す情報(以下、「評価情報」とも言う)を、写真オブジェクト2010が表す写真画像に関連付ける。換言すれば、プロセッサ10Aは、写真オブジェクト2010が表す写真画像がユーザ190Aのお気に入りであることを写真画像DB244Aに記憶する。
(写真画像を編集する処理)
ユーザ190Aは、写真オブジェクト2010が表す写真画像を編集したい場合、操作オブジェクトによりアイコン2320を押下する。
プロセッサ10Aは、アイコン2320の押下に基づいて、写真画像の編集メニューを写真オブジェクト2010に表示する。一例として、編集メニューは、サイズ補正(例えば、トリミング処理)、色味調整(例えば、モノクロ処理)、明るさ調整(例えば、シャープネス処理)、コメント挿入、図形挿入などを含む。ユーザ190Aは、操作オブジェクトで写真オブジェクト2010上に表示される編集メニューを選択する。プロセッサ10Aは、選択された編集メニューに従い写真画像に対する編集処理を行なう。
(写真画像に被写体の情報を関連付ける処理)
ユーザ190Aは、写真オブジェクト2010が表す写真画像に被写体の情報(以下、「被写体情報」とも言う)を関連付けたい場合、操作オブジェクトによりアイコン2370を押下する。
プロセッサ10Aは、一例として、アイコン2370の押下に基づいて、被写体情報の入力を受け付けるための入力ボックスと、ソフトキーボードとを写真オブジェクト2010に表示する。ユーザ190Aは、操作オブジェクトによりソフトキーボードを操作し、被写体情報を入力ボックスに入力する。他の局面において、プロセッサ10Aは、ユーザの発話に対応する音声信号から抽出される文字列を被写体情報として処理してもよい。
図23に示される例において、写真画像はアバターオブジェクト1500Aを含む。この場合、ユーザ190Aは、アバターオブジェクト1500Aに対応するユーザ190Aの情報を被写体情報として入力ボックスに入力し得る。ユーザ190Aの情報は、例えば、ユーザID、ユーザ190Aの名前、アバターオブジェクト1500のキャラクタ名などを含む。他の局面において、写真画像がアバターオブジェクト1500Bを含む場合もある。この場合、ユーザ190Aは、アバターオブジェクト1500Bに対応するユーザ190Bの情報を被写体情報として入力ボックスに入力する。
プロセッサ10Aは、写真画像DB244Aにアクセスして、入力された被写体情報を、写真オブジェクト2010が表す写真画像に関連付ける。
他の局面において、プロセッサ10Aは、アイコン2370の押下の後にマイク119Aが出力する音声信号から文字列を抽出して、被写体情報を受け付けるように構成されてもよい。
さらに他の局面において、プロセッサ10Aは、写真画像の生成時に被写体情報を自動的に取得するように構成されてもよい。より具体的には、プロセッサ10Aは、撮影時のカメラオブジェクト1810Aの撮影範囲1830に含まれるオブジェクト(例えば、アバターオブジェクト)を検出する。プロセッサ10Aは、当該オブジェクトを識別する情報を被写体情報として写真画像に関連付けて写真画像DB244Aに格納する。当該構成によれば、ユーザ190Aは、被写体情報を入力する手間を省くことができる。
(写真オブジェクトを削除する処理)
ユーザ190Aは、写真オブジェクト2010を削除したい場合、操作オブジェクトによりアイコン2340を押下する。
プロセッサ10Aは、アイコン2340の押下に基づいて、写真オブジェクト2010を仮想空間2Aから削除する。他の局面において、プロセッサ10Aは、アイコン2340の押下に基づいて、写真画像DB244Aにアクセスして、写真オブジェクト2010が表す写真画像を削除してもよい。
[写真DB]
図24は、サーバ150が保持する写真DB1737のデータ構造の一例を表す。写真DB1737は、画像データと、写真IDと、撮影者(ユーザID)と、パノラマ画像IDと、評価情報と、被写体情報とを含む。
上述のように、コンピュータ200Aは、写真画像を生成すると、当該写真画像を表す画像データと、写真IDと、ユーザIDと、パノラマ画像IDとをサーバ150に送信する(図22のステップS2227)。サーバ150のプロセッサ1720は、受信したこれらの情報を写真DB1737に登録する。
また、プロセッサ10Aは、アイコン2310が押下されると、写真オブジェクト2010が表す写真画像の写真IDと、ユーザIDとを関連付けてサーバ150に送信する。プロセッサ1720は、これらの情報を受信すると、写真DB1737にアクセスして、受信した写真IDに関連付けられた評価情報として受信したユーザIDを登録する。
また、プロセッサ10Aは、被写体情報の入力を受け付けると、この被写体情報と、写真オブジェクト2010が表す写真画像の写真IDとを関連付けてサーバ150に送信する。プロセッサ1720は、これらの情報を受信すると、写真DB1737にアクセスして、受信した評価情報を写真IDに関連付けて登録する。
上記の構成によれば、サーバ150の管理者は、写真DB1737に基づいてユーザが気に入っている被写体を把握できる。ある局面において、サーバ150は、ユーザが気に入っている被写体に基づいて、ユーザが興味を有すると推定される広告またはパノラマ画像22をコンピュータ200に配信する。
また、ある局面において、プロセッサ10Aは、アイコン2340が押下されると、当該アイコンが押下されたことを表す削除指示と、写真オブジェクト2010が表す写真画像の写真IDとを関連付けてサーバ150に送信する。プロセッサ1720は、これらの情報を受信すると、写真DB1737にアクセスして、受信した写真IDに関連付けられるデータ(写真画像を含む)を削除する。
[写真画像に対する評価を受け付ける処理の変形例]
(視線に基づく評価処理)
図23の例において、プロセッサ10Aは、アイコン2310の押下に基づいて、写真オブジェクト2010が表す写真画像に対する評価を受け付けるように構成されている。他の局面において、プロセッサ10Aは、ユーザ190Aの仮想空間2Aにおける視線に基づいて、写真オブジェクト2010が表す写真画像に対する肯定的な評価を受け付ける。
視界画像2300は、ポインタオブジェクト2350をさらに含む。プロセッサ10Aは、注視センサ140の出力信号に基づいてユーザ190Aの現実空間における視線を検出する。プロセッサ10Aはさらに、仮想空間2Aにおける仮想カメラ1Aの位置および傾きに基づいて、検出した視線を仮想空間2Aで規定されるXYZ座標系に変換する。プロセッサ10Aは、仮想空間2Aにおけるユーザ190Aの視線とオブジェクトとが衝突する位置に、ポインタオブジェクト2350を配置する。つまり、ポインタオブジェクト2350は、ユーザ190Aが仮想空間2Aにおいて視線を注いでいる位置を表す。
図23に示される例において、ポインタオブジェクト2350は、写真オブジェクト2010上に配置されている。これは、仮想空間2Aにおけるユーザ190Aの視線が写真オブジェクト2010に注がれていることを表す。プロセッサ10Aは、予め定められた時間(例えば5秒)にわたり写真オブジェクト2010にユーザ190Aの視線が注がれていることを検知した場合に、上述のアイコン2310の押下に基づく処理を実行する。その理由は、ユーザ190Aが長時間にわたり写真オブジェクト2010を見つめている場合、ユーザ190Aが写真オブジェクト2010が表す写真画像に対して関心を示している可能性が高いためである。
さらに他の局面において、プロセッサ10Aは、予め定められた時間にわたり写真オブジェクト2010と操作オブジェクトとが接触している場合に、上述のアイコン2310の押下に基づく処理を実行してもよい。
(複数の操作オブジェクトと接触していることに基づく評価処理)
さらに他の局面において、サーバ150は、写真オブジェクト2010が複数の操作オブジェクト(図23の例ではアバターオブジェクト1500Aおよび1500Bの各々の手の部分)と接触していることに基づいて、上述のアイコン2310の押下に基づく処理を実行する。その理由は、上記の条件において、複数のユーザが写真オブジェクト2010に基づくコミュニケーションを図っており、これら複数のユーザが写真オブジェクト2010に対して関心を示している可能性が高いためである。図25を用いて当該処理を具体的に説明する。
図25は、サーバ150が写真画像に対する評価を受け付ける処理の一例を表すフローチャートである。ステップS2510において、コンピュータ200Aのプロセッサ10Aは、写真オブジェクト2010とユーザ190Aに対応する操作オブジェクトとが接触したか否かを判断する。プロセッサ10Aは、写真オブジェクト2010と操作オブジェクトとが接触したと判断した場合(ステップS2510でYES)、ステップS2520の処理を実行する。そうでない場合(ステップS2510でNO)、プロセッサ10Aは、写真オブジェクト2010と操作オブジェクトとが接触するまで待機する。
ステップS2520において、プロセッサ10Aは、写真オブジェクト2010と操作オブジェクトとが接触したことを表す接触情報と、写真オブジェクト2010が表す写真画像の写真IDと、ユーザ190AのユーザIDとを、サーバ150に送信する。
ステップS2530において、プロセッサ10Aは、写真オブジェクト2010と操作オブジェクトとが離間したか否かを判断する。プロセッサ10Aは、写真オブジェクト2010と操作オブジェクトとが離間したと判断した場合(ステップS2530でYES)、ステップS2540の処理を実行する。そうでない場合(ステップS2530でNO)、プロセッサ10Aは、写真オブジェクト2010と操作オブジェクトとが離間するまで待機する。
ステップS2540において、プロセッサ10Aは、写真オブジェクト2010と操作オブジェクトとが離間したことを表す離間情報と、写真IDと、ユーザIDとを、サーバ150に送信する。
コンピュータ200Aと仮想空間を共有するコンピュータ200Bも、以上説明したステップS2510〜S2540の処理を実行する。
ステップS2550において、サーバ150のプロセッサ1720は、各コンピュータ200から受信する情報に基づいて、ユーザ190Aおよび190Bの各々に対応する操作オブジェクトと写真オブジェクト2010とが接触したか否かを判断する。より具体的には、プロセッサ1720は、接触情報を受信すると、当該接触情報に関連付けられたユーザIDと写真IDとをストレージ1730の所定領域に保存する。プロセッサ1720は、離間情報を受信すると、当該離間情報に関連付けられたユーザIDと写真IDとをストレージ1730の所定領域から削除する。プロセッサ1720は、1つの写真IDに対して複数のユーザIDがストレージ1730の所定領域に格納された場合に、複数の操作オブジェクトと写真オブジェクトとが接触したと判断する。
プロセッサ1720は、複数の操作オブジェクトと写真オブジェクトとが接触したと判断した場合(ステップS2550でYES)、ステップS2560の処理を実行する。そうでない場合(ステップS2550でNO)、プロセッサ1720は、複数の操作オブジェクトと写真オブジェクトとが接触するまで待機する。
ステップS2560において、プロセッサ1720は、写真DB1737にアクセスして、受信した写真IDに対応する評価情報として、ユーザ190Aおよび190Bの各々のユーザIDを登録する。
[SNSに投稿する処理]
図23を再び参照して、写真オブジェクト2010は、アイコン2360をさらに含む。アイコン2360は、写真オブジェクト2010が表す写真画像を予め登録されたSNSに投稿する指示を受け付ける。図26を用いて、写真画像をSNSに投稿する処理を具体的に説明する。
図26は、コンピュータ200Aとサーバ150とが連携して写真画像をSNSに投稿する処理を表すフローチャートである。
ステップS2610において、コンピュータ200Aのプロセッサ10Aは、操作オブジェクトによってアイコン2360(図22ではSNSボタンと表記)が押下されたか否かを判断する。プロセッサ10Aは、アイコン2360が押下された場合(ステップS2610でYES)、写真オブジェクト2010が表す写真画像の写真IDと、ユーザ190AのユーザIDとをサーバ150に送信する(ステップS2620)。そうでない場合(ステップS2610でNO)、プロセッサ10Aは、アイコン2360が押下されるまで待機する。
ステップS2630において、サーバ150のプロセッサ1720は、ユーザDB1739を参照して、写真画像をSNSに登録するために必要な情報を取得する。
図27は、ユーザDB1737のデータ構造の一例を表す。ユーザDB1739は、ユーザIDと、登録SNSと、SNSIDと、SNSパスワードとを含む。登録SNSは、ユーザごとに登録されたSNSにアクセスするための情報(例えば、URL:Uniform Resource Locator)である。SNSIDは、登録されたSNSにおいてユーザ190を識別する情報である。SNSパスワードは、登録されたSNSにSNSIDを用いてログインするために必要な情報である。登録SNS、SNSID、およびSNSパスワードは、予め各ユーザ190によってユーザDB1739に登録される。
図26を再び参照して、プロセッサ1720は、ユーザDB1739を参照して、コンピュータ200Aから受信したユーザIDに対応する登録SNS、SNSID、およびSNSパスワードを特定する(ステップS2630)。
ステップS2640において、プロセッサ1720は、特定したSNSIDおよびSNSパスワードを用いて、登録SNSにアクセスする。
ステップS2650において、プロセッサ1720は、写真DB1737にアクセスして、受信した写真IDに対応する写真画像(画像データ)を登録SNSに投稿(アップロード)する。他の局面において、プロセッサ1720は、写真画像と、受信した写真IDに対応する被写体情報とを関連付けて、関連付けられた情報を登録SNSに投稿してもよい。当該構成によれば、ユーザ190Aは、登録SNSに写真画像を投稿するにあたり、当該写真画像に含まれる被写体の情報を別途入力する手間を省くことができる。さらに他の局面において、プロセッサ1720は、写真画像と、受信した写真IDに対応する撮影者の情報とを関連付けて、関連付けられた情報を登録SNSに投稿してもよい。当該構成によれば、ユーザ190Aは、登録SNSに写真画像を投稿するにあたり、当該写真画像の撮影者の情報を別途入力する手間を省くことができる。
上記によれば、ユーザ190Aは、仮想空間2Aにおいて、生成された写真画像を容易にSNSに投稿することができる。
[破壊操作に基づく削除処理]
図23の例において、プロセッサ10Aは、アイコン2340の押下に基づいて写真オブジェクト2010を仮想空間2Aから削除する。他の局面において、プロセッサ10Aは、写真オブジェクト2010を破壊する操作を受け付けた場合に、写真オブジェクト2010を仮想空間2Aから削除してもよい。
図28は、視界画像2800をもたらす仮想空間2Aから写真オブジェクト2010を削除する処理を説明するための図である。視界画像2800は、写真オブジェクト2010と、操作オブジェクトとして機能する右手オブジェクト1510Aとを含む。
図28の例において、右手オブジェクト1510Aは、ライターオブジェクト2810を保持している。さらに、炎オブジェクト2820がライターオブジェクト2810に隣接して配置されている。
ある局面において、ユーザ190Aは、右手オブジェクト1510Aがライターオブジェクト2810を保持している状態において、左手オブジェクト1520AによってUIオブジェクト1530を操作する。これにより、プロセッサ10Aは、炎オブジェクト2820をライターオブジェクト2810に隣接して配置する。
プロセッサ10Aは、炎オブジェクト2820と写真オブジェクト2010とが接触したことに基づいて、写真オブジェクト2010を仮想空間2Aから削除する。
上記によれば、ユーザ190Aは、写真オブジェクト2010を破壊するという直感的な操作により、写真オブジェクト2010を仮想空間2Aから削除できる。これにより、ユーザ190Aは、仮想空間2Aに対する没入感を維持し得る。
なお、写真オブジェクト2010を破壊する操作は、炎オブジェクト2820と写真オブジェクト2010との接触に限られない。例えば、右手オブジェクト1510Aと左手オブジェクト1520Aとによって写真オブジェクト2010を引き裂く動作、操作オブジェクトにより写真オブジェクト2010を他のオブジェクト(例えば地面)に予め定められた速度以上でぶつける動作などを検出した場合に、プロセッサ10Aは、写真オブジェクト2010を破壊する操作を受け付けたと判断する。
[心霊写真を生成する処理]
ある局面において、プロセッサ10Aは、心霊写真を生成する。ユーザ190Aは、心霊写真を話の種として、仮想空間を共有する他のユーザとのコミュニケーションを促進し得るためである。
図29は、心霊写真を生成する処理を説明するための図(その1)である。図29に示される仮想空間2Aは、アバターオブジェクト1500Aと、カメラオブジェクト1810Aと、幽霊オブジェクト2900とを含む。
図30は、心霊写真を生成する処理を説明するための図(その2)である。図30に示される視界画像3000は、写真オブジェクト2010を含む。この写真オブジェクト2010は、図29の状態のカメラオブジェクト1810Aにより生成された写真画像を表す。この写真画像は、幽霊オブジェクト2900を含む。
プロセッサ10Aは、仮想カメラ1Aの撮影範囲(視認領域23A)に幽霊オブジェクト2900が含まれる場合、幽霊オブジェクト2900を含まない視界画像を生成する。一方、プロセッサ10Aは、カメラオブジェクト1810Aの撮影範囲1830に幽霊オブジェクト2900が含まれる場合、幽霊オブジェクト2900を含む写真画像を生成する。
一例として、プロセッサ10Aは、透明な幽霊オブジェクト2900を仮想空間2Aに配置する。プロセッサ10Aは、カメラオブジェクト1810Aの撮影範囲1830に幽霊オブジェクト2900が含まれる場合、幽霊オブジェクト2900を可視化(例えば、幽霊オブジェクト2900の透明度を下げる)して写真画像を生成する。
上記によれば、ユーザ190Aは、仮想空間2Aに配置される幽霊オブジェクト2900を直接的に視認できないが、写真画像により間接的に視認できる。
ある局面において、幽霊オブジェクト2900は仮想空間2Aを動かないように構成される。この場合、ユーザ190Aは、幽霊オブジェクト2900が配置される場所を探すことに楽しみを覚え得る。他の局面において、幽霊オブジェクト2900は仮想空間2Aを動くように構成されてもよい。この場合、ユーザ190Aは、予期しない心霊写真を楽しみ得る。
[表示態様の異なるアバターオブジェクトの写真画像を生成する処理]
図31は、仮想空間2Aに配置されるアバターオブジェクト1500Bとは異なる表示態様のアバターオブジェクト1500Bを含む写真画像を生成する処理を説明するための図である。
図31を参照して、視界画像3100は、仮想空間2Aに配置されるアバターオブジェクト1500Bと写真オブジェクト2010とを含む。プロセッサ10Aは、カメラオブジェクト1810Aの撮影範囲1830にアバターオブジェクト1500Bが含まれる状態において、ユーザ190Aから撮影指示を受け付ける。ある局面において、プロセッサ10Aは、撮影指示に応じて、仮想空間2Aに配置されているアバターオブジェクト1500Bとは異なる表示態様のアバターオブジェクト1500Bを含む写真画像を生成する。
図31に示される例において、仮想空間2Aに配置されるアバターオブジェクト1500Bは、細身である。一方、写真オブジェクト2010に表示されているアバターオブジェクト1500Bの体格は良い。
ある局面において、プロセッサ10Aは、ユーザ190Aから受け付ける設定に基づいて、写真画像に含まれるアバターオブジェクトの表示態様を変更する処理を実行する。この場合、ユーザ190Aは、自分好みのアバターオブジェクトを含む写真画像を生成できる。
他の局面において、プロセッサ10Aは、ランダムに写真画像に含まれるアバターオブジェクトの表示態様を変更する処理を実行するように構成されてもよい。例えば、プロセッサ10Aは、乱数を生成し、生成された乱数が予め定められた条件を満たした場合に、当該処理を実行する。この場合、ユーザ190Aは、予期しない写真画像を楽しみ得る。
また、ユーザ190Aは、表示態様が変更されたアバターオブジェクトを含む写真画像を話題の種として、仮想空間を共有する他のユーザとのコミュニケーションを促進し得る。
なお、アバターオブジェクトの表示態様を変更する処理は、アバターオブジェクトの体格を変更する処理に限られない。例えば、アバターオブジェクトの表示態様を変更する処理は、アバターオブジェクトの服装を変更する処理、アバターオブジェクトの表情を変更する処理などを含む。
[構成]
以上に開示された技術的特徴は、以下のように要約され得る。
(構成1) ある実施形態に従うと、HMD110Aに仮想空間2Aを提供するためにコンピュータ200Aで実行されるプログラムが提供される。このプログラムはコンピュータ200Aに、仮想空間2Aを定義するステップ(ステップS2205)と、撮影機能を有するカメラオブジェクト1810Aを仮想空間2Aに配置するステップ(ステップS2220)と、カメラオブジェクト1810Aの撮影範囲に対応する画像を生成するステップ(ステップS2227)と、生成された画像を表す写真オブジェクト2010を仮想空間2Aの予め定められた位置に配置するステップ(ステップS2230)と、写真オブジェクト2010が配置される位置をHMD110Aのユーザ190に通知するステップ(ステップS2235)とを実行させる。
(構成2) (構成1)において、通知するステップは、画像が生成されたときに、当該画像を表す写真オブジェクト2010をカメラオブジェクト1810Aの位置から予め定められた位置まで移動させることを含む。
(構成3) (構成1)または(構成2)において、通知するステップは、予め定められた位置の周辺に予め定められた位置に写真オブジェクト2010が配置されていることを示すアイコンオブジェクト2120を配置することを含む。
(構成4) (構成1)〜(構成3)のいずれかにおいて、通知するステップは、仮想空間2Aにおけるユーザ190の位置および視線方向を基準として、予め定められた位置の方向を表す方向オブジェクト1910をHMD110Aのディスプレイ112Aに表示することを含む。
(構成5) (構成1)〜(構成4)のいずれかに従うプログラムはコンピュータ200Aに、コンピュータ200Aとは異なる他のコンピュータ200Bと通信するステップと、他のコンピュータ200Bのユーザ190Bが撮影を行なうためのカメラオブジェクト1810Aとは異なる他のカメラオブジェクト1810Bを仮想空間2Aに配置するステップと、他のカメラオブジェクト1810Bの撮影により生成された画像を表す他の写真オブジェクト2010Bを予め定められた位置に配置するステップ(ステップS2245)とをさらに実行させる。通知するステップは、他のカメラオブジェクト1810Bにより撮影が行われたときに、他の写真オブジェクト2010Bが配置される位置をユーザ190Aに通知すること(ステップS2250)を含む。
(構成6) (構成5)において、通知するステップは、他のカメラオブジェクト1810Bによる撮影が行われたときに、他の写真オブジェクト2010Bを他のカメラオブジェクト1810Bの位置から予め定められた位置まで移動させることを含む(図20の軌道2020)。
(構成7) (構成1)〜(構成6)のいずれかに従うプログラムはコンピュータ200Aに、コンピュータ200Aのユーザ190の操作に応じて動く操作オブジェクトを仮想空間2Aに配置するステップ(ステップS2215)と、操作オブジェクトによる写真オブジェクト2010に対する操作に基づいて、写真オブジェクト2010または写真オブジェクト2010が表す画像に対する処理の入力を受け付けるステップとをさらに実行さる(図23)。写真オブジェクト2010に対する処理は、仮想空間2Aから写真オブジェクト2010を削除する処理を含む。写真オブジェクト2010が表す画像に対する処理は、写真オブジェクト2010が表す画像を編集する処理、写真オブジェクト2010が表す画像を評価する処理、および写真オブジェクト2010が表す画像に含まれる被写体の情報を画像に関連付ける処理のうち少なくともいずれかの処理を含む。
(構成8) (構成7)に従うプログラムはコンピュータ200Aに、コンピュータ200Aとは異なる他のコンピュータ200Bと通信するステップと、コンピュータ200Aのユーザ190Aに対応するアバターオブジェクト1500Aと、他のコンピュータ200Bのユーザ190Bに対応するアバターオブジェクト1500Bとを仮想空間2Aに配置するステップとをさらに実行させる。生成された画像は、アバターオブジェクト1500Aまたは1500Bを含む。被写体の情報は、生成された画像に含まれるアバターオブジェクト1500Aまたは1500Bに対応するユーザ190Aまたは190Bの情報を含む。これにより、例えばユーザ190Aは、ユーザ190Bにより生成された画像に誰のアバターオブジェクトが含まれるかを容易に判断できる。また、ユーザ190Aは、特定の人物のアバターオブジェクトを含む画像を容易に検索できる。
(構成9) (構成7)または(構成8)において、写真オブジェクト2010はアイコンを含む。写真オブジェクト2010または写真オブジェクト2010が表す画像に対する処理の入力を受け付けることは、操作オブジェクトによるアイコンに対する操作に基づいて処理を受け付けることを含む。
(構成10) (構成9)に従うプログラムはコンピュータ200Aに、ユーザ190Aに対応するアバターオブジェクト1500Aを仮想空間2Aに配置するステップ(ステップS2215)をさらに実行させる。操作オブジェクトは、アバターオブジェクト1500の手を含む。これにより、ユーザ190Aは、仮想空間2A上にあたかも自分の手が存在するかのような感覚を覚え、より仮想空間2Aに没入し得る。
(構成11) (構成1)〜(構成6)のいずれかに従うプログラムはコンピュータ200Aに、仮想空間2Aにおけるコンピュータ200Aのユーザ190Aの視線を検出するステップと、検出した視線が予め定められた時間にわたり写真オブジェクト2010に注がれていることに基づいて、写真オブジェクト2010が表す画像に対するユーザ190の評価を受け付けるステップとを実行させる(図23)。
(構成12) (構成1)〜(構成11)のいずれかに従うプログラムはコンピュータ200Aに、コンピュータ200Aのユーザ190Aの操作に応じて動く操作オブジェクトを仮想空間2Aに配置するステップ(ステップS2215)と、写真オブジェクト2010に対する操作オブジェクトの操作に基づいて(ステップS2610)、予め登録されたソーシャルネットワークサービスにアクセスするステップ(ステップS2640)と、写真オブジェクト2010が表す画像をソーシャルネットワークサービスに投稿するステップ(ステップS2650)とをさらに実行させる。
(構成13) (構成7)〜(構成10)のいずれかに従うプログラムはコンピュータ200Aに、写真オブジェクト2010を削除する操作を受け付けたことに基づいて、写真オブジェクト2010を仮想空間2Aから削除するステップとをさらに実行させる。写真オブジェクト2010を削除する操作は、写真オブジェクト2010を破壊する操作を含む(図28)。
(構成14) (構成1)〜(構成13)のいずれかに従うプログラムはコンピュータ200Aに、透明な幽霊オブジェクト2900を仮想空間2Aに配置するステップをさらに実行させる(図29)。画像を生成することは、カメラオブジェクト1810Aの撮影範囲に幽霊オブジェクト2900が含まれる場合に、可視化された幽霊オブジェクト2900を含む画像を生成することを含む(図30)。
(構成15) (構成1)〜(構成14)のいずれかに従うプログラムはコンピュータ200Aに、コンピュータ200Aとは異なる他のコンピュータ200Bと通信するステップと、他のコンピュータ200Bのユーザ190Bに対応するアバターオブジェクト1500Bを仮想空間2Aに配置するステップ(ステップS2215)とをさらに実行させる。画像を生成することは、カメラオブジェクト1810Aの撮影範囲にアバターオブジェクト1500Bが含まれる場合に、仮想空間2Aに配置されているアバターオブジェクト1500Bの表示態様とは異なる表示態様のアバターオブジェクト1500Bを含む画像を生成することを含む。
(構成16) (構成1)〜(構成15)のいずれかに従うプログラムはコンピュータ200Aに、生成した画像をサーバ150に送信するステップ(ステップS2227)と、コンピュータ200Aのユーザ190Aに対応するアバターオブジェクト1500Aを仮想空間2Aに配置するステップ(ステップS2215)と、アバターオブジェクト1500Aと写真オブジェクト2010Aとが接触していることを表す情報をサーバ150に送信するステップ(ステップS2250)とをさらに実行させる。当該構成により、サーバ150は、複数のアバターオブジェクトが同一の写真オブジェクトに同時に触っていることを検出できる。サーバ150は、当該事象を検出した場合に(ステップS2550でYES)、当該写真オブジェクトに表示されている画像に対する、複数のアバターオブジェクトに対応する複数のユーザの評価を受け付ける(ステップS2560)。
今回開示された実施形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。