以下、この技術的思想の実施の形態について図面を参照しながら詳細に説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。本開示において示される1以上の実施形態において、各実施形態が含む要素を互いに組み合わせることができ、かつ、当該組み合わせられた結果物も本開示が示す実施形態の一部をなすものとする。
[HMDシステムの構成]
図1を参照して、HMD(Head-Mounted Device)システム100の構成について説明する。図1は、本実施の形態に従うHMDシステム100の構成の概略を表す図である。HMDシステム100は、家庭用のシステムとしてあるいは業務用のシステムとして提供される。
HMDシステム100は、サーバ600と、HMDセット110A,110B,110C,110Dと、外部機器700と、ネットワーク2とを含む。HMDセット110A,110B,110C,110Dの各々は、ネットワーク2を介してサーバ600や外部機器700と通信可能に構成される。以下、HMDセット110A,110B,110C,110Dを総称して、HMDセット110とも言う。HMDシステム100を構成するHMDセット110の数は、4つに限られず、3つ以下でも、5つ以上でもよい。HMDセット110は、HMD120と、コンピュータ200と、HMDセンサ410と、ディスプレイ430と、コントローラ300とを備える。HMD120は、モニタ130と、注視センサ140と、第1カメラ150と、第2カメラ160と、マイク170と、スピーカ180とを含む。コントローラ300は、モーションセンサ420を含み得る。
ある局面において、コンピュータ200は、インターネットその他のネットワーク2に接続可能であり、ネットワーク2に接続されているサーバ600その他のコンピュータと通信可能である。その他のコンピュータとしては、例えば、他のHMDセット110のコンピュータや外部機器700が挙げられる。別の局面において、HMD120は、HMDセンサ410の代わりに、センサ190を含み得る。
HMD120は、ユーザ5の頭部に装着され、動作中に仮想空間をユーザ5に提供し得る。より具体的には、HMD120は、右目用の画像および左目用の画像をモニタ130にそれぞれ表示する。ユーザ5の各目がそれぞれの画像を視認すると、ユーザ5は、両目の視差に基づき当該画像を3次元画像として認識し得る。HMD120は、モニタを備える所謂ヘッドマウントディスプレイと、スマートフォンその他のモニタを有する端末を装着可能なヘッドマウント機器のいずれをも含み得る。
モニタ130は、例えば、非透過型の表示装置として実現される。ある局面において、モニタ130は、ユーザ5の両目の前方に位置するようにHMD120の本体に配置されている。したがって、ユーザ5は、モニタ130に表示される3次元画像を視認すると、仮想空間に没入することができる。ある局面において、仮想空間は、例えば、背景、ユーザ5が操作可能なオブジェクト、ユーザ5が選択可能なメニューの画像を含む。ある局面において、モニタ130は、所謂スマートフォンその他の情報表示端末が備える液晶モニタまたは有機EL(Electro Luminescence)モニタとして実現され得る。
別の局面において、モニタ130は、透過型の表示装置として実現され得る。この場合、HMD120は、図1に示されるようにユーザ5の目を覆う密閉型ではなく、メガネ型のような開放型であり得る。透過型のモニタ130は、その透過率を調整することにより、一時的に非透過型の表示装置として構成可能であってもよい。モニタ130は、仮想空間を構成する画像の一部と、現実空間とを同時に表示する構成を含んでいてもよい。例えば、モニタ130は、HMD120に搭載されたカメラで撮影した現実空間の画像を表示してもよいし、一部の透過率を高く設定することにより現実空間を視認可能にしてもよい。
ある局面において、モニタ130は、右目用の画像を表示するためのサブモニタと、左目用の画像を表示するためのサブモニタとを含み得る。別の局面において、モニタ130は、右目用の画像と左目用の画像とを一体として表示する構成であってもよい。この場合、モニタ130は、高速シャッタを含む。高速シャッタは、画像がいずれか一方の目にのみ認識されるように、右目用の画像と左目用の画像とを交互に表示可能に作動する。
ある局面において、HMD120は、図示せぬ複数の光源を含む。各光源は例えば、赤外線を発するLED(Light Emitting Diode)により実現される。HMDセンサ410は、HMD120の動きを検出するためのポジショントラッキング機能を有する。より具体的には、HMDセンサ410は、HMD120が発する複数の赤外線を読み取り、現実空間内におけるHMD120の位置および傾きを検出する。
別の局面において、HMDセンサ410は、カメラにより実現されてもよい。この場合、HMDセンサ410は、カメラから出力されるHMD120の画像情報を用いて、画像解析処理を実行することにより、HMD120の位置および傾きを検出することができる。
別の局面において、HMD120は、位置検出器として、HMDセンサ410の代わりに、あるいはHMDセンサ410に加えてセンサ190を備えてもよい。HMD120は、センサ190を用いて、HMD120自身の位置および傾きを検出し得る。例えば、センサ190が角速度センサ、地磁気センサ、あるいは加速度センサである場合、HMD120は、HMDセンサ410の代わりに、これらの各センサのいずれかを用いて、自身の位置および傾きを検出し得る。一例として、センサ190が角速度センサである場合、角速度センサは、現実空間におけるHMD120の3軸周りの角速度を経時的に検出する。HMD120は、各角速度に基づいて、HMD120の3軸周りの角度の時間的変化を算出し、さらに、角度の時間的変化に基づいて、HMD120の傾きを算出する。
注視センサ140は、ユーザ5の右目および左目の視線が向けられる方向を検出する。つまり、注視センサ140は、ユーザ5の視線を検出する。視線の方向の検出は、例えば、公知のアイトラッキング機能によって実現される。注視センサ140は、当該アイトラッキング機能を有するセンサにより実現される。ある局面において、注視センサ140は、右目用のセンサおよび左目用のセンサを含むことが好ましい。注視センサ140は、例えば、ユーザ5の右目および左目に赤外光を照射するとともに、照射光に対する角膜および虹彩からの反射光を受けることにより各眼球の回転角を検出するセンサであってもよい。注視センサ140は、検出した各回転角に基づいて、ユーザ5の視線を検知することができる。
第1カメラ150は、ユーザ5の顔の下部を撮影する。より具体的には、第1カメラ150は、ユーザ5の鼻および口などを撮影する。第2カメラ160は、ユーザ5の目および眉などを撮影する。HMD120のユーザ5側の筐体をHMD120の内側、HMD120のユーザ5とは逆側の筐体をHMD120の外側と定義する。ある局面において、第1カメラ150は、HMD120の外側に配置され、第2カメラ160は、HMD120の内側に配置され得る。第1カメラ150および第2カメラ160が生成した画像は、コンピュータ200に入力される。別の局面において、第1カメラ150と第2カメラ160とを1台のカメラとして実現し、この1台のカメラでユーザ5の顔を撮影するようにしてもよい。
マイク170は、ユーザ5の発話を音声信号(電気信号)に変換してコンピュータ200に出力する。スピーカ180は、音声信号を音声に変換してユーザ5に出力する。別の局面において、HMD120は、スピーカ180に替えてイヤホンを含み得る。
コントローラ300は、有線または無線によりコンピュータ200に接続されている。コントローラ300は、ユーザ5からコンピュータ200への命令の入力を受け付ける。ある局面において、コントローラ300は、ユーザ5によって把持可能に構成される。別の局面において、コントローラ300は、ユーザ5の身体あるいは衣類の一部に装着可能に構成される。さらに別の局面において、コントローラ300は、コンピュータ200から送信される信号に基づいて、振動、音、光のうちの少なくともいずれかを出力するように構成されてもよい。さらに別の局面において、コントローラ300は、ユーザ5から、仮想空間に配置されるオブジェクトの位置や動きを制御するための操作を受け付ける。
ある局面において、コントローラ300は、複数の光源を含む。各光源は例えば、赤外線を発するLEDにより実現される。HMDセンサ410は、ポジショントラッキング機能を有する。この場合、HMDセンサ410は、コントローラ300が発する複数の赤外線を読み取り、現実空間内におけるコントローラ300の位置および傾きを検出する。別の局面において、HMDセンサ410は、カメラにより実現されてもよい。この場合、HMDセンサ410は、カメラから出力されるコントローラ300の画像情報を用いて、画像解析処理を実行することにより、コントローラ300の位置および傾きを検出することができる。
モーションセンサ420は、ある局面において、ユーザ5の手に取り付けられて、ユーザ5の手の動きを検出する。例えば、モーションセンサ420は、手の回転速度、回転数等を検出する。検出された信号は、コンピュータ200に送られる。モーションセンサ420は、例えば、コントローラ300に設けられている。ある局面において、モーションセンサ420は、例えば、ユーザ5に把持可能に構成されたコントローラ300に設けられている。別の局面において、現実空間における安全のため、コントローラ300は、手袋型のようにユーザ5の手に装着されることにより容易に飛んで行かないものに装着される。さらに別の局面において、ユーザ5に装着されないセンサがユーザ5の手の動きを検出してもよい。例えば、ユーザ5を撮影するカメラの信号が、ユーザ5の動作を表す信号として、コンピュータ200に入力されてもよい。モーションセンサ420とコンピュータ200とは、一例として、無線により互いに接続される。無線の場合、通信形態は特に限られず、例えば、Bluetooth(登録商標)その他の公知の通信手法が用いられる。
ディスプレイ430は、モニタ130に表示されている画像と同様の画像を表示する。これにより、HMD120を装着しているユーザ5以外のユーザにも当該ユーザ5と同様の画像を視聴させることができる。ディスプレイ430に表示される画像は、3次元画像である必要はなく、右目用の画像や左目用の画像であってもよい。ディスプレイ430としては、例えば、液晶ディスプレイや有機ELモニタなどが挙げられる。
サーバ600は、コンピュータ200にプログラムを送信し得る。別の局面において、サーバ600は、他のユーザによって使用されるHMD120に仮想現実を提供するための他のコンピュータ200と通信し得る。例えば、アミューズメント施設において、複数のユーザが参加型のゲームを行う場合、各コンピュータ200は、各ユーザの動作に基づく信号をサーバ600を介して他のコンピュータ200と通信して、同じ仮想空間において複数のユーザが共通のゲームを楽しむことを可能にする。各コンピュータ200は、各ユーザの動作に基づく信号をサーバ600を介さずに他のコンピュータ200と通信するようにしてもよい。
外部機器700は、コンピュータ200と通信可能な機器であればどのような機器であってもよい。外部機器700は、例えば、ネットワーク2を介してコンピュータ200と通信可能な機器であってもよいし、近距離無線通信や有線接続によりコンピュータ200と直接通信可能な機器であってもよい。外部機器700としては、例えば、スマートデバイス、PC(Personal Computer)、およびコンピュータ200の周辺機器などが挙げられるが、これらに限定されるものではない。
[コンピュータのハードウェア構成]
図2を参照して、本実施の形態に係るコンピュータ200について説明する。図2は、本実施の形態に従うコンピュータ200のハードウェア構成の一例を表すブロック図である。コンピュータ200は、主たる構成要素として、プロセッサ210と、メモリ220と、ストレージ230と、入出力インターフェイス240と、通信インターフェイス250とを備える。各構成要素は、それぞれ、バス260に接続されている。
プロセッサ210は、コンピュータ200に与えられる信号に基づいて、あるいは、予め定められた条件が成立したことに基づいて、メモリ220またはストレージ230に格納されているプログラムに含まれる一連の命令を実行する。ある局面において、プロセッサ210は、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、MPU(Micro Processor Unit)、FPGA(Field-Programmable Gate Array)その他のデバイスとして実現される。
メモリ220は、プログラムおよびデータを一時的に保存する。プログラムは、例えば、ストレージ230からロードされる。データは、コンピュータ200に入力されたデータと、プロセッサ210によって生成されたデータとを含む。ある局面において、メモリ220は、RAM(Random Access Memory)その他の揮発メモリとして実現される。
ストレージ230は、プログラムおよびデータを永続的に保持する。ストレージ230は、例えば、ROM(Read-Only Memory)、ハードディスク装置、フラッシュメモリ、その他の不揮発記憶装置として実現される。ストレージ230に格納されるプログラムは、HMDシステム100において仮想空間を提供するためのプログラム、シミュレーションプログラム、ゲームプログラム、ユーザ認証プログラム、他のコンピュータ200との通信を実現するためのプログラムを含む。ストレージ230に格納されるデータは、仮想空間を規定するためのデータおよびオブジェクト等を含む。
別の局面において、ストレージ230は、メモリカードのように着脱可能な記憶装置として実現されてもよい。さらに別の局面において、コンピュータ200に内蔵されたストレージ230の代わりに、外部の記憶装置に保存されているプログラムおよびデータを使用する構成が使用されてもよい。このような構成によれば、例えば、アミューズメント施設のように複数のHMDシステム100が使用される場面において、プログラムやデータの更新を一括して行うことが可能になる。
入出力インターフェイス240は、HMD120、HMDセンサ410、モーションセンサ420およびディスプレイ430との間で信号を通信する。HMD120に含まれるモニタ130,注視センサ140,第1カメラ150,第2カメラ160,マイク170およびスピーカ180は、HMD120の入出力インターフェイス240を介してコンピュータ200との通信を行ない得る。ある局面において、入出力インターフェイス240は、USB(Universal Serial Bus)、DVI(Digital Visual Interface)、HDMI(登録商標)(High-Definition Multimedia Interface)その他の端子を用いて実現される。入出力インターフェイス240は上述のものに限られない。
ある局面において、入出力インターフェイス240は、さらに、コントローラ300と通信し得る。例えば、入出力インターフェイス240は、コントローラ300およびモーションセンサ420から出力された信号の入力を受ける。別の局面において、入出力インターフェイス240は、プロセッサ210から出力された命令を、コントローラ300に送る。当該命令は、振動、音声出力、発光等をコントローラ300に指示する。コントローラ300は、当該命令を受信すると、その命令に応じて、振動、音声出力または発光のいずれかを実行する。
通信インターフェイス250は、ネットワーク2に接続されて、ネットワーク2に接続されている他のコンピュータ(例えば、サーバ600)と通信する。ある局面において、通信インターフェイス250は、例えば、LAN(Local Area Network)その他の有線通信インターフェイス、あるいは、WiFi(Wireless Fidelity)、Bluetooth(登録商標)、NFC(Near Field Communication)その他の無線通信インターフェイスとして実現される。通信インターフェイス250は上述のものに限られない。
ある局面において、プロセッサ210は、ストレージ230にアクセスし、ストレージ230に格納されている1つ以上のプログラムをメモリ220にロードし、当該プログラムに含まれる一連の命令を実行する。当該1つ以上のプログラムは、コンピュータ200のオペレーティングシステム、仮想空間を提供するためのアプリケーションプログラム、仮想空間で実行可能なゲームソフトウェア等を含み得る。プロセッサ210は、入出力インターフェイス240を介して、仮想空間を提供するための信号をHMD120に送る。HMD120は、その信号に基づいてモニタ130に映像を表示する。
図2に示される例では、コンピュータ200は、HMD120の外部に設けられる構成が示されているが、別の局面において、コンピュータ200は、HMD120に内蔵されてもよい。一例として、モニタ130を含む携帯型の情報通信端末(例えば、スマートフォン)がコンピュータ200として機能してもよい。
コンピュータ200は、複数のHMD120に共通して用いられる構成であってもよい。このような構成によれば、例えば、複数のユーザに同一の仮想空間を提供することもできるので、各ユーザは同一の仮想空間で他のユーザと同一のアプリケーションを楽しむことができる。
ある実施の形態において、HMDシステム100では、現実空間における座標系である実座標系が予め設定されている。実座標系は、現実空間における鉛直方向、鉛直方向に直交する水平方向、並びに、鉛直方向および水平方向の双方に直交する前後方向にそれぞれ平行な、3つの基準方向(軸)を有する。実座標系における水平方向、鉛直方向(上下方向)、および前後方向は、それぞれ、x軸、y軸、z軸と規定される。より具体的には、実座標系において、x軸は現実空間の水平方向に平行である。y軸は、現実空間の鉛直方向に平行である。z軸は現実空間の前後方向に平行である。
ある局面において、HMDセンサ410は、赤外線センサを含む。赤外線センサが、HMD120の各光源から発せられた赤外線をそれぞれ検出すると、HMD120の存在を検出する。HMDセンサ410は、さらに、各点の値(実座標系における各座標値)に基づいて、HMD120を装着したユーザ5の動きに応じた、現実空間内におけるHMD120の位置および傾き(向き)を検出する。より詳しくは、HMDセンサ410は、経時的に検出された各値を用いて、HMD120の位置および傾きの時間的変化を検出できる。
HMDセンサ410によって検出されたHMD120の各傾きは、実座標系におけるHMD120の3軸周りの各傾きに相当する。HMDセンサ410は、実座標系におけるHMD120の傾きに基づき、uvw視野座標系をHMD120に設定する。HMD120に設定されるuvw視野座標系は、HMD120を装着したユーザ5が仮想空間において物体を見る際の視点座標系に対応する。
[uvw視野座標系]
図3を参照して、uvw視野座標系について説明する。図3は、ある実施の形態に従うHMD120に設定されるuvw視野座標系を概念的に表す図である。HMDセンサ410は、HMD120の起動時に、実座標系におけるHMD120の位置および傾きを検出する。プロセッサ210は、検出された値に基づいて、uvw視野座標系をHMD120に設定する。
図3に示されるように、HMD120は、HMD120を装着したユーザ5の頭部を中心(原点)とした3次元のuvw視野座標系を設定する。より具体的には、HMD120は、実座標系を規定する水平方向、鉛直方向、および前後方向(x軸、y軸、z軸)を、実座標系内においてHMD120の各軸周りの傾きだけ各軸周りにそれぞれ傾けることによって新たに得られる3つの方向を、HMD120におけるuvw視野座標系のピッチ軸(u軸)、ヨー軸(v軸)、およびロール軸(w軸)として設定する。
ある局面において、HMD120を装着したユーザ5が直立し、かつ、正面を視認している場合、プロセッサ210は、実座標系に平行なuvw視野座標系をHMD120に設定する。この場合、実座標系における水平方向(x軸)、鉛直方向(y軸)、および前後方向(z軸)は、HMD120におけるuvw視野座標系のピッチ軸(u軸)、ヨー軸(v軸)、およびロール軸(w軸)に一致する。
uvw視野座標系がHMD120に設定された後、HMDセンサ410は、HMD120の動きに基づいて、設定されたuvw視野座標系におけるHMD120の傾きを検出できる。この場合、HMDセンサ410は、HMD120の傾きとして、uvw視野座標系におけるHMD120のピッチ角(θu)、ヨー角(θv)、およびロール角(θw)をそれぞれ検出する。ピッチ角(θu)は、uvw視野座標系におけるピッチ軸周りのHMD120の傾き角度を表す。ヨー角(θv)は、uvw視野座標系におけるヨー軸周りのHMD120の傾き角度を表す。ロール角(θw)は、uvw視野座標系におけるロール軸周りのHMD120の傾き角度を表す。
HMDセンサ410は、検出されたHMD120の傾きに基づいて、HMD120が動いた後のHMD120におけるuvw視野座標系を、HMD120に設定する。HMD120と、HMD120のuvw視野座標系との関係は、HMD120の位置および傾きに関わらず、常に一定である。HMD120の位置および傾きが変わると、当該位置および傾きの変化に連動して、実座標系におけるHMD120のuvw視野座標系の位置および傾きが変化する。
ある局面において、HMDセンサ410は、赤外線センサからの出力に基づいて取得される赤外線の光強度および複数の点間の相対的な位置関係(例えば、各点間の距離など)に基づいて、HMD120の現実空間内における位置を、HMDセンサ410に対する相対位置として特定してもよい。プロセッサ210は、特定された相対位置に基づいて、現実空間内(実座標系)におけるHMD120のuvw視野座標系の原点を決定してもよい。
[仮想空間]
図4を参照して、仮想空間についてさらに説明する。図4は、ある実施の形態に従う仮想空間11を表現する一態様を概念的に表す図である。仮想空間11は、中心12の360度方向の全体を覆う全天球状の構造を有する。図4では、説明を複雑にしないために、仮想空間11のうちの上半分の天球が例示されている。仮想空間11では各メッシュが規定される。各メッシュの位置は、仮想空間11に規定されるグローバル座標系であるXYZ座標系における座標値として予め規定されている。コンピュータ200は、仮想空間11に展開可能なパノラマ画像13(静止画、動画等)を構成する各部分画像を、仮想空間11において対応する各メッシュにそれぞれ対応付ける。
ある局面において、仮想空間11では、中心12を原点とするXYZ座標系が規定される。XYZ座標系は、例えば、実座標系に平行である。XYZ座標系における水平方向、鉛直方向(上下方向)、および前後方向は、それぞれX軸、Y軸、Z軸として規定される。したがって、XYZ座標系のX軸(水平方向)が実座標系のx軸と平行であり、XYZ座標系のY軸(鉛直方向)が実座標系のy軸と平行であり、XYZ座標系のZ軸(前後方向)が実座標系のz軸と平行である。
HMD120の起動時、すなわちHMD120の初期状態において、仮想カメラ14が、仮想空間11の中心12に配置される。ある局面において、プロセッサ210は、仮想カメラ14が撮影する画像をHMD120のモニタ130に表示する。仮想カメラ14は、現実空間におけるHMD120の動きに連動して、仮想空間11を同様に移動する。これにより、現実空間におけるHMD120の位置および傾きの変化が、仮想空間11において同様に再現され得る。
仮想カメラ14には、HMD120の場合と同様に、uvw視野座標系が規定される。仮想空間11における仮想カメラ14のuvw視野座標系は、現実空間(実座標系)におけるHMD120のuvw視野座標系に連動するように規定されている。したがって、HMD120の傾きが変化すると、それに応じて、仮想カメラ14の傾きも変化する。仮想カメラ14は、HMD120を装着したユーザ5の現実空間における移動に連動して、仮想空間11において移動することもできる。
コンピュータ200のプロセッサ210は、仮想カメラ14の位置と傾き(基準視線16)とに基づいて、仮想空間11における視界領域15を規定する。視界領域15は、仮想空間11のうち、HMD120を装着したユーザ5が視認する領域に対応する。つまり、仮想カメラ14の位置は、仮想空間11におけるユーザ5の視点と言える。
注視センサ140によって検出されるユーザ5の視線は、ユーザ5が物体を視認する際の視点座標系における方向である。HMD120のuvw視野座標系は、ユーザ5がモニタ130を視認する際の視点座標系に等しい。仮想カメラ14のuvw視野座標系は、HMD120のuvw視野座標系に連動している。したがって、ある局面に従うHMDシステム100は、注視センサ140によって検出されたユーザ5の視線を、仮想カメラ14のuvw視野座標系におけるユーザ5の視線とみなすことができる。
[ユーザの視線]
図5を参照して、ユーザ5の視線の決定について説明する。図5は、ある実施の形態に従うHMD120を装着するユーザ5の頭部を上から表した図である。
ある局面において、注視センサ140は、ユーザ5の右目および左目の各視線を検出する。ある局面において、ユーザ5が近くを見ている場合、注視センサ140は、視線R1およびL1を検出する。別の局面において、ユーザ5が遠くを見ている場合、注視センサ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の位置に基づき、ユーザ5の視線N0を特定する。コンピュータ200は、例えば、ユーザ5の右目Rと左目Lとを結ぶ直線の中点と、注視点N1とを通る直線の延びる方向を、視線N0として検出する。視線N0は、ユーザ5が両目により実際に視線を向けている方向である。視線N0は、視界領域15に対してユーザ5が実際に視線を向けている方向に相当する。
別の局面において、HMDシステム100は、テレビジョン放送受信チューナを備えてもよい。このような構成によれば、HMDシステム100は、仮想空間11においてテレビ番組を表示することができる。
さらに別の局面において、HMDシステム100は、インターネットに接続するための通信回路、あるいは、電話回線に接続するための通話機能を備えていてもよい。
[視界領域]
図6および図7を参照して、視界領域15について説明する。図6は、仮想空間11において視界領域15をX方向から見たYZ断面を表す図である。図7は、仮想空間11において視界領域15をY方向から見たXZ断面を表す図である。
図6に示されるように、YZ断面における視界領域15は、領域18を含む。領域18は、仮想カメラ14の位置と基準視線16と仮想空間11のYZ断面とによって定義される。プロセッサ210は、仮想空間における基準視線16を中心として極角αを含む範囲を、領域18として規定する。
図7に示されるように、XZ断面における視界領域15は、領域19を含む。領域19は、仮想カメラ14の位置と基準視線16と仮想空間11のXZ断面とによって定義される。プロセッサ210は、仮想空間11における基準視線16を中心とした方位角βを含む範囲を、領域19として規定する。極角αおよびβは、仮想カメラ14の位置と仮想カメラ14の傾き(向き)とに応じて定まる。
ある局面において、HMDシステム100は、コンピュータ200からの信号に基づいて、視界画像17をモニタ130に表示させることにより、ユーザ5に仮想空間11における視界を提供する。視界画像17は、パノラマ画像13のうち視界領域15に対応する部分に相当する画像である。ユーザ5が、頭に装着したHMD120を動かすと、その動きに連動して仮想カメラ14も動く。その結果、仮想空間11における視界領域15の位置が変化する。これにより、モニタ130に表示される視界画像17は、パノラマ画像13のうち、仮想空間11においてユーザ5が向いた方向の視界領域15に重畳する画像に更新される。ユーザ5は、仮想空間11における所望の方向を視認することができる。
このように、仮想カメラ14の傾きは仮想空間11におけるユーザ5の視線(基準視線16)に相当し、仮想カメラ14が配置される位置は、仮想空間11におけるユーザ5の視点に相当する。したがって、仮想カメラ14の位置または傾きを変更することにより、モニタ130に表示される画像が更新され、ユーザ5の視界が移動される。
ユーザ5は、HMD120を装着している間、現実世界を視認することなく、仮想空間11に展開されるパノラマ画像13のみを視認できる。そのため、HMDシステム100は、仮想空間11への高い没入感覚をユーザ5に与えることができる。
ある局面において、プロセッサ210は、HMD120を装着したユーザ5の現実空間における移動に連動して、仮想空間11において仮想カメラ14を移動し得る。この場合、プロセッサ210は、仮想空間11における仮想カメラ14の位置および傾きに基づいて、HMD120のモニタ130に投影される画像領域(視界領域15)を特定する。
ある局面において、仮想カメラ14は、2つの仮想カメラ、すなわち、右目用の画像を提供するための仮想カメラと、左目用の画像を提供するための仮想カメラとを含み得る。ユーザ5が3次元の仮想空間11を認識できるように、適切な視差が、2つの仮想カメラに設定される。別の局面において、仮想カメラ14を1つの仮想カメラにより実現してもよい。この場合、1つの仮想カメラにより得られた画像から、右目用の画像と左目用の画像とを生成するようにしてもよい。本実施の形態においては、仮想カメラ14が2つの仮想カメラを含み、2つの仮想カメラのロール軸が合成されることによって生成されるロール軸(w)がHMD120のロール軸(w)に適合されるように構成されているものとして、本開示に係る技術思想を例示する。
[コントローラ]
図8を参照して、コントローラ300の一例について説明する。図8は、ある実施の形態に従うコントローラ300の概略構成を表す図である。
図8に示されるように、ある局面において、コントローラ300は、右コントローラ300Rと図示せぬ左コントローラとを含み得る。右コントローラ300Rは、ユーザ5の右手で操作される。左コントローラは、ユーザ5の左手で操作される。ある局面において、右コントローラ300Rと左コントローラとは、別個の装置として対称に構成される。したがって、ユーザ5は、右コントローラ300Rを把持した右手と、左コントローラを把持した左手とをそれぞれ自由に動かすことができる。別の局面において、コントローラ300は両手の操作を受け付ける一体型のコントローラであってもよい。以下、右コントローラ300Rについて説明する。
右コントローラ300Rは、グリップ310と、フレーム320と、天面330とを備える。グリップ310は、ユーザ5の右手によって把持されるように構成されている。たとえば、グリップ310は、ユーザ5の右手の掌と3本の指(中指、薬指、小指)とによって保持され得る。
グリップ310は、ボタン340,350と、モーションセンサ420とを含む。ボタン340は、グリップ310の側面に配置され、右手の中指による操作を受け付ける。ボタン350は、グリップ310の前面に配置され、右手の人差し指による操作を受け付ける。ある局面において、ボタン340,350は、トリガー式のボタンとして構成される。モーションセンサ420は、グリップ310の筐体に内蔵されている。ユーザ5の動作がカメラその他の装置によってユーザ5の周りから検出可能である場合には、グリップ310は、モーションセンサ420を備えなくてもよい。
フレーム320は、その円周方向に沿って配置された複数の赤外線LED360を含む。赤外線LED360は、コントローラ300を使用するプログラムの実行中に、当該プログラムの進行に合わせて赤外線を発光する。赤外線LED360から発せられた赤外線は、右コントローラ300Rと左コントローラとの各位置や姿勢(傾き、向き)を検出するために使用され得る。図8に示される例では、二列に配置された赤外線LED360が示されているが、配列の数は図8に示されるものに限られない。一列あるいは3列以上の配列が使用されてもよい。
天面330は、ボタン370,380と、アナログスティック390とを備える。ボタン370,380は、プッシュ式ボタンとして構成される。ボタン370,380は、ユーザ5の右手の親指による操作を受け付ける。アナログスティック390は、ある局面において、初期位置(ニュートラルの位置)から360度任意の方向への操作を受け付ける。当該操作は、たとえば、仮想空間11に配置されるオブジェクトを移動するための操作を含む。
ある局面において、右コントローラ300Rおよび左コントローラは、赤外線LED360その他の部材を駆動するための電池を含む。電池は、充電式、ボタン型、乾電池型などを含むが、これらに限定されない。別の局面において、右コントローラ300Rと左コントローラは、たとえば、コンピュータ200のUSBインターフェースに接続され得る。この場合、右コントローラ300Rおよび左コントローラは、電池を必要としない。
図8の状態(A)および状態(B)に示されるように、例えば、ユーザ5の右手に対して、ヨー、ロール、ピッチの各方向が規定される。ユーザ5が親指と人差し指とを伸ばした場合に、親指の伸びる方向がヨー方向、人差し指の伸びる方向がロール方向、ヨー方向の軸およびロール方向の軸によって規定される平面に垂直な方向がピッチ方向として規定される。
[サーバのハードウェア構成]
図9を参照して、本実施の形態に係るサーバ600について説明する。図9は、ある実施の形態に従うサーバ600のハードウェア構成の一例を表すブロック図である。サーバ600は、主たる構成要素として、プロセッサ610と、メモリ620と、ストレージ630と、入出力インターフェイス640と、通信インターフェイス650とを備える。各構成要素は、それぞれ、バス660に接続されている。
プロセッサ610は、サーバ600に与えられる信号に基づいて、あるいは、予め定められた条件が成立したことに基づいて、メモリ620またはストレージ630に格納されているプログラムに含まれる一連の命令を実行する。ある局面において、プロセッサ610は、CPU、GPU、MPU、FPGAその他のデバイスとして実現される。
メモリ620は、プログラムおよびデータを一時的に保存する。プログラムは、例えば、ストレージ630からロードされる。データは、サーバ600に入力されたデータと、プロセッサ610によって生成されたデータとを含む。ある局面において、メモリ620は、RAMその他の揮発メモリとして実現される。
ストレージ630は、プログラムおよびデータを永続的に保持する。ストレージ630は、例えば、ROM、ハードディスク装置、フラッシュメモリ、その他の不揮発記憶装置として実現される。ストレージ630に格納されるプログラムは、HMDシステム100において仮想空間を提供するためのプログラム、シミュレーションプログラム、ゲームプログラム、ユーザ認証プログラム、コンピュータ200との通信を実現するためのプログラムを含んでもよい。ストレージ630に格納されるデータは、仮想空間を規定するためのデータおよびオブジェクト等を含んでもよい。
別の局面において、ストレージ630は、メモリカードのように着脱可能な記憶装置として実現されてもよい。さらに別の局面において、サーバ600に内蔵されたストレージ630の代わりに、外部の記憶装置に保存されているプログラムおよびデータを使用する構成が使用されてもよい。このような構成によれば、例えば、アミューズメント施設のように複数のHMDシステム100が使用される場面において、プログラムやデータの更新を一括して行うことが可能になる。
入出力インターフェイス640は、入出力機器との間で信号を通信する。ある局面において、入出力インターフェイス640は、USB、DVI、HDMIその他の端子を用いて実現される。入出力インターフェイス640は上述のものに限られない。
通信インターフェイス650は、ネットワーク2に接続されて、ネットワーク2に接続されているコンピュータ200と通信する。ある局面において、通信インターフェイス650は、例えば、LANその他の有線通信インターフェイス、あるいは、WiFi、Bluetooth、NFCその他の無線通信インターフェイスとして実現される。通信インターフェイス650は上述のものに限られない。
ある局面において、プロセッサ610は、ストレージ630にアクセスし、ストレージ630に格納されている1つ以上のプログラムをメモリ620にロードし、当該プログラムに含まれる一連の命令を実行する。当該1つ以上のプログラムは、サーバ600のオペレーティングシステム、仮想空間を提供するためのアプリケーションプログラム、仮想空間で実行可能なゲームソフトウェア等を含み得る。プロセッサ610は、入出力インターフェイス640を介して、仮想空間を提供するための信号をコンピュータ200に送ってもよい。
[HMDの制御装置]
図10を参照して、HMD120の制御装置について説明する。ある実施の形態において、制御装置は周知の構成を有するコンピュータ200によって実現される。図10は、ある実施の形態に従うコンピュータ200をモジュール構成として表すブロック図である。
図10に示されるように、コンピュータ200は、コントロールモジュール510と、レンダリングモジュール520と、メモリモジュール530と、通信制御モジュール540とを備える。ある局面において、コントロールモジュール510とレンダリングモジュール520とは、プロセッサ210によって実現される。別の局面において、複数のプロセッサ210がコントロールモジュール510とレンダリングモジュール520として作動してもよい。メモリモジュール530は、メモリ220またはストレージ230によって実現される。通信制御モジュール540は、通信インターフェイス250によって実現される。
コントロールモジュール510は、ユーザ5に提供される仮想空間11を制御する。コントロールモジュール510は、仮想空間11を表す仮想空間データを用いて、HMDシステム100における仮想空間11を規定する。仮想空間データは、例えば、メモリモジュール530に記憶されている。コントロールモジュール510が、仮想空間データを生成したり、サーバ600などから仮想空間データを取得するようにしたりしてもよい。
コントロールモジュール510は、オブジェクトを表すオブジェクトデータを用いて、仮想空間11にオブジェクトを配置する。オブジェクトデータは、例えば、メモリモジュール530に記憶されている。コントロールモジュール510が、オブジェクトデータを生成したり、サーバ600などからオブジェクトデータを取得するようにしたりしてもよい。オブジェクトは、例えば、ユーザ5の分身であるアバターオブジェクト、キャラクタオブジェクト、コントローラ300によって操作される仮想手などの操作オブジェクト、ゲームのストーリーの進行に従って配置される森、山その他を含む風景、街並み、動物等を含み得る。
コントロールモジュール510は、ネットワーク2を介して接続される他のコンピュータ200のユーザ5のアバターオブジェクトを仮想空間11に配置する。ある局面において、コントロールモジュール510は、ユーザ5のアバターオブジェクトを仮想空間11に配置する。ある局面において、コントロールモジュール510は、ユーザ5を含む画像に基づいて、ユーザ5を模したアバターオブジェクトを仮想空間11に配置する。別の局面において、コントロールモジュール510は、複数種類のアバターオブジェクト(例えば、動物を模したオブジェクトや、デフォルメされた人のオブジェクト)の中からユーザ5による選択を受け付けたアバターオブジェクトを仮想空間11に配置する。
コントロールモジュール510は、HMDセンサ410の出力に基づいてHMD120の傾きを特定する。別の局面において、コントロールモジュール510は、モーションセンサとして機能するセンサ190の出力に基づいてHMD120の傾きを特定する。コントロールモジュール510は、第1カメラ150および第2カメラ160が生成するユーザ5の顔の画像から、ユーザ5の顔を構成する器官(例えば、口,目,眉)を検出する。コントロールモジュール510は、検出した各器官の動き(形状)を検出する。
コントロールモジュール510は、注視センサ140からの信号に基づいて、ユーザ5の仮想空間11における視線を検出する。コントロールモジュール510は、検出したユーザ5の視線と仮想空間11の天球とが交わる視点位置(XYZ座標系における座標値)を検出する。より具体的には、コントロールモジュール510は、uvw座標系で規定されるユーザ5の視線と、仮想カメラ14の位置および傾きとに基づいて、視点位置を検出する。コントロールモジュール510は、検出した視点位置をサーバ600に送信する。別の局面において、コントロールモジュール510は、ユーザ5の視線を表す視線情報をサーバ600に送信するように構成されてもよい。係る場合、サーバ600が受信した視線情報に基づいて視点位置を算出し得る。
コントロールモジュール510は、HMDセンサ410が検出するHMD120の動きをアバターオブジェクトに反映する。例えば、コントロールモジュール510は、HMD120が傾いたことを検知して、アバターオブジェクトを傾けて配置する。コントロールモジュール510は、検出した顔器官の動作を、仮想空間11に配置されるアバターオブジェクトの顔に反映させる。コントロールモジュール510は、サーバ600から他のユーザ5の視線情報を受信し、当該他のユーザ5のアバターオブジェクトの視線に反映させる。ある局面において、コントロールモジュール510は、コントローラ300の動きをアバターオブジェクトや操作オブジェクトに反映する。この場合、コントローラ300は、コントローラ300の動きを検知するためのモーションセンサ、加速度センサ、または複数の発光素子(例えば、赤外線LED)などを備える。
コントロールモジュール510は、仮想空間11においてユーザ5の操作を受け付けるための操作オブジェクトを仮想空間11に配置する。ユーザ5は、操作オブジェクトを操作することにより、例えば、仮想空間11に配置されるオブジェクトを操作する。ある局面において、操作オブジェクトは、例えば、ユーザ5の手に相当する仮想手である手オブジェクト等を含み得る。ある局面において、コントロールモジュール510は、モーションセンサ420の出力に基づいて現実空間におけるユーザ5の手の動きに連動するように仮想空間11において手オブジェクトを動かす。ある局面において、操作オブジェクトは、アバターオブジェクトの手の部分に相当し得る。
コントロールモジュール510は、仮想空間11に配置されるオブジェクトのそれぞれが、他のオブジェクトと衝突した場合に、当該衝突を検出する。コントロールモジュール510は、例えば、あるオブジェクトのコリジョンエリアと、別のオブジェクトのコリジョンエリアとが触れたタイミングを検出することができ、当該検出がされたときに、予め定められた処理を行う。コントロールモジュール510は、オブジェクトとオブジェクトとが触れている状態から離れたタイミングを検出することができ、当該検出がされたときに、予め定められた処理を行う。コントロールモジュール510は、オブジェクトとオブジェクトとが触れている状態であることを検出することができる。例えば、コントロールモジュール510は、操作オブジェクトと、他のオブジェクトとが触れたときに、これら操作オブジェクトと他のオブジェクトとが触れたことを検出して、予め定められた処理を行う。
ある局面において、コントロールモジュール510は、HMD120のモニタ130における画像表示を制御する。例えば、コントロールモジュール510は、仮想空間11に仮想カメラ14を配置する。コントロールモジュール510は、仮想空間11における仮想カメラ14の位置と、仮想カメラ14の傾き(向き)を制御する。コントロールモジュール510は、HMD120を装着したユーザ5の頭の傾きと、仮想カメラ14の位置に応じて、視界領域15を規定する。レンダリングモジュール520は、決定された視界領域15に基づいて、モニタ130に表示される視界画像17を生成する。レンダリングモジュール520により生成された視界画像17は、通信制御モジュール540によってHMD120に出力される。
コントロールモジュール510は、HMD120から、ユーザ5のマイク170を用いた発話を検出すると、当該発話に対応する音声データの送信対象のコンピュータ200を特定する。音声データは、コントロールモジュール510によって特定されたコンピュータ200に送信される。コントロールモジュール510は、ネットワーク2を介して他のユーザのコンピュータ200から音声データを受信すると、当該音声データに対応する音声(発話)をスピーカ180から出力する。
メモリモジュール530は、コンピュータ200が仮想空間11をユーザ5に提供するために使用されるデータを保持している。ある局面において、メモリモジュール530は、空間情報と、オブジェクト情報と、ユーザ情報とを保持している。
空間情報は、仮想空間11を提供するために規定された1つ以上のテンプレートを保持している。
オブジェクト情報は、仮想空間11を構成する複数のパノラマ画像13、仮想空間11にオブジェクトを配置するためのオブジェクトデータを含む。パノラマ画像13は、静止画像および動画像を含み得る。パノラマ画像13は、非現実空間の画像と現実空間の画像とを含み得る。非現実空間の画像としては、例えば、コンピュータグラフィックスで生成された画像が挙げられる。
ユーザ情報は、ユーザ5を識別するユーザIDを保持する。ユーザIDは、例えば、ユーザが使用するコンピュータ200に設定されるIP(Internet Protocol)アドレスまたはMAC(Media Access Control)アドレスであり得る。別の局面において、ユーザIDはユーザによって設定され得る。ユーザ情報は、HMDシステム100の制御装置としてコンピュータ200を機能させるためのプログラム等を含む。
メモリモジュール530に格納されているデータおよびプログラムは、HMD120のユーザ5によって入力される。あるいは、プロセッサ210が、当該コンテンツを提供する事業者が運営するコンピュータ(例えば、サーバ600)からプログラムあるいはデータをダウンロードして、ダウンロードされたプログラムあるいはデータをメモリモジュール530に格納する。
通信制御モジュール540は、ネットワーク2を介して、サーバ600その他の情報通信装置と通信し得る。
ある局面において、コントロールモジュール510およびレンダリングモジュール520は、例えば、ユニティテクノロジーズ社によって提供されるUnity(登録商標)を用いて実現され得る。別の局面において、コントロールモジュール510およびレンダリングモジュール520は、各処理を実現する回路素子の組み合わせとしても実現され得る。
コンピュータ200における処理は、ハードウェアと、プロセッサ210により実行されるソフトウェアとによって実現される。このようなソフトウェアは、ハードディスクその他のメモリモジュール530に予め格納されている場合がある。ソフトウェアは、CD−ROMその他のコンピュータ読み取り可能な不揮発性のデータ記録媒体に格納されて、プログラム製品として流通している場合もある。あるいは、当該ソフトウェアは、インターネットその他のネットワークに接続されている情報提供事業者によってダウンロード可能なプログラム製品として提供される場合もある。このようなソフトウェアは、光ディスク駆動装置その他のデータ読取装置によってデータ記録媒体から読み取られて、あるいは、通信制御モジュール540を介してサーバ600その他のコンピュータからダウンロードされた後、記憶モジュールに一旦格納される。そのソフトウェアは、プロセッサ210によって記憶モジュールから読み出され、実行可能なプログラムの形式でRAMに格納される。プロセッサ210は、そのプログラムを実行する。
[HMDシステムの制御構造]
図11を参照して、HMDセット110の制御構造について説明する。図11は、ある実施の形態に従うHMDセット110において実行される処理の一部を表すシーケンスチャートである。
図11に示されるように、ステップS1110にて、コンピュータ200のプロセッサ210は、コントロールモジュール510として、仮想空間データを特定し、仮想空間11を定義する。
ステップS1120にて、プロセッサ210は、仮想カメラ14を初期化する。たとえば、プロセッサ210は、メモリのワーク領域において、仮想カメラ14を仮想空間11において予め規定された中心12に配置し、仮想カメラ14の視線をユーザ5が向いている方向に向ける。
ステップS1130にて、プロセッサ210は、レンダリングモジュール520として、初期の視界画像を表示するための視界画像データを生成する。生成された視界画像データは、通信制御モジュール540によってHMD120に出力される。
ステップS1132にて、HMD120のモニタ130は、コンピュータ200から受信した視界画像データに基づいて、視界画像を表示する。HMD120を装着したユーザ5は、視界画像を視認すると仮想空間11を認識し得る。
ステップS1134にて、HMDセンサ410は、HMD120から発信される複数の赤外線光に基づいて、HMD120の位置と傾きを検知する。検知結果は、動き検知データとして、コンピュータ200に出力される。
ステップS1140にて、プロセッサ210は、HMD120の動き検知データに含まれる位置と傾きとに基づいて、HMD120を装着したユーザ5の視界方向を特定する。
ステップS1150にて、プロセッサ210は、アプリケーションプログラムを実行し、アプリケーションプログラムに含まれる命令に基づいて、仮想空間11にオブジェクトを配置する。
ステップS1160にて、コントローラ300は、モーションセンサ420から出力される信号に基づいて、ユーザ5の操作を検出し、その検出された操作を表す検出データをコンピュータ200に出力する。別の局面において、ユーザ5によるコントローラ300の操作は、ユーザ5の周囲に配置されたカメラからの画像に基づいて検出されてもよい。
ステップS1170にて、プロセッサ210は、コントローラ300から取得した検出データに基づいて、ユーザ5によるコントローラ300の操作を検出する。
ステップS1180にて、プロセッサ210は、ユーザ5によるコントローラ300の操作に基づく視界画像データを生成する。生成された視界画像データは、通信制御モジュール540によってHMD120に出力される。
ステップS1190にて、HMD120は、受信した視界画像データに基づいて視界画像を更新し、更新後の視界画像をモニタ130に表示する。
[アバターオブジェクト]
図12(A)、(B)を参照して、本実施の形態に従うアバターオブジェクトについて説明する。以下、HMDセット110A,110Bの各ユーザ5のアバターオブジェクトを説明する図である。以下、HMDセット110Aのユーザをユーザ5A、HMDセット110Bのユーザをユーザ5B、HMDセット110Cのユーザをユーザ5C、HMDセット110Dのユーザをユーザ5Dと表す。HMDセット110Aに関する各構成要素の参照符号にAが付され、HMDセット110Bに関する各構成要素の参照符号にBが付され、HMDセット110Cに関する各構成要素の参照符号にCが付され、HMDセット110Dに関する各構成要素の参照符号にDが付される。例えば、HMD120Aは、HMDセット110Aに含まれる。
図12(A)は、ネットワーク2において、各HMD120がユーザ5に仮想空間11を提供する状況を表す模式図である。コンピュータ200A〜200Dは、HMD120A〜120Dを介して、ユーザ5A〜5Dに、仮想空間11A〜11Dをそれぞれ提供する。図12(A)に示される例において、仮想空間11Aおよび仮想空間11Bは同じデータによって構成されている。換言すれば、コンピュータ200Aとコンピュータ200Bとは同じ仮想空間を共有していることになる。仮想空間11Aおよび仮想空間11Bには、ユーザ5Aのアバターオブジェクト6Aと、ユーザ5Bのアバターオブジェクト6Bとが存在する。仮想空間11Aにおけるアバターオブジェクト6Aおよび仮想空間11Bにおけるアバターオブジェクト6BがそれぞれHMD120を装着しているが、これは説明を分かりやすくするためのものであって、実際にはこれらのオブジェクトはHMD120を装着していない。
ある局面において、プロセッサ210Aは、ユーザ5Aの視界画像17Aを撮影する仮想カメラ14Aを、アバターオブジェクト6Aの目の位置に配置し得る。
図12(B)は、図12(A)におけるユーザ5Aの視界画像17Aを示す図である。視界画像17Aは、HMD120Aのモニタ130Aに表示される画像である。この視界画像17Aは、仮想カメラ14Aにより生成された画像である。視界画像17Aには、ユーザ5Bのアバターオブジェクト6Bが表示されている。特に図示はしていないが、ユーザ5Bの視界画像にも同様に、ユーザ5Aのアバターオブジェクト6Aが表示されている。
図12(B)の状態において、ユーザ5Aは仮想空間11Aを介してユーザ5Bと対話による通信(コミュニケーション)を図ることができる。より具体的には、マイク170Aにより取得されたユーザ5Aの音声は、サーバ600を介してユーザ5BのHMD120Bに送信され、HMD120Bに設けられたスピーカ180Bから出力される。ユーザ5Bの音声は、サーバ600を介してユーザ5AのHMD120Aに送信され、HMD120Aに設けられたスピーカ180Aから出力される。
ユーザ5Bの動作(HMD120Bの動作およびコントローラ300Bの動作)は、プロセッサ210Aにより仮想空間11Aに配置されるアバターオブジェクト6Bに反映される。これにより、ユーザ5Aは、ユーザ5Bの動作を、アバターオブジェクト6Bを通じて認識できる。
図13は、本実施の形態に従うHMDシステム100において実行される処理の一部を表すシーケンスチャートである。図13においては、HMDセット110Dを図示していないが、HMDセット110Dについても、HMDセット110A、110B、110Cと同様に動作する。以下の説明でも、HMDセット110Aに関する各構成要素の参照符号にAが付され、HMDセット110Bに関する各構成要素の参照符号にBが付され、HMDセット110Cに関する各構成要素の参照符号にCが付され、HMDセット110Dに関する各構成要素の参照符号にDが付されるものとする。
ステップS1310Aにおいて、HMDセット110Aにおけるプロセッサ210Aは、仮想空間11Aにおけるアバターオブジェクト6Aの動作を決定するためのアバター情報を取得する。このアバター情報は、例えば、動き情報、フェイストラッキングデータ、および音声データ等のアバターに関する情報を含む。動き情報は、HMD120Aの位置および傾きの時間的変化を示す情報や、モーションセンサ420A等により検出されたユーザ5Aの手の動きを示す情報などを含む。フェイストラッキングデータは、ユーザ5Aの顔の各パーツの位置および大きさを特定するデータが挙げられる。フェイストラッキングデータは、ユーザ5Aの顔を構成する各器官の動きを示すデータや視線データが挙げられる。音声データは、HMD120Aのマイク170Aによって取得されたユーザ5Aの音声を示すデータが挙げられる。アバター情報には、アバターオブジェクト6A、あるいはアバターオブジェクト6Aに関連付けられるユーザ5Aを特定する情報や、アバターオブジェクト6Aが存在する仮想空間11Aを特定する情報等が含まれてもよい。アバターオブジェクト6Aやユーザ5Aを特定する情報としては、ユーザIDが挙げられる。アバターオブジェクト6Aが存在する仮想空間11Aを特定する情報としては、ルームIDが挙げられる。プロセッサ210Aは、上述のように取得されたアバター情報を、ネットワーク2を介してサーバ600に送信する。
ステップS1310Bにおいて、HMDセット110Bにおけるプロセッサ210Bは、ステップS1310Aにおける処理と同様に、仮想空間11Bにおけるアバターオブジェクト6Bの動作を決定するためのアバター情報を取得し、サーバ600に送信する。同様に、ステップS1310Cにおいて、HMDセット110Cにおけるプロセッサ210Cは、仮想空間11Cにおけるアバターオブジェクト6Cの動作を決定するためのアバター情報を取得し、サーバ600に送信する。
ステップS1320において、サーバ600は、HMDセット110A、HMDセット110B、およびHMDセット110Cのそれぞれから受信したプレイヤ情報を一旦記憶する。サーバ600は、各アバター情報に含まれるユーザIDおよびルームID等に基づいて、共通の仮想空間11に関連付けられた全ユーザ(この例では、ユーザ5A〜5C)のアバター情報を統合する。そして、サーバ600は、予め定められたタイミングで、統合したアバター情報を当該仮想空間11に関連付けられた全ユーザに送信する。これにより、同期処理が実行される。このような同期処理により、HMDセット110A、HMDセット110B、およびHMD110Cは、互いのアバター情報をほぼ同じタイミングで共有することができる。
続いて、サーバ600から各HMDセット110A〜110Cに送信されたアバター情報に基づいて、各HMDセット110A〜110Cは、ステップS1330A〜S1330Cの処理を実行する。ステップS1330Aの処理は、図11におけるステップS1180の処理に相当する。
ステップS1330Aにおいて、HMDセット110Aにおけるプロセッサ210Aは、仮想空間11Aにおける他のユーザ5B,5Cのアバターオブジェクト6B、アバターオブジェクト6Cの情報を更新する。具体的には、プロセッサ210Aは、HMDセット110Bから送信されたアバター情報に含まれる動き情報に基づいて、仮想空間11におけるアバターオブジェクト6Bの位置および向き等を更新する。例えば、プロセッサ210Aは、メモリモジュール530に格納されたオブジェクト情報に含まれるアバターオブジェクト6Bの情報(位置および向き等)を更新する。同様に、プロセッサ210Aは、HMDセット110Cから送信されたアバター情報に含まれる動き情報に基づいて、仮想空間11におけるアバターオブジェクト6Cの情報(位置および向き等)を更新する。
ステップS1330Bにおいて、HMDセット110Bにおけるプロセッサ210Bは、ステップS1330Aにおける処理と同様に、仮想空間11Bにおけるユーザ5A,5Cのアバターオブジェクト6A,6Cの情報を更新する。同様に、ステップS1330Cにおいて、HMDセット110Cにおけるプロセッサ210Cは、仮想空間11Cにおけるユーザ5A,5Bのアバターオブジェクト6A,6Bの情報を更新する。
[モジュールの詳細構成]
図14を参照して、コンピュータ200のモジュール構成の詳細について説明する。図14は、ある実施の形態に従うコンピュータ200のモジュールの詳細構成を表すブロック図である。
図14に示されるように、コントロールモジュール510は、仮想カメラ制御モジュール1421と、視界領域決定モジュール1422と、基準視線特定モジュール1423と、顔器官検出モジュール1424と、動き検出モジュール1425と、仮想空間定義モジュール1426と、仮想オブジェクト生成モジュール1427と、操作オブジェクト制御モジュール1428と、アバター制御モジュール1429と、を備える。レンダリングモジュール520は、視界画像生成モジュール1438を備える。メモリモジュール530は、空間情報1431と、オブジェクト情報1432と、ユーザ情報1433と、顔情報1434と、を保持している。
仮想カメラ制御モジュール1421は、仮想空間11に仮想カメラ14を配置する。仮想カメラ制御モジュール1421は、仮想空間11における仮想カメラ14の配置位置と、仮想カメラ14の向き(傾き)を制御する。視界領域決定モジュール1422は、HMD120を装着したユーザの頭の向きと、仮想カメラ14の配置位置に応じて、視界領域15を規定する。視界画像生成モジュール1438は、決定された視界領域15に基づいて、モニタ130に表示される視界画像17を生成する。
基準視線特定モジュール1423は、注視センサ140からの信号に基づいて、ユーザ5の視線を特定する。顔器官検出モジュール1424は、第1カメラ150および第2カメラ160が生成するユーザ5の顔の画像から、ユーザ5の顔を構成する器官(例えば、口,目,眉)を検出する。動き検出モジュール1425は、顔器官検出モジュール1424が検出した各器官の動き(形状)を検出する。図15〜図18において、顔器官検出モジュール1424および動き検出モジュール1425の制御内容は後述される。
仮想空間定義モジュール1426は、仮想空間11を表す仮想空間データを生成することにより、HMDシステム100における仮想空間11を規定する。
仮想オブジェクト生成モジュール1427は、仮想空間11に配置されるオブジェクトを生成する。オブジェクトは、例えば、ゲームのストーリーの進行に従って配置される森、山その他を含む風景、動物等を含み得る。
操作オブジェクト制御モジュール1428は、仮想空間11においてユーザの操作を受け付けるための操作オブジェクトを仮想空間11に配置する。ユーザは、操作オブジェクトを操作することにより、例えば、仮想空間11に配置されるオブジェクトを操作する。ある局面において、操作オブジェクトは、例えば、HMD120を装着したユーザの手に相当する手オブジェクト等を含み得る。ある局面において、操作オブジェクトは、後述するアバターオブジェクトの手の部分に相当し得る。
アバター制御モジュール1429は、ネットワーク2を介して接続される他のコンピュータ200のユーザのアバターオブジェクトを仮想空間11に配置するためのデータを生成する。ある局面において、アバター制御モジュール1429は、ユーザ5のアバターオブジェクトを仮想空間11に配置するためのデータを生成する。ある局面において、アバター制御モジュール1429は、ユーザ5を含む画像に基づいて、ユーザ5を模したアバターオブジェクトを生成する。別の局面において、アバター制御モジュール1429は、複数種類のアバターオブジェクト(例えば、動物を模したオブジェクトや、デフォルメされた人のオブジェクト)の中からユーザ5による選択を受け付けたアバターオブジェクトを仮想空間11に配置するためのデータを生成する。
アバター制御モジュール1429は、HMDセンサ410が検出するHMD120の動きをアバターオブジェクトに反映する。例えば、アバター制御モジュール1429は、HMD120が傾いたことを検知して、アバターオブジェクトを傾けて配置するためのデータを生成する。ある局面において、アバター制御モジュール1429は、コントローラ300の動きをアバターオブジェクトに反映する。この場合、コントローラ300は、コントローラ300の動きを検知するためのモーションセンサ、加速度センサ、または複数の発光素子(例えば、赤外線LED)などを備える。アバター制御モジュール1429は、動き検出モジュール1425が検出した顔器官の動作を、仮想空間11に配置されるアバターオブジェクトの顔に反映させる。つまり、アバター制御モジュール1429は、ユーザ5Aの顔の動作をアバターオブジェクトに反映する。
コントロールモジュール510は、仮想空間11に配置されるオブジェクトのそれぞれが、他のオブジェクトと衝突した場合に、当該衝突を検出する。コントロールモジュール510は、例えば、あるオブジェクトと、別のオブジェクトとが触れたタイミングを検出することができ、当該検出がされたときに、予め定められた処理を行う。コントロールモジュール510は、オブジェクトとオブジェクトとが触れている状態から離れたタイミングを検出することができ、当該検出がされたときに、予め定められた処理を行う。コントロールモジュール510は、オブジェクトとオブジェクトとが触れている状態であることを検出することができる。具体的には、操作オブジェクト制御モジュール1428は、操作オブジェクトと、他のオブジェクトとが触れたときに、これら操作オブジェクトと他のオブジェクトとが触れたことを検出して、予め定められた処理を行う。
メモリモジュール530は、コンピュータ200が仮想空間11をユーザ5に提供するために使用されるデータを保持している。ある局面において、メモリモジュール530は、空間情報1431と、オブジェクト情報1432と、ユーザ情報1433と、顔情報1434とを保持している。
空間情報1431は、仮想空間11を提供するために規定された1つ以上のテンプレートを保持している。
オブジェクト情報1432は、仮想空間11において再生されるコンテンツ、当該コンテンツで使用されるオブジェクト、およびオブジェクトを仮想空間11に配置するための情報(たとえば、位置情報)を保持している。当該コンテンツは、例えば、ゲーム、現実社会と同様の風景を表したコンテンツ等を含み得る。
ユーザ情報1433は、HMDシステム100の制御装置としてコンピュータ200を機能させるためのプログラム、オブジェクト情報1432に保持される各コンテンツを使用するアプリケーションプログラム等を保持している。
顔情報1434は、顔器官検出モジュール1424が、ユーザ5の顔器官を検出するために予め記憶されたテンプレートを保持している。ある局面において、顔情報1434は、口テンプレート1435と、目テンプレート1436と、眉テンプレート1437とを保持する。各テンプレートは、顔を構成する器官に対応する画像であり得る。例えば、口テンプレート1435は、口の画像であり得る。各テンプレートは複数の画像を含んでもよい。
[フェイストラッキング]
以下、図15〜図18を参照して、ユーザの表情(顔の動き)を検出するための具体例について説明する。図15〜図18では、一例として、ユーザ5の口の動きを検出する具体例について説明する。なお、図15〜図18で説明される検出方法は、ユーザ5の口の動きに限られず、ユーザ5の顔を構成する他の器官(例えば、目、眉、鼻、頬)の動きの検出にも適用され得る。
図15は、ユーザの顔画像1521から口を検出する制御について説明する図である。第1カメラ150により生成された顔画像1521は、ユーザ5の鼻と口を含む。
顔器官検出モジュール1424は、顔情報1434に格納される口テンプレート1435を利用したパターンマッチングにより、顔画像1521から口領域1531を特定する。ある局面において、顔器官検出モジュール1424は、顔画像において、矩形上の比較領域を設定し、この比較領域の大きさ、位置および角度をそれぞれ変えながら、比較領域の画像と、口テンプレート1435の画像との類似度を算出する。顔器官検出モジュール1424は、予め定められたしきい値よりも大きい類似度が算出された比較領域を、口領域1531として特定し得る。
顔器官検出モジュール1424はさらに、算出した類似度がしきい値よりも大きい比較領域の位置と、他の顔器官(例えば、目、鼻)の位置との相対関係に基づいて、当該比較領域が口領域に相当するか否かを判断し得る。
動き検出モジュール1425は、顔器官検出モジュール1424が検出した口領域1531から、より詳細な口の形状を検出する。
図16は、動き検出モジュール1425が口の形状を検出する処理を説明する図(その1)である。図16を参照して、動き検出モジュール1425は、口領域1531に含まれる口の形状(唇の輪郭)を検出するための輪郭検出線1641を設定する。輪郭検出線1641は、顔の高さ方向に直交する方向に、所定間隔で複数本設定される。
動き検出モジュール1425は、複数本の輪郭検出線1641の各々に沿った口領域1531の輝度値の変化を検出し、輝度値の変化が急激な位置を輪郭点として特定し得る。より具体的には、動き検出モジュール1425は、隣接画素との輝度差(すなわち、輝度値変化)が予め定められたしきい値以上である画素を、輪郭点として特定し得る。画素の輝度値は、例えば、画素のRBG値を所定の重み付けで積算することにより得られる。
動き検出モジュール1425は、口領域1531に対応する画像から2種類の輪郭点を特定する。動き検出モジュール1425は、口(唇)の外側の輪郭に対応する輪郭点1642と、口(唇)の内側の輪郭に対応する輪郭点1643とを特定する。ある局面において、動き検出モジュール1425は、1つの輪郭検出線1641上に3つ以上の輪郭点が検出された場合には、両端の輪郭点を外側の輪郭点1642として特定し得る。この場合、動き検出モジュール1425は、外側の輪郭点1642以外の輪郭点を、内側の輪郭点1643として特定し得る。また、動き検出モジュール1425は、1つの輪郭検出線1641上に2つ以下の輪郭点が検出された場合には、検出された輪郭点を外側の輪郭点1642として特定し得る。
図17は、動き検出モジュール1425が口の形状を検出する処理を説明するための図(その2)である。図17では、外側の輪郭点1642は白丸、内側の輪郭点1643はハッチングされた丸としてそれぞれ示されている。
動き検出モジュール1425は、内側の輪郭点1643間を補間することにより、口形状1721を特定する。ある局面において、動き検出モジュール1425は、スプライン補間などの非線形の補間方法を用いて、口形状1721を特定し得る。なお、他の局面において、動き検出モジュール1425は、外側の輪郭点1642間を補間することにより口形状1721を特定してもよい。さらに他の局面において、動き検出モジュール1425は、想定される口形状(人の上唇と下唇とによって形成され得る所定の形状)から、大きく逸脱する輪郭点を除外し、残った輪郭点によって口形状1721を特定してもよい。このようにして、動き検出モジュール1425は、ユーザの口の動作(形状)を特定し得る。なお、口形状1721の検出方法は上記に限られず、動き検出モジュール1425は、他の手法により口形状1721を検出してもよい。また、動き検出モジュール1425は、同様にして、ユーザの目および眉の動作を検出し得る。なお、動き検出モジュール1425は、頬、鼻などの器官の形状を検出可能に構成されてもよい。
図18は、フェイストラッキングデータの構造の一例を表す。動き検出モジュール1425は、ユーザ5の表情を表すフェイストラッキングデータを生成する。フェイストラッキングデータは、検出対象の各器官の形状を構成する特徴点のuvw視野座標系における位置座標を表す。例えば、図18に示されるポイントm1、m2・・は、口形状1721を構成する外側の輪郭点1642に対応する。ある局面において、フェイストラッキングデータは、第1カメラ150の位置を基準(原点)としたuvw視野座標系における座標値である。他の局面において、フェイストラッキングデータは、各器官に予め定められた特徴点を基準(原点)とした座標系における座標値である。一例として、ポイントm1、m2・・は、外側の輪郭点1642のうち口角に対応するいずれか一方の特徴点を原点とした座標系における座標値である。
コンピュータ200は、生成されたフェイストラッキングデータをサーバ600に送信する。サーバ600は、コンピュータ200と通信する他のコンピュータ200にこのデータを転送する。他のコンピュータ200は、受信したフェイストラッキングデータを、受信元のコンピュータ200のユーザに対応するアバターオブジェクトに反映する。
図12(A)に示される例において、コンピュータ200Aは、コンピュータ200Bからユーザ5Bの表情を表すフェイストラッキングデータを受信する。コンピュータ200Aは、受信したデータをアバターオブジェクト6Bに反映する。一例として、アバターオブジェクト6Bを構成するポリゴンの頂点のうち、フェイストラッキングデータに対応する頂点が設定されている。コンピュータ200Aは、対応する頂点の位置をフェイストラッキングデータに基づいて移動する。これにより、ユーザ5Bの表情がアバターオブジェクト6Bに反映される。その結果、ユーザ5Aは、アバターオブジェクト6Bを介してユーザ5Bの表情を認識できる。
[音声の解析]
コンピュータ200は、マイク170によってユーザ5の発声音(発話)が検出され、音声信号が入力されると、プロセッサ210により音声信号を解析して発声音の音量または母音を特定する。ストレージ230には、音声解析に使用するデータがあらかじめ保存される。
例えば、プロセッサ210は、音声信号の波形の振幅から音量を特定することができる。また、プロセッサ210は、音声信号の波形から特徴量を抽出し、抽出した特徴量を音響モデルと照合する。音響モデルは、認識対象となる音声を構成するすべての音素の特徴量である。プロセッサ210は、音声解析に使用するデータとして、あらかじめストレージ230に保存された音響モデルを読み出して照合に使用することができる。使用できる特徴量としては、例えばMFCC(Mel-Frequency Cepstrum Coefficient:メル周波数ケプストラム係数)、LPC(Linear Predictive Coding:線形予測符号)等が挙げられる。
プロセッサ210は、音響モデルとの照合により、抽出した特徴量との類似度が最も高い音素を特定する。音素を子音と母音に分けてそれぞれの音響モデルを準備することにより、プロセッサ210は母音の特定が可能である。なお、プロセッサ210によって発声音の音量または母音を特定できるのであれば、音声の解析方法は上記解析方法に限定されず、公知の解析方法を使用することができる。
[360度動画]
ある実施の形態において、仮想空間11とは別に、仮想空間11に関連付けられた1または複数の仮想空間11zが定義され得る。仮想空間11zは、360度動画データによって定義される全天球の空間である。360度動画データは、360度カメラにより撮像され、ストレージ230に保存され得る。コンピュータ200は、プロセッサ210によりストレージ230から360度空間画像データを読み出し、仮想空間11と同様に仮想カメラ14を含む仮想空間11zを定義する仮想空間データを生成する。なお、360度動画データは、ネットワーク2上のコンピュータ、例えばサーバ600等から通信インターフェイス250を介してダウンロードされてもよい。ダウンロードされた360度空間画像データはストレージ230に組み込まれる。
仮想空間11では、関連付けられた複数の仮想空間11zのうちの1つが、ユーザ5のアバターオブジェクト6によって選択され得る。例えば、プロセッサ210が、選択可能な複数の360度動画データにそれぞれ関連付けられた複数の仮想オブジェクトを仮想空間11に配置する。この選択用の仮想オブジェクトは、360度動画のプレビューが再生される水晶玉等の仮想オブジェクト等であってもよい。プロセッサ210は、ユーザ5のアバターオブジェクト6によって選択された1つの仮想オブジェクトに対応する360度動画データをストレージ230から取得し、取得した360度動画データによって仮想空間11zを定義する。
[温度パラメータの設定]
ある実施の形態において、各仮想空間11および11zには、仮想空間11および11zの全部または一部に温度パラメータが設定される。例えば、360度動画によって砂漠地帯を定義する仮想空間11zには、仮想空間11zの全部に40℃の温度パラメータが設定される。また、360度動画によって北極圏を定義する仮想空間11zには、仮想空間11zの全部に−20℃の温度パラメータが設定される。仮想空間11および11zの一部としては、例えば仮想空間11および11zにおいて定義される国や都市等の地域、施設内、地下通路等の空間が挙げられる。
図19は、温度パラメータが設定された仮想空間11の一例を示す。図19に示す例では、仮想空間11のうち、寒い地域に該当する空間1921には−10℃の温度パラメータが設定され、暑い地域に該当する空間1922には35℃の温度パラメータが設定され、それ以外の空間1923には常温の20℃の温度パラメータが設定されている。空間1921のなかでも、施設等の内部に該当する空間1924の温度パラメータは、20℃に設定されている。また、地下空間1925には0℃の温度パラメータが設定されている。
温度パラメータは、仮想空間11および11zの時間軸によって連続的または段階的に変化するパラメータであってもよい。例えば、朝の時間帯は5℃、昼の時間帯は20℃、夜の時間帯は5℃のように、段階的に変化する温度パラメータが設定され得る。
仮想空間11および11zと同様に、ユーザ5のアバターオブジェクト6にも、温度パラメータが設定され得る。アバターオブジェクト6の温度パラメータは、仮想空間11または11zにおいて温度を体感させる目的から、人の体温と同程度の温度、例えば36℃に設定される。
[温度のエフェクトの表示制御]
ある実施の形態において、コンピュータ200におけるプロセッサ210が、仮想空間11の温度を表現するエフェクトをHMD120に表示する制御を行う。温度を表現するエフェクトは、例えば息のエフェクトである。ある局面におけるエフェクトは、3次元のオブジェクトとして仮想空間11に配置され、レンダリングによって視界画像中に描画される。また、ある局面におけるエフェクトは、視界画像の生成時に描画される2次元の画像である。プロセッサ210は、ストレージ230等のメモリに保存されたエフェクトを読み出して使用することができる。また、プロセッサ210は、ネットワーク2上のコンピュータ、例えばサーバ600等から通信インターフェイス250を介して、エフェクトをダウンロードしてもよい。この場合、エフェクトはストレージ230に保存される。
図20は、温度のエフェクトの表示制御時に、プロセッサ210により実行される処理を示すフローチャートである。この処理は、図11に示す処理の一部として実行される。以下、図11に示す処理によって仮想空間11にアバターオブジェクト6が配置された後、図20に示す処理が実行される例を説明するが、仮想空間11にアバターオブジェクト6を配置するのと並行して、図20に示す処理が実行されてもよい。
図20に示すように、ステップS2021において、プロセッサ210は、マイク170によりユーザ5の発声音が検出されたか、または顔器官検出モジュール1424によりユーザ5の口の形状1721が検出されたか否かを判断する。
発声音および口の形状1721の少なくとも1つが検出された場合(ステップS2021でYES)、ステップS2022において、プロセッサ210は、アバターオブジェクト6に設定された温度パラメータを取得する。また、プロセッサ210は、アバターオブジェクト6が配置された仮想空間11から、アバターオブジェクト6の配置位置に設定された温度パラメータを取得する。プロセッサ210は、取得した各温度パラメータの温度差を演算し、演算した温度差が閾値を超えるか否かを判断する。
温度差の閾値は、現実空間において人が吐いた息が白く曇る現象が生じるときの環境温度と人の体温との差によって設定され得る。例えば、人の体温が36℃付近であり、環境温度が13℃以下であると、人が吐いた息が白く曇る現象が生じる場合、温度差の閾値は13℃(36℃−13℃)に設定され得る。仮想空間11の温度パラメータが、アバターオブジェクト6の温度パラメータより13℃以上低い場合に、息のエフェクトを配置することによって、現実空間と同様の現象を仮想空間上で再現することが可能になる。
温度差が閾値を超えると判断された場合(ステップS2022でYES)、ステップS2023において、プロセッサ210は、発声音の音量、母音および口の形状の少なくとも1つに応じて、アバターオブジェクト6に関連付けられる近傍領域に、仮想空間11の温度を表現するエフェクトを配置するか否かを決定する。アバターオブジェクト6に関連付けられる近傍領域は、アバターオブジェクト6の身体の周辺において身体から一定範囲内にある領域であり、あらかじめ設定される。エフェクトが息のエフェクトである場合、息のエフェクトが配置される近傍領域は、アバターオブジェクト6の身体のうち、口に関連付けられる近傍領域である。アバターオブジェクト6の口から一定範囲内にある口の周辺領域が、近傍領域としてアバターオブジェクト6に関連付けられる。
例えば、発声音の音量が閾値以上である場合、発声音の母音が認識できた場合、口の形状1721が開いた形状である場合等に、プロセッサ210は、息のエフェクトを配置することを決定できる。
息のエフェクトの配置が決定された場合(ステップS2023でYES)、ステップS2024において、プロセッサ210は、検出された発声音の音量および口の形状1721の大きさの少なくとも1つに基づいて、息のエフェクトのサイズを制御する。例えば、プロセッサ210は、発声音の音量が大きいほど、または口の形状1721が大きいほど、息のエフェクトの体積、長さ等のサイズを大きくすることができる。
プロセッサ210は、発声音の音量または口の形状1721の大きさに応じて、息のエフェクトのサイズを連続的に変化させてもよいし、段階的に変化させてもよい。プロセッサ210は、連続的に変化させる場合、音量または口の形状1721の大きさに対応する息のエフェクトのサイズがあらかじめ定められた関数を用いて、サイズを決定できる。また、プロセッサ210は、段階的に変化させる場合、音量または口の形状1721の大きさを閾値と比較して、閾値以上であれば閾値未満の場合よりも大きいサイズに決定できる。プロセッサ210は、複数の閾値を用いることにより、複数段階でサイズを変更できる。
ステップS2025において、プロセッサ210は、検出された発声音の母音および口の形状1721の少なくとも1つに基づいて、息のエフェクトの形状、方向および配置位置の少なくとも1つを制御する。プロセッサ210は、例えば発声音の母音が「a」である場合、または口角の間隔が広い口の形状1721である場合は、息のエフェクトを球状または円形状にすることができる。また、プロセッサ210は、息のエフェクトの配置位置を、アバターオブジェクト6の口に関連付けられる近傍領域において、口と一部重なる近い位置にすることができる。
一方、プロセッサ210は、母音が「u」または「o」の場合、または口角の間隔が狭くすぼめた口の形状1721である場合は、息のエフェクトを一方向に延びる細長い形状とすることができる。また、プロセッサ210は、細長い形状の息のエフェクトの長さ方向を口から口の正面に向かう方向とし、息のエフェクトの配置位置をアバターオブジェクト6の口に関連付けられる近傍領域において、口から離れた位置とすることができる。
なお、プロセッサ210は、上記口角が広いか狭いかを、図17において口角に対応する2つの外側の輪郭点1642間の距離を閾値と比較することにより、判断することができる。
ステップS2026において、プロセッサ210は、ステップS2022で演算した温度差に応じて、息のエフェクトの色および濃度の少なくとも1つを制御する。例えば、プロセッサ210は、息のエフェクトの色を白にすることができ、温度差が大きいほど白の濃度を増やすことができる。プロセッサ210は、息のエフェクトの色を、仮想空間11でのアバターオブジェクト6の背景の色と同じ色にして、息のエフェクトの透明度を調整することもできる。
ステップS2027において、プロセッサ210は、仮想カメラ14からの視界に対応する視界画像を表示するための視界画像データを生成する。仮想カメラ14は、仮想空間11に配置された仮想視点である。プロセッサ210は、ユーザ5の動きに応じて、仮想視点からの視界を決定し、視界に対応する視界画像データをレンダンリングによって生成する。
近傍領域への配置が決定されたエフェクトが3次元のオブジェクトである場合、プロセッサ210は、仮想空間11にエフェクトのオブジェクトを配置した後、レンダリングによって視界画像データを生成する。一方、エフェクトが2次元の画像である場合、プロセッサ210は、レンダリングと並行してエフェクトの画像を描画し、視界画像データを生成する。近傍領域へのエフェクトの配置が決定され、仮想視点からの視界内に近傍領域が含まれる場合、視界画像はエフェクトを含む。
プロセッサ210が、生成した視界画像データを出力すると、HMD120は、コンピュータ200から受信した視界画像データに基づいて視界画像を更新し、更新後の視界画像をモニタ130に表示する。
以上のようにして息のエフェクトを含む視界画像を表示させた後、新たに発声音または口の形状1721が検出されると、プロセッサ210は、上記処理を繰り返す。これにより、プロセッサ210は、新たに検出された発声音および口の形状1721に基づいて、新たな息のエフェクトを含む視界画像をHMD120に表示させる。このとき、プロセッサ210は、先に表示された息のエフェクトのサイズ、形状、方向、位置、色および濃度の少なくとも1つを制御してもよい。例えば、プロセッサ210は、先に配置した息のエフェクトを口からさらに離れた位置に移動し、白色の濃度を減らすことができる。これにより、時間経過によって息の蒸気が消えていく現象を再現することができる。
図21は、HMD120に表示される視界画像の一例を示す。図22は、図21に示す視界画像の仮想視点を示す。
図22に示すように、仮想空間11には、ユーザ5Aのアバターオブジェクト6Aと、他のユーザ5Bのアバターオブジェクト6Bが配置されている。また、仮想空間11には仮想カメラ14が配置されている。仮想カメラ14の位置が仮想視点2222に相当し、仮想カメラ14の傾きが基準視線2216に相当する。仮想視点2222はユーザ5Aの視点と同じであり、基準視線2216はユーザ5Aの視線と同じである。視界領域2215は、この仮想視点2222と基準視線2216によって定義される。基準視線2216はユーザ5Aの視線と同じであるため、図21に示すように、一人称視点の視界画像2117がユーザ5AのHMD120Aに表示される。
仮想視点2222からの視界領域2215には、アバターオブジェクト6Aの口に関連付けられた近傍領域2231が含まれる。そのため、近傍領域2231へ息のエフェクトの配置が決定された場合は、図21に示すように、視界画像2117に息のエフェクト2171が含まれる。ユーザ5Aの発声音が大きいため、息のエフェクト2171のサイズも大きい。また、ユーザ5Aの発声音の母音が[a]であるため、息のエフェクト2171は円形状である。
視界領域2215には、他のユーザ5Bのアバターオブジェクト6Bと、アバターオブジェクト6Bの口に関連付けられた近傍領域2232も含まれる。よって、視界画像2117には、他のユーザ5Bのアバター2161と、近傍領域2232に配置された息のエフェクト2172が含まれる。ユーザ5Bの口の形状1721が小さいため、息のエフェクト2172のサイズも小さい。また、ユーザ5Bの口角の間隔が狭い口の形状1721であるため、息のエフェクト2172の形状は細長く、その長さ方向が口から口の正面方向に位置する。
エフェクトを含む視界画像は、上述した仮想視点2222がユーザ5の視点である一人称視点の視点画像だけでなく、仮想視点からの視界にユーザ5のアバターも含まれる三人称視点の視界画像であってもよい。三人称視点の視界画像は、仮想視点2222からの視界にユーザ5のアバターオブジェクト6も含まれる位置に、仮想カメラ14を移動することにより得られる。例えば、一人称視点の仮想カメラ14を、180度回転させて、さらに一人称視点の位置から所定距離だけ離間させることにより、アバターオブジェクト6を正面から視る三人称視点の位置へ仮想カメラ14を移動させることができる。
上記温度のエフェクトの表示制御によれば、仮想空間11において息のエフェクトを含む視界画像がHMD120に表示される。息のエフェクトは、ユーザ5の発声音または口の形状1721に応じて配置され、またアバターオブジェクト6の口に関連付けられた近傍領域に配置される。そのため、ユーザ5は、視界画像中の息のエフェクトによって仮想空間11の温度を体感することができ、あたかも仮想空間11に存在するかのような現実感をより高めることができる。
ユーザ5に温度を体感させる方法としては、現実空間において低温の霧、風等をユーザ5に向けて送り出すハプティック等があるが、ハプティック用の設備が必要になる。これに対し、上記エフェクトの表示制御によれば、特別な設備を用いることなく、視界画像上の表現で仮想空間11の温度を体感させることができる。
また、息のエフェクトは、一方的に提供されるのではなく、ユーザ5の発声や口の動きに連動したサイズ、形状等で提供されるため、仮想空間11における現実感がより高められ得る。
[曇る材質の設定]
ある局面においては、各仮想空間11および11zに配置される仮想オブジェクトの一部が、曇る材質に設定される。曇る材質に設定される仮想オブジェクトは、現実空間において蒸気が吹き付けられると、蒸気と環境温度との温度差によって表面に水滴が付着し、この水滴に光が乱反射して白く曇る材質を有する仮想オブジェクトである。曇る材質に設定される仮想オブジェクトとしては、例えば窓、鏡、眼鏡のレンズ、ヘルメットの窓等の仮想オブジェクトが挙げられる。
仮想空間11においてアバターオブジェクト6の周辺に曇る材質の仮想オブジェクトが配置された場合、プロセッサ210は、曇る材質の仮想オブジェクトと息のエフェクトの衝突を検出することがある。例えば、息のエフェクトがオブジェクトである場合、プロセッサ210は、オブジェクト同士の衝突を検出する。息のエフェクトが画像である場合、プロセッサ210は、レンダリングによって仮想オブジェクトから画像を描画する位置とエフェクトの画像を描画する位置が重なる場合に各画像の衝突を検出する。衝突が検出されると、プロセッサ210は、発声音の音量、母音、口の形状1721、温度差等に応じて、曇る材質の仮想オブジェクトのうち、息のエフェクトとの衝突部分の色および濃度の少なくとも1つを制御する。
例えば、曇る材質として設定された窓の仮想オブジェクトとの衝突が検出された場合、プロセッサ210は、窓の仮想オブジェクトにおいて、息のエフェクトと衝突し重なる部分の色を白色にし、温度差が大きいほど白色の濃度を増やすことができる。発声音の音量が大きいほど、息のエフェクトのサイズが大きくなるため、白色で表現される窓の仮想オブジェクトとの衝突部分のサイズが大きくなり、曇り具合が変化する様子が再現される。これにより、冷たい窓に息がかかって窓に水滴が付着し、乱反射によって曇る現象を表現でき、仮想空間11での温度をユーザ5に体感させることができる。
図23は、HMD120に表示される視界画像の一例を示す。
仮想空間11においてアバターオブジェクト6の近傍領域内に窓の仮想オブジェクトが含まれる場合、図23に示すように、三人称視点の視界画像2317には、レンダリングによって描画されたアバター2361と窓の画像2362が含まれる。近傍領域に息のエフェクトが配置された場合は、視界画像2317には、息のエフェクト2371も含まれる。窓の仮想オブジェクトと息のエフェクトは同じ近傍領域内にあるため、両者の衝突が検出される。その結果、窓の画像2362は灰色であるが、息のエフェクト2371と衝突した画像部分2363は白色に制御されて、曇りが表現されている。
[360度動画でのエフェクトの表示制御]
ある局面において、仮想空間11に関連付けられた1または複数の360度動画データのうちの1つが、ユーザ5の動きに連動するアバターオブジェクト6によって選択され得る。360度動画データが選択されると、プロセッサ210は、選択された1つの360度動画データをストレージ230から取得する。プロセッサ210は、取得した360度動画データにより仮想空間11zを定義し、仮想視点と基準視線に相当する仮想カメラ14を配置する。プロセッサ210は、定義した仮想空間11zにおいて、上述した仮想空間11の場合と同様にして、視界画像データを生成することができる。
これにより、360度動画データにより定義された仮想空間11zでも、仮想空間11zの温度をユーザ5が体感することができる。360度動画において表現される40℃の砂漠地帯、−20℃の北極圏等の各仮想空間11zの温度の体感が可能であり、ユーザ5はより高い没入感が得られる。
[攻撃のエフェクトの表示制御]
ある実施の形態において、コンピュータ200におけるプロセッサ210が、仮想空間11で提供されるバトルゲームにおいて攻撃力を表現するため、攻撃のエフェクトの表示制御を行う。攻撃のエフェクトは、例えば、光、炎、水、ガス、氷、魔法等による攻撃を表すエフェクトである。エフェクトは、上述のように3次元のオブジェクトであってもよいし、2次元の画像であってもよい。
図24は、攻撃のエフェクトの表示制御時に、コンピュータ200のプロセッサ210により実行される処理を示すフローチャートである。この処理は、例えばバトルゲームの攻撃モードにおいて、図11に示す処理の一部として実行される。以下、図11に示す処理によって仮想空間11にアバターオブジェクト6が配置された後に、図24に示す処理が実行される例を説明するが、仮想空間11にアバターオブジェクト6を配置するのと並行して図24に示す処理が実行されてもよい。
図24に示すように、ステップS2421において、プロセッサ210は、マイク170によりユーザ5の発声音が検出されたか、または顔器官検出モジュール1424により口の形状1721が検出されたか否かを判断する。
発声音および口の形状1721の少なくとも1つが検出された場合(ステップS2421でYES)、ステップS2422において、プロセッサ210は、攻撃力を表現するエフェクトとして、攻撃のエフェクトを配置するか否かを決定する。アバターオブジェクト6に関連付けられる近傍領域は、息のエフェクトの場合と同様に、アバターオブジェクト6の身体の周辺においてあらかじめ設定される領域である。近傍領域は、アバターオブジェクト6の手、足、目、口等の身体の一部に関連付けられる領域であってもよい。近傍領域への配置により、アバターオブジェクト6の身体から攻撃が出される様子が再現される。
例えば、発声音の音量または口の形状1721の大きさが閾値以上の場合、プロセッサ210は、攻撃のエフェクトを配置することを決定できる。ユーザ5は、口を少し開いただけで攻撃を出すのではなく、攻撃を出す明確な意思がある場合のみ、攻撃を出すことができる。
ステップS2423において、プロセッサ210は、検出された発声音の音量および口の形状1721の大きさの少なくとも1つに基づいて、攻撃のエフェクトのサイズ、色および濃度の少なくとも1つを制御する。例えば、プロセッサ210は、音量が大きいほど、または口の形状1721が大きいほど、攻撃のエフェクトの体積を大きく、または長さを長くすることができる。プロセッサ210は、息のエフェクトと同様にして、音量および口の形状1721の大きさに応じて、攻撃のエフェクトのサイズを連続的にまたは段階的に変化させることができる。
また、プロセッサ210は、音量が大きいほど、または口の形状1721が大きいほど、攻撃のエフェクトの色を寒色系から暖色系にするか、または濃度を増やすことができる。例えば、攻撃のエフェクトが炎である場合、プロセッサ210は、炎の色を黄色から赤色に制御する、または赤色の濃度を増やすことができる。プロセッサ210は、息のエフェクトと同様にして、音量および口の形状1721の大きさに応じて、攻撃のエフェクトの色および濃度を連続的にまたは段階的に変化させることができる。
ステップS2424において、プロセッサ210は、発声音の母音および口の形状1721の少なくとも1つに基づいて、攻撃のエフェクトの形状、方向および配置位置の少なくとも1つを制御する。例えば、プロセッサ210は、母音が「a」の場合か、口角の間隔が広い口の形状1721である場合、攻撃のエフェクトの形状を球状、円盤状等にして、配置位置を開いた口のすぐ近くの位置に制御することができる。プロセッサ210は、母音が[u]または[o]の場合か、口角の間隔が狭くすぼむ口の形状1721である場合、攻撃のエフェクトの形状を細長くして、その長さ方向を口から口の正面へ向かう方向にすることができる。
ステップS2425において、プロセッサ210は、仮想空間11において視界画像を表示するための視界画像データを生成する。近傍領域への攻撃のエフェクトの配置が決定され、視界内に近傍領域が含まれる場合、視界画像は攻撃のエフェクトを含む。
HMD120は、コンピュータ200から受信した視界画像データに基づいて視界画像を更新し、更新後の視界画像をモニタ130に表示する。
図25は、HMD120に表示される視界画像の他の一例を示す。
仮想空間11において、仮想視点からの基準視線上に攻撃対象のアバターオブジェクトが配置された場合、図25に示すように、一人称視点の視界画像2517には攻撃対象のアバター2561が含まれる。ユーザ5の視点と同じである仮想視点からの視界にはアバターオブジェクト6に関連付けられた近傍領域が含まれるため、近傍領域に配置された炎の攻撃のエフェクト2571が視界画像2517に含まれる。攻撃のエフェクト2571は、口の形状1721の大きさに応じた長いサイズに制御され、長さ方向が口から口の正面に向かう方向となるように配置されている。
上記攻撃のエフェクトの表示制御によれば、攻撃のエフェクトを含む視界画像がHMD120に表示される。攻撃のエフェクトは、ユーザ5の発声音の音量、母音および口の形状1721の少なくとも1つに基づいて、アバターオブジェクト6の身体に関連付ける近傍領域に配置される。そのため、ユーザ5は、身体から攻撃を発するという行動を、視界画像中の攻撃のエフェクトによって体感することができる。したがって、現実空間では難しいバトルゲームが提供される仮想空間での現実感をより高めることができる。
攻撃のエフェクト2571は、口の動きに連動してサイズ等が制御されるため、アバターオブジェクト6の身体のなかでも、口に関連付けられる近傍領域に配置されることにより、ユーザ5はより攻撃力を体感しやすく、現実感が高まりやすい。また、直感的な攻撃の操作が可能である。
以上、本開示の実施形態について説明したが、本発明の技術的範囲は、本実施形態の説明によって限定的に解釈されるべきではない。本実施形態は一例であって、特許請求の範囲に記載された発明の範囲内において、様々な実施形態の変更が可能であることが当業者によって理解されるところである。本発明の技術的範囲は、特許請求の範囲に記載された発明の範囲およびその均等の範囲に基づいて定められるべきである。
例えば、コンピュータ200は、ユーザ5のような人に限らず、動物のオブジェクトの身体に関連付ける近傍領域に、息のエフェクトを配置してもよい。コンピュータ200は、仮想空間11において定義された動物の鳴き声の大きさに基づいて、息のエフェクトのサイズ、色、濃度等を制御してもよい。
また、コンピュータ200は、仮想空間11に設定された温度と、攻撃のエフェクトに設定された温度との温度差によって、攻撃のエフェクトを変化させる制御を行ってもよい。例えば、水の攻撃のエフェクトの場合、プロセッサ210は、仮想空間11に設定された温度と水の攻撃のエフェクトに設定された温度差が0℃以下であれば、水の攻撃を氷の攻撃のエフェクトに変化させる。また、温度差が50℃以上であれば、水の攻撃をガスの攻撃のエフェクトに変化させる。これにより、ユーザ5に仮想空間の温度を体感させることができる。
上記実施形態においては、HMDによってユーザが没入する仮想空間(VR空間)を例示して説明したが、HMDとして、透過型のHMDを採用してもよい。この場合、透過型のHMDを介してユーザが視認する現実空間に仮想空間を構成する画像の一部を合成した視界画像を出力することにより、拡張現実(AR:Augmented Reality)空間または複合現実(MR:Mixed Reality)空間における仮想体験をユーザに提供してもよい。この場合、操作オブジェクトに代えて、ユーザの手の動きに基づいて、仮想空間内における対象オブジェクトへの作用を生じさせてもよい。具体的には、プロセッサは、現実空間におけるユーザの手の位置の座標情報を特定するとともに、仮想空間内における対象オブジェクトの位置を現実空間における座標情報との関係で定義してもよい。これにより、プロセッサは、現実空間におけるユーザの手と仮想空間における対象オブジェクトとの位置関係を把握し、ユーザの手と対象オブジェクトとの間で上述したコリジョン制御等に対応する処理を実行可能となる。その結果、ユーザの手の動きに基づいて対象オブジェクトに作用を与えることが可能となる。
(構成)
以上に開示された技術的特徴は、以下のように要約され得る。
(構成1)
ある実施形態によれば、プロセッサ210により実行されるプログラムが提供される。プログラムはプロセッサ210に、仮想空間11を定義するステップ(S1110)と、仮想空間11に仮想視点を配置するステップ(S1120)と、ユーザ5の頭部の動きに応じて、仮想視点からの視界を決定するステップ(S1140)と、ユーザ5の動きに連動するアバターを仮想空間11に配置するステップ(S1150)と、ユーザ5の発声音および口の形状の少なくとも1つを検出するステップと、発声音の音量、母音および口の形状の少なくとも1つに応じて、アバターに関連付けられる近傍領域にエフェクトを配置するか否かを決定するステップ(S2023、S2422)と、仮想視点からの視界に対応する視界画像を、HMD120に表示するステップ(S2027、S1190)と、を実行させる。エフェクトの配置が決定され、視界内に近傍領域が含まれる場合、視界画像はエフェクトを含む。
(構成2)
(構成1)において、エフェクトは、息のエフェクトであり、息のエフェクトが配置される近傍領域は、アバターの口に関連付けられる近傍領域である。
(構成3)
(構成2)において、プログラムはプロセッサ210に、発声音の音量および口の形状の大きさの少なくとも1つに基づいて、息のエフェクトのサイズを制御するステップ(S2024)をさらに実行させる。
(構成4)
(構成2)または(構成3)において、プログラムはプロセッサ210に、発声音の母音および口の形状の少なくとも1つに基づいて、息のエフェクトの形状、方向および配置位置の少なくとも1つを制御するステップ(S2025)をさらに実行させる。
(構成5)
(構成2)〜(構成4)のいずれか一つの構成において、プログラムはプロセッサ210に、アバターに設定された温度パラメータと、仮想空間11の全部または一部に設定された温度パラメータとの温度差に応じて、息のエフェクトの色および濃度の少なくとも1つを制御するステップ(S2026)をさらに実行させる。
(構成6)
(構成2)〜(構成5)のいずれか一つの構成において、プログラムはプロセッサ210に、温度パラメータが設定された1または複数の360度動画のうち、アバターによって選択された1つの360度動画によって仮想空間11を定義するステップと、360度動画によって定義された仮想空間11に、仮想視点を配置するステップと、ユーザ5の動きに応じて、仮想視点からの視界を決定するステップと、360度動画によって定義された仮想空間11に、アバターを配置するステップと、ユーザ5の発声音および口の形状の少なくとも1つを検出するステップと、ユーザ5の発声音の音量、母音および口の形状の少なくとも1つに基づいて、息のエフェクトを近傍領域に配置するか否かを決定するステップと、息のエフェクトの配置が決定された場合、アバターに設定された温度パラメータと、360度動画によって定義された仮想空間11の温度パラメータとの温度差に応じて、息のエフェクトの色および濃度の少なくとも1つを制御するステップと、仮想視点からの視界に対応する視界画像を、HMD120に表示するステップと、をさらに実行させ、息のエフェクトの配置が決定され、視界内に近傍領域が含まれる場合、視界画像は息のエフェクトを含む。
(構成7)
(構成2)〜(構成6)のいずれか一つの構成において、プログラムはプロセッサ210に、仮想空間11に配置された、曇る材質の仮想オブジェクトと、息のエフェクトとの衝突を検出するステップと、仮想オブジェクトの息のエフェクトとの衝突部分の色および濃度の少なくとも1つを制御するステップと、をさらに実行させる。
(構成8)
(構成1)において、エフェクトは、攻撃のエフェクトであり、攻撃のエフェクトが配置される近傍領域は、アバターの身体の一部に関連付けられる近傍領域である。
(構成9)
(構成8)において、プログラムはプロセッサ210に、発声音の音量および口の形状の大きさの少なくとも1つに基づいて、攻撃のエフェクトのサイズ、色および濃度の少なくとも1つを制御するステップ(S2423)をさらに実行させる。
(構成10)
(構成8)または(構成9)において、プログラムはプロセッサ210に、発声音の母音および口の形状の少なくとも1つに基づいて、攻撃のエフェクトの形状、方向および配置位置の少なくとも1つを制御するステップ(S2424)をさらに実行させる。
(構成11)
(構成8)〜(構成10)のいずれか一つの構成において、攻撃のオブジェクトが配置される近傍領域は、アバターの口に関連付けられる近傍領域である。
(構成12)
ある実施形態によれば、仮想空間の提供方法が提供される。仮想空間の提供方法は、仮想空間11を定義するステップ(S1110)と、仮想空間11に仮想視点を配置するステップ(S1120)と、ユーザ5の頭部の動きに応じて、仮想視点からの視界を決定するステップ(S1140)と、ユーザ5の動きに連動するアバターを仮想空間11に配置するステップ(S1150)と、ユーザ5の発声音および口の形状の少なくとも1つを検出するステップと、発声音の音量、母音および口の形状の少なくとも1つに応じて、アバターに関連付けられる近傍領域にエフェクトを配置するか否かを決定するステップ(S2023、S2422)と、仮想視点からの視界に対応する視界画像を、HMD120に表示するステップ(S2027、S1190)と、を含む。エフェクトの配置が決定され、視界内に近傍領域が含まれる場合、視界画像はエフェクトを含む。
(構成13)
ある実施形態によれば、情報処理装置が提供される。情報処理装置は、プロセッサ210と、プログラムを格納したメモリ220と、を備える。プログラムはプロセッサ210に、仮想空間11を定義するステップ(S1110)と、仮想空間11に仮想視点を配置するステップ(S1120)と、ユーザ5の頭部の動きに応じて、仮想視点からの視界を決定するステップ(S1140)と、ユーザ5の動きに連動するアバターを仮想空間11に配置するステップ(S1150)と、ユーザ5の発声音および口の形状の少なくとも1つを検出するステップと、発声音の音量、母音および口の形状の少なくとも1つに応じて、アバターに関連付けられる近傍領域にエフェクトを配置するか否かを決定するステップ(S2023、S2422)と、仮想視点からの視界に対応する視界画像を、HMD120に表示するステップ(S2027、S1190)と、を実行させる。エフェクトの配置が決定され、視界内に近傍領域が含まれる場合、視界画像はエフェクトを含む。