以下、この技術的思想の実施の形態について図面を参照しながら詳細に説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。本開示において示される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、およびHMDセット110Cは、互いのアバター情報をほぼ同じタイミングで共有することができる。
続いて、サーバ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を備えている。
仮想オブジェクト生成モジュール1421は、各種の仮想オブジェクトを仮想空間11に生成する。ある局面において、仮想オブジェクトは、例えば、ゲームのストーリーの進行に従って配置される森、山その他を含む風景、動物等を含み得る。ある局面において、仮想オブジェクトは、アバターオブジェクト、操作オブジェクト、およびステージオブジェクト、UI(User Interface)オブジェクトを含み得る。
仮想カメラ制御モジュール1422は、仮想空間11における仮想カメラ14の挙動を制御する。仮想カメラ制御モジュール1422は、例えば、仮想空間11における仮想カメラ14の配置位置と、仮想カメラ14の向き(傾き)とを制御する。
操作オブジェクト制御モジュール1423は、仮想空間11においてユーザ5の操作を受け付けるための操作オブジェクトを制御する。ユーザ5は、操作オブジェクトを操作することによって、例えば、仮想空間11に配置される仮想オブジェクトを操作する。ある局面において、操作オブジェクトは、例えば、HMD120を装着したユーザ5の手に相当する手オブジェクト(仮想手)等を含み得る。ある局面において、操作オブジェクトは、後述するアバターオブジェクトの手の部分に相当し得る。
アバターオブジェクト制御モジュール1424は、HMDセンサ410が検出するHMD120の動きをアバターオブジェクトに反映する。例えば、アバターオブジェクト制御モジュール1424は、HMD120が傾いたことを検知して、アバターオブジェクトを傾けて配置するためのデータを生成する。ある局面において、アバターオブジェクト制御モジュール1424は、コントローラ300の動きをアバターオブジェクトに反映する。この場合、コントローラ300は、コントローラ300の動きを検知するためのモーションセンサ、加速度センサ、または複数の発光素子(例えば、赤外線LED)などを備える。アバターオブジェクト制御モジュール1424は、動き検出モジュール1425が検出した顔器官の動作を、仮想空間11に配置されるアバターオブジェクトの顔に反映させる。つまり、アバターオブジェクト制御モジュール1424は、ユーザ5の顔の動作をアバターオブジェクトに反映する。
動き検出モジュール1425は、ユーザ5の動きを検出する。動き検出モジュール1425は、例えば、コントローラ300の出力に応じて、ユーザ5の手の動きを検出する。動き検出モジュール1425は、例えば、ユーザ5の身体に装着されるモーションセンサの出力に応じて、ユーザ5の身体の動きを検出する。動き検出モジュール1425は、ユーザ5の顔器官の動作を検出することもできる。
仮想オブジェクト制御モジュール1426は、仮想空間11において、アバターオブジェクトを除く仮想オブジェクトの挙動を制御する。一例として、仮想オブジェクト制御モジュール1426は、仮想オブジェクトを変形させる。別の例として、仮想オブジェクト制御モジュール1426は、仮想オブジェクトの配置位置を変更する。別の例として、仮想オブジェクト制御モジュール1426は、仮想オブジェクトを移動させる。
[視聴者の仮想空間]
図15は、ある実施の形態に従う仮想空間11Aおよび視界画像1517Aを示す図である。図15(A)では、ユーザ5A(第1ユーザ)に仮想体験を提供するための仮想空間11Aに、アバターオブジェクト6A〜6C、仮想カメラ14A、ステージオブジェクト1532、アバターオブジェクト1533(第1アバター)、アバターオブジェクト1534(第2アバター)、およびライトオブジェクト1541が少なくとも配置される。ユーザ5Aは、頭部にHMD120Aを装着している。ユーザ5Aは、ユーザ5Aの身体の右側の一部を構成する右手で右コントローラ300RAを把持し、ユーザ5Aの身体の左側の一部を構成する左手で左コントローラ300LAを把持している。アバターオブジェクト6Aは、ユーザ5Aに関連付けられている。アバターオブジェクト6A(第3アバター)は、仮想右手1531RAおよび仮想左手1531LAを含む。仮想右手1531RAは操作オブジェクトの一種であり、ユーザ5Aの右手の動きに応じて仮想空間11Aにおいて動くことができる。仮想左手1531LAは操作オブジェクトの一種であり、ユーザ5Aの左手の動きに応じて仮想空間11Aにおいて動くことができる。
図15(A)に示す仮想空間11Aは、コンピュータ200Aにおいてライブコンテンツが再生されることによって、構築される。仮想空間11Aにおいて、アバターオブジェクト1533は、ライブの演者としてパフォーマンスを実行し、アバターオブジェクト6Aを含む他のアバターオブジェクトは、ライブの視聴者としてパフォーマンスを視聴する。仮想空間11Aにおいて、アバターオブジェクト6Bおよび6Cは、それぞれ、ユーザ5Bおよび5Cに個別に関連付けられている。また、詳細については後述するが、アバターオブジェクト1533は、現実空間のライブでパフォーマンスを行っている演者(以下、単に「演者」と称する)に関連付けられている。アバターオブジェクト1534は、ユーザ5および演者に関連付けられていないアバターオブジェクトである。アバターオブジェクト1534は、コンピュータ200Aに格納されているプログラムに従って、少なくとも一部の動作を行なってもよい。
仮想空間11Aにおいて、アバターオブジェクト1533は、ステージオブジェクト1532上に配置される。ステージオブジェクト1532は、現実のライブ会場におけるステージを模した外観を有している。アバターオブジェクト6A、6B、および6C、並びに、アバターオブジェクト1534は、いずれも、ステージオブジェクト1532の手前に配置される。仮想空間11Aにおいて、アバターオブジェクト1533は、演者の動きに応じて動くことによって、ライブのパフォーマンスを実行する。換言すれば、アバターオブジェクト1533は、現実空間において演者が行ったパフォーマンス(第1パフォーマンス)に対応するパフォーマンス(第2パフォーマンス)を、仮想空間11Aにおいて実行する。仮想空間11Aにおいて、アバターオブジェクト6Aは、アバターオブジェクト1533による第2パフォーマンスを視聴する。このとき、ユーザ5Bに提供される仮想空間11Bにおいて、アバターオブジェクト6B(第4アバター)は、アバターオブジェクト1533によって実行された第2パフォーマンスを視聴する。同様に、ユーザ5Cに提供される仮想空間11Cにおいて、アバターオブジェクト6C(第4アバター)は、アバターオブジェクト6Cによって実行された第2パフォーマンスを視聴する。したがって、ユーザ5A、5B、および5Cは視聴者であるとも言える。
図15(A)において、ライトオブジェクト1541は、ケミカルライトなどの棒状の照明器具を模したオブジェクトであり、アバターオブジェクト6A〜6C、および、アバターオブジェクト1534の仮想右手1531Rに把持された状態で配置される。アバターオブジェクト6A〜6Cが把持しているライトオブジェクト1541は、それぞれ、仮想右手1531RA〜1531RCの動きに応じて動く。つまり、ユーザ5A〜5Cは、自身の右手を動かすことで、ライトオブジェクト1541を動かす(振る)という仮想体験を得ることができる。
図15(A)において、仮想カメラ14Aは、アバターオブジェクト6Aの頭部に配置される。仮想カメラ14Aは、仮想カメラ14Aの位置および向きに応じた視界領域15Aを規定する。仮想カメラ14Aは、視界領域15Aに対応する視界画像1517Aを生成して、図15(B)に示すようにHMD120Aに表示させる。ユーザ5Aは、視界画像1517Aを視認することによって、アバターオブジェクト6Aの視点で仮想空間の一部を視認する。これにより、ユーザ5Aは、あたかもユーザ5A自身がアバターオブジェクト6Aであるかのような仮想体験を、得ることができる。視界画像1517Aには、第2パフォーマンスを実行するアバターオブジェクト1533が含まれる。したがって、ユーザ5Aは、アバターオブジェクト1533による第2パフォーマンスを、アバターオブジェクト6Aの視点で視聴することができる。
仮想空間11Aには、異なる複数のアバターオブジェクト1533を配置することもできる。ある局面では、複数のアバターオブジェクト1533にそれぞれ異なる演者が関連付けられる。別の局面では、複数のアバターオブジェクト1533に同一の演者が関連付けられる。
[現実空間でのライブ]
図16は、ある実施の形態に従う現実空間でのライブを示す図である。図16では、現実空間でのライブにおいて、演者1635が観客1636に対してパフォーマンス(第1パフォーマンス)を行なっている。演者1635は、モーションセンサ1651〜1653、および1655を装着している。モーションセンサ1651は、ベルト1654によって演者1635の腰部に装着されている。モーションセンサ1652は、演者1635の右足の甲に装着されている。モーションセンサ1653は、演者1635の左足の甲に装着されている。モーションセンサ1655は、ベルト1656によって演者1635の頭部に装着されている。なお、図16では、モーションセンサ1655およびベルト1656が、演者1635の髪に隠れているため、モーションセンサ1655およびベルト1656を点線で示している。
演者1635は、さらに、演者1635の身体の右側の一部を構成する右手(第1部位)で右コントローラ300RBを把持し、演者1635の身体の左側の一部を構成する左手(第2部位)で左コントローラ300LBを把持している。演者1635は、さらに、マイク1657を装着している。マイク1657は、演者1635の発した音声(例えば、歌声)を音声信号(電気信号)に変換してコンピュータ1791(第1コンピュータ、図16では不図示)に出力する。コンピュータ1791に出力された音声信号は、例えば、スピーカ(不図示)によって音声に変換され、出力される。これにより、現実空間におけるライブ会場に、演者1635の音声が出力され、観客1636は、該音声を聴くことができる。
ある局面において、演者1635に装着されるモーションセンサは、ベースステーション1659から照射される信号(例えば赤外線レーザ)の到達時間と角度とを検出する。コンピュータ1791のプロセッサは、モーションセンサの検出結果に基づいて、ベースステーション1659に対するモーションセンサの位置を検出する。プロセッサは、さらに、ベースステーション1659に対するモーションセンサの位置を、所定点(例えば頭部に装着されたモーションセンサ1655の位置)を基準として規格化してもよい。プロセッサは、検出したモーションセンサの位置に基づいて、演者1635の動きを検出する。
具体的には、プロセッサは、演者1635の頭部、腰部、両手、および両足の位置を検出する。以下、各モーションセンサによって検出される演者1635の部位の位置を「位置情報」とも言う。プロセッサは、演者1635の現在の位置情報と、予め取得された演者1635の寸法データとに基づいて、演者1635の関節の回転方向を算出する。寸法データは、演者1635の身体の寸法を表すデータである。寸法データおよび回転方向については後述する。現在の位置情報を検出することおよび回転方向を算出することは、演者1635の動きを検出することと同義である。
プロセッサは、現在の位置情報および回転方向を含む情報、すなわち、検出した動きの情報(以下、「第1動き情報」と称する)を生成し、サーバ600を介してコンピュータ200に送信する。プロセッサ210は、第1動き情報に応じて、ユーザ5に仮想体験を提供するための仮想空間11に配置されたアバターオブジェクト1533に、現実空間のライブにおける演者1635の動きが反映されたパフォーマンスを実行させる。第1動き情報は、マイク1657を介してコンピュータ1791に出力された音声信号を含んでもよい。これにより、プロセッサ210は、アバターオブジェクト1533に、演者1635が発した音声を出力させることができる。ユーザ5は、現実空間のライブにおいて演者1635が行った第1パフォーマンスに対応する、アバターオブジェクト1533が行う第2パフォーマンスを視聴することができる。このように、演者1635は、アバターオブジェクト1533によるライブを、ユーザ5A、5B、および5Cにそれぞれ配信する配信者としての役割をも有する。
第1動き情報は、仮想空間11においてアバターオブジェクト1533に第2パフォーマンスを実行させることができる情報であればよく、現在の位置情報および回転方向を含む情報に限定されない。第1動き情報は、例えば、回転方向を含まない情報であってもよい。この場合、コンピュータ200のプロセッサ210は、例えば、受信した動き情報に含まれる、演者1635の身体を構成する各部位の位置に対応するように、演者1635の各部位に対応するアバターオブジェクト1533の各部位オブジェクトの位置を制御する。
図16の例では、観客1636は、ケミカルライト1658(第1端末装置)を保持している。本実施形態において、ケミカルライト1658は、ケミカルライト1658の動きを検出するセンサ(例えば、加速度センサ)を備えている。つまり、該センサは、観客1636がケミカルライト1658を振る動作(第1動作)を検出することができる。該センサが動きを検出したことを示す情報(以下、「第2動き情報」と称する)は、ゲートウェイ1793(図16では不図示)を介してサーバ600へ送信される。第2動き情報は、例えば、ケミカルライト1658を識別する情報(ケミカルライト1658のID)であってもよい。なお、ケミカルライト1658に備えられるセンサは、ケミカルライト1658が振られたか否かを検出することができるセンサであればよく、加速度センサに限定されない。また、観客1636が保持する物体は、第1動作を検出するセンサが備えていればよく、ケミカルライトに限定されない。例えば、ライトスティック、ペンライトなどの、ケミカルライトと異なる棒状の照明器具であってもよい。あるいは、団扇、タオルなどの照明器具とは異なる物であってもよい。なお、観客1636が保持する物体は、ライブを盛り上げるために使用されるものであることが好ましい。
なお、図15および図16に示すように、演者1635に関連付けられるアバターオブジェクト1533は、演者1635に酷似したアバターオブジェクトであることが好ましい。換言すれば、アバターオブジェクト1533は、演者1635の高精度な3Dモデルであることが好ましい。これにより、仮想空間11でライブを視聴するユーザ5に、演者1635のライブを視聴しているかのような仮想体験を与えることができる。
[システムの構成]
図17は、ある実施の形態に従うシステム1700の構成の概略を示す図である。システム1700は、例えば業務用のシステムとして提供される。
システム1700は、サーバ600と、コンピュータ200A(第2コンピュータ)、200B、200Cと、コンピュータ1791と、スマートフォン1792(第2端末装置)と、ゲートウェイ1793と、外部機器700と、ネットワーク2とを含む。なお、図17では、図示している各装置と有線または無線で接続されることにより、間接的にネットワーク2と接続されている装置については図示していないが、システム1700はこのような装置も含む。このような装置としては、ユーザ5が装着しているHMD120などのHMDセット110が備える各装置、演者に装着されたモーションセンサ、ベースステーション1659、ケミカルライト1658などが挙げられる。
コンピュータ200A、200B、200Cは、それぞれ、HMDセット110A、110B、110Cに備えられたコンピュータである。HMDセット110については、図1を参照して既に説明しているため、ここでは説明を繰り返さない。外部機器700についても、図1を参照して既に説明しているため、ここでは説明を繰り返さない。
コンピュータ1791は、演者1635に関連付けられたコンピュータである。コンピュータ1791は、ベースステーション1659を制御して、モーションセンサに対して信号を照射させる。また、コンピュータ1791は、モーションセンサから取得した検出結果に基づいて第1動き情報を生成し、サーバ600へ送信する。
スマートフォン1792は、観客1636に関連付けられたスマートフォンである。スマートフォン1792の詳細については後述する。
ゲートウェイ1793は、ケミカルライト1658が検出した第2動き情報を受信し、サーバ600へ送信する中継装置である。
サーバ600は、図1を参照して説明した機能に加え、コンピュータ1791から第1動き情報を受信したり、ゲートウェイ1793から第2動き情報を受信したりする。
[寸法データの取得]
図18は、寸法データの取得方法を説明するための図である。図18(A)は、演者1635が、正面を向き、両手を水平に広げ、起立している状態を表す。以下、図18(A)に示される状態を第1姿勢とも言う。図18(B)は、演者1635が、正面を向き、両手を太もも側面に下ろし、起立している状態を表す。以下、図18(B)に示される状態を第2姿勢とも言う。
ある局面において、コンピュータ1791のプロセッサは、演者1635に対し第1姿勢および第2姿勢をとるように促す。一例として、プロセッサは、第1姿勢および第2姿勢をとる旨の音声をスピーカ(不図示)から出力する。
プロセッサは、2つの姿勢(第1姿勢と第2姿勢)のそれぞれにおいて、演者1635に装着されたモーションセンサの出力に基づいて演者1635の頭部、腰部、両手、両足の位置情報を取得する。これら位置情報は、図19に示されるように実座標系(x、y、z)における位置として取得され得る。
プロセッサは、2つの姿勢に対応する位置情報から演者1635の寸法データを算出する。ある実施形態において、プロセッサは、図20に示されるように、演者1635の身長、肩幅、腕の長さ、足の長さ、頭部から肩までの高さを寸法データとして算出する。プロセッサは、第2姿勢における両手の間隔を肩幅として算出し得る。プロセッサは、第1姿勢における両手の間隔から肩幅を差し引いた値の半分を腕の長さとして算出し得る。プロセッサは、足の高さから頭部の高さまでの距離を身長として算出し得る。プロセッサは、足の高さから腰部の高さまでの距離を足の長さとして算出し得る。プロセッサは、第1姿勢における手の高さから頭部までの高さを、頭部から肩までの高さとして算出し得る。
図21は、寸法データを取得するための処理を表すフローチャートである。ステップS2110において、プロセッサは、演者1635に第1姿勢になるように指示する。例えば、プロセッサは、該指示を音声としてスピーカから出力することでステップS2110の処理を実現する。ステップS2120において、プロセッサは、第1姿勢に対応する位置情報を取得する。
ステップS2130において、プロセッサは、演者1635に第2姿勢になるように指示する。ステップS2140において、プロセッサは、第2姿勢に対応する位置情報を取得する。
ステップS2150において、プロセッサは、第1姿勢に対応する位置情報と第2姿勢に対応する位置情報とから、演者1635の寸法データを算出する。プロセッサは、寸法データをコンピュータ1791のストレージに格納する。
以上のように、演者1635は、2つの姿勢をとるだけで、自身の寸法をコンピュータ1791に容易に入力できる。なお、他の局面において、演者1635は、自身の寸法をキーボード等の入力デバイスを用いてコンピュータ1791に入力してもよい。
[関節の回転方向]
ある実施形態において、コンピュータ1791のプロセッサは、演者1635に装着された6つのモーションセンサの出力(位置情報)と、寸法データとに基づいて、演者1635の関節の回転方向を推定する。一例として、プロセッサは、頭部の位置情報と、肩幅と、頭部から肩までの高さとに基づいて、肩の位置を推定する。プロセッサは、肩の位置と手の位置情報とから、肘の位置を推定する。この推定は、逆運動学(Inverse Kinematics)を利用した公知のアプリケーションにより実行され得る。
ある実施形態において、プロセッサは、6つのモーションセンサから、演者1635の首(頭部)、腰、両手首、および両足首の関節の傾き(回転方向)を取得する。加えて、プロセッサは、逆運動学に基づいて、両肩、両肘、両股(足のつけ根)、両膝の関節の回転方向を推定する。図22に示されるように、プロセッサは、各関節の回転方向をuvw視野座標系で取得または推定する。
なお、回転方向が位置情報と寸法データとに基づいて算出される場合、プロセッサは、演者1635が正面を向いていないとき(つまり、頭部と腰部とが異なる方向を向いているとき)の肩の位置等を正確に推定できない。そこで、他の実施形態において、コンピュータ1791は、モーションセンサによって検出される演者1635の部位の傾きをさらに考慮して関節の回転方向を推定してもよい。例えば、コンピュータ1791は、頭部の位置情報と、頭部の傾きと、腰部の傾きと、肩幅と、頭部から肩までの高さとに基づいて、肩の位置を推定する。当該構成によれば、コンピュータ1791は、関節の回転方向の精度を向上し得る。
[ライブ視聴処理フロー]
図23は、ある実施の形態に従うシステム1700において実行される処理の一部を示すシーケンス図である。本実施形態では、ライブ視聴を開始するための、視聴者側の一連の処理が、HMDセット110Aにより実行されるものとして説明する。ただし、当該処理は、他のHMDセット110B、110Cにより実行されてもよいし、当該処理の一部または全部がサーバ600によって実行されてもよい。
ステップS2301において、プロセッサ210Aは、仮想空間11Aを定義する。当該処理は、図11のステップS1110の処理に相当する。具体的には、プロセッサ210Aは、仮想空間データを特定することによって、仮想空間データによって表される仮想空間11Aを定義する。仮想空間11Aは、アバターオブジェクト1533のライブをアバターオブジェクト6Aが視聴する仮想空間である。言い換えれば、仮想空間11Aは、アバターオブジェクト1533によるパフォーマンスが行われる仮想空間である。
ステップS2302において、プロセッサ210Aは、仮想カメラ14Aを生成し、仮想空間11Aに配置する。ステップS2303において、プロセッサ210Aは、ステージオブジェクト1532を生成し、第2仮想空間11Aに配置する。ステップS2304において、プロセッサ210Aは、アバターオブジェクト1534を仮想空間11Aに配置する。一例として、プロセッサ210Aは、仮想カメラ14Aとアバターオブジェクト6Aとを、同一の位置に配置する。
ステップS2305において、プロセッサ210Aは、アバターオブジェクト6Bおよび6Cの各アバター情報を、サーバ600から受信する。ステップS2306において、プロセッサ210Aは、受信した各アバター情報に基づいて、アバターオブジェクト6Bおよび6Cを仮想空間11Aに配置する。プロセッサ210Aは、さらに、他のアバターオブジェクト6のアバター情報も受信し、仮想空間11Aに配置する。仮想空間11Aには、多数のアバターオブジェクト6、および、多数のアバターオブジェクト1534が配置される。ただし、説明の便宜のため、仮想空間11を示す図面(図15など)では、アバターオブジェクト6Bおよび6C、並びに、2体のアバターオブジェクト1534を代表的に図示している。以降、特に必要がない限り、他のアバターオブジェクト6および他のアバターオブジェクト1534には言及しない。
ステップS2307において、プロセッサ210Aは、アバターオブジェクト制御モジュール1424として、アバターオブジェクト6Aを仮想空間11Aに配置する。図示しないが、プロセッサ210Aは、任意のタイミングで、アバターオブジェクト6Aのアバター情報を生成し、サーバ600に送信する。
ステップ2308において、プロセッサ210Aは、仮想カメラ制御モジュール1422として、HMD120Aの動きに応じて仮想空間11Aにおける仮想カメラ14Aの位置および傾きを決定する。より詳細には、プロセッサ210Aは、ユーザ5Aの頭部の姿勢と、仮想空間11Aにおける仮想カメラ14Aの位置とに応じて、仮想空間11Aにおける仮想カメラ14Aからの視界である視界領域15Aを制御する。当該処理は、図11のステップS1140の処理の一部に相当する。仮想カメラ14Aがアバターオブジェクト6Aと同一の位置に配置されるので、仮想カメラ14Aの位置は、アバターオブジェクト6Aの位置と同義である。さらに、仮想カメラ14Aからの視界は、アバターオブジェクト6Aからの視界と同義である。
ステップS2309において、プロセッサ210Aは、視界画像17Aをモニタ130Aに表示する。具体的には、プロセッサ210Aは、HMD120Aの動き(すなわち仮想カメラ14Aの位置および傾き)と、仮想空間11Aを定義する仮想空間データと、に基づいて、視界領域15Aに対応する視界画像17Aを定義する。視界画像17Aを定義することは、視界画像17Aを生成することと同義である。プロセッサ210Aは、さらに、HMD120Aのモニタ130Aに視界画像17Aを出力することによって、視界画像17AをHMD120Aに表示させる。当該処理は、図11のステップS1180およびS1190の処理に相当する。
ステップS2321において、コンピュータ1791のプロセッサは、演者1635に装着されたモーションセンサからの検出結果の受信を開始する。具体的には、モーションセンサを装着した演者1635が現実空間においてステージに現れることにより、モーションセンサが、ベースステーション1659から照射される信号の到達時間と角度との検出を開始する。これにより、コンピュータ1791は、モーションセンサからの検出結果の受信を開始する。
ステップS2322において、プロセッサは、モーションセンサからの受信開始を示す情報を、サーバ600を介してリアルタイムにコンピュータ200Aへ送信する。該情報は、モーションセンサから最初に受信した検出結果に基づいて生成された第1動き情報であってもよい。
ステップS2310において、プロセッサ210Aは、モーションセンサからの受信開始を示す情報を受信する。ステップS2311において、プロセッサ210Aは、受信した該情報に基づいて、アバターオブジェクト1533を仮想空間11Aに配置する。詳細には、プロセッサ210Aは、アバターオブジェクト1533をステージオブジェクト1532上に配置する。
(ライブ開始)
図24は、ある実施形態に係る演者1635の姿勢の一例を示す図である。現実空間におけるライブの開始後、演者1635は、例えば図24に示す姿勢を取るように、自身の身体を動かす。図24に示す姿勢は、第1パフォーマンスを実行したときの姿勢である。ステップS2323において、コンピュータ1791のプロセッサは、図24に示す姿勢を取る動き、すなわち、第1パフォーマンスの動きを検出する。ステップS2324において、該プロセッサは、検出した動きに基づき第1動き情報を生成し、該第1動き情報を、サーバ600を介してリアルタイムにコンピュータ200Aへ送信する。
図25は、ある実施の形態に従う仮想空間2511Aおよび視界画像2517Aを示す図である。なお、以降、図25に示すように、2体のアバターオブジェクト1534を、それぞれ、アバターオブジェクト1534A、および、アバターオブジェクト1534Bと称する。
ステップS2312において、プロセッサ210Aは、演者1635の第1動き情報を、サーバ600を介してリアルタイムに受信する。ステップS2313において、プロセッサ210Aは、受信した第1動き情報に基づいて、アバターオブジェクト1533に第2パフォーマンスを実行させる。これにより、プロセッサ210Aは、図24に示す演者1635の第1パフォーマンスに対応する第2パフォーマンスを、アバターオブジェクト1533に実行させることができる。
プロセッサ210Aは、アバターオブジェクト1533による第2パフォーマンスを、仮想空間2511Aにおいてアバターオブジェクト6Aに視聴させる。プロセッサ210Aは、例えば、図25(A)に示す仮想空間2511Aに対応する視界画像2517Aを、図25(B)に示すようにモニタ130Aに表示する。ユーザ5Aは、視界画像2517Aを視認することによって、アバターオブジェクト1533がステージオブジェクト1532上で第2パフォーマンスを実行したことを認識する。これにより、ユーザ5Aは、アバターオブジェクト6Aの視点で、アバターオブジェクト1533による第2パフォーマンスを楽しむことができる。
このように、HMDセット110のユーザ5は、現実空間で行われているライブにおける演者1635の第1パフォーマンスを反映した、アバターオブジェクト1533の第2パフォーマンスを、仮想空間2511で仮想体験することができる。換言すれば、システム1700は、ライブを現地で視聴する、ライブビューイングで視聴するといった従来の選択肢に加え、仮想空間2511でライブを視聴する、という新たな選択肢をユーザ5に与えることができる。これにより、ユーザ5は、ライブのチケットが取れなかった、あるいは、ライブ会場やライブビューイング会場へ行くことができない、などの状況であっても、ライブを仮想体験することができる。
[現実空間の情報の仮想空間への反映]
図26は、ある実施の形態に従う現実空間でのライブを示す図である。説明の便宜のため、図26では、多数の観客1636のうち、観客1636Aおよび観客1636Bを代表的に図示している。また、図26では、ベースステーション1659の記載を省略している。以降の現実空間でのライブを示す図でも同様である。
現実空間におけるライブ中、観客1636は、例えば図26に示すように、把持したケミカルライト1658を振る。これにより、ケミカルライト1658が振られたことを示す第2動き情報が、ゲートウェイ1793およびサーバ600を介してコンピュータ200Aへ送信される。プロセッサ210Aは、第2動き情報、換言すれば、観客1636がケミカルライト1658を振る動作に応じて、仮想空間11Aにおいて第1処理を実行する。
(第1処理の例1)
図27は、ある実施の形態に従う仮想空間2511Aおよび視界画像2717Aを示す図である。一例として、プロセッサ210Aは、上記第1処理として、受信した第2動き情報に応じてアバターオブジェクト1534を動かす。例えば、プロセッサ210Aは、図27(A)に示すように、仮想空間2511Aにおいて、アバターオブジェクト1534にライトオブジェクト1541を振らせる。
この例において、プロセッサ210Aは、ライブの開始前に、各ケミカルライト1658を識別する情報を取得し、ストレージ230に格納する。さらに、プロセッサ210Aは、アバターオブジェクト1534を仮想空間2511Aに配置するとき、各アバターオブジェクト1534と、ストレージ230に格納されている各ケミカルライト1658を識別する情報とを関連付ける。これにより、ライブの開始前に、各アバターオブジェクト1534と、ケミカルライト1658を持つ観客1636とが関連付けられる。換言すれば、プロセッサ210Aは、各観客1636に関連付けられるアバターオブジェクト1534を仮想空間2511Aに配置する。
プロセッサ210Aは、観客1636がケミカルライト1658を振ったことに基づいて第2動き情報、すなわち、ケミカルライト1658を識別する情報を受信すると、該情報に関連付けられているアバターオブジェクト1534を特定する。そして、プロセッサ210Aは、特定したアバターオブジェクト1534にライトオブジェクト1541を振らせる。図26の例では、観客1636Aおよび観客1636Bがケミカルライト1658を振っている。図27の例では、プロセッサ210Aは、観客1636Aがケミカルライト1658を振ったことに基づく第2動き情報に応じて、アバターオブジェクト1534Aにライトオブジェクト1541を振らせている。また、プロセッサ210Aは、観客1636Bがケミカルライト1658を振ったことに基づく第2動き情報に応じて、アバターオブジェクト1534Bにライトオブジェクト1541を振らせている。
プロセッサ210Aは、例えば、図27(A)に示す仮想空間2511Aに対応する視界画像2717Aを、図27(B)に示すようにモニタ130Aに表示する。ユーザ5Aは、視界画像2717Aを視認することによって、アバターオブジェクト1534がライトオブジェクト1541を振っていることを認識する。
このように、現実空間で観客1636がケミカルライト1658を振ったことに応じて、仮想空間2511Aでアバターオブジェクト1534にライトオブジェクト1541を振らせることで、現実空間で行われているライブの盛り上がりを、仮想空間2511Aに反映することができる。換言すれば、仮想空間2511Aで行われているライブが、現実空間で行われているライブと同様に盛り上がる。結果として、現実空間のライブの観客1636と、仮想空間2511でライブを視聴しているユーザ5とが、一体的にライブを視聴しているかのような状態を作り出すことができる。
(第1処理の例2)
図28は、ある実施の形態に従う仮想空間2511Aおよび視界画像2817Aを示す図である。一例として、プロセッサ210Aは、上記第1処理として、ケミカルライト1658を振っている観客1636の数に応じた演出を実行する。
具体的には、プロセッサ210Aは、受信した第2動き情報の数を算出することにより、ケミカルライト1658を振っている観客1636の数を特定する。そして、プロセッサ210Aは、例えば、特定した数が所定の閾値以上である場合、上記演出を実行する。プロセッサ210Aは、例えば、該演出として、図28(A)に示すように、仮想空間2511Aにおいて、流れ星の演出を行なってもよい。つまり、プロセッサ210Aは、星型の仮想オブジェクトである星型オブジェクト2842を、仮想空間2511Aに配置し、さらに、該星型オブジェクト2842を動かしてもよい。
プロセッサ210Aは、例えば、図28(A)に示す仮想空間2511Aに対応する視界画像2817Aを、図28(B)に示すようにモニタ130Aに表示する。ユーザ5Aは、視界画像2817Aを視認することによって、仮想空間2511Aにおいて流れ星の演出が行われていることを認識する。
このように、現実空間でケミカルライト1658を振った観客1636の人数に応じた演出を、仮想空間2511Aで実行することで、現実空間で行われているライブの盛り上がりを、仮想空間2511Aに反映することができる。仮想空間2511Aで該演出が行われることで、仮想空間2511Aで行われているライブが、現実空間で行われているライブと同様に盛り上がる。結果として、現実空間のライブの観客1636と、仮想空間2511でライブを視聴しているユーザ5とが、一体的にライブを視聴しているかのような状態を作り出すことができる。
プロセッサ210Aは、受信した第2動き情報の数が多いほど、実行する演出を派手なものとしてもよい。例えば、プロセッサ210Aは、上述した流れ星の演出において、受信した第2動き情報の数が多いほど、星型オブジェクト2842の数を多くしてもよい。
なお、ケミカルライト1658を振っている観客1636の数の特定を、サーバ600が行ってもよい。サーバ600は、さらに、特定した数が所定の閾値以上であるか否かの判定を行ってもよい。サーバ600がケミカルライト1658を振っている観客1636の数の特定のみを行う場合、サーバ600は、特定した数をコンピュータ200Aへ送信する。サーバ600が、ケミカルライト1658を振っている観客1636の数の特定と、特定した数が所定の閾値以上であるか否かの判定の両方を行う場合、サーバ600は、特定した数が所定の閾値以上であると判定した場合に、その旨をプロセッサ210Aへ通知する。
[仮想空間の情報の現実空間への反映例1]
システム1700は、仮想空間11における情報を、現実空間へ反映する装置を含んでいてもよい。該装置は、一例として、拡張現実(AR:Augmented Reality)空間における仮想体験を観客1636に提供する。例えば、該装置は、現実空間を表示する表示部を備え、該現実空間とともに、仮想空間11における情報に応じた第1画像を表示部に表示させてもよい。なお、「現実空間を表示する」とは、例えば、現実空間を撮影した画像(第2画像)を表示することであってもよいし、現実空間をそのまま映すことであってもよい。また、「現実空間をそのまま映す」とは、例えば、ユーザが透過型の表示部を介して現実空間を視認することである。以降、該装置として、図17に示すスマートフォン1792を例に挙げて説明する、
(スマートフォンのハードウェア構成)
図29は、本実施の形態に従うスマートフォン1792のハードウェア構成の一例を示すブロック図である。上述したように、スマートフォン1792は、観客1636に関連付けられたスマートフォン(例えば、観客1636が所有するスマートフォン)である。スマートフォン1792は、主たる構成要素として、プロセッサ2951と、メモリ2952と、ストレージ2953と、タッチパネル2954と、ディスプレイ2955(表示部)と、カメラ2956と、通信インターフェイス2957とを備える。各構成要素は、それぞれ、バス2958に接続されている。
プロセッサ2951は、スマートフォン1792に与えられる信号に基づいて、あるいは、予め定められた条件が成立したことに基づいて、メモリ2952またはストレージ2953に格納されているプログラムに含まれる一連の命令を実行する。ある局面において、プロセッサ2951は、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、MPU(Micro Processor Unit)、FPGA(Field-Programmable Gate Array)その他のデバイスとして実現される。
メモリ2952は、プログラムおよびデータを一時的に保存する。プログラムは、例えば、ストレージ2953からロードされる。データは、スマートフォン1792に入力されたデータと、プロセッサ2951によって生成されたデータとを含む。ある局面において、メモリ2952は、RAM(Random Access Memory)その他の揮発メモリとして実現される。
ストレージ2953は、プログラムおよびデータを永続的に保持する。ストレージ2953は、例えば、ROM(Read-Only Memory)、ハードディスク装置、フラッシュメモリ、その他の不揮発記憶装置として実現される。ストレージ2953に格納されるプログラムは、アプリケーションプログラム、シミュレーションプログラム、ゲームプログラム、ユーザ認証プログラム、他の装置との通信を実現するためのプログラムを含む。別の局面において、ストレージ2953は、メモリカードのように着脱可能な記憶装置として実現されてもよい。
タッチパネル2954は、観客1636によって操作されることにより、観客1636からスマートフォン1792への命令の入力を受け付ける。一例として、タッチパネル2954に対する観客1636の操作は、タッチパネル2954に物体を接触させたり、物体の接触を解除したり、接触させた物体を、接触を維持したまま移動させたりすることである。ある局面において、タッチパネル2954は、ディスプレイ2955に重畳するように配置される。換言すれば、タッチパネル2954とディスプレイ2955とは一体となっている。
ディスプレイ2955は、例えば、液晶モニタまたは有機EL(Electro Luminescence)モニタとして実現され得る。カメラ2956は、現実空間を撮影する。カメラ2956により撮影された画像(静止画像または動画像)は、ディスプレイ2955に表示される。
通信インターフェイス2957は、ネットワーク2に接続されて、ネットワーク2に接続されている他のコンピュータ(例えば、サーバ600)と通信する。ある局面において、通信インターフェイス2957は、例えば、LAN(Local Area Network)その他の有線通信インターフェイス、あるいは、WiFi(Wireless Fidelity)、Bluetooth(登録商標)、NFC(Near Field Communication)その他の無線通信インターフェイスとして実現される。通信インターフェイス2957は上述のものに限られない。
ある局面において、プロセッサ2951は、ストレージ2953にアクセスし、ストレージ2953に格納されている1つ以上のプログラムをメモリ220にロードし、当該プログラムに含まれる一連の命令を実行する。当該1つ以上のプログラムは、スマートフォン1792のオペレーティングシステム、各種アプリケーションプログラム、ゲームソフトウェア等を含み得る。
一例として、ストレージ2953は、AR空間における仮想体験をユーザに提供するためのアプリケーションプログラムを格納している。つまり、スマートフォン1792は、該アプリケーションプログラムを実行することにより、カメラ2956が現実空間を撮影した第2画像とともに、仮想オブジェクトをディスプレイ2955に表示させることができる。
(モジュールの詳細構成)
図30は、ある実施の形態に従うスマートフォン1792のモジュールの詳細構成を表すブロック図である。図30に示されるように、スマートフォン1792は、コントロールモジュール3061と、レンダリングモジュール3062と、メモリモジュール3063とを備える。ある局面において、コントロールモジュール3061とレンダリングモジュール3062とは、プロセッサ2951によって実現される。別の局面において、複数のプロセッサ2951がコントロールモジュール3061とレンダリングモジュール3062として作動してもよい。メモリモジュール3063は、メモリ2952またはストレージ2953によって実現される。
図30に示されるように、コントロールモジュール3061は、仮想オブジェクト生成モジュール3064および仮想オブジェクト制御モジュール3065を備えている。
仮想オブジェクト生成モジュール3064は、各種の仮想オブジェクトをAR空間に生成する。仮想オブジェクト制御モジュール3065は、AR空間において、仮想オブジェクトの挙動を制御する。一例として、仮想オブジェクト制御モジュール3065は、仮想オブジェクトを変形させる。別の例として、仮想オブジェクト制御モジュール3065は、仮想オブジェクトの配置位置を変更する。別の例として、仮想オブジェクト制御モジュール3065は、仮想オブジェクトを移動させる。
ある局面において、コントロールモジュール3061は、カメラ2956が現実空間を撮影した第2画像を取得する。レンダリングモジュール3062は、該第2画像と仮想オブジェクトとに基づいて、ディスプレイ2955に表示される画像を生成する。一例として、レンダリングモジュール3062は、第2画像に仮想オブジェクトを重畳させることにより、ディスプレイ2955に表示される画像を生成する。
メモリモジュール3063は、スマートフォン1792がAR空間を観客1636に提供するために使用されるデータを保持している。ある局面において、メモリモジュール3063は、空間情報と、オブジェクト情報と、ユーザ情報とを保持している。
空間情報は、AR空間を提供するために規定された1つ以上のテンプレートを保持している。オブジェクト情報は、AR空間にオブジェクトを配置するためのオブジェクトデータを含む。
ユーザ情報は、ユーザ(すなわち観客1636)を識別するユーザIDを保持する。ユーザIDは、例えば、観客1636が使用するスマートフォン1792に設定されるIP(Internet Protocol)アドレスまたはMAC(Media Access Control)アドレスであり得る。別の局面において、ユーザIDはユーザによって設定され得る。
メモリモジュール3063に格納されているデータおよびプログラムは、スマートフォン1792のユーザ(すなわち観客1636)によって入力される。あるいは、プロセッサ2951が、当該コンテンツを提供する事業者が運営するコンピュータ(例えば、サーバ600)からプログラムあるいはデータをダウンロードして、ダウンロードされたプログラムあるいはデータをメモリモジュール3063に格納する。
ある局面において、コントロールモジュール3061及びレンダリングモジュール3062は、各処理を実現する回路素子の組み合わせとしても実現され得る。
スマートフォン1792における処理は、ハードウェアと、プロセッサ2951により実行されるソフトウェアとによって実現される。このようなソフトウェアは、ハードディスクその他のメモリモジュール3063に予め格納されている場合がある。ソフトウェアは、CD−ROMその他のコンピュータ読み取り可能な不揮発性のデータ記録媒体に格納されて、プログラム製品として流通している場合もある。あるいは、当該ソフトウェアは、インターネットその他のネットワークに接続されている情報提供事業者によってダウンロード可能なプログラム製品として提供される場合もある。このようなソフトウェアは、光ディスク駆動装置その他のデータ読取装置によってデータ記録媒体から読み取られて、あるいは、通信制御モジュール(不図示)を介してサーバ600その他のコンピュータからダウンロードされた後、記憶モジュールに一旦格納される。そのソフトウェアは、プロセッサ2951によって記憶モジュールから読み出され、実行可能なプログラムの形式でRAMに格納される。プロセッサ2951は、そのプログラムを実行する。
(処理フロー)
図31は、ある実施の形態に従うシステム1700において実行される処理の一部を示すシーケンス図である。図32は、ある実施の形態に従う現実空間でのライブを示す図である。本実施形態では、視聴者側の一連の処理が、HMDセット110Aにより実行されるものとして説明する。ただし、当該処理は、他のHMDセット110B、110Cにより実行されてもよいし、当該処理の一部または全部がサーバ600によって実行されてもよい。また、観客側の一連の処理の一部または全部がサーバ600によって実行されてもよい。
ステップS3111において、プロセッサ2951は、現実空間を撮影した第2画像をディスプレイに表示する。図32の例では、観客1636Aが、図32(A)に示すように、スマートフォン1792を用いて現実空間、具体的には、演者1635を含む現実空間を撮影している。プロセッサ2951は、例えば、現実空間を撮影した第2画像3271を、図32(B)に示すようにディスプレイ2955に表示する。本実施形態では、第2画像3271は動画像(映像)であるものとして説明するが、第2画像3271は静止画像であってもよい。第2画像3271には、演者1635が含まれる。観客1636Aは、第2画像3271を視認することによって、スマートフォン1792のディスプレイ2955を介して、演者1635の第1パフォーマンスを視認する。
図33は、ある実施の形態に従う仮想空間2511Aおよび視界画像3317Aを示す図である。仮想空間2511Aにおけるライブ中において、ユーザ5Aは、アバターオブジェクト5Aに第3動作を実行させるための第2動作を行う。第2動作は、例えば、右手を挙げた後、左下方向に振り下ろす動きであってもよい。ステップS3101において、プロセッサ210Aは、ユーザ5Aが行った第2動作を検出する。ステップS3102において、プロセッサ210Aは、検出した第2動作に基づき、アバターオブジェクト6Aに第3動作を実行させる。一例として、プロセッサ210Aは、図33(A)に示すように、アバターオブジェクト6Aに、第3動作としてライトオブジェクト1541を振らせる。
ステップS3103において、プロセッサ210Aは、サーバ600を介してアバターオブジェクト6Bおよびアバターオブジェクト6Cのアバター情報を受信する。これらのアバター情報は、それぞれ、コンピュータ200Bおよびコンピュータ200Cから送信される。ステップS3104において、プロセッサ210Aは、受信したアバター情報に基づき、アバターオブジェクト6Bおよびアバターオブジェクト6Cに第3動作を実行させる。すなわち、プロセッサ210Aは、アバターオブジェクト6Bおよびアバターオブジェクト6Cにライトオブジェクト1541を振らせる。なお、プロセッサ210Aは、図33(A)に示すように、アバターオブジェクト1534にも、ライトオブジェクト1541を振らせてもよい。
プロセッサ210Aは、例えば、図33(A)に示す仮想空間2511Aに対応する視界画像3317Aを、図33(B)に示すようにモニタ130Aに表示する。ユーザ5Aは、視界画像2517Aを視認することによって、アバターオブジェクト6B、アバターオブジェクト6C、および、アバターオブジェクト1534がライトオブジェクト1541を振っていることを認識する。
ステップ3105において、プロセッサ210Aは、アバターオブジェクト6Aが第3動作を行なっていることを示す第3動き情報を、サーバ600を介してスマートフォン1792へ送信する。
図34は、ある実施の形態に従う現実空間でのライブを示す図である。ステップS3112において、プロセッサ2951は第3動き情報を受信する。ステップS3113において、プロセッサ2951は、第2画像とともに、第3動き情報に応じた第1画像をディスプレイ2955に表示する。図33の例では、図32の例と同様に、観客1636Aが、図33(A)に示すように、スマートフォン1792を用いて演者1635を含む現実空間を撮影している。プロセッサ2951は、例えば、第2画像3471とともに、第1画像を図34(B)に示すようにディスプレイ2955に表示する。第1画像は、例えば、図34(B)に示すように、ハート形の仮想オブジェクトであるハート型オブジェクト3472であってもよい。
つまり、スマートフォン1792は、現実空間を撮影した第2画像3471とともに、現実空間には無いハート型オブジェクト3472をディスプレイ2955に表示する。これにより、スマートフォン1792は、現実空間にハート型オブジェクト3472が出現したかのような仮想体験をユーザに提供することができる。
一例として、プロセッサ2951は、各プロセッサ210から受信した第3動き情報の合計数を特定することにより、第3動作を実行しているアバターオブジェクト6の合計数を特定する。そして、プロセッサ2951は、例えば、特定した合計数が所定の閾値以上である場合、第2画像3471とともにハート型オブジェクト3472をディスプレイ2955に表示する。
プロセッサ2951は、第3動作を実行しているアバターオブジェクト6の合計数が多いほど、実行する演出を派手なものとしてもよい。例えば、プロセッサ2951は、該合計数が多いほど、ハート型オブジェクト3472の数を多くしてもよい。
なお、第3動作を実行しているアバターオブジェクト6の合計数の特定を、サーバ600が行ってもよい。サーバ600は、さらに、特定した合計数が所定の閾値以上であるか否かの判定を行ってもよい。サーバ600が第3動作を実行しているアバターオブジェクト6の合計数の特定のみを行う場合、サーバ600は、特定した合計数をスマートフォン1792へ送信する。サーバ600が、第3動作を実行しているアバターオブジェクト6の合計数の特定と、該合計数が所定の閾値以上であるか否かの判定の両方を行う場合、サーバ600は、該合計数が所定の閾値以上であると判定した場合に、その旨をプロセッサ2951へ通知する。
このように、プロセッサ2951は、仮想空間2511で第3動作を実行しているアバターオブジェクト6の合計数に応じて、現実空間を撮影した第2画像3471とともにハート型オブジェクト3472を表示する。これにより、仮想空間2511で行われているライブの盛り上がりを、現実空間に反映することができる。現実空間におけるライブの観客1636は、仮想空間2511で行われているライブの盛り上がりを、現実空間にいながら仮想体験することができる。結果として、現実空間のライブの観客1636と、仮想空間2511でライブを視聴しているユーザ5とが、一体的にライブを視聴しているかのような状態を作り出すことができる。
[仮想空間の情報の現実空間への反映例2]
(ARグラスのハードウェア構成)
図35は、本実施形態に従うARグラス3594(第2端末装置)のハードウェア構成の一例を示すブロック図である。観客1636は、スマートフォン1792に代えて、ARグラス3594を用いることによってもAR空間での仮想体験を享受することができる。具体的には、観客1636は、ARグラス3594を頭部に装着することにより、AR空間での仮想体験を享受することができる。
ARグラス3594は、主たる構成要素として、プロセッサ3581と、メモリ3582と、ストレージ3583と、ディスプレイ3584(表示部)と、通信インターフェイス3585とを備える。各構成要素は、それぞれ、バス3586に接続されている。
プロセッサ3581は、ARグラス3594に与えられる信号に基づいて、あるいは、予め定められた条件が成立したことに基づいて、メモリ3582またはストレージ3583に格納されているプログラムに含まれる一連の命令を実行する。ある局面において、プロセッサ3581は、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、MPU(Micro Processor Unit)、FPGA(Field-Programmable Gate Array)その他のデバイスとして実現される。
メモリ3582は、プログラムおよびデータを一時的に保存する。プログラムは、例えば、ストレージ3583からロードされる。データは、ARグラス3594に入力されたデータと、プロセッサ3581によって生成されたデータとを含む。ある局面において、メモリ3582は、RAM(Random Access Memory)その他の揮発メモリとして実現される。
ストレージ3583は、プログラムおよびデータを永続的に保持する。ストレージ3583は、例えば、ROM(Read-Only Memory)、ハードディスク装置、フラッシュメモリ、その他の不揮発記憶装置として実現される。ストレージ3583に格納されるプログラムは、アプリケーションプログラム、シミュレーションプログラム、ゲームプログラム、ユーザ認証プログラム、他の装置との通信を実現するためのプログラムを含む。別の局面において、ストレージ3583は、メモリカードのように着脱可能な記憶装置として実現されてもよい。
ディスプレイ3584は、透過型の表示装置である。ここで、「透過型の表示装置」とは、ユーザが表示装置を視認した場合、表示装置の後方の景色を併せて視認できる表示装置である。このような表示装置であれば、ディスプレイ3584の透過率は特に限定されない。ディスプレイ3584は、眼鏡のいわゆるレンズ部分に設けられ、プロセッサ3581の処理に基づいて画像を表示する。これにより、ARグラス3594を装着した観客1636は、現実空間を視認するとともに、ディスプレイ3584に表示された画像を視認する。なお、ARグラス3594のレンズ部分の全てがディスプレイ3584であってもよいし、該レンズ部分の一部がディスプレイ3584であってもよい。
一例として、ストレージ3583は、AR空間における仮想体験をユーザに提供するためのアプリケーションプログラムを格納している。つまり、ARグラス3594は、該アプリケーションプログラムを実行することにより、画像の一例として、仮想オブジェクトをディスプレイ3584に表示させる。これにより、ARグラス3594を装着した観客1636は、現実空間と仮想オブジェクトとを同時に視認することとなる。よって、ARグラス3594は、ARグラス3594を装着した観客1636に、AR空間での仮想体験を提供することができる。
通信インターフェイス3585は、ネットワーク2に接続されて、ネットワーク2に接続されている他のコンピュータ(例えば、サーバ600)と通信する。ある局面において、通信インターフェイス3585は、例えば、LAN(Local Area Network)その他の有線通信インターフェイス、あるいは、WiFi(Wireless Fidelity)、Bluetooth(登録商標)、NFC(Near Field Communication)その他の無線通信インターフェイスとして実現される。通信インターフェイス3585は上述のものに限られない。
ある局面において、プロセッサ3581は、ストレージ3583にアクセスし、ストレージ3583に格納されている1つ以上のプログラムをメモリ220にロードし、当該プログラムに含まれる一連の命令を実行する。当該1つ以上のプログラムは、ARグラス3594のオペレーティングシステム、各種アプリケーションプログラム、ゲームソフトウェア等を含み得る。
なお、ARグラス3594のモジュールの詳細構成は、図30を参照して説明した、スマートフォン1792のモジュールの詳細構成と同様である。すなわち、ARグラス3594は、コントロールモジュール3061と、レンダリングモジュール3062と、メモリモジュール3063とを備えている。また、コントロールモジュール3061は、仮想オブジェクト生成モジュール3064および仮想オブジェクト制御モジュール3065を備えている。これらの詳細は既に説明しているため、ここでは繰り返さない。
(ARグラスを用いた仮想体験の一例)
図36は、ある実施の形態に従う現実空間でのライブを示す図である。ARグラス3594のプロセッサ3581は、アバターオブジェクト6による第3動作の実行に応じた第1画像をディスプレイ3584に表示させる。図36の例では、図36(A)に示すように、観客1636AがARグラス3594を装着している。
プロセッサ3581は、各プロセッサ210から第3動き情報を受信すると、受信した第3動き情報の合計数を特定することにより、第3動作を実行しているアバターオブジェクト6の合計数を特定する。そして、プロセッサ3581は、例えば、特定した合計数が所定の閾値以上である場合、第1画像をディスプレイ3584に表示させる。一例として、プロセッサ3581は、図36(B)に示すように、第1画像としてハート型オブジェクト3472をディスプレイ3584に表示させる。
これにより、観客1636Aは、図36(B)に示すように、現実空間、すなわち第1パフォーマンスを行っている演者1635を視認するとともに、ハート型オブジェクト3472を視認する。これにより、観客1636は、仮想空間2511で行われているライブの盛り上がりを、現実空間にいながら仮想体験することができる。結果として、現実空間のライブの観客1636と、仮想空間2511でライブを視聴しているユーザ5とが、一体的にライブを視聴しているかのような状態を作り出すことができる。
[変形例]
アバターオブジェクト1533は、演者1635の高精度な3Dモデルでなくてもよい。例えば、アバターオブジェクト1533は、演者1635をデフォルメした外観であってもよいし、演者1635とは異なる外観であってもよい。
演者1635が複数である場合、コンピュータ1791のプロセッサが、すべての演者1635の動きを検出することができない場合が考えられる。例えば、演者1635の位置によっては、ベースステーション1659から照射される信号をモーションセンサが検出できない場合が考えられる。この場合、プロセッサ210は、一部の演者1635に関連付けられているアバターオブジェクト1533に、第2パフォーマンスを実行させることができない。
この課題を解決するために、演者1635およびアバターオブジェクト1533が複数である場合、すべてのアバターオブジェクト1533が、いずれかの演者1635の第1パフォーマンスに対応する第2パフォーマンスを実行する構成でなくてもよい。例えば、メインで第1パフォーマンスを行う演者1635(いわゆる、「センター」である演者1635)に関連付けられたアバターオブジェクト1533のみが、該演者1635の動きに応じて動作するものであってもよい。他のアバターオブジェクト1533は、プロセッサ210が人工知能(AI:artificial intelligence)により動作させてもよい。この構成の場合、ベースステーション1659は、センターである演者1635が装着しているモーションセンサが信号を検出できる位置に設置されればよい。また、この構成の場合、センター以外の演者1635は、モーションセンサを装着しなくてもよい。
上記の例では、センターである演者1635(すなわち、一人)に関連付けられたアバターオブジェクト1533のみが、該演者1635の動きに応じて動作するものとして説明した。別の局面において、すべての演者1635のうち、複数人の演者1635に関連付けられたアバターオブジェクト1533が、該複数人の演者1635の動きに応じて動作するものであってもよい。
また、現実空間におけるライブに参加していない人(例えば、体調不良で不参加のアイドルグループのメンバー)のアバターオブジェクト1533を、仮想空間2511におけるライブに登場させてもよい。該アバターオブジェクト1533は、例えば、プロセッサ210がAIにより動作させればよい。これにより、現実空間におけるライブには不参加の演者が、仮想空間2511におけるライブには登場することとなる。つまり、ユーザ5は、仮想空間2511におけるライブにおいて、現実空間におけるライブには無い特典を享受することができる。
上述した現実空間の情報の仮想空間への反映例(第1処理の例1)では、プロセッサ210Aは、予めケミカルライト1658を識別する情報と、アバターオブジェクト1534とを関連付けていた。一方、プロセッサ210Aは、観客1636がケミカルライト1658を振ったことに基づいて第2動き情報を受信したとき、該第2動き情報、すなわち、ケミカルライト1658を識別する情報を、アバターオブジェクト1534のいずれかに関連付けてもよい。この例において、プロセッサ210Aは、該第2動き情報を受信しなくなった場合、該第2動き情報と、アバターオブジェクト1534との関連付けを解除してもよい。換言すれば、プロセッサ210Aは、ライブ中において、観客1636とアバターオブジェクト1534とを一時的に関連付ける構成であってもよい。
仮想空間の情報の現実空間への反映は、AR空間での仮想体験に限定されない。例えば、アバターオブジェクト6が、アバターオブジェクト1534に仮想空間2511にて話しかけた場合、プロセッサ210は、その内容を、該アバターオブジェクト1534に関連付けられる観客1636のスマートフォン1792に送信してもよい。スマートフォン1792のプロセッサ2951は、所定のアプリケーション、例えば、チャットを実行するアプリケーションを起動し、受信した内容を該チャットでの発言としてディスプレイ2955に表示してもよい。これにより、ユーザ5と観客1636とが直接コミュニケーションをとることができる。
あるいは、プロセッサ210は、アバターオブジェクト6が仮想空間2511で発言した内容を、SNS(social networking service)の掲示板に投稿してもよい。観客1636は、スマートフォン1792を用いて該SNSのアプリケーションを起動することにより、アバターオブジェクト6の発言を視認することができる。
システム1700は、仮想空間2511に、アバターオブジェクト6およびアバターオブジェクト1534を配置しない構成であってもよい。換言すれば、システム1700は、仮想空間2511に観客を配置しない構成であってもよい。なお、仮想カメラ14は仮想空間2511に配置されるので、ユーザ5は、アバターオブジェクト1533の第2パフォーマンスを視聴することができる。
プロセッサ210は、アバターオブジェクト1533によるライブを視聴するモードと、演者1635によるライブを仮想空間にて視聴する(すなわち、現実空間のライブを仮想空間にて視聴する)モードとを、ユーザ5の操作に応じて切り替え可能であってもよい。プロセッサ210は、例えば、コントローラ300に対するユーザ5の操作を検出し、上記2つのモードを切り替えてもよい。演者1635によるライブを仮想空間にて視聴するモードにおいて、プロセッサ210は、仮想空間2511にスクリーンオブジェクトを配置し、該スクリーンオブジェクトに、受信した現実空間のライブの映像を表示させればよい。該スクリーンオブジェクトは、例えば、全天球型のスクリーンオブジェクトであってもよい。この例の場合、プロセッサ210は、360度方向を撮影可能な全天球カメラが撮影した映像を受信し、スクリーンオブジェクトに表示させる。これにより、プロセッサ210は、より現実空間のライブに近い仮想体験を、仮想空間2511にてユーザ5に提供することができる。なお、プロセッサ210は、演者1635によるライブを仮想空間にて視聴するモードにおいて、矩形状のスクリーンオブジェクトにライブの映像を表示させるモードと、全天球型のスクリーンオブジェクトにライブの映像を表示させるモードとを、ユーザ5の操作に応じて切り替え可能であってもよい。
以上、本開示の実施形態について説明したが、本発明の技術的範囲は、本実施形態の説明によって限定的に解釈されるべきではない。本実施形態は一例であって、特許請求の範囲に記載された発明の範囲内において、様々な実施形態の変更が可能であることが当業者によって理解されるところである。本発明の技術的範囲は、特許請求の範囲に記載された発明の範囲およびその均等の範囲に基づいて定められるべきである。
〔付記事項〕
本発明の一側面に係る内容を列記すると以下の通りである。
(項目1) システムを説明した。本開示のある局面によると、システム(1700)は、現実空間にて観客(1636)に対して第1パフォーマンスを行う演者(1635)に関連付けられた第1コンピュータ(コンピュータ1791)と、第1ユーザ(ユーザ5A)に関連付けられた、第1ユーザに仮想体験を提供するための第2コンピュータ(コンピュータ200)とを含む。第1コンピュータは、第1パフォーマンスにおける、演者の身体の動きを検出する。第2コンピュータは、第1ユーザに仮想体験を提供するための仮想空間(2511A)を定義し、演者に関連付けられる第1アバター(アバターオブジェクト1533)を仮想空間に配置し、第1コンピュータが検出した演者の身体の動きに応じて、第1アバターに、第1パフォーマンスに対応する第2パフォーマンスを実行させる。
(項目2) (項目1)において、システムは、観客に関連付けられた第1端末装置(ケミカルライト1658)をさらに含む。第1端末装置は、観客の第1動作を検出する。第2コンピュータは、第1端末装置が検出した第1動作に応じて、仮想空間において第1処理を実行する。
(項目3) (項目2)において、第2コンピュータは、観客に関連付けられる第2アバター(アバターオブジェクト1534)を仮想空間に配置し、第1処理として、第1端末装置が検出した第1動作に応じて第2アバターを動かす。
(項目4) (項目2)において、複数の第1端末装置が、複数の観客それぞれに関連付けられている。第2コンピュータは、第1動作を検出した第1端末装置の数を特定し、第1処理として、特定した数に応じた演出を実行する。
(項目5) (項目1)から(項目4)のいずれかにおいて、システムは、現実空間を表示する表示部(ディスプレイ2955)を備える、観客に関連付けられた第2端末装置(スマートフォン1792)をさらに含む。第2コンピュータは、第1ユーザに関連付けられる第3アバター(アバターオブジェクト6A)を仮想空間に配置し、第1ユーザの第2動作を検出し、検出した第2動作に応じて第3アバターに第3動作を実行させる。第2端末装置は、現実空間とともに、第3動作の実行に応じた第1画像(ハート型オブジェクト3472)を表示部に表示させる。
(項目6) (項目5)において、第2コンピュータは、複数の第2ユーザ(ユーザ5B,5C)それぞれに関連付けられる複数の第4アバター(アバターオブジェクト6B,6C)を前記仮想空間に配置し、第2ユーザの第2動作に応じて第4アバターに第3動作を実行させる。第2端末装置は、第3動作を実行している第3アバターおよび第4アバターの合計数を特定し、合計数に応じた第1画像を表示部に表示させる。
(項目7) (項目1)から(項目6)のいずれかにおいて、第2コンピュータは、第1ユーザに関連付けられる仮想カメラ(14)を仮想空間に配置し、第1ユーザの頭部の姿勢と仮想空間における仮想カメラの位置とに応じて、仮想空間における仮想カメラからの視界(視界領域15A)を制御し、仮想カメラからの視界に対応する視界画像(視界画像17A)を定義し、第1ユーザの頭部に関連付けられた画像表示装置(モニタ130A)に視界画像を出力する。
(項目8) プログラムを説明した。本開示のある局面によると、プログラムは、ユーザ(5A)に仮想体験を提供するために、プロセッサ(210A)を備えたコンピュータ(200A)によって実行される。プログラムは、プロセッサに、ユーザに仮想体験を提供するための仮想空間(仮想空間2511A)を定義するステップ(S2301)と、現実空間にて観客(1636)に対して第1パフォーマンスを行う演者(1635)に関連付けられる第1アバター(アバターオブジェクト1533)を仮想空間に配置するステップ(S2311)と、第1パフォーマンスにおける、演者の身体の動きに関する第1情報を受信するステップ(S2312)と、第1情報に応じて、第1アバターに、第1パフォーマンスに対応する第2パフォーマンスを実行させるステップ(S2313)と、を実行させる。
(項目9) 情報処理装置を説明した。本開示のある局面によると、情報処理装置(コンピュータ200A)は、ユーザ(5A)に仮想体験を提供するために、情報処理装置によって実行されるプログラムを記憶する記憶部(ストレージ230A)と、プログラムを実行することにより、情報処理装置の動作を制御する制御部(プロセッサ210A)と、を備えている。制御部は、ユーザに仮想体験を提供するための仮想空間(2511A)を定義し、現実空間にて観客(1636)に対して第1パフォーマンスを行う演者(1635)に関連付けられる第1アバター(アバターオブジェクト1533)を仮想空間に配置し、第1パフォーマンスにおける、演者の身体の動きに関する第1情報を受信し、第1情報に応じて、第1アバターに、第1パフォーマンスに対応する第2パフォーマンスを実行させる。
(項目10) プログラムを実行する方法を説明した。本開示のある局面によると、プログラムは、ユーザ(5A)に仮想体験を提供するために、プロセッサ(210A)を備えたコンピュータ(200A)によって実行される。方法は、プロセッサが、ユーザに仮想体験を提供するための仮想空間(2511A)を定義するステップ(S2301)と、現実空間にて観客(1636)に対して第1パフォーマンスを行う演者(1635)に関連付けられる第1アバター(アバターオブジェクト1533)を仮想空間に配置するステップ(S2311)と、第1パフォーマンスにおける、演者の身体の動きに関する第1情報を受信するステップ(S2312)と、第1情報に応じて、第1アバターに、第1パフォーマンスに対応する第2パフォーマンスを実行させるステップ(S2313)と、を含む。
(項目11) プログラムを説明した。本開示のある局面によると、プログラムは、現実空間にて演者(1635)の第1パフォーマンスを視聴している観客(1636)に仮想体験を提供するために、プロセッサ(2951)と、現実空間を表示する表示部(ディスプレイ2955)と、を備えた端末装置(スマートフォン1792)によって実行される。プログラムは、プロセッサに、演者に関連付けられる第1アバター(アバターオブジェクト1533)による、第1パフォーマンスに対応する第2パフォーマンスを仮想空間にて視聴している第3アバター(アバターオブジェクト6)が実行する第3動作に関する第3情報を受信するステップ(S3112)と、現実空間とともに、第3情報に応じた第1画像(ハート型オブジェクト3472)を表示部に表示させるステップ(S3113)と、を実行させる。
(項目12) 情報処理装置を説明した。本開示のある局面によると、情報処理装置(スマートフォン1792)は、現実空間にて演者(1635)の第1パフォーマンスを視聴している観客(1636)に仮想体験を提供するために、情報処理装置によって実行されるプログラムを記憶する記憶部(ストレージ2953)と、プログラムを実行することにより、情報処理装置の動作を制御する制御部(プロセッサ2951)と、現実空間を表示する表示部(ディスプレイ2955)と、を備えている。制御部は、演者に関連付けられる第1アバター(アバターオブジェクト1533)による、第1パフォーマンスに対応する第2パフォーマンスを仮想空間にて視聴している第3アバター(アバターオブジェクト6)が実行する第3動作に関する第3情報を受信し、現実空間とともに、第3情報に応じた第1画像(ハート型オブジェクト3472)を表示部に表示させる。
(項目13) プログラムを実行する方法を説明した。本開示のある局面によると、プログラムは、現実空間にて演者(1635)の第1パフォーマンスを視聴している観客(1636)に仮想体験を提供するために、プロセッサ(2951)と、現実空間を表示する表示部(ディスプレイ2955)と、を備えた端末装置(スマートフォン1792)によって実行される。プログラムは、プロセッサが、演者に関連付けられる第1アバター(アバターオブジェクト1533)による、第1パフォーマンスに対応する第2パフォーマンスを仮想空間にて視聴している第3アバター(アバターオブジェクト6)が実行する第3動作に関する第3情報を受信するステップ(S3112)と、現実空間とともに、第3情報に応じた第1画像(ハート型オブジェクト3472)を表示部に表示させるステップ(S3113)と、を含む。
上記実施形態においては、HMDによってユーザが没入する仮想空間(VR空間)を例示して説明したが、HMDとして、透過型のHMDを採用してもよい。この場合、透過型のHMDを介してユーザが視認する現実空間に仮想空間を構成する画像の一部を合成した視界画像を出力することにより、拡張現実(AR:Augmented Reality)空間または複合現実(MR:Mixed Reality)空間における仮想体験をユーザに提供してもよい。この場合、操作オブジェクトに代えて、ユーザの手の動きに基づいて、仮想空間内における対象オブジェクトへの作用を生じさせてもよい。具体的には、プロセッサは、現実空間におけるユーザの手の位置の座標情報を特定するとともに、仮想空間内における対象オブジェクトの位置を現実空間における座標情報との関係で定義してもよい。これにより、プロセッサは、現実空間におけるユーザの手と仮想空間における対象オブジェクトとの位置関係を把握し、ユーザの手と対象オブジェクトとの間で上述したコリジョン制御等に対応する処理を実行可能となる。その結果、ユーザの手の動きに基づいて対象オブジェクトに作用を与えることが可能となる。