以下、この技術的思想の実施形態について図面を参照しながら詳細に説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。なお、以下で説明される各実施形態は、適宜選択的に組み合わされてもよい。
[技術思想]
図1は、本開示の技術思想を説明するための図(その1)である。図1を参照して、コンピュータ200は、ユーザ190が装着しているHMD(Head-Mounted Device)110に仮想空間2を提供している。コンピュータ200は、仮想空間2にパノラマ画像22を展開している。
コンピュータ200は、ユーザ190に対応するアバターオブジェクト1500を仮想空間2に配置する。コンピュータ200はさらに、アバターオブジェクト1500の視界領域に対応する画像をHMD110のモニタに表示する。これによりユーザ190は、パノラマ画像22を視認する。また、コンピュータ200は、撮影機能を有するカメラオブジェクト1810を仮想空間2に配置する。
アバターオブジェクト1500は、ユーザ190の操作に応じて動く。ユーザ190は、アバターオブジェクト1500によりカメラオブジェクト1810を操作して、仮想空間2(に展開されるパノラマ画像22)を撮影できる。
図1に示される例において、カメラオブジェクト1810の撮影範囲1830は、パノラマ画像22の一部である花1840を含む。この状態において、ユーザ190は、カメラオブジェクト1810による撮影を行なうための操作を行なう。コンピュータ200は、当該操作に基づいて、撮影範囲1830に対応する画像を生成する。以下、仮想空間における撮影により生成された画像を「写真画像」とも言う。
図2は、本開示の技術思想を説明するための図(その2)である。図2の状態において、ユーザ190は、HMD110のモニタに展開される視界画像300を視認している。
視界画像300は、アバターオブジェクト1500の手の部分に相当する手オブジェクト1510と、モニタオブジェクト1910とを含む。コンピュータ200は、ユーザ190の操作に応じて、手オブジェクト1510を動かす。
モニタオブジェクト1910は、写真画像を表示可能に構成される。図2の例において、モニタオブジェクト1910は、花1840を表示している。
また、モニタオブジェクト1910は、手オブジェクト1510による操作を受け付ける。図2に示される例では、ユーザ190は、手オブジェクト1510とモニタオブジェクト1910とが接触している状態で、手オブジェクト1510を矢印1940の方向(上方向)にスライドしている。これによりコンピュータ200は、手オブジェクト1510によるモニタオブジェクト1910に対する上方向へのスライド操作(フリック操作を含む)を受け付ける。
コンピュータ200は、上記操作を受け付けたことに基づいて、モニタオブジェクト1910に表示されている写真画像(花1840)を表す写真オブジェクト1945を仮想空間2に配置する。より具体的には、コンピュータ200は、モニタオブジェクト1910に対して上記スライド方向(矢印1940の方向)に写真オブジェクト1945を配置する。
また、コンピュータ200は、手オブジェクト1510によるモニタオブジェクト1910に対する操作に基づいて、モニタオブジェクト1910に表示されている写真画像を管理するための処理を実行する。写真画像を管理するための処理は、例えば、写真画像を削除する処理、モニタオブジェクト1910に表示されている写真画像を過去に生成された複数の写真画像のうちの他の写真画像に切り替える処理などを含む。
上記によれば、ユーザ190は、モニタオブジェクト1910を用いて1以上の写真画像を容易に確認できる。また、ユーザ190は、モニタオブジェクト1910を用いて写真画像を管理できる。
さらに、ユーザ190は、モニタオブジェクト1910に表示されている写真画像を表す写真オブジェクトを仮想空間2に配置できる。例えば、ユーザ190は、複数の写真画像の中から自分が気に入った写真画像を表す写真オブジェクトを仮想空間2に配置する。これにより、ユーザ190は、仮想空間2上で他のユーザと通信している場合に、自分が気に入った写真画像を他のユーザと簡単に共有できる。ユーザ190は、仮想空間2に配置した写真オブジェクト(が表す写真画像)を話題の種にして、他のユーザとのコミュニケーションを促進し得る。以下、このような処理を実現するための具体的な構成および制御について説明する。
[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およびモニタオブジェクト1910を含む。オブジェクトは、その他にも木、動物、人などを含み得る。
操作オブジェクト制御モジュール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は、オブジェクトとオブジェクトとが触れている状態から離れたタイミングを検出すると、予め定められた処理を行なう。具体例として、仮想空間制御モジュール230は、操作オブジェクトと上述のモニタオブジェクト1910との接触を検知した場合に、操作オブジェクトによるモニタオブジェクト1910に対する操作を受け付ける。
メモリモジュール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に格納する。
[写真画像を確認および管理する処理]
図19は、ユーザ190Aが仮想空間2A上で生成された写真画像を確認(閲覧)および管理する様子を表す図である。
視界画像1900は、モニタオブジェクト1910Aを含む。モニタオブジェクト1910Aは、写真画像を表示可能なスクリーン1920を有する。図19の例において、モニタオブジェクト1910Aは、スマートフォンなどの現実世界で広く使用されている電子デバイスを模している。これにより、ユーザ190Aは、モニタオブジェクト1910Aの操作方法を直感的に理解できる。
図19の例において、スクリーン1920には、アバターオブジェクト1500Aを表す写真画像が表示されている。スクリーン1920に表示される写真画像は、仮想空間2Aを撮影することにより生成された写真画像と、他の仮想空間を撮影することにより生成された写真画像とを含む。
仮想空間2Aを撮影することにより生成された写真画像は、ユーザ190Aがカメラオブジェクト1810Aを用いて能動的に撮影することにより生成された写真画像と、プロセッサ10Aが何らかのパラメータに基づいて自動的に撮影することにより生成された写真画像とを含む。
他の仮想空間を撮影することにより生成された写真画像は、例えば、コンピュータ200Aと仮想空間を共有するコンピュータ200Bが仮想空間2Bを撮影することにより生成した写真画像を含む。この場合、コンピュータ200Aは、コンピュータ200Bから受信した写真画像をスクリーン1920に表示する。
ユーザ190Aは、ある局面において、操作オブジェクト(右手オブジェクト1510Aまたは左手オブジェクト1520A)によりUIオブジェクト1530を操作して、モニタオブジェクト1910Aを仮想空間2A(の視認領域23A)に配置する。これにより、ユーザ190Aは、カメラオブジェクト1810Aを用いた撮影により生成された写真画像を容易に確認できる。
(写真オブジェクトを配置する処理)
ユーザ190Aは、生成された写真画像をユーザ190Bと共有したい場合、右手オブジェクト1510A(操作オブジェクト)とモニタオブジェクト1910Aとが接触している状態で、右手オブジェクト1510Aを矢印1940の方向(上方向)にスライドする。プロセッサ10Aは、当該操作を検知すると、モニタオブジェクト1910に表示されている写真画像を表す写真オブジェクト1945(図2参照)を仮想空間2Aに配置する。より具体的には、プロセッサ10Aは、モニタオブジェクト1910に対してスライド方向(上方向)に写真オブジェクト1945を配置する。
ある局面において、写真オブジェクト1945は、仮想空間2Aに設定される重力の影響を受けないように構成される。この場合、ユーザ190Aは、写真オブジェクト1945を中空に配置できる。他の局面において、写真オブジェクト1945は、仮想空間2Aに設定される重力の影響を受けるように構成されてもよい。
コンピュータ200Aおよび200Bは、仮想空間を共有する。そのため、仮想空間2Aに写真オブジェクト1945が配置されると、仮想空間2Bにも写真オブジェクト1945が配置される。これにより、ユーザ190Bは、仮想空間2Bにおいて写真オブジェクト1945を視認できる。
上記によれば、ユーザ190Aは、気に入った写真画像をユーザ190Bと容易に共有できる。その結果、ユーザ190Aは、写真画像を話題の種としてユーザ190Bとのコミュニケーションを促進できる。
(写真画像を管理する処理)
ユーザ190Aは、操作オブジェクトによりモニタオブジェクト1910Aに対して上記以外の操作を行なうことにより、モニタオブジェクト1910Aに表示されている写真画像を管理する処理を行なうことができる。当該管理する処理は、モニタオブジェクト1910Aに表示されている写真画像を切り替える処理、写真画像を削除する処理、写真画像を編集する処理、写真画像に対するユーザ評価を受け付ける処理、写真画像に含まれる被写体の情報を当該写真画像に関連付ける処理などを含む。以下、これらの処理について説明する。
<モニタオブジェクトに表示されている写真画像を切り替える処理>
ユーザ190Aは、過去に生成した複数の写真画像を閲覧したい場合、操作オブジェクトとモニタオブジェクト1910Aとが接触している状態で、操作オブジェクトを矢印1940の方向と直交する方向(図19では矢印1930の方向)にスライドする。プロセッサ10Aは、当該操作を検知すると、モニタオブジェクト1910Aのスクリーン1920に表示されている写真画像を切り替える。より具体的には、プロセッサ10Aは、表示されている写真画像を、写真画像DB244Aに格納される複数の写真画像のうちの他の写真画像に切り替える。
上記によれば、ユーザ190Aは、過去に生成された写真画像をモニタオブジェクト1910A上で容易に確認(閲覧)できる。
モニタオブジェクト1910のスクリーン1920は、写真画像の他にも、複数のアイコン1950〜1980を表示する。アイコン1950は、モニタオブジェクト1910Aに表示されている写真画像に対するユーザ190Aの肯定的な評価を受け付ける。アイコン1960は、モニタオブジェクト1910Aに表示されている写真画像の編集指示を受け付ける。アイコン1970は、モニタオブジェクト1910Aに表示されている写真画像に含まれる被写体の情報を当該写真画像に関連付ける操作を受け付ける。アイコン1980は、モニタオブジェクト1910Aに表示されている写真画像の削除指示を受け付ける。以下、操作オブジェクトによりこれらのアイコンが選択された場合のプロセッサ10Aの処理について説明する。
<写真画像に対する評価を受け付ける処理>
ユーザ190Aは、モニタオブジェクト1910Aに表示されている写真画像を気に入った場合、操作オブジェクト(例えば、右手オブジェクト1510A)によりアイコン1950を押下する。
プロセッサ10Aは、写真画像DB244Aにアクセスして、アイコン1950が押下されたことを表す情報(以下、「評価情報」とも言う)を、モニタオブジェクト1910Aに表示されている写真画像に関連付ける。換言すれば、プロセッサ10Aは、モニタオブジェクト1910Aに表示されている写真画像がユーザ190Aのお気に入りであることを写真画像DB244Aに記憶する。
<写真画像を編集する処理>
ユーザ190Aは、モニタオブジェクト1910Aに表示されている写真画像を編集したい場合、操作オブジェクトによりアイコン1960を押下する。
プロセッサ10Aは、アイコン1960の押下に基づいて、写真画像の編集メニューをスクリーン1920に表示する。一例として、編集メニューは、サイズ補正(例えば、トリミング処理)、色味調整(例えば、モノクロ処理)、明るさ調整(例えば、シャープネス処理)、コメント挿入、図形挿入などを含む。ユーザ190Aは、操作オブジェクトでスクリーン1920上に表示される編集メニューを選択する。プロセッサ10Aは、選択された編集メニューに従い写真画像に対する編集処理を行なう。
<写真画像に被写体の情報を関連付ける処理>
ユーザ190Aは、モニタオブジェクト1910Aに表示されている写真画像に被写体の情報(以下、「被写体情報」とも言う)を関連付けたい場合、操作オブジェクトによりアイコン1970を押下する。
プロセッサ10Aは、一例として、アイコン1970の押下に基づいて、被写体情報の入力を受け付けるための入力ボックスと、ソフトキーボードとをスクリーン1920に表示する。ユーザ190Aは、操作オブジェクトによりソフトキーボードを操作し、被写体情報を入力ボックスに入力する。他の局面において、プロセッサ10Aは、ユーザの発話に対応する音声信号から抽出される文字列を被写体情報として処理してもよい。
図19に示される例において、写真画像はアバターオブジェクト1500Aを含む。この場合、ユーザ190Aは、アバターオブジェクト1500Aに対応するユーザ190Aの情報を被写体情報として入力ボックスに入力し得る。ユーザ190Aの情報は、例えば、ユーザID、ユーザ190Aの名前、アバターオブジェクト1500のキャラクタ名などを含む。他の局面において、写真画像がアバターオブジェクト1500Bを含む場合もある。この場合、ユーザ190Aは、アバターオブジェクト1500Bに対応するユーザ190Bの情報を被写体情報として入力ボックスに入力する。
プロセッサ10Aは、写真画像DB244Aにアクセスして、入力された被写体情報を、モニタオブジェクト1910Aに表示されている写真画像に関連付ける。
他の局面において、プロセッサ10Aは、アイコン1970の押下の後にマイク119Aが出力する音声信号から文字列を抽出して、被写体情報を受け付けるように構成されてもよい。
さらに他の局面において、プロセッサ10Aは、写真画像の生成時に被写体情報を自動的に取得するように構成されてもよい。より具体的には、プロセッサ10Aは、撮影時のカメラオブジェクト1810Aの撮影範囲1830に含まれるオブジェクト(例えば、アバターオブジェクト)を検出する。プロセッサ10Aは、当該オブジェクトを識別する情報を被写体情報として写真画像に関連付けて写真画像DB244Aに格納する。当該構成によれば、ユーザ190Aは、被写体情報を入力する手間を省くことができる。
<写真画像を削除する処理>
ユーザ190Aは、モニタオブジェクト1910Aに表示されている写真画像を削除したい場合、操作オブジェクトによりアイコン1980を押下する。
プロセッサ10Aは、アイコン1980の押下に基づいて、写真画像DB244Aにアクセスして、モニタオブジェクト1910Aに表示されている写真画像を削除する。
(制御構造)
図20は、モニタオブジェクト1910Aを操作して写真オブジェクトを仮想空間2Aに配置する処理を表すフローチャートである。図20に示される処理は、プロセッサ10Aが、メモリモジュール240に格納される制御プログラムを読み込んで実行することにより実現される。
ステップS2005において、プロセッサ10Aは、仮想空間定義モジュール231として、仮想空間2Aを定義する。ステップS2010において、プロセッサ10Aは、パノラマ画像22を仮想空間2Aに展開する。
ステップS2015において、プロセッサ10Aは、仮想空間2Aにアバターオブジェクト1500Aを配置する。アバターオブジェクト1500Aの手の部分(右手オブジェクト1510Aおよび左手オブジェクト1520A)は操作オブジェクトとして機能する。
ステップS2020において、プロセッサ10Aは、仮想空間2Aにカメラオブジェクト1810Aを配置する。一例として、プロセッサ10Aは、アバターオブジェクト1500Aの腕に表示されるUIオブジェクト1530に対する操作オブジェクトによる操作に応じて、カメラオブジェクト1810Aを配置する。
ステップS2025において、プロセッサ10Aは、UIオブジェクト1530に対する操作オブジェクトによる操作に応じて、カメラオブジェクト1810Aによる撮影指示を受け付ける。これにより、プロセッサ10Aは、カメラオブジェクト1810Aの撮影範囲1830に対応する写真画像を生成する。
プロセッサ10Aはさらに、生成した写真画像に対応する写真IDを生成し、写真画像(のデータ)、写真ID、パノラマ画像IDを写真画像DB244Aに保存する。
ある局面において、各コンピュータ200により生成される写真IDは、ユーザIDを含む。当該構成によれば、あるユーザにより使用されるコンピュータが生成する写真IDと、他のユーザにより使用されるコンピュータが生成する写真IDとが異なる。したがって、サーバ150および各コンピュータ200は、写真IDを用いて一の写真画像を特定できる。
他の局面において、サーバ150が、コンピュータ200から写真画像の入力を受け付けるごとに、一意に定まる写真IDを生成してもよい。係る場合、サーバ150は、生成した写真IDを写真画像の送信元のコンピュータ200に送信する。コンピュータ200は、受信した写真IDを写真画像に関連付けて写真画像DB244に保存する。
ステップS2030において、プロセッサ10Aは、写真画像、写真ID、ユーザID、およびパノラマ画像IDをサーバ150に送信する。サーバ150は、受信したこれらのデータに基づいて写真DB1737を更新する。
ステップS2035において、プロセッサ10Aは、操作オブジェクトによるUIオブジェクト1530に対する操作に応じて、モニタオブジェクト1910Aを視認領域23Aに配置する。
ステップS2040において、プロセッサ10Aは、操作オブジェクトによるモニタオブジェクト1910Aに対する操作を受け付けたか否かを判断する。プロセッサ10Aは、操作を受け付けた場合(ステップS2040でYES)、ステップS2045の処理を実行する。そうでない場合(ステップS2040でNO)、プロセッサ10Aは、当該操作を受け付けるまで待機する。
ステップS2045において、プロセッサ10Aは、受け付けた操作が、操作オブジェクトによりモニタオブジェクト1910Aのスクリーン1920を長手方向(または上方向)にスライドする操作であるか否かを判断する。プロセッサ10Aは、受け付けた操作が、操作オブジェクトによりスクリーン1920を長手方向にスライドする操作であると判断した場合(ステップS2045でYES)、ステップS2050の処理を実行する。そうでない場合(ステップS2045でNO)、プロセッサ10Aは、ステップS2055の処理を実行する。
ステップS2050において、プロセッサ10Aは、モニタオブジェクト1910Aのスクリーン1920に表示されている写真画像を表す写真オブジェクト1945を仮想空間2に配置する。このとき、プロセッサ10Aは、ステップS2045のスライドに従い写真オブジェクト1945がモニタオブジェクト1910Aから出てくるように視界画像データを生成してもよい。その後、プロセッサ10Aは、ステップS2040の処理を再び実行する。
ステップS2055において、プロセッサ10Aは、ステップS2040で受け付けた操作に基づいて、モニタオブジェクト1910Aに表示されている写真画像を管理する処理を実行する。その後、プロセッサ10Aは、ステップS2040の処理を再び実行する。
[写真DB]
図21は、サーバ150が保持する写真DB1737のデータ構造の一例を表す。写真DB1737は、画像データと、写真IDと、撮影者(ユーザID)と、パノラマ画像IDと、評価情報と、被写体情報とを含む。
上述のように、コンピュータ200Aは、写真画像を生成すると、当該写真画像を表す画像データと、写真IDと、ユーザIDと、パノラマ画像IDとを互いに関連付けてサーバ150に送信する(図20のステップS2030)。サーバ150のプロセッサ1720は、受信したこれらの情報を写真DB1737に登録する。
また、プロセッサ10Aは、アイコン1950が押下されると、モニタオブジェクト1910Aに表示されている写真画像の写真IDと、ユーザIDとを関連付けてサーバ150に送信する。プロセッサ1720は、これらの情報を受信すると、写真DB1737にアクセスして、受信した写真IDに関連付けられた評価情報として受信したユーザIDを登録する。
また、プロセッサ10Aは、被写体情報の入力を受け付けると、この被写体情報と、モニタオブジェクト1910Aに表示されている写真画像の写真IDとを関連付けた状態でサーバ150に送信する。プロセッサ1720は、これらの情報を受信すると、写真DB1737にアクセスして、受信した評価情報を写真IDに関連付けて登録する。
当該構成によれば、サーバ150の管理者は、写真DB1737に基づいてユーザが気に入っている被写体を把握できる。ある局面において、サーバ150は、ユーザが気に入っている被写体に基づいて、ユーザが興味を有すると推定される広告またはパノラマ画像22をコンピュータ200に配信する。
また、ある局面において、プロセッサ10Aは、アイコン1980が押下されると、当該アイコンが押下されたことを表す削除指示と、モニタオブジェクト1910Aに表示されている写真画像の写真IDとを関連付けた状態でサーバ150に送信する。プロセッサ1720は、これらの情報を受信すると、写真DB1737にアクセスして、受信した写真IDに関連付けられるデータ(写真画像を含む)を削除する。
[SNSに投稿する処理]
図19を再び参照して、モニタオブジェクト1910Aのスクリーン1920は、アイコン1990をさらに表示する。アイコン1990は、モニタオブジェクト1910Aに表示されている写真画像を予め登録されたSNSに投稿する指示を受け付ける。図22を用いて、写真画像をSNSに投稿する処理を具体的に説明する。
図22は、コンピュータ200Aとサーバ150とが連携して写真画像をSNSに投稿する処理を表すフローチャートである。
ステップS2210において、コンピュータ200Aのプロセッサ10Aは、操作オブジェクトによってアイコン1990(図22ではSNSボタンと表記)が押下されたか否かを判断する。プロセッサ10Aは、アイコン1990が押下された場合(ステップS2210でYES)、モニタオブジェクト1910Aに表示されている写真画像の写真IDと、ユーザ190AのユーザIDとをサーバ150に送信する(ステップS2220)。そうでない場合(ステップS2210でNO)、プロセッサ10Aは、アイコン1990が押下されるまで待機する。
ステップS2230において、サーバ150のプロセッサ1720は、ユーザDB1739を参照して、写真画像をSNSに登録するために必要な情報を取得する。
図23は、ユーザDB1737のデータ構造の一例を表す。ユーザDB1739は、ユーザIDと、登録SNSと、SNSIDと、SNSパスワードとを含む。登録SNSは、ユーザごとに登録されたSNSにアクセスするための情報(例えば、URL(Uniform Resource Locator))である。SNSIDは、登録されたSNSにおいてユーザ190を識別する情報である。SNSパスワードは、登録されたSNSにSNSIDを用いてログインするために必要な情報である。登録SNS、SNSID、およびSNSパスワードは、予め各ユーザ190によってユーザDB1739に登録される。
図22を再び参照して、ステップS2230において、プロセッサ1720は、ユーザDB1739を参照して、コンピュータ200Aから受信したユーザIDに対応する登録SNS、SNSID、およびSNSパスワードを特定する。
ステップS2240において、プロセッサ1720は、特定したSNSIDおよびSNSパスワードを用いて、登録SNSにアクセスする。
ステップS2250において、プロセッサ1720は、写真DB1737にアクセスして、受信した写真IDに対応する写真画像(画像データ)を登録SNSに投稿(アップロード)する。
上記によれば、ユーザ190Aは、仮想空間2Aにおいて、生成された写真画像を容易にSNSに投稿することができる。
[写真オブジェクトに対する操作]
図24は、操作オブジェクトによる写真オブジェクトに対する操作を説明するための図である。視界画像2400は、ユーザ190Aによって視認される仮想空間2Aの一部に対応する。視界画像2400は、アバターオブジェクト1500Bと、写真オブジェクト2410とを含む。
アバターオブジェクト1500Bは、モニタオブジェクト1910Bを保持している。ある局面において、ユーザ190Bは、写真オブジェクト2410を仮想空間2Aに配置する。より具体的には、ユーザ190Bは、アバターオブジェクト1500B(操作オブジェクト)によりモニタオブジェクト1910Bを操作して、写真オブジェクト2410を仮想空間2Aに配置する。
写真オブジェクト2410は、コンピュータ200Aとは異なるコンピュータ200Bのユーザ190Bが仮想空間2B上で行なった撮影操作により生成された写真画像を表す。コンピュータ200Bは、写真画像を生成すると、写真画像(画像データ)と、写真画像に対応する写真IDとを、仮想空間を共有するコンピュータ200Aに送信する。
写真オブジェクト2410は、図19で説明したアイコン1950〜1990に対応するアイコン2450〜2490を含む。
ユーザ190Aは、操作オブジェクト(例えば、右手オブジェクト1510A)によりアイコン2450〜2490を押下することにより、写真オブジェクト2410に表示されている写真画像に対する各種処理を行なう。
アイコン2450〜2470、アイコン2490の押下に基づくプロセッサ10Aの処理は、アイコン1950〜1970、アイコン1990の押下に基づくプロセッサ10Aの処理にそれぞれ対応する。そのため、一例としてアイコン2450の押下に基づくプロセッサ10Aの処理について説明する。
(他人が生成した写真画像を評価する処理)
<アイコンに基づく評価処理>
ユーザ190Aは、写真オブジェクト2410に表示されている写真画像を気に入った場合、操作オブジェクトによりアイコン2450を押下する。つまり、プロセッサ10Aは、アイコン2450の押下に基づいてユーザ190Aの写真オブジェクト2410に表示されている写真画像に対する肯定的な評価を受け付ける。
プロセッサ10Aは、アイコン2450の押下に基づいて、写真オブジェクト2410に表示されている写真画像を写真DB244Aに保存する。プロセッサ10Aはさらに、ユーザ190AのユーザIDと、写真オブジェクト2410に表示されている写真画像の写真IDとをサーバ150に送信する。
サーバ150のプロセッサ1720は、コンピュータ200Aから上記の情報を受信すると、写真DB1737にアクセスして、受信した写真IDに対応する評価情報として受信したユーザIDを登録する。
<視線に基づく評価処理>
なお、他の局面において、プロセッサ10Aは、ユーザ190Aの仮想空間2Aにおける視線に基づいて、写真オブジェクト2410に表示されている写真画像に対する肯定的な評価を受け付ける。
視界画像2400は、ポインタオブジェクト2420をさらに含む。プロセッサ10Aは、注視センサ140の出力信号に基づいてユーザ190Aの現実空間における視線を検出する。プロセッサ10Aはさらに、仮想空間2Aにおける仮想カメラ1Aの位置および傾きに基づいて、検出した視線を仮想空間2Aで規定されるXYZ座標系に変換する。プロセッサ10Aは、仮想空間2Aにおけるユーザ190Aの視線と、オブジェクトとが衝突する位置にポインタオブジェクト2420を配置する。つまり、ポインタオブジェクト2420は、ユーザ190Aが仮想空間2Aにおいて視線を注いでいる位置を表す。
図24に示される例において、ポインタオブジェクト2420は、写真オブジェクト2410上に配置されている。これは、仮想空間2Aにおけるユーザ190Aの視線が写真オブジェクト2410に注がれていることを表す。プロセッサ10Aは、予め定められた時間(例えば5秒)にわたり写真オブジェクト2410にユーザ190Aの視線が注がれていることを検知した場合に、上述のアイコン2450の押下に基づく処理を実行する。その理由は、ユーザ190Aが長時間にわたり写真オブジェクト2410を見つめている場合、ユーザ190Aが写真オブジェクト2410に表示されている写真画像に対して関心を示している可能性が高いためである。
さらに他の局面において、プロセッサ10Aは、予め定められた時間にわたり写真オブジェクト2410と操作オブジェクトとが接触している場合、上述のアイコン2450の押下に基づく処理を実行してもよい。
<複数の操作オブジェクトと接触していることに基づく評価処理>
さらに他の局面において、サーバ150は、写真オブジェクト2410が複数の操作オブジェクト(図24の例ではアバターオブジェクト1500Aおよび1500Bの各々の手の部分)と接触していることに基づいて、上述のアイコン2450の押下に基づく処理を実行する。その理由は、上記の条件において、複数のユーザが写真オブジェクト2410に基づくコミュニケーションを図っており、これら複数のユーザが写真オブジェクト2410に対して関心を示している可能性が高いためである。図25を用いて当該処理を具体的に説明する。
図25は、サーバ150が写真画像に対する評価を受け付ける処理の一例を表すフローチャートである。ステップS2510において、コンピュータ200Aのプロセッサ10Aは、写真オブジェクト2410とユーザ190Aに対応する操作オブジェクトとが接触したか否かを判断する。プロセッサ10Aは、写真オブジェクト2410と操作オブジェクトとが接触したと判断した場合(ステップS2510でYES)、ステップS2520の処理を実行する。そうでない場合(ステップS2510でNO)、プロセッサ10Aは、写真オブジェクト2410と操作オブジェクトとが接触するまで待機する。
ステップS2520において、プロセッサ10Aは、写真オブジェクト2410と操作オブジェクトとが接触したことを表す接触情報と、写真オブジェクト2410に表示されている写真画像の写真IDと、ユーザ190AのユーザIDとをサーバ150に送信する。
ステップS2530において、プロセッサ10Aは、写真オブジェクト2410と操作オブジェクトとが離間したか否かを判断する。プロセッサ10Aは、写真オブジェクト2410と操作オブジェクトとが離間したと判断した場合(ステップS2530でYES)、ステップS2540の処理を実行する。そうでない場合(ステップS2530でNO)、プロセッサ10Aは、写真オブジェクト2410と操作オブジェクトとが離間するまで待機する。
ステップS2540において、プロセッサ10Aは、写真オブジェクト2410と操作オブジェクトとが離間したことを表す離間情報と、写真IDと、ユーザIDとをサーバ150に送信する。
コンピュータ200Aと仮想空間を共有するコンピュータ200Bも、以上説明したステップS2510〜S2540の処理を実行する。
ステップS2550において、サーバ150のプロセッサ1720は、各コンピュータ200から受信する情報に基づいて、ユーザ190Aおよび190Bの各々に対応する操作オブジェクトと写真オブジェクト2410とが接触したか否かを判断する。より具体的には、プロセッサ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を登録する。
(写真オブジェクトを削除する処理)
<アイコンに基づく削除処理>
図24を再び参照して、プロセッサ10Aは、操作オブジェクトによりアイコン2480が押下されたことに基づいて、写真オブジェクト2410を仮想空間2Aから削除する。プロセッサ10Aはさらに、写真画像DB244Aにアクセスして、写真オブジェクト2410に表示されている写真画像(画像データ)を削除するように構成されてもよい。
<破壊操作に基づく削除処理>
他の局面において、プロセッサ10Aは、写真オブジェクト2410を破壊する操作を受け付けた場合に、写真オブジェクト2410を仮想空間2Aから削除してもよい。
図26は、写真オブジェクト2410を削除する処理を説明するための図である。視界画像2600は、写真オブジェクト2410と、操作オブジェクトとして機能する右手オブジェクト1510Aとを含む。
図26の例において、右手オブジェクト1510Aは、ライターオブジェクト2610を保持している。さらに、炎オブジェクト2620がライターオブジェクト2610に隣接して配置されている。
ある局面において、ユーザ190Aは、右手オブジェクト1510Aがライターオブジェクト2610を保持している状態において、左手オブジェクト1520AによってUIオブジェクト1530を操作する。プロセッサ10Aは、当該ユーザ190Aの操作に応じて、炎オブジェクト2620をライターオブジェクト2610の近傍に配置する。
プロセッサ10Aは、炎オブジェクト2620と写真オブジェクト2410とが接触したことに基づいて、写真オブジェクト2410を仮想空間2Aから削除する。
上記によれば、ユーザ190Aは、写真オブジェクト2410を破壊するという直感的な操作により、写真オブジェクト2410を仮想空間2Aから削除できる。これにより、ユーザ190Aは、より仮想空間2Aに没入し得る。
なお、写真オブジェクト2410を破壊する操作は、炎オブジェクト2620と写真オブジェクト2410との接触に限られない。例えば、プロセッサ10Aは、右手オブジェクト1510Aと左手オブジェクト1520Aとによって写真オブジェクト2410を引き裂く動作、操作オブジェクトにより写真オブジェクト2410を他のオブジェクト(例えば地面)に予め定められた速度以上でぶつける動作などを検出した場合に、写真オブジェクト2410を破壊する操作を受け付けたと判断する。
[心霊写真を生成する処理]
ある局面において、プロセッサ10Aは、心霊写真を生成する。これにより、ユーザ190Aは、心霊写真を話の種として、仮想空間を共有する他のユーザとのコミュニケーションを促進し得る。
図27は、心霊写真を生成する処理を説明するための図(その1)である。図27に示される仮想空間2Aは、アバターオブジェクト1500Aと、カメラオブジェクト1810Aと、幽霊オブジェクト2700とを含む。
図28は、心霊写真を生成する処理を説明するための図(その2)である。図28に示される視界画像2800は、モニタオブジェクト1910Aを含む。このモニタオブジェクト1910Aのスクリーン1920は、図27の状態のカメラオブジェクト1810Aにより生成された写真画像を表示している。この写真画像は、幽霊オブジェクト2700を含む。
プロセッサ10Aは、仮想カメラ1Aの撮影範囲(視認領域23A)に幽霊オブジェクト2700が含まれる場合、幽霊オブジェクト2700を含まない視界画像を生成する。一方、プロセッサ10Aは、カメラオブジェクト1810Aの撮影範囲1830に幽霊オブジェクト2700が含まれる場合、幽霊オブジェクト2700を含む写真画像を生成する。
一例として、プロセッサ10Aは、透明な幽霊オブジェクト2700を仮想空間2Aに配置する。プロセッサ10Aは、カメラオブジェクト1810Aの撮影範囲1830に幽霊オブジェクト2700が含まれる場合、幽霊オブジェクト2700を可視化(例えば、幽霊オブジェクト2700の透明度を下げる)して写真画像を生成する。
上記によれば、ユーザ190Aは、仮想空間2Aに配置される幽霊オブジェクト2700を直接的に視認できないが、写真画像により間接的に視認できる。
ある局面において、幽霊オブジェクト2700は仮想空間2Aを所定位置に固定して配置される。この場合、ユーザ190Aは、幽霊オブジェクト2700が配置される場所を探すことに楽しみを覚え得る。他の局面において、幽霊オブジェクト2700は仮想空間2Aを動くように構成されてもよい。この場合、ユーザ190Aは、予期しない心霊写真を楽しみ得る。
[表示態様の異なるアバターオブジェクトの写真画像を生成する処理]
図29は、仮想空間2Aに配置されるアバターオブジェクト1500Bとは異なる表示態様のアバターオブジェクト1500Bを含む写真画像を生成する処理を説明するための図である。
図29を参照して、視界画像2900は、仮想空間2Aに配置されるアバターオブジェクト1500Bとモニタオブジェクト1910Aとを含む。プロセッサ10Aは、カメラオブジェクト1810Aの撮影範囲1830にアバターオブジェクト1500Bが含まれる状態において、ユーザ190Aから撮影指示を受け付ける。ある局面において、プロセッサ10Aは、撮影指示に応じて、仮想空間2Aに配置されているアバターオブジェクト1500Bとは異なる表示態様のアバターオブジェクト1500Bを含む写真画像を生成する。
図29に示される例において、仮想空間2Aに配置されるアバターオブジェクト1500Bは、細身である。一方、モニタオブジェクト1910Aのスクリーン1920に表示されているアバターオブジェクト1500Bは筋肉質である。
ある局面において、プロセッサ10Aは、ユーザ190Aから受け付ける設定に基づいて、写真画像に含まれるアバターオブジェクトの表示態様を変更する処理を実行する。この場合、ユーザ190Aは、自分好みのアバターオブジェクトを含む写真画像を生成できる。
他の局面において、プロセッサ10Aは、ランダムに写真画像に含まれるアバターオブジェクトの表示態様を変更する処理を実行するように構成されてもよい。例えば、プロセッサ10Aは、乱数を生成し、生成された乱数が予め定められた条件を満たした場合に、当該処理を実行する。この場合、ユーザ190Aは、予期しない写真画像を楽しみ得る。
また、ユーザ190Aは、表示態様が変更されたアバターオブジェクトを含む写真画像を話題の種として、仮想空間を共有する他のユーザとのコミュニケーションを促進し得る。
なお、アバターオブジェクトの表示態様を変更する処理は、アバターオブジェクトの体格を変更する処理に限られない。例えば、アバターオブジェクトの表示態様を変更する処理は、アバターオブジェクトの服装を変更する処理、アバターオブジェクトの表情を変更する処理などを含む。
[構成]
以上に開示された技術的特徴は、以下のように要約され得る。
(構成1) ある実施形態に従うと、仮想空間2を提供するコンピュータ200Aで実行されるプログラムが提供される。このプログラムはコンピュータ200Aに、仮想空間2Aを定義するステップ(ステップS2005)と、撮影機能を有するカメラオブジェクト1810Aを仮想空間2Aに配置するステップ(ステップS2020)と、カメラオブジェクト1810Aの撮影範囲に対応する画像を生成するステップ(ステップS2025)と、生成された画像を表示可能なモニタオブジェクト1910Aを仮想空間2Aに配置するステップ(ステップS2035)と、コンピュータ200Aのユーザ190の操作に応じて動く操作オブジェクト(例えば、手オブジェクト1510A)を仮想空間2Aに配置するステップ(ステップSS2015)と、手オブジェクト1510Aによるモニタオブジェクト1910Aに対する第1操作に基づいて、モニタオブジェクト1910Aに表示されている画像を表す写真オブジェクト2410を仮想空間2Aに配置するステップ(ステップS2050)とを実行させる。
(構成2) (構成1)に従うプログラムはコンピュータ200Aに、操作オブジェクトによるモニタオブジェクト1910Aに対する第2操作に基づいて、モニタオブジェクト1910Aに表示されている画像を管理する処理の入力を受け付けるステップ(ステップS2055)をさらに実行させる。
(構成3) (構成2)において、画像を管理する処理は、画像を削除する処理、画像を編集する処理、画像に対する評価を受け付ける処理、および画像に含まれる被写体の情報を画像に関連付ける処理のうち少なくともいずれかの処理を含む(図21)。
(構成4) (構成3)に従うプログラムはコンピュータ200Aに、コンピュータ200Bと通信するステップと、コンピュータ200Aのユーザ190Aに対応するアバターオブジェクト1500Aと、コンピュータ200Bのユーザ190Bに対応するアバターオブジェクト1500Bとを仮想空間2Aに配置するステップとをさらに実行させる(図15、図16)。生成された画像は、アバターオブジェクト1500Aまたはアバターオブジェクト1500Bを含む。画像に含まれる被写体の情報は、生成された画像に含まれるアバターオブジェクトに対応するユーザ190の情報を含む(図21)。これにより、他のユーザは、当該画像に誰のアバターオブジェクトが含まれるかを容易に判断できる。例えば、他のユーザは、特定の人物のアバターオブジェクトを含む画像を容易に検索できる。
(構成5) (構成1)〜(構成4)のいずれかに従うプログラムはコンピュータ200Aに、コンピュータ200Aのユーザ190Aに対応するアバターオブジェクト1500Aを仮想空間2Aに配置するステップ(ステップS2015)をさらに実行させる。操作オブジェクトは、アバターオブジェクト1500Aの手1510Aを含む。これにより、ユーザ190Aは、仮想空間2A上にあたかも自分の手が存在するかのような感覚を覚え、より仮想空間2Aに没入し得る。
(構成6) (構成2)〜(構成4)のいずれかにおいて、モニタオブジェクト1910Aは、生成された画像を表示するためのスクリーン1920を含む。画像を管理する処理は、スクリーンに表示される画像を切り替える処理を含む。第2操作は、手オブジェクト1510Aによってスクリーン1920を第1方向(矢印1930の方向)にスライドする操作を含む。第1操作は、手オブジェクト1510Aによってスクリーンを第1方向に直交する第2方向(矢印1940の方向)にスライドする操作を含む(図19)。ユーザ190Aは、現実空間における電子デバイス(例えば、スマートフォン、タブレット)に対する操作と同様の操作により、スクリーン1920に表示される画像を切り替えることができる。つまり、当該プログラムは、ユーザ190Aに対して直感的な操作の理解を促すことができる。
(構成7) (構成1)〜(構成6)のいずれかに従うプログラムはコンピュータ200Aに、手オブジェクト1510Aによるモニタオブジェクト1910Aに対する操作に基づいて(ステップS2210)、予め登録されたソーシャルネットワークサービスにアクセスするステップ(ステップS2240)と、モニタオブジェクト1910Aに表示されている画像をソーシャルネットワークサービスに投稿するステップ(ステップS2250)とをさらに実行させる。
(構成8) (構成1)〜(構成7)のいずれかに従うプログラムはコンピュータ200Aに、写真オブジェクト2410を破壊する操作を受け付けたことに基づいて、写真オブジェクト2410または当該写真オブジェクト2410が表す画像を削除するステップをさらに実行させる(図26)。
(構成9) (構成1)〜(構成8)のいずれかに従うプログラムはコンピュータ200Aに、透明な幽霊オブジェクト2700を仮想空間2Aに配置するステップをさらに実行させる(図27)。画像を生成することは、カメラオブジェクト1810Aの撮影範囲に幽霊オブジェクト2700が含まれる場合に、可視化された幽霊オブジェクト2700を含む画像を生成することを含む(図28)。
(構成10) (構成1)〜(構成9)のいずれかに従うプログラムはコンピュータ200Aに、コンピュータ200Bと通信するステップと、コンピュータ200Bのユーザ190に対応するアバターオブジェクト1500Bを仮想空間2Aに配置するステップとをさらに実行させる。画像を生成することは、カメラオブジェクト1810Aの撮影範囲にアバターオブジェクト1500Bが含まれる場合に、仮想空間2Aに配置されているアバターオブジェクト1500Bの表示態様とは異なる表示態様のアバターオブジェクト1500Bを含む画像を生成することを含む(図29)。
(構成11) (構成1)〜(構成10)のいずれかに従うプログラムはコンピュータ200Aに、コンピュータ200Bと通信するステップと、コンピュータ200Bのユーザ190Bが行なった撮影操作により生成された画像を表す他の写真オブジェクト2410を仮想空間2Aに配置するステップと、他の写真オブジェクト2410に表示されている画像に対するコンピュータ200Aのユーザ190Aの評価を受け付けるステップとをさらに実行させる(図24)。
(構成12) (構成11)に従うプログラムはコンピュータ200Aに、仮想空間2Aにおけるコンピュータ200Aのユーザ190の視線を検出するステップをさらに実行させる。評価を受け付けるステップは、コンピュータ200Aのユーザ190の視線が予め定められた時間にわたり他の写真オブジェクト2410に注がれたことを検出したことに基づいて、他の写真オブジェクト2410に表示されている画像に対する評価を受け付けることを含む。
(構成13) (構成11)において、他の写真オブジェクト2410は、評価を受け付けるためのアイコン2450を含む。評価を受け付けるステップは、手オブジェクト1510Aとアイコン2450とが接触したことに基づいて、他の写真オブジェクト2410に表示されている画像に対する評価を受け付けることを含む。
(構成14) (構成11)〜(構成13)のいずれかに従うプログラムはコンピュー
タ200Aに、生成した画像をサーバに送信するステップ(ステップS2520)と、手
オブジェクト1510Aと、写真オブジェクト2410または他の写真オブジェクト24
10とが接触していることを表す情報をサーバに送信するステップ(ステップS2520
)とをさらに実行させる。当該構成により、サーバ150は、複数のアバターオブジェク
トが同一の写真オブジェクトに同時に触っていることを検出できる。サーバ150は、当
該事象を検出した場合に(ステップS2550でYES)、当該写真オブジェクトに表示
されている画像に対する、複数のアバターオブジェクトに対応する複数のユーザの評価を
受け付ける(ステップS2560)。
今回開示された実施形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。