〔実施形態1〕
以下、この技術的思想の実施の形態について図面を参照しながら詳細に説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。本開示において示される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、仮想オブジェクト制御モジュール1427、および刺激付与モジュール1428を備えている。
仮想オブジェクト生成モジュール1421は、各種の仮想オブジェクトを仮想空間11に生成する。ある局面において、仮想オブジェクトは、例えば、ゲームのストーリーの進行に従って配置される森、山その他を含む風景、動物等を含み得る。ある局面において、仮想オブジェクトは、アバターオブジェクト、ボールオブジェクト、ゴールオブジェクト、指示オブジェクト、障害物オブジェクト、およびメッシュオブジェクトを含み得る。
ある局面において、仮想オブジェクト生成モジュール1421は、ネットワーク2を介して接続される他のコンピュータ200のユーザのアバターオブジェクトを仮想空間11に配置するためのデータを生成する。一例として、仮想オブジェクト生成モジュール1421は、ネットワーク2を介して受信したアバター情報に基づいて、他のコンピュータ200のユーザのアバターオブジェクトを仮想空間11に配置するためのデータを生成する。ある局面において、仮想オブジェクト生成モジュール1421は、ユーザ5のアバターオブジェクトを仮想空間11に配置するためのデータを生成する。
ある局面において、仮想オブジェクト生成モジュール1421は、ユーザ5を含む画像に基づいて、ユーザ5を模したアバターオブジェクトを生成する。別の局面において、仮想オブジェクト生成モジュール1421は、複数種類のアバターオブジェクトの中から、ユーザ5による選択を受け付けたアバターオブジェクトを仮想空間11に配置するためのデータを生成する。複数種類のアバターオブジェクトは、例えば、動物を模したオブジェクトや、デフォルメされた人のオブジェクトなどであってもよい。
仮想カメラ制御モジュール1422は、仮想空間11における仮想カメラ14の挙動を制御する。仮想カメラ制御モジュール1422は、例えば、仮想空間11における仮想カメラ14の配置位置と、仮想カメラ14の向き(傾き)とを制御する。
アバター制御モジュール1423は、仮想空間11におけるアバターオブジェクトの挙動を制御する。ある局面において、アバター制御モジュール1423は、ネットワーク2を介して受信したアバター情報に基づいて、仮想空間11における、他のコンピュータ200のユーザのアバターオブジェクトの移動を制御する。ある局面において、アバター制御モジュール1423は、ユーザ5の操作に基づいて、仮想空間11における、ユーザ5のアバターオブジェクトの移動を制御する。
衝突検出モジュール1424は、仮想空間11に配置される仮想オブジェクトのそれぞれと、他の仮想オブジェクトとの衝突を検出した場合に、当該衝突を検出する。衝突検出モジュール1424は、例えば、ある仮想オブジェクトと、別の仮想オブジェクトとが触れたタイミングを検出することができる。衝突検出モジュール1424は、ある仮想オブジェクトと他の仮想オブジェクトとが触れている状態から離れたタイミングを検出することができる。衝突検出モジュール1424は、ある仮想オブジェクトと他の仮想オブジェクトとが触れている状態であることを検出することもできる。衝突検出モジュール1424は、例えば、アバターオブジェクトと、他の仮想オブジェクトとが衝突したときに、これらアバターオブジェクトと他のオブジェクトとが衝突したことを検出する。コントロールモジュール510は、これらの検出結果に基づいて、予め定められた処理を実行する。
関連付け制御モジュール1425は、仮想空間11に配置される仮想オブジェクトと別の仮想オブジェクトとの関連付けを制御する。ある局面において、関連付け制御モジュール1425は、アバターオブジェクトとボールオブジェクトとの関連付けを制御する。一例として、関連付け制御モジュール1425は、ボールオブジェクトにアバターオブジェクトを関連付ける。別の例として、関連付け制御モジュール1425は、ボールオブジェクトとアバターオブジェクトとの関連付けを解消し、ボールオブジェクトに別のアバターオブジェクトを関連付ける。
報酬制御モジュール1426は、仮想空間11にて実行されるゲームにて付与される報酬を制御する。
仮想オブジェクト制御モジュール1427は、仮想空間11において、アバターオブジェクトを除く仮想オブジェクトの挙動を制御する。一例として、仮想オブジェクト制御モジュール1427は、仮想オブジェクトを変形させる。別の例として、仮想オブジェクト制御モジュール1427は、仮想オブジェクトの配置位置を変更する。別の例として、仮想オブジェクト制御モジュール1427は、仮想オブジェクトを移動させる。
刺激付与モジュール1428は、仮想空間11で実現される仮想体験に基づいて、ユーザ5の感覚器官に刺激を与える。一例として、刺激付与モジュール1428は、ユーザ5の触覚器官に刺激を与えるようにデバイスを制御する。
[装置の詳細構成]
図15を参照して、仮想体験をユーザに提供するための装置構成の詳細について説明する。図15は、ある実施の形態に従う、仮想体験をユーザに提供するための装置の構成例を示す図である。
ある局面において、図15に示す装置は、ユーザ5に、ボードに乗って仮想空間11を移動する仮想体験を提供するための装置である。該装置は、ボード1531(乗用部)を備えている。図15に示すとおり、ユーザ5は、仮想体験のために、頭部にHMD120を装着しボード1531に乗る。
ボード1531は、2つのバネ1533(弾性体)により、平板1532に連結されている。これにより、ボード1531に乗っているユーザ5が体重移動を行うと、バネ1533が伸縮し、ボード1531が水平な状態から傾く。平板1532における、バネ1533が設けられた面と反対側の面には、4隅にキャスター1534が取り付けられている。これにより、ボード1531に乗っているユーザ5が体重移動を行うと、平板1532が移動し、該移動に伴ってボード1531も移動する。以上のように構成することで、ユーザ5に、ボードに乗ってバランスを取りながら移動しているような感覚を与えることができる。
ボード1531には、傾きセンサ1537が取り付けられている。傾きセンサ1537は、ユーザ5が乗っているボード1531の傾き、すなわち、ピッチ軸(u軸)、ヨー軸(v軸)、およびロール軸(w軸)のそれぞれの回転角を検出する。傾きセンサ1537は、検出結果、すなわち検出した回転角をコンピュータ200へ送信する。一例として、傾きセンサ1537は、赤外線などの光を検出することにより、ボード1531の傾きを検出してもよい。具体的には、ボード1531に赤外線を発する媒体(不図示)を複数設け、傾きセンサ1537が、これら媒体が発する赤外線を読み取り、これら媒体の位置を検出することにより、ボード1531の傾きを検出してもよい。別の例として、傾きセンサ1537は、ジャイロセンサにより実現されてもよい。
図15に示す通り、ユーザ5は、筐体1535に囲まれた空間内でボード1531に乗る。換言すれば、筐体1535は、該空間内のみでボード1531が移動するように構成されている。また、筐体1535はバー1536を含む。ユーザ5は、ボード1531に乗っている間、該バー1536を掴むことができる。これにより、ユーザ5が、ボード1531の動きを制御しきれず転倒するといった、危険な状況の発生を防ぐことができる。
ユーザの前方に設けられたバー1536には、コントローラ1538が備えられている。コントローラ1538は、有線または無線によりコンピュータ200に接続されている。コントローラ1538は、ユーザ5からコンピュータ200への命令の入力を受け付ける。ある局面において、コントローラ1538は、ユーザ5によって把持可能に構成される。ある局面において、コントローラ300は、コンピュータ200から送信される信号に基づいて、振動、音、光のうちの少なくともいずれかを出力するように構成されてもよい。
[仮想空間および視界画像]
図16は、ある実施の形態に従う仮想空間11および視界画像1617を示す図である。図16に示す例では、ユーザ5に仮想体験を提供するための仮想空間11に、アバターオブジェクト6および仮想カメラ14が配置される。なお、実際は、仮想空間11にその他の仮想オブジェクトも配置されるが、図16(A)では、図面の見易さのためにその他の仮想オブジェクトは省略している。
図16(A)に示す例では、アバターオブジェクト6はユーザ5を模した人型部分と、ボード1531を模したボード状部分とから構成される。アバターオブジェクト6は仮想空間11における空中に配置される。図16(A)に示す例では、仮想カメラ14はアバターオブジェクト6の頭部に配置される。仮想カメラ14は、仮想カメラ14の位置および向きに応じた視界領域15を規定する。プロセッサ210は、視界領域15に応じた視界画像17を定義する。視界画像17を定義することは、視界画像17を生成することと同義である。
プロセッサ210は、さらに、HMD120のモニタ130に視界画像17を出力することによって、視界画像17をHMD120に表示させる。例えば、図16(A)に示す視界領域15に応じた視界画像1617を、図16(B)に示すようにモニタ130に表示する。ユーザ5は、視界画像17を視認することによって、アバターオブジェクト6の視点で仮想空間11の一部を視認する。これにより、ユーザ5は、あたかもユーザ5自身がアバターオブジェクト6であるかのような仮想体験を得ることができる。
プロセッサ210は、アバターオブジェクト6の移動を制御する。一例として、プロセッサ210は、アバターオブジェクト6を自動的に(ユーザ5の操作に依らず)移動させる。換言すれば、アバターオブジェクト6は、停止することなく常時移動し続ける。例えば、プロセッサ210は、ユーザ5の操作を受け付けない限り、アバターオブジェクト6を、図16に示す移動方向1641、すなわち、仮想空間11におけるXZ平面に平行な方向に移動させる。
図17は、ある実施の形態に従う仮想空間11および視界画像1717を示す図である。ここでは、図17を参照して、アバターオブジェクトの移動方向の制御について説明する。
プロセッサ210は、ユーザ5の操作に応じてアバターオブジェクト6の移動方向を制御する。ある局面において、該操作は、ボード1531上でのユーザ5の体重移動である。プロセッサ210は、該体重移動に基づくボード1531の傾きに応じて、アバターオブジェクト6の移動方向を制御する。
例えば、図17(A)に示すように、ユーザ5が後ろに体重をかけ、ボード1531の後側を前側に比べて下げた場合、プロセッサ210は、ボード1531の傾きに応じて、移動方向1641に対して上に傾く方向1741に移動方向を変更する。これにより、アバターオブジェクト6は、仮想空間11において上方向に曲がりながら移動する(上昇していく)。
また、ユーザ5が前に体重をかけ、ボード1531の前側を後側に比べて下げた場合、プロセッサ210は、ボード1531の傾きに応じて、移動方向1641に対して下に傾く方向に移動方向を変更する。これにより、アバターオブジェクト6は、仮想空間11において下方向に曲がりながら移動する(下降していく)。ユーザ5が右に体重をかけ、ボード1531の右側を左側に比べて下げた場合、プロセッサ210は、ボード1531の傾きに応じて、移動方向1641に対して右に傾く方向に移動方向を変更する。これにより、アバターオブジェクト6は、仮想空間11において右方向に曲がりながら移動する。ユーザ5が左に体重をかけ、ボード1531の左側を右側に比べて下げた場合、ボード1531の傾きに応じて、移動方向1641に対して左に傾く方向に移動方向を変更する。これにより、アバターオブジェクト6は、仮想空間11において左方向に曲がりながら移動する。
一例として、プロセッサ210は、ボード1531の傾きの大きさに応じて、移動方向1641に対する、移動方向の傾きの大きさを変更する。つまり、ユーザ5がボード1531をより大きく傾けた場合、アバターオブジェクト6は仮想空間においてより大きく曲がる。
ある局面において、仮想カメラ14は、アバターオブジェクト6の移動に追随して移動する。換言すれば、仮想カメラ14は、アバターオブジェクト6が移動しても、常にアバターオブジェクト6の頭部に配置される。また、仮想カメラ14は、アバターオブジェクト6の、水平面に対する傾きに応じて傾く。例えば、図17(A)に示すように、アバターオブジェクト6が、ボード1531の後側を前側に比べて下げた場合、仮想カメラ14も、同様に後ろ側を前側に比べて下げることとなる。これにより、図17(A)の例では、図16(A)の例に比べて、仮想空間11のより上側(天頂側)が視界領域15として定義される。そして、該視界領域15に応じた視界画像1717が、図17(B)に示すようにモニタ130に表示される。
[ゲーム進行処理]
図18は、ある実施の形態に従うHMDセット110において実行される処理の一部を表すフローチャートである。図19は、ある実施の形態に従う仮想空間11および視界画像1917を示す図である。なお、図19では、図面の見易さのために、仮想空間11を上面図で示している。これは、図20、21、図23〜33でも同様である。
ステップS1801において、コンピュータ200のプロセッサ210(以下単に「プロセッサ210」)は、図19に示す仮想空間11を定義する。ある実施の形態において、該仮想空間11は、ユーザ5Aに関連付けられたアバターオブジェクト6Aを含む複数のアバターオブジェクト6が属する第1チームが、ボールオブジェクト1951をゴールオブジェクト1952まで移動させるゲームを、ユーザ5Aに仮想体験させるための仮想空間である。一例として、該ゲームは、上記の第1チームと、該第1チームに属するアバターオブジェクト6とは別の、複数のアバターオブジェクト6が属する第2チームとを対戦させるゲームである。より具体的には、アバターオブジェクト6が、ボールオブジェクト1951をゴールオブジェクト1952まで移動させた場合、該アバターオブジェクト6が属するチームに付与されるポイントの合計を、第1チームと第2チームとで競うゲームである。プロセッサ210は、仮想空間データを特定することによって、仮想空間データによって表される仮想空間11を定義する。
ステップS1802において、プロセッサ210は、仮想オブジェクト生成モジュール1421として、仮想カメラ14を生成し、仮想空間11に配置する。ステップSS1803において、プロセッサ210は、仮想オブジェクト生成モジュール1421として、アバターオブジェクト6を生成し、仮想空間11に配置する。ステップS1804において、プロセッサ210は、仮想オブジェクト生成モジュール1421として、ボールオブジェクト1951およびゴールオブジェクト1952を生成し、仮想空間11に配置する。
一例として、プロセッサ210は、仮想オブジェクト生成モジュール1421として、図19(A)に示すように、仮想カメラ14、アバターオブジェクト6A〜6D、ボールオブジェクト1951、およびゴールオブジェクト1952を仮想空間11に配置する。なお、図19(A)に示すアバターオブジェクト6B(第1オブジェクト)が、第1チームに属する、アバターオブジェクト6Aとは異なるアバターオブジェクト6である。また、アバターオブジェクト6Cおよび6D(第2オブジェクト)が、第2チームに属するアバターオブジェクト6である。以降、アバターオブジェクト6Bを味方のアバターオブジェクト6Bと表記する場合がある。また、アバターオブジェクト6Cおよび6Dを敵のアバターオブジェクト6C、敵のアバターオブジェクト6Dと表記する場合がある。
図19(A)に示す例では、第1チームおよび第2チームに属するアバターオブジェクト6がともに2つであるが、各チームに属するアバターオブジェクトの数はこの例に限定されない。また、第1チームに属するアバターオブジェクト6の数と、第2チームに属するアバターオブジェクト6の数が異なっていてもよい。
第1チームに属するアバターオブジェクト6Aおよび6Bと、第2チームに属するアバターオブジェクト6Cおよび6Dとの区別のために、アバターオブジェクト6の色、形状などを異ならせてもよい。例えば、図19(A)に示すように、アバターオブジェクト6のボード部分を異ならせてもよい。
アバターオブジェクト6B〜6Dは、それぞれ、ユーザ5Aとは別のユーザに関連付けられたアバターオブジェクト6、すなわち、各ユーザの体重移動に基づいて仮想空間11を移動するものとして説明する。ただし、アバターオブジェクト6B〜6Dは、少なくとも1つが、プロセッサ210による自動的な制御に基づいて、仮想空間11を移動するものであってもよい。
ステップS1805において、プロセッサ210は、仮想カメラ制御モジュール1422として、HMD120の動きに応じて仮想空間11における仮想カメラ14の向きを決定する。なお、仮想カメラ14の位置は、上述したように、アバターオブジェクト6Aの位置に応じて決定される。より詳細には、プロセッサ210は、ユーザ5Aの頭部の姿勢と、仮想空間11における仮想カメラ14の位置とに応じて、仮想空間11における仮想カメラ14からの視界である視界領域15を制御する。当該処理は、図11のステップS1140の処理の一部に相当する。
ステップS1806において、プロセッサ210は、視界画像17をモニタ130に出力する。具体的には、プロセッサ210は、HMD120の動き(すなわち仮想カメラ14の向き)、ボード1531の傾き(すなわちアバターオブジェクト6の傾き)、仮想カメラ14の位置、および、第1仮想空間11を定義する仮想空間データに基づいて、視界領域15に対応する視界画像17を定義する。プロセッサ210は、さらに、HMD120のモニタ130に視界画像17を出力することによって、視界画像17をHMD120に表示させる。当該処理は、図11のステップS1180およびS1190の処理に相当する。
図19(A)の例の場合、プロセッサ210は、視界領域15を定義する。そして、プロセッサ210は、視界領域15に対応する視界画像1917を、図19(B)に示すようにモニタ130に表示する。視界画像1917は、視界領域15内に配置されているアバターオブジェクト6B、アバターオブジェクト6C、ボールオブジェクト1951(対象オブジェクト)、およびゴールオブジェクト1952(目的位置)を含む。ユーザ5Aは、視界画像1917を視認することによって、あたかもユーザ5A自身がアバターオブジェクト6Aであるかのように、各種仮想オブジェクトの位置関係を認識することができる。
ステップS1807において、プロセッサ210は、アバター制御モジュール1423として、アバターオブジェクト6を移動させる。プロセッサ210は、さらに、仮想カメラ制御モジュール1422として、アバターオブジェクト6Aに追随するように仮想カメラ14を移動させる。ステップS1808において、プロセッサ210は、アバター制御モジュール1423として、ボードの傾きに応じてアバターオブジェクト6の移動方向を決定する。具体的には、プロセッサ210は、傾きセンサ1537の検出結果に応じて、アバターオブジェクト6Aの移動方向を決定する。また、プロセッサ210は、ネットワーク2を介して受信したアバター情報に含まれる移動方向を示す情報に応じて、アバターオブジェクト6B〜6Dの移動方向を決定する。アバター情報に含まれる移動方向を示す情報は、一例として、アバターオブジェクト6B〜6Dそれぞれに関連付けられたユーザが乗るボード1531に備えられた、傾きセンサ1537の検出結果に応じて生成される。
上述したステップS1805〜S1808の処理、すなわち、HMD120の動きに応じた視界画像17の更新、アバターオブジェクト6の移動、および、ボード1531の傾きに応じたアバターオブジェクト6の移動方向の変更は、後述するステップS1809〜S1812が実行される間にも、継続して繰り返し実行される。
ある実施の形態に係るゲームは、上述したように、アバターオブジェクト6が、ボールオブジェクト1951をゴールオブジェクト1952まで移動させるゲームである。このため、ユーザ5Aは、ボード1531上で体重移動を行い、まず、アバターオブジェクト6Aをボールオブジェクト1951が配置された位置へ移動させようとする。一例として、プロセッサ210は、上記体重移動に基づくボード1531の傾きに応じて、アバターオブジェクト6Aを移動方向1941に移動させる。
図20は、ある実施の形態に従う仮想空間11および視界画像2017を示す図である。移動方向1941にアバターオブジェクト6Aを移動させた結果として、アバターオブジェクト6Aは、図20(A)に示すようにボールオブジェクト1951に近づく。プロセッサ210は、図20(A)に示す視界領域15に対応する視界画像2017を、図20(B)に示すようにモニタ130に表示する。視界画像2017では、視界画像1917に比べてボールオブジェクト1951が大きくなっている。ユーザ5Aは、視界画像2017を視認することによって、アバターオブジェクト6Aがボールオブジェクト1951に近づいていることを認識する。
なお、図20(A)では、説明との関連が薄いため、アバターオブジェクト6B〜6Dの位置を図19(A)の例から変化させていない。ただし、実際は、アバターオブジェクト6B〜6Dも、リアルタイムで仮想空間11を移動する。以下の図面でも同様に、説明との関連が薄い場合には、仮想空間11を示す図において、アバターオブジェクト6の移動を示していない。
ステップS1809において、プロセッサ210は、衝突検出モジュール1424として、アバターオブジェクト6Aとボールオブジェクト1951とが第1位置関係になった場合、アバターオブジェクト6Aとボールオブジェクト1951とが衝突したことを検出する。第1位置関係とは、例えば、アバターオブジェクト6Aとボールオブジェクト1951との距離が第1距離を下回ることである。あるいは、アバターオブジェクト6Aに規定されるコリジョンエリアと、ボールオブジェクト1951に規定されるコリジョンエリアとが少なくとも部分的に衝突することである。
ステップS1810において、プロセッサ210は、アバターオブジェクト6Aとボールオブジェクト1951とが衝突したことを検出した場合、関連付け制御モジュール1425として、アバターオブジェクト6Aにボールオブジェクト1951を関連付ける。一例として、プロセッサ210は、アバターオブジェクト6Aとボールオブジェクト1951とが衝突したことを検出した場合、ボールオブジェクト1951を、アバターオブジェクト6Aの前に配置することで、アバターオブジェクト6Aにボールオブジェクト1951を関連付ける。プロセッサ210は、アバターオブジェクト6Aに関連付けられたボールオブジェクト1951を、アバターオブジェクト6Aの移動に追随して移動させる。
ユーザ5Aは、ボールオブジェクト1951のゴールオブジェクト1952への移動を達成するために、ボード1531上で体重移動を行い、ボールオブジェクト1951が関連付けられたアバターオブジェクト6Aを、ゴールオブジェクト1952が配置された位置まで移動させようとする。一例として、プロセッサ210は、上記体重移動に基づくボード1531の傾きに応じて、アバターオブジェクト6Aを移動方向2041に移動させる。
図21は、ある実施の形態に従う仮想空間11および視界画像2117を示す図である。移動方向2041にアバターオブジェクト6Aを移動させた結果として、アバターオブジェクト6Aはゴールオブジェクト1952に近づき、図21(A)に示すように、ゴールオブジェクト1952に到達する。
ステップS1811において、プロセッサ210は、アバターオブジェクト6Aがゴールオブジェクト1952に到達したことを検出した場合、ボールオブジェクト1951のゴールオブジェクト1952への移動が達成されたと判定する。一例として、アバターオブジェクト6Aがゴールオブジェクト1952へ到達したことの検出は、アバターオブジェクト6Aがゴールオブジェクト1952に衝突したことの検出により実現される。プロセッサ210は、衝突検出モジュール1424として、アバターオブジェクト6Aとゴールオブジェクト1952とが第2位置関係になった場合、アバターオブジェクト6Aとゴールオブジェクト1952とが衝突したことを検出する。第2位置関係とは、例えば、アバターオブジェクト6Aとゴールオブジェクト1952との距離が第2距離を下回ることである。あるいは、アバターオブジェクト6Aに規定されるコリジョンエリアと、ゴールオブジェクト1952に規定されるコリジョンエリアとが少なくとも部分的に衝突することである。
ステップS1812において、プロセッサ210は、報酬制御モジュール1426として、第1チームに第1ポイントを付与する。具体的には、プロセッサ210は、ボールオブジェクト1951が関連付けられたアバターオブジェクト6Aが、ゴールオブジェクト1952に到達したことを検出した場合、アバターオブジェクト6Aが属する第1チームに第1ポイントを付与する。換言すれば、プロセッサ210は、アバターオブジェクト6Aがボールオブジェクト1951をゴールオブジェクト1952まで移動させたことへの報酬として、第1チームに第1ポイントを付与する。
プロセッサ210は、図21(A)に示す視界領域15に対応する視界画像2117を、図21(B)に示すようにモニタ130に表示する。プロセッサ210は、第1チームに第1ポイントを付与した場合、図21(B)に示すように、視界画像2117に重畳するように、説明画像2161をモニタ130に表示させてもよい。説明画像2161は、第1チームに、第1ポイントとして1点が付与されたことを示す画像である。
以上のように、プロセッサ210は、アバターオブジェクト6Aが、ボールオブジェクト1951が関連付けられた状態でゴールオブジェクト1952の位置に到達した場合、アバターオブジェクト6Aが属する第1チームに第1ポイントを付与する。
アバターオブジェクト6Bが、ボールオブジェクト1951が関連付けられた状態でゴールオブジェクト1952の位置に到達した場合も、プロセッサ210は、同様に、アバターオブジェクト6Bが属する第1チームに第1ポイントを付与する。
一方、アバターオブジェクト6Cまたはアバターオブジェクト6Dが、ボールオブジェクト1951が関連付けられた状態でゴールオブジェクト1952の位置に到達した場合、プロセッサ210は、アバターオブジェクト6Cおよびアバターオブジェクト6Dが属する第2チームに第2ポイントを付与する。第2ポイントは、一例として、第1ポイントと同じ1点であってもよい。
(ボールオブジェクトのパス)
図22は、ある実施の形態に従うHMDセット110において実行される処理の一部を表すフローチャートである。図23は、ある実施の形態に従う仮想空間11および視界画像2317を示す図である。図22に示すフローチャートは、図23(A)に示すように、アバターオブジェクト6Aにボールオブジェクト1951が関連付けられた状態から開始されるものとする。
プロセッサ210は、図23(A)に示す視界領域15に対応する視界画像2317を、図23(B)に示すようにモニタ130に表示する。視界画像2317は、アバターオブジェクト6Aの前に配置されたボールオブジェクト1951を含む。ユーザは、視界画像2317を視認することにより、ボールオブジェクト1951がアバターオブジェクト6Aに関連付けられていることを認識する。
ステップS2201において、プロセッサ210は、アバター制御モジュール1423として、味方のアバターオブジェクト6Bに近づくようにアバターオブジェクト6Aを移動させる。一例として、プロセッサ210は、ボード1531の傾きに応じてアバターオブジェクト6Aを移動方向2341に移動させる。また、プロセッサ210は、ネットワーク2を介して受信したアバター情報に応じて、アバターオブジェクト6Bを移動方向2342に移動させる。
図24は、ある実施の形態に従う仮想空間11および視界画像2417を示す図である。
プロセッサ210が移動方向2341にアバターオブジェクト6Aを移動させ、移動方向2342に味方のアバターオブジェクト6Bを移動させた結果として、図24(A)に示すように、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとが近づく。プロセッサ210は、図24(A)に示す視界領域15に対応する視界画像2417を、図24(B)に示すようにモニタ130に表示する。視界画像2417は、視界画像2317に比べて、味方のアバターオブジェクト6Bが大きくなっている。ユーザ5Aは、視界画像2417を視認することによって、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとが近づいていることを認識する。
ステップS2202において、プロセッサ210は、衝突検出モジュール1424として、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとが第3位置関係になった場合、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとが衝突したことを検出する。第3位置関係とは、例えば、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとの距離が第3距離を下回ることである。あるいは、アバターオブジェクト6Aに設定されるコリジョンエリアと、味方のアバターオブジェクト6Bに設定されるコリジョンエリアとが少なくとも部分的に衝突することである。
図25は、ある実施の形態に従う仮想空間11および視界画像2517を示す図である。ステップS2203において、プロセッサ210は、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとが衝突したことを検出した場合、関連付け制御モジュール1425として、アバターオブジェクト6Aとボールオブジェクト1951との関連付けを解消し、味方のアバターオブジェクト6Bにボールオブジェクト1951を関連付ける。そして、プロセッサ210は、図24(A)においてアバターオブジェクト6Aの前に配置されていたボールオブジェクト1951を、図25(A)に示すように、味方のアバターオブジェクト6Bの前に移動させる。
ステップS2204において、プロセッサ210は、ステップS2203における関連付けの変更に基づいて、報酬制御モジュール1426として、ゴール時に第1追加ポイントを獲得できる第1権利を第1チームに付与する。プロセッサ210は、ボールオブジェクト1951をアバターオブジェクト6Aの前から味方のアバターオブジェクト6Bの前に移動させるとき、一例として、図25(A)に示すように、ボールオブジェクト1951を1つ増やして2つにする。例えば、2つのボールオブジェクト1951のうちの一方は、味方のアバターオブジェクト6Bがゴールオブジェクト1952に到達したとき第1チームに付与される第1ポイント(1点)を示す。他方は、味方のアバターオブジェクト6Bがゴールオブジェクト1952に到達したとき、第1ポイントに加えて第1チームに付与される第1追加ポイント(1点)を示す。
プロセッサ210は、図25(A)に示す視界領域15に対応する視界画像2517を、図25(B)に示すようにモニタ130に表示する。視界画像2517は、味方のアバターオブジェクト6Bの前に配置された2つのボールオブジェクト1951を含む。ユーザ5Aは、視界画像2517において、ボールオブジェクト1951が味方のアバターオブジェクト6Bの前に移動していることを視認することによって、アバターオブジェクト6Aとボールオブジェクト1951との関連付けが解消され、味方のアバターオブジェクト6Bにボールオブジェクト1951が関連付けられたことを認識する。換言すれば、ユーザ5Aは、視界画像2517を視認することによって、あたかも、ボールオブジェクト1951が、アバターオブジェクト6から味方のアバターオブジェクト6Bにパスされたかのように認識する。また、ユーザ5Aは、視界画像2517に含まれる2つのボールオブジェクト1951を視認することによって、第1権利が第1チームに付与されたこと、具体的には、味方のアバターオブジェクト6Bがゴールオブジェクト1952に到達したとき、第1チームに2点が付与されることを認識する。
図26は、ある実施の形態に従う仮想空間11および視界画像2617を示す図である。衝突後、プロセッサ210は、アバターオブジェクト6Aおよび味方のアバターオブジェクト6Bの移動を継続させる。一例として、プロセッサ210は、アバターオブジェクト6Aおよび味方のアバターオブジェクト6Bを、図26(A)に示すように、移動方向を変更することなく移動させる。これにより、図26(A)に示すように、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとは離れていく。また、プロセッサ210は、2つのボールオブジェクト1951を、図26(A)に示すように味方のアバターオブジェクト6Bに追随して移動させる。
プロセッサ210は、図26(A)に示す視界領域15に対応する視界画像2617を、図26(B)に示すようにモニタ130に表示する。ユーザ5Aは、視界画像2617を視認することによって、味方のアバターオブジェクト6Bと、2つのボールオブジェクト1951が、視界領域15の外に移動したことを認識する。
図27は、ある実施の形態に従う仮想空間11および視界画像2717を示す図である。ここでは、アバターオブジェクト6Aおよび味方のアバターオブジェクト6Bは、仮想空間11を移動した結果、図27(A)に示す位置関係となったものとして説明する。
ステップS2205において、プロセッサ210は、アバター制御モジュール1423として、味方のアバターオブジェクト6Bに近づくようにアバターオブジェクト6Aを移動させる。一例として、プロセッサ210は、ボード1531の傾きに応じてアバターオブジェクト6Aを移動方向2741に移動させる。また、プロセッサ210は、ネットワーク2を介して受信したアバター情報に応じて、アバターオブジェクト6Bを移動方向2742に移動させる。
プロセッサ210は、図27(A)に示す視界領域15に対応する視界画像2717を、図27(B)に示すようにモニタ130に表示する。視界画像2717は、味方のアバターオブジェクト6Bの前に配置された2つのボールオブジェクト1951を含む。ユーザは、視界画像2717を視認することにより、ボールオブジェクト1951がアバターオブジェクト6Bに関連付けられていること、および、第1チームに第1権利が付与されていることを認識する。
図28は、ある実施の形態に従う仮想空間11および視界画像2817を示す図である。
プロセッサ210が移動方向2741にアバターオブジェクト6Aを移動させ、移動方向2742に味方のアバターオブジェクト6Bを移動させた結果として、図28(A)に示すように、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとが近づく。プロセッサ210は、図28(A)に示す視界領域15に対応する視界画像2817を、図28(B)に示すようにモニタ130に表示する。視界画像2817は、視界画像2717に比べて、アバターオブジェクト6Bが大きくなっている。ユーザ5Aは、視界画像2817を視認することによって、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとが近づいていることを認識する。
ステップS2206において、プロセッサ210は、衝突検出モジュール1424として、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとが第3位置関係になった場合、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとが衝突したことを検出する。
図29は、ある実施の形態に従う仮想空間11および視界画像2917を示す図である。ステップS2207において、プロセッサ210は、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとが衝突したことを検出した場合、関連付け制御モジュール1425として、味方のアバターオブジェクト6Bとボールオブジェクト1951との関連付けを解消し、アバターオブジェクト6Aにボールオブジェクト1951を関連付ける。そして、プロセッサ210は、図28(A)において味方のアバターオブジェクト6Bの前に配置されていたボールオブジェクト1951を、図29(A)に示すように、アバターオブジェクト6Aの前に移動させる。
ステップS2208において、プロセッサ210は、ステップS2207における関連付けの変更に基づいて、報酬制御モジュール1426として、上限値を超えない範囲で、第1追加ポイントの値を増加させる。プロセッサ210は、ボールオブジェクト1951を見方のアバターオブジェクト6Bの前からアバターオブジェクト6Aの前に移動させるとき、一例として、図29(A)に示すように、ボールオブジェクト1951を1つ増やして3つにする。例えば、3つのボールオブジェクト1951のうちの1つは、アバターオブジェクト6Aがゴールオブジェクト1952に到達したとき第1チームに付与される第1ポイント(1点)を示す。のこりの2つは、アバターオブジェクト6Aがゴールオブジェクト1952に到達したとき、第1ポイントに加えて第1チームに付与される第1追加ポイント(2点)を示す。
プロセッサ210は、図29(A)に示す視界領域15に対応する視界画像2917を、図29(B)に示すようにモニタ130に表示する。視界画像2917は、アバターオブジェクト6Aの前に配置された3つのボールオブジェクト1951を含む。ユーザ5Aは、視界画像2917において、ボールオブジェクト1951がアバターオブジェクト6Aの前に移動していることを視認することによって、味方のアバターオブジェクト6Bとボールオブジェクト1951との関連付けが解消され、アバターオブジェクト6Aにボールオブジェクト1951が関連付けられたことを認識する。換言すれば、ユーザ5Aは、視界画像2917を視認することによって、あたかも、ボールオブジェクト1951が、味方のアバターオブジェクト6Bからアバターオブジェクト6Aにパスされたかのように認識する。また、ユーザ5Aは、視界画像2917に含まれる3つのボールオブジェクト1951を視認することによって、第1追加ポイントの値が増加したこと、具体的には、アバターオブジェクト6Aがゴールオブジェクト1952に到達したとき、第1チームに3点が付与されることを認識する。
第1追加ポイントの上限値は、例えば、2点であってもよい。換言すれば、ゴール時に付与される第1ポイントおよび第1追加ポイントの合計は3点であってもよい。この例の場合、ステップS2208の後に、再度アバターオブジェクト6Aと味方のアバターオブジェクト6Bとが衝突したとしても、第1追加ポイントの値、すなわち、ボールオブジェクト1951の数は増加しない。また、第1追加ポイントには、上限値が設定されていなくてもよい。この場合、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとが衝突する度に、第1追加ポイントの値は増加していく。
なお、敵のアバターオブジェクト6Cおよび6Dの一方が、ボールオブジェクト1951が関連付けられた状態で他方と接触した場合、プロセッサ210は、ゴール時に第2追加ポイントを獲得できる第2権利を第2チームに付与する。また、敵のアバターオブジェクト6Cおよび6Dの一方が、第2権利が第2チームに付与された状態で他方と接触した場合、プロセッサ210は、上限値を超えない範囲で、第2追加ポイントの値を増加させる。第2追加ポイントの初期値は、一例として、第1追加ポイントと同じ1点であってもよい。また、第2追加ポイントの上限値は、一例として、第1追加ポイントと同じ値(例えば2点)であってもよい。
図30は、ある実施の形態に従う仮想空間11および視界画像3017を示す図である。プロセッサ210は、ボード1531の傾きに応じて、アバターオブジェクト6Aを、ゴールオブジェクト1952に近づくように移動させる。その結果として、アバターオブジェクト6Aはゴールオブジェクト1952に近づき、図30(A)に示すように、ゴールオブジェクト1952に到達する。すなわち、アバターオブジェクト6Aは、ゴールオブジェクト1952に衝突する。
ステップS2209において、プロセッサ210は、衝突検出モジュール1424として、アバターオブジェクト6Aとゴールオブジェクト1952とが第2位置関係になった場合、アバターオブジェクト6Aとゴールオブジェクト1952とが衝突したことを検出する。
ステップS2210において、プロセッサ210は、報酬制御モジュール1426として、第1チームに第1ポイントを付与する。ステップS2211において、プロセッサ210は、報酬制御モジュール1426として、第1チームに第1追加ポイントを付与する。図30の例の場合、プロセッサ210は、第1ポイントとして1点を付与し、さらに、第1追加ポイントとして2点を第1チームに付与する。
プロセッサ210は、図30(A)に示す視界領域15に対応する視界画像3017を、図30(B)に示すようにモニタ130に表示する。プロセッサ210は、図30(B)に示すように、視界画像3017に重畳するように、説明画像3061をモニタ130に表示させてもよい。説明画像3061は、第1チームに、第1ポイントおよび第1追加ポイントの合計として3点が付与されたことを示す画像である。
以上のように、ボールオブジェクト1951が関連付けられたアバターオブジェクト6が、同じチームに属するアバターオブジェクト6に衝突することにより、該チームに報酬が付与される。
アバターオブジェクト6の移動方向は、ボード1531に乗ったユーザ5の体重移動で決定されるため、調節が難しい。また、仮想空間11は3次元空間であるため、ユーザ5は、上記体重移動でアバターオブジェクト6の3次元空間での移動方向を制御することとなる。このため、仮想空間11内でアバターオブジェクト6をユーザ5の意図した方向に移動させることも難しい。以上より、アバターオブジェクト6を、移動する別のアバターオブジェクト6に衝突させることは、非常に難易度が高い。このような衝突を実現したときに報酬を付与することにより、ユーザ5Aは、アバターオブジェクト6Aにボールオブジェクト1951が関連付けられた場合、味方のアバターオブジェクト6Bとの衝突を目指そうとする。結果として、ゲームの興趣性が向上する。
(ボールオブジェクトの強奪)
図31は、ある実施の形態に従う仮想空間11および視界画像3117を示す図である。図31(A)に示すように、アバターオブジェクト6Aの前には、3つのボールオブジェクト1951が配置されている。すなわち、アバターオブジェクト6Aにはボールオブジェクト1951が関連付けられ、第1チームに第1権利が付与されている。また、第1追加ポイントの値が2点である。
プロセッサ210は、図31(A)に示す視界領域15に対応する視界画像3117を、図31(B)に示すようにモニタ130に表示する。視界画像3117は、アバターオブジェクト6Aの前に配置された3つのボールオブジェクト1951を含む。ユーザは、視界画像3117を視認することにより、ボールオブジェクト1951がアバターオブジェクト6Aに関連付けられていること、第1チームに第1権利が付与されていること、および、第1追加ポイントの値が2点であることを認識する。
一例として、プロセッサ210は、アバター制御モジュール1423として、ボード1531の傾きに応じて、アバターオブジェクト6Aを移動方向3141に移動させる。また、プロセッサ210は、ネットワーク2を介して受信したアバター情報に応じて、敵のアバターオブジェクト6Cを移動方向3142に移動させる。
図32は、ある実施の形態に従う仮想空間11および視界画像3217を示す図である。プロセッサ210が移動方向3141にアバターオブジェクト6Aを移動させ、移動方向3142に敵のアバターオブジェクト6Cを移動させた結果として、図32(A)に示すように、アバターオブジェクト6Aと敵のアバターオブジェクト6Cとが近づく。プロセッサ210は、図32(A)に示す視界領域15に対応する視界画像3217を、図32(B)に示すようにモニタ130に表示する。視界画像3217は、視界画像3117に比べて、敵のアバターオブジェクト6Cが大きくなっている。ユーザ5Aは、視界画像3217を視認することによって、アバターオブジェクト6Aと敵のアバターオブジェクト6Cとが近づいていることを認識する。
プロセッサ210は、衝突検出モジュール1424として、アバターオブジェクト6Aと敵のアバターオブジェクト6Cとが第4位置関係になった場合、アバターオブジェクト6Aと敵のアバターオブジェクト6Cとが衝突したことを検出する。第4位置関係とは、例えば、アバターオブジェクト6Aと敵のアバターオブジェクト6Cとの距離が第4距離を下回ることである。あるいは、アバターオブジェクト6Aに設定されるコリジョンエリアと、敵のアバターオブジェクト6Cに設定されるコリジョンエリアとが少なくとも部分的に衝突することである。
図33は、ある実施の形態に従う仮想空間11および視界画像3317を示す図である。プロセッサ210は、アバターオブジェクト6Aと、敵のアバターオブジェクト6Cとが衝突したことを検出した場合、関連付け制御モジュール1425として、アバターオブジェクト6Aとボールオブジェクト1951との関連付けを解消し、敵のアバターオブジェクト6Cにボールオブジェクト1951を関連付ける。そして、プロセッサ210は、図32(A)においてアバターオブジェクト6Aの前に配置されていたボールオブジェクト1951を、図33(A)に示すように、敵のアバターオブジェクト6Cの前に移動させる。
さらに、プロセッサ210は、報酬制御モジュール1426として、第1チームに付与されていた第1権利をリセットする。プロセッサ210は、ボールオブジェクト1951をアバターオブジェクト6Aの前から敵のアバターオブジェクト6Cの前に移動させるとき、一例として、図33(A)に示すように、ボールオブジェクト1951を2つ減らして1つにする。
プロセッサ210は、図33(A)に示す視界領域15に対応する視界画像3317を、図33(B)に示すようにモニタ130に表示する。視界画像3317は、敵のアバターオブジェクト6Cと、敵のアバターオブジェクト6Cの前に配置されたボールオブジェクト1951を含む。ユーザ5Aは、視界画像3317において、ボールオブジェクト1951が敵のアバターオブジェクト6Cの前に移動していることを視認することによって、アバターオブジェクト6Aとボールオブジェクト1951との関連付けが解消され、敵のアバターオブジェクト6Cにボールオブジェクト1951が関連付けられたことを認識する。換言すれば、ユーザ5Aは、視界画像2517を視認することによって、あたかも、アバターオブジェクト6Aが保持していたボールオブジェクト1951が、敵のアバターオブジェクト6Cにより強奪されたかのように認識する。また、ユーザ5Aは、視界画像2517に含まれる1つのボールオブジェクト1951を視認することによって、第1チームに付与された第1権利がリセットされたことを認識する。
なお、敵のアバターオブジェクト6C(または6D)にボールオブジェクト1951が関連付けられており、かつ、第2チームに第2権利が付与されている場合において、敵のアバターオブジェクト6C(または6D)に、アバターオブジェクト6A(または味方のアバターオブジェクト6B)が衝突した場合、プロセッサ210は、敵のアバターオブジェクト6Cとボールオブジェクトとの関連付けを解消し、アバターオブジェクト6A(または味方のアバターオブジェクト6B)にボールオブジェクト1951を関連付ける。また、プロセッサ210は、第2権利をリセットする。
以上のように、アバターオブジェクト6が、別のチームに属する、ボールオブジェクト1951が関連付けられたアバターオブジェクト6に衝突することにより、別のチームに付与されていた報酬がリセットされる。これにより、ユーザ5Aは、アバターオブジェクト6Aにボールオブジェクト1951が関連付けられている場合、ボード1531上での体重移動により、アバターオブジェクト6Cまたは6Dとの衝突を回避しようとする。一方、アバターオブジェクト6Cまたは6Dのユーザは、ボード1531上での体重移動により、ボールオブジェクト1951が関連付けられているアバターオブジェクト6Aとの衝突を目指そうとする。
また、ユーザ5Aは、第2チームに属するアバターオブジェクト6Cまたは6Dにボールオブジェクト1951が関連付けられている場合、ボード1531上での体重移動により、ボールオブジェクト1951が関連付けられているアバターオブジェクト6Cまたは6Dとの衝突を目指そうとする。一方、アバターオブジェクト6Cまたは6Dのユーザは、ボード1531上での体重移動により、アバターオブジェクト6Aまたは6Bとの衝突を回避しようとする。
上述したように、アバターオブジェクト6の移動方向は、ボード1531に乗ったユーザ5の体重移動で決定されるため、調節が難しい。また、仮想空間11は3次元空間であるため、ユーザ5は、上記体重移動でアバターオブジェクト6の3次元空間での移動方向を制御することとなる。このため、仮想空間11内でアバターオブジェクト6をユーザ5の意図した方向に移動させることも難しい。結果として、アバターオブジェクト6による別のアバターオブジェクト6への衝突、および、該衝突の回避は難易度の高いものとなる。よって、ゲームの興趣性が向上する。
上述したように、ある実施の形態に係るゲームは、ポイントの合計を、第1チームと第2チームとで競うゲームである。一例として、プロセッサ210は、第1チームと第2チームとの対戦が終了したとき、第1チームに付与された第1ポイントおよび第1追加ポイントの合計と、第2チームに付与された第2ポイントおよび第2追加ポイントの合計とに基づき、ゲームの勝敗を決定する。例えば、プロセッサ210は、該合計がより多いチームを対戦に勝利したチームとする。ゲームの終了条件は、例えば、対戦の開始から、予め設定された時間が経過したことであってもよいし、いずれかのチームのポイントの合計(例えば、第1チームにおける第1ポイントおよび第1追加ポイントの合計)が、予め設定された値に到達したことであってもよい。
(ブースト)
ある実施の形態において、プロセッサ210は、コントローラ1538に対するユーザ5Aの第1操作の入力を受け付ける。さらに、プロセッサ210は、アバター制御モジュール1423として、第1操作の入力に従って、アバターオブジェクト6Aを、第1操作が入力される前よりも速く移動させる。換言すれば、プロセッサ210は、第1操作の入力に従って、アバターオブジェクト6Aの移動速度を上げる。
ここで、アバターオブジェクト6Aと別のアバターオブジェクト6とは、同じ移動方向に移動しているものとする。また、別のアバターオブジェクト6は、アバターオブジェクト6Aの前にいるものとする。この場合において、ユーザ5Aは、コントローラ1538に第1操作を入力することにより、アバターオブジェクト6Aを別のアバターオブジェクト6に追いつかせ、衝突させることができる。これにより、より戦略的に、第1チームに第1報酬を付与したり、第1追加ポイントの値を増加させたり、第2報酬をリセットしたりすることができる。
また、ユーザ5Aは、例えば、アバターオブジェクト6Aを、味方のアバターオブジェクト6Bと同一の移動方向に移動させながら、味方のアバターオブジェクト6Bの後ろに配置させ、第1操作を入力する。これにより、アバターオブジェクト6Aと味方のアバターオブジェクト6Bとの衝突を容易に実現し、結果として容易に第1権利を第1チームに付与させることができる。さらに、該衝突の後、アバターオブジェクト6Aが味方のアバターオブジェクト6Bの前に位置した場合には、味方のアバターオブジェクト6Bが関連付けられたユーザが、第1操作を入力することにより、容易に第1追加ポイントの値を増加させることができる。
プロセッサ210は、増大した移動速度を、第1操作の入力が継続されている限り維持してもよい。また、増大した移動速度が維持される第1期間が設定されており、第1操作の入力が、第1期間を超えて継続された場合、プロセッサ210は、移動速度を元に戻してもよい。この例において、プロセッサ210は、視界画像17に重畳するように、第1期間を示すゲージ(不図示)をモニタ130に表示してもよい。第1期間を示すゲージは、第1操作が入力されると減少し、第1期間まで第1操作の入力が継続された場合0となる。
プロセッサ210は、減少したゲージを、第1操作の入力が解除された場合に増加させてもよい。また、プロセッサ210は、減少したゲージを、アバターオブジェクト6Aが所定の位置に到達したり、所定のアイテムオブジェクトに衝突したりすることにより増加させてもよい。
〔実施形態2〕
本実施の形態では、アバターオブジェクト6A(第1オブジェクト)が向かうべき第1位置をユーザ5Aに示す指示オブジェクトを、仮想空間11に配置する例を説明する。なお、第1位置は、仮想体験中に移動する動的な位置であってもよいし、仮想体験中には移動しない静的な位置であってもよい。
[ゲーム進行処理]
図34は、ある実施の形態に従うHMDセット110において実行される処理の一部を表すフローチャートである。該フローチャートは、図18に示すステップS1804の処理が実行された後のゲーム進行処理を示している。図35は、ある実施の形態に従う仮想空間11および視界画像3517を示す図である。なお、図35では、図19と同様の理由で、仮想空間11を上面図で示している。これは、図36〜41でも同様である。
ステップS3401において、プロセッサ210は、仮想オブジェクト生成モジュール1421として、指示オブジェクトの1つである、図35(A)に示すスフィア3571を生成し、仮想空間11に配置する。
ある実施の形態において、スフィア3571は、ボールオブジェクト1951が配置された位置(第1位置)を中心とした立体である。より具体的には、スフィア3571は、ボールオブジェクト1951が配置された位置を中心とし、かつ、仮想空間11に配置可能な最大の立体である。スフィア3571は、例えば、図35(A)に示すように、球であってもよい。
ステップS3402において、プロセッサ210は、仮想カメラ制御モジュール1422として、HMD120の動きに応じて仮想空間11における仮想カメラ14の向きを決定する。このステップにおける処理は、図18に示すステップS1805の処理と同様である。ステップS3403において、プロセッサ210は、視界画像17をモニタ130に出力する。このステップにおける処理は、図18に示すステップS1806の処理と同様である。
ステップS3402およびS3403の処理、すなわち、HMD120の動きに応じた視界画像17の更新は、後述するステップS3403〜S3414が実行される間にも、継続して繰り返し実行される。
プロセッサ210は、図35(A)に示す視界領域15に対応する視界画像3517を、図35(B)に示すようにモニタ130に表示する。視界画像3517は、ボールオブジェクト1951が配置された位置を中心としたスフィア3571の一部を含む。一方、ボールオブジェクト1951は図35の(A)に示すように視界領域15の範囲外にあるため、視界画像3517には含まれていない。このため、ユーザ5Aは、視界画像3517を視認することによって、スフィア3571の一部を視認することができるが、ボールオブジェクト1951の位置を容易に認識することは困難である。
なお、実施形態1では、第1オブジェクトはアバターオブジェクト6Aおよび6Bに相当するものであったが、本実施の形態では、第1オブジェクトはアバターオブジェクト6Aに相当する。図35(A)に示すように、仮想カメラ14がアバターオブジェクト6Aの頭部に配置される場合、第1オブジェクトは仮想カメラ14であると表現することもできる。
ステップS3404において、プロセッサ210は、仮想オブジェクト制御モジュール1427として、スフィア3571をボールオブジェクト1951に向かって縮小させる。具体的には、プロセッサ210は、スフィア3571の表面を中心に向かって縮小させる。
図36は、ある実施の形態に従う仮想空間11および視界画像3617を示す図である。図36(A)に示すスフィア3571は、図35(A)に示すスフィア3571に比べ縮小している。プロセッサ210は、図36(A)に示す視界領域15に対応する視界画像3617を、図36(B)に示すようにモニタ130に表示する。
視界画像3517では、画像全体にスフィア3571の一部が存在していたが、視界画像3617では、画像の右側のみにスフィア3571が存在している。換言すれば、ユーザ5Aは、視界画像3517および視界画像3617を視認することによって、スフィア3571の表面が、視界画像17に現れ、方向3649に移動し、視界画像17から消える様子(すなわち、スフィア3571が縮小する様子)を視認する。スフィア3571は、第1位置、すなわち、ボールオブジェクト1951に向かって縮小するため、ユーザ5Aは、スフィア3571の縮小を追うように、頭部(すなわち、HMD120)を動かす。これにより、基準視線16の方向、すなわち視界領域15の向きが変化する。
図37は、ある実施の形態に従う仮想空間11および視界画像3717を示す図である。図37(A)に示すスフィア3571は、図36(A)に示すスフィア3571に比べさらに縮小している。また、ユーザ5Aが頭部を動かしたことにより、図37の(A)に示すように、視界領域15の向きが変化している。視界領域15の向きが変化したことにより、視界領域15内にボールオブジェクト1951が含まれている。
プロセッサ210は、図37(A)に示す視界領域15に対応する視界画像3717を、図37(B)に示すようにモニタ130に表示する。視界画像3717は、さらに縮小したスフィア3571、および、ボールオブジェクト1951を含む。つまり、スフィア3571の縮小を追うように頭部を動かすことにより、ユーザ5Aは、ボールオブジェクト1951を視認することができる。
スフィア3571は、図35(A)などに示すように、表面にメッシュ状のパターンを有してもよい。これにより、スフィア3571が単一のテクスチャで表現される場合に比べ、ユーザ5Aの意識がスフィア3571に向きやすい。換言すれば、ユーザ5Aがスフィア3571に気づきやすくなる。よって、ユーザ5Aは、仮想空間11内にスフィア3571が配置されたことを容易に認識できる。結果として、ユーザ5Aが、ボールオブジェクト1951の位置を認識しやすくなる。
上述した例では、スフィア3571は、ボールオブジェクト1951が配置された位置を中心とする立体であったが、ゴールオブジェクト1952が配置された位置を中心とする立体であってもよい。つまり、スフィア3571は、ゴールオブジェクト1952に向かって縮小する立体であってもよい。
図38は、ある実施の形態に従う仮想空間11および視界画像3817を示す図である。ステップS3405において、プロセッサ210は、仮想オブジェクト生成モジュール1421として、指示オブジェクトの1つである、図38(A)に示すガイド3872を生成し、仮想空間11に配置する。
ガイド3872は、アバターオブジェクト6A(すなわち、仮想カメラ14)から第1位置まで延伸する。ある実施の形態において、ガイド3872は、図38(A)に示すように、アバターオブジェクト6Aから、アバターオブジェクト6Aの移動方向に第1距離進んだ第2位置まで延伸する第1部分3873と、第2位置から第1位置まで延伸する第2部分3874とを含む。なお、実施形態1では、第1距離は、アバターオブジェクト6Aとボールオブジェクト1951との衝突検出に用いられる閾値であったが、本実施形態では、上述したように、アバターオブジェクト6Aと第2位置との間の距離である。
ある局面において、プロセッサ210は、第2部分3874が、第2位置からボールオブジェクト1951が配置された位置(第1位置)まで延伸するガイド3872を配置する。プロセッサ210は、いずれかのアバターオブジェクト6がボールオブジェクト1951に衝突するまで、すなわち、いずれかのアバターオブジェクト6にボールオブジェクト1951が関連付けられるまで、ガイド3872の第2部分3874が、第2位置からボールオブジェクト1951が配置された位置まで延伸した状態を維持する。
プロセッサ210は、図38(A)に示す視界領域15に対応する視界画像3817を、図38(B)に示すようにモニタ130に表示する。視界画像3817は、図38(B)の右方向に延伸しているガイド3872を含む。一方、ボールオブジェクト1951は図38の(A)に示すように視界領域15の範囲外にあるため、視界画像3817には含まれていない。ユーザ5Aは、視界画像3817を視認することによって、ガイド3872を視認する。上述したように、ガイド3872はボールオブジェクト1951が配置された位置まで延伸しているため、ユーザ5Aは、ガイド3872の延伸方向に、頭部(すなわち、HMD120)を動かす。
図39は、ある実施の形態に従う仮想空間11および視界画像3917を示す図である。上述したように、ユーザ5Aが頭部を動かしたことにより、図39(A)に示すように、視界領域15の向きが変化している。視界領域15の向きが変化したことにより、視界領域15内にボールオブジェクト1951が含まれている。
プロセッサ210は、図39(A)に示す視界領域15に対応する視界画像3917を、図39(B)に示すようにモニタ130に表示する。視界画像3917は、ガイド3872の第2部分3874、および、ボールオブジェクト1951を含む。つまり、ガイド3872の延伸方向に頭部を動かすことにより、ユーザ5Aは、ボールオブジェクト1951を視認することができる。なお、ガイド3872の第1部分3873は、バターオブジェクト6Aの移動方向に第1距離進んだ第2位置まで延伸する部分であるため、視界領域15の範囲外にある。このため、第1部分3873は、視界画像3917に含まれていない。
ステップS3406において、プロセッサ210は、アバター制御モジュール1423として、アバターオブジェクト6を移動させる。プロセッサ210は、さらに、仮想カメラ制御モジュール1422として、アバターオブジェクト6Aに追随するように仮想カメラ14を移動させる。このステップにおける処理は、図18に示すステップS1807の処理と同様である。ステップS3407において、プロセッサ210は、アバター制御モジュール1423として、ボードの傾きに応じてアバターオブジェクト6の移動方向を決定する。このステップにおける処理は、図18に示すステップS1807の処理と同様である。
ステップS3406およびS3407の処理、すなわち、アバターオブジェクト6の移動、および、ボード1531の傾きに応じたアバターオブジェクト6の移動方向の変更は、後述するステップS3408〜S3414が実行される間にも、継続して繰り返し実行される。
ステップS3408において、プロセッサ210は、仮想オブジェクト制御モジュール1427として、アバターオブジェクト6Aの移動に応じて、ガイド3872を変形させる。具体的には、プロセッサ210は、アバターオブジェクト6Aの移動に伴う、アバターオブジェクト6Aおよび仮想カメラ14と、ボールオブジェクト1951との位置関係の変更に応じて、ガイド3872を変形させる。より具体的には、プロセッサ210は、アバターオブジェクト6Aが仮想空間11を移動しても、ガイド3872が、アバターオブジェクト6A(仮想カメラ14)からボールオブジェクト1951まで延伸した状態を維持するように、第2部分3874を変形させる。これにより、ユーザ5Aは、アバターオブジェクト6Aが移動したとしても、視界画像17に含まれるガイド3872を視認することで、ボールオブジェクト1951の位置を認識することができる。
図40は、ある実施の形態に従う仮想空間11および視界画像4017を示す図である。ボールオブジェクト1951が配置された位置へ向かってアバターオブジェクト6Aを移動させた結果、アバターオブジェクト6Aとボールオブジェクト1951とが第1位置関係になった場合、ステップS3409において、プロセッサ210は、衝突検出モジュール1424として、アバターオブジェクト6Aとボールオブジェクト1951とが衝突したことを検出する(ステップS3409においてYES)。
アバターオブジェクト6Aとボールオブジェクト1951とが衝突したことを検出した場合、ステップS3410において、プロセッサ210は、関連付け制御モジュール1425として、アバターオブジェクト6Aにボールオブジェクト1951を関連付け、図40(A)に示すように、ボールオブジェクト1951を、アバターオブジェクト6Aの前に配置する。
さらに、ステップS3411において、プロセッサ210は、仮想オブジェクト制御モジュール1427として、図40(A)に示すように、アバターオブジェクト6A(仮想カメラ14)からゴールオブジェクト1952へ伸びるようにガイド3872の第2部分3874を変形させる。一例として、プロセッサ210は、第1位置をボールオブジェクト1951が配置されていた位置から、ゴールオブジェクト1952が配置されている位置へ変更する。これにより、プロセッサ210は、第2部分3874の延伸先を、ボールオブジェクト1951からゴールオブジェクト1952へ変更する。
プロセッサ210は、図40(A)に示す視界領域15に対応する視界画像4017を、図40(B)に示すようにモニタ130に表示する。ユーザ5Aは、視界画像4017を視認することにより、アバターオブジェクト6Aが次に向かうべき位置である、ゴールオブジェクト1952が配置された位置を容易に認識することができる。
また、ゴールオブジェクト1952が視界領域15の範囲外にあるために、ゴールオブジェクト1952が視界画像17に含まれていない場合があり得る。この場合、視界画像17は、画像の上下左右いずれかの端部に延伸するガイド3872を含む。ユーザ5Aは、このガイド3872を視認することにより、ゴールオブジェクト1952の位置を予測することができる。ユーザ5Aが、ガイド3872の延伸方向に頭部を動かすことにより、視界画像17にゴールオブジェクト1952が含まれる。これにより、ユーザ5Aは、ゴールオブジェクト1952を視認することができる。
プロセッサ210が、アバターオブジェクト6Aとボールオブジェクト1951との衝突を検出する前に、他のアバターオブジェクト6(第2オブジェクト)とボールオブジェクト1951との衝突を検出することもあり得る(ステップS3409においてNO、かつステップS3412においてYES)。図41は、ある実施の形態に従う仮想空間11および視界画像4117を示す図である。
なお、実施形態1では、第2オブジェクトはアバターオブジェクト6Cおよび6Dに相当するものであったが、本実施の形態では、第2オブジェクトは、他のアバターオブジェクト6、すなわち。アバターオブジェクト6B〜6Dに相当する。
他のアバターオブジェクト6(図41(A)ではアバターオブジェクト6C)と、ボールオブジェクト1951とが衝突したことを検出した場合、ステップS3413において、プロセッサ210は、関連付け制御モジュール1425として、アバターオブジェクト6Cにボールオブジェクト1951を関連付け、図41(A)に示すように、ボールオブジェクト1951を、アバターオブジェクト6Cの前に配置する。
さらに、ステップS3414において、プロセッサ210は、仮想オブジェクト制御モジュール1427として、図41(A)に示すように、アバターオブジェクト6A(仮想カメラ14)からアバターオブジェクト6Cへ伸びるようにガイド3872の第2部分3874を変形させる。一例として、プロセッサ210は、第1位置をボールオブジェクト1951が配置されていた位置から、アバターオブジェクト6Cがいる位置へ変更する。これにより、プロセッサ210は、第2部分3874の延伸先を、ボールオブジェクト1951からアバターオブジェクト6Cへ変更する。
プロセッサ210は、図41(A)に示す視界領域15に対応する視界画像4117を、図41(B)に示すようにモニタ130に表示する。ユーザ5Aは、視界画像4117を視認することにより、アバターオブジェクト6Aが次に向かうべき位置である、アバターオブジェクト6Cがいる位置を容易に認識することができる。
また、アバターオブジェクト6Cが視界領域15の範囲外にいるために、アバターオブジェクト6Cが視界画像17に含まれていない場合があり得る。この場合、視界画像17は、画像の上下左右いずれかの端部に延伸するガイド3872を含む。ユーザ5Aは、このガイド3872を視認することにより、アバターオブジェクト6Cの位置を予測することができる。ユーザ5Aが、ガイド3872の延伸方向に頭部を動かすことにより、視界画像17にアバターオブジェクト6Cが含まれる。これにより、ユーザ5Aは、アバターオブジェクト6Cを視認することができる。
以上のように、プロセッサ210は、本実施形態に係る指示オブジェクト、すなわち、スフィア3571およびガイド3872を、いずれも第1位置に向かうように変形させる。ユーザ5Aは、視界画像17に含まれるこれら指示オブジェクトを視認することにより、アバターオブジェクト6Aが向かうべき第1位置を容易に認識することができる。結果として、仮想体験の興趣性が向上する。
また、本実施の形態では、ユーザ5Aの動作に関わらず、アバターオブジェクト6Aは常時移動する。このため、アバターオブジェクト6Aと第1位置の位置関係は常時変化することとなり、ユーザ5Aが第1位置を見失いやすい。これに対して、プロセッサ210は、第1位置に向かって延伸するようにガイド3872を変形させるので、ユーザ5Aが第1位置を見失うという状況の発生を抑制することができる。
ガイド3872に関する情報が、他のユーザ5に関連付けられたコンピュータ200には送信されない構成であってもよい。つまり、他のユーザ5に関連付けられたアバターオブジェクト6から第1位置に延伸するガイド3872は、ユーザ5Aが視認する視界画像17には表示されない構成であってもよい。これにより、視界画像17に複数のガイド3872が含まれ、ボールオブジェクト1951やゴールオブジェクト1952などの各種オブジェクトを視認しにくくなるという状況を防ぐことができる。
プロセッサ210は、さらに、第1位置の方向を示す指示画像を、視界画像17に重畳するようにモニタ130に表示させてもよい。例えば、プロセッサ210は、第1位置の方向に向く矢印型の指示画像をモニタ130に表示させてもよい。プロセッサ210は、該指示画像が示す方向を、アバターオブジェクト6Aの移動に応じて変更してもよい。また、プロセッサ210は、第1位置の変更に応じて、指示画像の態様を変更してもよい。一例として、プロセッサ210は、第1位置が、ボールオブジェクト1951が配置された位置である場合と、ゴールオブジェクト1952が配置された位置である場合と、ボールオブジェクト1951が関連付けられたアバターオブジェクト6のいる位置である場合とで、指示画像の色を変更してもよい。また、プロセッサ210は、ボールオブジェクト1951が関連付けられたアバターオブジェクト6が、第1チームに属するアバターオブジェクト6(すなわち、味方)であるか、第2チームに属するアバターオブジェクト6(すなわち、敵)であるかに応じて、指示画像の色を変更してもよい。
また、プロセッサ210は、指示画像を視界画像17に重畳するようにモニタ130に表示させる構成に代えて、第1位置の方向を示す(例えば、矢印型の)オブジェクトを、仮想空間11に配置してもよい。一例として、プロセッサ210は、アバターオブジェクト6Aの移動方向に所定距離進んだ位置に、該オブジェクトを配置し、アバターオブジェクト6Aの移動に追随するように、該オブジェクトを移動させてもよい。
プロセッサ210は、ガイド3872の第1部分3873を、アバターオブジェクト6Aから、仮想カメラ14の視界方向に延伸させてもよい。これにより、第1部分3873が常に視界画像17に含まれることとなるので、ユーザ5Aは、第1部分がアバターオブジェクト6Aの移動方向に延伸する構成に比べて、第1位置までの経路を容易に認識することができる。
図34を参照して説明したゲーム進行処理では、スフィア3571およびガイド3872を仮想空間11に配置する例を説明したが、プロセッサ210は、スフィア3571およびガイド3872の一方のみを仮想空間11に配置してもよい。
本実施の形態では、実施形態1で説明したゲームをユーザ5Aに仮想体験させる仮想空間11に、スフィア3571およびガイド3872を配置する例を説明した。ただし、スフィア3571およびガイド3872が配置される仮想空間は、実施形態1で説明したゲームをユーザ5Aに仮想体験させる仮想空間11に限定されない。一例として、目的位置に到達するまでの時間を競うゲームをユーザ5Aに仮想体験させる仮想空間に、スフィア3571およびガイド3872の少なくとも一方を配置してもよい。
また、本実施の形態に係る、アバターオブジェクト6Aの移動を制御するためのユーザ5Aの動作は、ボード1531上での体重移動に限定されない。
〔実施形態3〕
本実施の形態では、アバターオブジェクト6A(第1オブジェクト)と障害物オブジェクトとの衝突を抑制する制御の一例を説明する。
[ゲーム進行処理]
図42は、ある実施の形態に従うHMDセット110において実行される処理の一部を表すフローチャートである。該フローチャートは、図18に示すステップS1804の処理が実行された後のゲーム進行処理を示している。図43は、ある実施の形態に従う仮想空間11および視界画像4317を示す図である。なお、図43では、図19と同様の理由で、仮想空間11を上面図で示している。これは、図44でも同様である。
ステップS4201において、プロセッサ210は、仮想オブジェクト生成モジュール1421として、障害物オブジェクトを配置する。障害物オブジェクトは、一例として、アバターオブジェクト6Aが障害物オブジェクトに衝突したことを検出された場合、アバターオブジェクト6Aの移動方向への移動を妨げるオブジェクトである。具体的には、障害物オブジェクトは、衝突したアバターオブジェクト6Aを停止させるオブジェクトであってもよい。該障害物オブジェクトは、一例として、図43(A)に示す障害物オブジェクト4353(第2オブジェクト)である。ただし、障害物オブジェクトの態様(形状、サイズ、色など)は、障害物オブジェクト4353の態様に限定されない。
プロセッサ210は、仮想カメラ14からの視界領域(図43では不図示)に対応する視界画像4317を、図43(B)に示すようにモニタ130に表示する。視界画像4317は、障害物オブジェクト4353の一部を含む。ユーザ5Aは、視界画像4317を視認することによって、アバターオブジェクト6Aの移動方向の延長線上に障害物オブジェクト4353が存在すること、および、障害物オブジェクト4353を回避する必要があることを認識する。
なお、実施形態1では、第1オブジェクトはアバターオブジェクト6Aおよび6Bに相当するものであったが、本実施の形態では、第1オブジェクトはアバターオブジェクト6Aに相当する。図43(A)に示すように、仮想カメラ14がアバターオブジェクト6Aの頭部に配置される場合、第1オブジェクトは仮想カメラ14であると表現することもできる。また、実施形態1では、第2オブジェクトはアバターオブジェクト6Cおよび6Dに相当するものであったが、本実施の形態では、第2オブジェクトは障害物オブジェクト4353に相当する。
プロセッサ210は、衝突検出モジュール1424として、アバターオブジェクト6Aと障害物オブジェクト4353とが第5位置関係になった場合、アバターオブジェクト6Aと障害物オブジェクト4353とが衝突したことを検出する。第5位置関係とは、例えば、アバターオブジェクト6Aと障害物オブジェクト4353との距離が第5距離を下回ることである。あるいは、アバターオブジェクト6Aに規定される第1コリジョンエリア4381(図43(A)参照)と、障害物オブジェクト4353に規定されるコリジョンエリア4383(図43(A)参照)とが少なくとも部分的に衝突することである。
ステップS4202において、プロセッサ210は、仮想カメラ制御モジュール1422として、HMD120の動きに応じて仮想空間11における仮想カメラ14の向きを決定する。このステップにおける処理は、図18に示すステップS1805の処理と同様である。ステップS4203において、プロセッサ210は、視界画像17をモニタ130に出力する。このステップにおける処理は、図18に示すステップS1806の処理と同様である。
ステップS4204において、プロセッサ210は、アバター制御モジュール1423として、アバターオブジェクト6を移動させる。プロセッサ210は、さらに、仮想カメラ制御モジュール1422として、アバターオブジェクト6Aに追随するように仮想カメラ14を移動させる。このステップにおける処理は、図18に示すステップS1807の処理と同様である。ステップS4205において、プロセッサ210は、アバター制御モジュール1423として、ボードの傾きに応じてアバターオブジェクト6の移動方向を決定する。このステップにおける処理は、図18に示すステップS1807の処理と同様である。
上述したステップS4202〜S4205の処理、すなわち、HMD120の動きに応じた視界画像17の更新、アバターオブジェクト6の移動、および、ボード1531の傾きに応じたアバターオブジェクト6の移動方向の変更は、後述するステップS4206〜S4208が実行される間にも、継続して繰り返し実行される。
ステップS4206において、プロセッサ210は、衝突検出モジュール1424として、アバターオブジェクト6Aと障害物オブジェクト4353との衝突が予想されることを示す第1条件が成立したか否かを判定する。プロセッサ210は、一例として、アバターオブジェクト6Aと障害物オブジェクト4353とが第6位置関係になった場合、第1条件が成立したと判定する。具体的には、プロセッサ210は、図43(A)に示すように、アバターオブジェクト6Aに規定される、第1コリジョンエリア4381より広い第2コリジョンエリア4382と、障害物オブジェクト4353に規定されるコリジョンエリア4383とが少なくとも部分的に衝突した場合、第1条件が成立したと判定してもよい。また、プロセッサ210は、アバターオブジェクト6Aと障害物オブジェクト4353との距離が第6距離を下回り、かつ、アバターオブジェクト6Aの移動方向の延長線上に障害物オブジェクト4353が存在する場合、第1条件が成立したと判定してもよい。
第1条件が成立したと判定した場合(ステップS4206においてYES)、ステップS4207において、プロセッサ210は、アバター制御モジュール1423として、アバターオブジェクト6Aの移動速度を低下させる。さらに、プロセッサ210は、仮想カメラ制御モジュール1422として、アバターオブジェクト6Aに追随するように仮想カメラ14の移動速度を低下させる。
プロセッサ210は、ユーザ5Aの体重移動に基づくアバターオブジェクト6Aの移動方向の変更によって、アバターオブジェクト6Aによる障害物オブジェクト4353の回避が間に合う程度に、アバターオブジェクト6Aの移動速度を低下させる。一例として、プロセッサ210は、アバターオブジェクト6Aと障害物オブジェクト4353との距離の減少に従って、アバターオブジェクト6Aの移動速度を低下させてもよい。これにより、アバターオブジェクト6Aと障害物オブジェクト4353との衝突を回避しやすくすることができる。
図44は、ある実施の形態に従う仮想空間11および視界画像4217を示す図である。ステップS4208において、プロセッサ210は、さらに、仮想オブジェクト制御モジュール1427として、図44(A)に示すように、アバターオブジェクト6Aと障害物オブジェクト4353との衝突が抑制される方向に障害物オブジェクト4353を移動させる。
一例として、プロセッサ210は、アバターオブジェクト6Aの移動方向に基づいて、障害物オブジェクト4353の移動方向を決定してもよい。具体的には、図44(A)に示すように、アバターオブジェクト6Aが移動方向4441に移動する、すなわち、アバターオブジェクト6Aが障害物オブジェクト4353を避けるために右に曲がる場合、プロセッサ210は、移動方向4441に対して逆方向である移動方向4444に、障害物オブジェクト4353を移動させてもよい。これにより、移動方向4444と異なる方向へ障害物オブジェクト4353を移動させる構成と比べて、アバターオブジェクト6Aと障害物オブジェクト4353との衝突をより抑制することができる。また、一例として、プロセッサ210は、傾きセンサ1537の検出結果に基づいて、該検出結果から特定できるアバターオブジェクト6Aの移動方向と逆方向に、障害物オブジェクト4353の移動方向を決定してもよい。
プロセッサ210は、仮想カメラ14からの視界領域(図44では不図示)に対応する視界画像4417を、図44(B)に示すようにモニタ130に表示する。視界画像4417は、アバターオブジェクト6Aと障害物オブジェクト4353とが図44(A)に示す位置関係にあるときの視界画像であり、移動方向4441にアバターオブジェクト6Aが移動する(すなわち、右に曲がる)直前の視界画像である。視界画像4417に含まれる障害物オブジェクト4353は、視界画像4317に含まれる障害物オブジェクト4353に比べて端部が視界画像の左に移動している。つまり、プロセッサ210は、傾きセンサ1537の検出結果に基づいて、障害物オブジェクト4353を図44の左方向に移動させている。ユーザ5Aは、視界画像4417を視認することによって、障害物オブジェクト4353が移動したことを認識する。また、ユーザ5Aは、視界画像4417を視認することによって、アバターオブジェクト6Aを移動方向4441に移動させる(すなわち、右に曲がるように移動させる)ことにより、アバターオブジェクト6Aと障害物オブジェクト4353との衝突を回避することができる可能性が高くなることを認識する。
また、プロセッサ210は、アバターオブジェクト6Aと障害物オブジェクト4353との距離の減少に従って、障害物オブジェクト4353を移動させてもよい。換言すれば、プロセッサ210は、アバターオブジェクト6Aと障害物オブジェクト4353との距離の減少に従って、最初に障害物オブジェクト4353が配置された位置からの、障害物オブジェクト4353の移動距離を増加させてもよい。換言すれば、プロセッサ210は、アバターオブジェクト6Aと障害物オブジェクト4353との距離の減少に従って、障害物オブジェクト4353の総移動距離を増加させてもよい。これにより、アバターオブジェクト6Aと障害物オブジェクト4353との衝突を回避しやすくすることができる。
なお、プロセッサ210は、第1条件が成立していないと判定した場合(ステップS4206においてNO)、ステップS4207およびS4208の処理を実行せず、図42に示すゲーム進行処理を終了する。
以上のように、プロセッサ210は、第1条件が成立したと判定した場合、アバターオブジェクト6Aと障害物オブジェクト4353との衝突が抑制されるように、アバターオブジェクト6Aおよび障害物オブジェクト4353を制御する。これにより、アバターオブジェクト6Aの障害物オブジェクト4353への衝突が抑制されるので、仮想体験の興趣性、仮想空間への没入感の低下を抑制することができる。
具体的には、移動の再開のためには、移動方向の先に障害物オブジェクト4353が位置しないように、移動方向を大きく変更する必要がある。本実施の形態のように、ボード1531上での体重移動によって、アバターオブジェクト6Aの移動を制御する構成の場合、このような移動方向の変更はユーザ5Aにとって大変であるため、アバターオブジェクト6Aと障害物オブジェクト4353との衝突が頻発すると、ユーザ5Aのやる気が低下する。また、上記衝突が頻発すると、移動方向を大きく変更することにユーザ5Aの意識が集中し、ボード1531にユーザ5Aが乗っていることから得られる浮遊感をユーザ5Aが感じにくくなる。結果として、没入感が阻害されてしまう。上述したように、アバターオブジェクト6Aと障害物オブジェクト4353との衝突が抑制されるように、アバターオブジェクト6Aおよび障害物オブジェクト4353を制御することにより、ユーザ5Aのやる気の低下や、没入感の阻害を回避することができる。
上記の構成は、障害物オブジェクト4353が、アバターオブジェクト6Aの移動方向への移動を妨げるオブジェクトである場合に特に有効である。障害物オブジェクト4353にアバターオブジェクト6Aが衝突することで、ユーザ5Aの望むようにアバターオブジェクト6Aを制御できなくなることによる、仮想体験の興趣性の大きな低下を抑制することができるためである。
なお、図42を参照して説明したゲーム進行処理では、アバターオブジェクト6Aの移動速度の低下と、障害物オブジェクト4353の移動との両方を実行する例を説明したが、プロセッサ210は、アバターオブジェクト6Aの移動速度の低下と、障害物オブジェクト4353の移動とのいずれか一方のみを実行してもよい。
また、障害物オブジェクトは、アバターオブジェクト6Aの移動方向への移動を妨げるオブジェクトに限定されない。一例として、プロセッサ210は、障害物オブジェクト4353などのアバターオブジェクト6Aの移動方向への移動を妨げるオブジェクトに加え、アバターオブジェクト6Aが衝突しても、アバターオブジェクト6Aの移動方向への移動を妨げない障害物オブジェクトを仮想空間11に配置してもよい。該障害物オブジェクトは、一例として、アバターオブジェクト6Aが衝突したとき破壊されるオブジェクトであってもよい。プロセッサ210は、該障害物オブジェクトを、アバターオブジェクト6Aの移動方向への移動を妨げる障害物オブジェクトとともに仮想空間11に配置してもよいし、該障害物オブジェクトのみを仮想空間11に配置してもよい。
また、本実施の形態に係る、アバターオブジェクト6Aの移動を制御するためのユーザ5Aの動作は、ボード1531上での体重移動に限定されない。具体的には、該動作は、ユーザ5Aの下半身の動作であればよい。一例として、該動作は、仮想体験をユーザに提供するための装置に設けられたペダルを踏むことであってもよい。
〔実施形態4〕
本実施の形態では、視界画像17に含まれるエフェクトについて説明する。
[視界領域15の制御]
図45は、ある実施の形態に従う仮想空間11および視界画像4517を示す図である。プロセッサ210は、上述したように、ユーザ5Aの頭部の姿勢に基づいて、仮想空間11における仮想カメラ14からの視界である視界領域15を制御する。具体的には、プロセッサ210は、ユーザ5Aの頭部の姿勢に基づいて、仮想カメラ14の向き(すなわち、基準視線16)を決定する。そして、プロセッサ210は、基準視線16に基づいて、視界領域15を規定する。本実施の形態でも、上述した実施の形態と同様に、仮想カメラ14はアバターオブジェクト6Aの頭部に配置されているものとする。また、上述したように、プロセッサ210は、ユーザ5Aのボード1531上での体重移動に基づいて、アバターオブジェクト6Aの移動方向を制御する。つまり、基準視線16の方向と、アバターオブジェクト6Aの移動方向とは、それぞれユーザ5Aによる別の動作によって制御される。
このため、アバターオブジェクト6Aの移動方向と、基準視線16とは、一致する場合もあるし、一致しない場合もある。例えば、図15および図16に示すように、ユーザ5(ユーザ5A)の顔がロール軸(w軸)の正の方向に向いている場合、移動方向1641と基準視線16とは同方向である。このため、プロセッサ210は、図16に示すように、アバターオブジェクト6(アバターオブジェクト6A)の移動方向1641に視界領域15を規定する。
一方、図15および図45に示すように、ユーザ5(ユーザ5A)の顔がピッチ軸(u軸)の正の方向に向いている場合、移動方向4541と基準視線16とは異なる方向である。このため、プロセッサ210は、図45に示すように、アバターオブジェクト6(アバターオブジェクト6A)の移動方向4541とは異なる方向に視界領域15を規定する。プロセッサ210は、図45(A)に示す視界領域15に対応する視界画像4517を、図45(B)に示すようにモニタ130に表示する。図16(A)と図45(A)とは、視界領域15の方向が異なるため、視界画像4517は、視界画像1617とは異なっている。具体的には、視界画像1617に含まれる仮想空間11の景色は、アバターオブジェクト6Aの移動方向の景色である。一方、視界画像4517に含まれる景色は、アバターオブジェクト6Aの移動方向に対して右を向いた場合の景色である。このように、ユーザ5Aは、仮想空間11を移動しながら、移動方向とは異なる方向を向き、その方向の景色を視認するという仮想体験を得ることができる。
[ゲーム進行処理]
図46は、ある実施の形態に従うHMDセット110において実行される処理の一部を表すフローチャートである。該フローチャートは、図18に示すステップS1804の処理が実行された後のゲーム進行処理を示している。図47は、ある実施の形態に従う仮想空間11および視界画像4717を示す図である。なお、図47では、図19と同様の理由で、仮想空間11を上面図で示している。これは、図48および図49でも同様である。
ステップS4601において、プロセッサ210は、アバターオブジェクト6Aの移動方向の延長線上にある消失点(第1位置)を特定する。ステップS4602において、プロセッサ210は、仮想オブジェクト生成モジュール1421として、第1メッシュオブジェクト4754(第1オブジェクト)を生成し、特定した消失点に配置する。ステップS4603において、プロセッサ210は、仮想オブジェクト生成モジュール1421として、第2メッシュオブジェクト(第2オブジェクト)(不図示)を生成し、アバターオブジェクト6Aの下方に配置する。第1メッシュオブジェクト4754は、後述する第1パーティクルを放出するオブジェクトである。第2メッシュオブジェクトは、後述する第2パーティクルを放出するオブジェクトである。第1メッシュオブジェクト4754および第2メッシュオブジェクトは、いずれも、ユーザ5Aが視認できないオブジェクトである。一例として、プロセッサ210は、第1メッシュオブジェクト4754および第2メッシュオブジェクトを、透明なオブジェクトとして生成し、仮想空間11に配置する。
なお、実施形態2では、第1位置はアバターオブジェクト6Aが向かうべき位置に相当するものであったが、本実施の形態では、第1位置は、アバターオブジェクト6Aの移動方向の延長線上にある位置、例えば、消失点の位置に相当する。また、本実施の形態では、上述した各実施の形態と異なり、第1オブジェクトは第1メッシュオブジェクト4754に相当し、第2オブジェクトは第2メッシュオブジェクトに相当する。
ステップS4604において、プロセッサ210は、仮想カメラ制御モジュール1422として、HMD120の動きに応じて仮想空間11における仮想カメラ14の向きを決定する。例えば、ユーザ5Aの顔がロール軸(w軸)の正の方向に向いている場合、プロセッサ210は、図47(A)に示すように、アバターオブジェクト6Aの移動方向4541と同方向に仮想カメラ14を向ける。このステップにおける処理は、図18に示すステップS1805の処理と同様である。ステップS4605において、プロセッサ210は、視界画像17をモニタ130に出力する。このステップにおける処理は、図18に示すステップS1806の処理と同様である。
ステップS4606において、プロセッサ210は、アバター制御モジュール1423として、アバターオブジェクト6を移動させる。プロセッサ210は、さらに、仮想カメラ制御モジュール1422として、アバターオブジェクト6Aに追随するように仮想カメラ14を移動させる。このステップにおける処理は、図18に示すステップS1807の処理と同様である。ステップS4607において、プロセッサ210は、アバター制御モジュール1423として、ボードの傾きに応じてアバターオブジェクト6の移動方向を決定する。このステップにおける処理は、図18に示すステップS1807の処理と同様である。
上述したステップS4604〜S4607の処理、すなわち、HMD120の動きに応じた視界画像17の更新、アバターオブジェクト6の移動、および、ボード1531の傾きに応じたアバターオブジェクト6の移動方向の変更は、後述するステップS4608〜S4611が実行される間にも、継続して繰り返し実行される。
ステップS4608において、プロセッサ210は、仮想オブジェクト制御モジュール1427として、アバターオブジェクト6Aに追随するように、第1メッシュオブジェクト4754および第2メッシュオブジェクトを移動させる。つまり、プロセッサ210は、アバターオブジェクト6Aと、第1メッシュオブジェクト4754および第2メッシュオブジェクトとの位置関係を維持したまま、これらを移動させる。
ステップS4609において、プロセッサ210は、仮想オブジェクト制御モジュール1427として、アバターオブジェクト6Aの移動方向4541と対向する第1方向4745を基準とした第2方向4746に流れる第1パーティクル4755を、第1メッシュオブジェクト4754から放出させる。具体的には、プロセッサ210は、第1方向4745を中心とした放射状の方向である第2方向4746に流れる第1パーティクル4755を、第1メッシュオブジェクト4754から放出する。なお、図47(A)では、図面の見易さを考慮して、アバターオブジェクト6Aの上方および下方を通過する第1パーティクル4755を記載していないが、実際は、第1パーティクル4755は、アバターオブジェクト6Aの上方および下方をも通過する。
プロセッサ210は、図47(A)に示す視界領域15に対応する視界画像4717を、図47(B)に示すようにモニタ130に表示する。視界画像4717は、第1パーティクル4755を含む。上述したように、第1メッシュオブジェクト4754は、ユーザ5Aが視認できないオブジェクトであるので、視界画像4717には含まれない。図47(A)に示すように、仮想カメラ14は、アバターオブジェクト6Aの移動方向4541と同じ方向を向いているので、視界画像4717における第1パーティクル4755は、アバターオブジェクト6A(すなわち、仮想視点)の移動方向と対向する方向を中心とした放射状の方向に流れる。
図48は、ある実施の形態に従う仮想空間11および視界画像4817を示す図である。なお、図48(A)では、図47(A)と同様に、アバターオブジェクト6Aの上方および下方を通過する第1パーティクル4755を記載していないが、実際は、第1パーティクル4755は、アバターオブジェクト6Aの上方および下方をも通過する。
ユーザ5Aが顔をピッチ軸(u軸)の正の方向に向けた場合、プロセッサ210は、図47(A)に示すように、アバターオブジェクト6Aの移動方向4541に対して右に傾く方向に仮想カメラ14を向ける。換言すれば、基準視線16は、アバターオブジェクト6Aの移動方向4541に対して右に傾く方向である。
プロセッサ210は、図46(A)に示す視界領域15に対応する視界画像4817を、図48(B)に示すようにモニタ130に表示する。視界画像4817は、第1パーティクル4755を含む。上述したように、仮想カメラ14は、アバターオブジェクト6Aの移動方向4541に対して右に傾く方向を向いている。一方で、アバターオブジェクト6Aの移動方向4541と、第1パーティクル4755が流れる第2方向4746との関係は変わらない。つまり、視界領域15の方向が変わっても、第2方向4746は、移動方向4541と対向する第1方向4745を基準とした方向である。このため、視界画像4817における第1パーティクル4755は、視界画像4817における、アバターオブジェクト6Aの移動方向4541と対応する方向4841とは逆の方向4846に流れる。つまり、第1パーティクル4755は、視界画像4817の左端から右端へ向かって流れる(視界画像4817を横切る)。
このように、仮想カメラ14が向いている方向(基準視線16)が、アバターオブジェクト6Aの移動方向と異なっている場合、第1パーティクル4755は、視界画像17において、アバターオブジェクト6Aの移動方向4541と対応する方向とは逆の方向に流れる。図示してはいないが、ユーザ5Aが顔をピッチ軸(u軸)の負の方向に向けた場合、プロセッサ210は、アバターオブジェクト6Aの移動方向4541に対して左に傾く方向に仮想カメラ14を向ける。この場合、第1パーティクル4755は、視界画像17の右端から左端へ向かって流れる。ユーザ5Aが顔をヨー軸(v軸)の正の方向に向けた場合、プロセッサ210は、アバターオブジェクト6Aの移動方向4541に対して上に傾く方向に仮想カメラ14を向ける。この場合、第1パーティクル4755は、視界画像の下端から上端へ向かって流れる。ユーザ5Aが顔をヨー軸(v軸)の負の方向に向けた場合、プロセッサ210は、アバターオブジェクト6Aの移動方向4541に対して下に傾く方向に仮想カメラ14を向ける。この場合、第1パーティクル4755は、視界画像の上端から下端へ向かって流れる。なお、この段落に記載した上下左右は、いずれも、図48(B)に示す視界画像4817の上下左右と同一である。
アバターオブジェクト6Aの移動方向と異なる方向に仮想カメラ14を向けると、仮想オブジェクトが移動する方向に視線がつられ、移動方向の錯覚(ベクション効果)を引き起こし、酔いにつながる。これに対して、視界画像17に表示される第1パーティクル4755は、視界画像17に含まれる仮想オブジェクトを隠す。これにより、視界画像17からユーザ5Aの眼に入る情報量を低減させることができ、酔いを低減することができる。
プロセッサ210は、半透明の第1パーティクル4755を第1メッシュオブジェクト4754に放出させてもよい。換言すれば、プロセッサ210は、透過処理を施した第1パーティクル4755を第1メッシュオブジェクト4754に放出させてもよい。第1パーティクル4755は、ユーザ5Aが仮想空間11で風を切って移動しているかのような仮想体験を与えることにも寄与している。換言すれば、第1パーティクル4755は風を切って移動している様子を表現するためのものであり、現実世界に存在するものをモチーフにしたものではない。このため、第1パーティクル4755を半透明とすることで、現実世界との乖離を抑え、ユーザ5Aの仮想空間11への没入感の阻害を抑えることができる。
また、第1パーティクル4755が半透明であることにより、第1パーティクル4755が視界画像17を横切る場合に、第1パーティクル4755が非透明のオブジェクトである場合に比べ、ベクション効果を生じさせにくくすることができる。これにより、仮想オブジェクトを隠してユーザ5Aの眼に入る情報量を低下させ、酔いを低減することができる。結果として、酔いを原因とするユーザ5Aの仮想空間11への没入感の阻害を抑えることができる。
図49は、ある実施の形態に従う仮想空間11および視界画像4917を示す図である。図46に示してはいないが、プロセッサ210は、ステップS4607の処理を実行した後、仮想カメラ制御モジュール1422として、HMD120の動きに応じて仮想空間11における仮想カメラ14の向きを決定したとする。換言すれば、プロセッサ210は、図49(A)に示すように、アバターオブジェクト6Aの移動方向を、第1の移動方向4941から第2の移動方向4948へ変更したとする。
ステップS4610において、プロセッサ210は、第1の移動方向4941と、第2の移動方向4948とがなす角度が第1閾値以上であるか否かを判定する。つまり、プロセッサ210は、アバターオブジェクト6Aが移動方向を大きく変更したか否かを判定する。該角度が第1閾値以上であると判定した場合(ステップS4610においてYES)、ステップS4611において、プロセッサ210は、仮想オブジェクト制御モジュール1427として、図49(A)に示すように、第2メッシュオブジェクトからアバターオブジェクト6Aに向かう方向に広がる第2パーティクル4956を、第2メッシュオブジェクトから放出させる。第2パーティクル4956は、図49(A)に示すように、靄状であってもよい。これにより、ユーザ5Aは、ボード1531を大きく傾けたことにより、あたかも雲を削ってまき散らしたかのような仮想体験を得ることができる。
プロセッサ210は、図49(A)に示す視界領域15に対応する視界画像4917を、図49(B)に示すようにモニタ130に表示する。視界画像4917は、第1パーティクル4755に加え、第2パーティクル4956を含む。第2パーティクル4956は、視界画像4917の下端から視界画像4917に広がる。
仮想空間11においてアバターオブジェクト6Aの移動方向を大きく変更する場合、酔いを誘発しやすい。そこで、バターオブジェクト6Aの移動方向を大きく変更する場合に、第2パーティクル4956を視界画像17に表示することで、ユーザ5Aに雲を削ってまき散らしたかのような演出を視認させながら、ユーザ5Aの眼に入る情報量をさらに低減させることができ、酔いを低減することができる。結果として、酔いを原因とするユーザ5Aの仮想空間11への没入感の阻害を抑えることができる。
第1パーティクル4755は、風を切って移動している様子を表現するものであり、第2パーティクル4956は、削られた雲を表現するものであるため、プロセッサ210は、第1パーティクル4755より透過度が低い第2パーティクル4956を、第2メッシュオブジェクトから放出させてもよい。一例として、プロセッサ210は、透過処理が施されていない白色の第2パーティクル4956を、第2メッシュオブジェクトから放出させてもよい。別の例として、プロセッサ210は、透過処理が施され、かつ、第1パーティクル4755より透過度が低い白色の第2パーティクル4956を、第2メッシュオブジェクトから放出させてもよい。
なお、第1パーティクル4755および第2パーティクル4956の放出を示す情報は、他のユーザ5に関連付けられたコンピュータ200には送信されない。つまり、他のユーザ5に関連付けられたアバターオブジェクト6の周囲において、第1パーティクル4755および第2パーティクル4956が放出されている様子は、ユーザ5Aが視認する視界画像17には表示されない。
第1パーティクル4755および第2パーティクル4956は、それぞれ、仮想空間11に配置された第1メッシュオブジェクト4754および第2メッシュオブジェクトから放出する構成に限定されない。例えば、プロセッサ210は、第1パーティクル4855が放出される第1エフェクト、および、第2パーティクル4956が放出される第2エフェクトを、視界画像17に重畳するように、モニタ130に表示してもよい。
〔実施形態5〕
本実施形態では、視界画像に応じた刺激を現実世界でユーザ5Aに与える構成について説明する。
[ゲーム進行処理]
図50は、ある実施の形態に従うHMDセット110において実行される処理の一部を表すフローチャートである。
ステップS5001において、プロセッサ210は、ユーザに仮想体験を提供するための仮想空間11を定義する。ある実施の形態において、該仮想空間11は、ユーザ5Aに関連付けられたアバターオブジェクト6Aを含む複数のアバターオブジェクト6が属する第1チームが、ボールオブジェクト1951をゴールオブジェクト1952まで移動させるゲームを、ユーザ5Aに仮想体験させるための仮想空間である。
ステップS5002において、プロセッサ210は、仮想オブジェクト生成モジュール1421として、仮想カメラ14を生成し、仮想空間11に配置する。プロセッサ210は、一例として、ユーザ5Aに関連付けられたアバターオブジェクト6Aを生成して仮想空間に配置する。そして、プロセッサ210は、仮想カメラ14をアバターオブジェクト6Aの頭部に配置する。
ステップS5003において、プロセッサ210は、仮想空間11内で第1パートを開始する。第1パートは、一例として、上記ゲームの導入部であってもよい。
ステップS5004において、プロセッサ210は、アバター制御モジュール1423として、ユーザの5Aの動作に依らずにアバターオブジェクト6Aを移動させる。ステップS5005において、プロセッサ210は、仮想カメラ制御モジュール1422として、仮想カメラ14をアバターオブジェクト6Aに追随するように移動させる。換言すれば、プロセッサ210は、ユーザ5Aの動作に依らずに仮想カメラ14を移動させる。
図51は、ある実施の形態に従う視界画像17の変化、および、該変化に基づく装置の制御を示す図である。
ステップS5006において、プロセッサ210は、仮想カメラ制御モジュール1422として、仮想カメラ14の視界に対応する第1視界画像を生成する。一例としてプロセッサ210は、仮想カメラ14の移動に応じて、図49に示す第1視界画像5117A〜5117Dを順次生成する。視界画像5117A〜5117Dは、レール上を自動的に移動し(視界画像5117A〜5117C)、空中に飛び出す(視界画像5117D)仮想体験をユーザに与える視界画像である。ステップS5007において、プロセッサ210は、図51に示す視界画像5117A〜5117Dを順次モニタ130に出力することによって、視界画像17をHMD120に表示させる。
ステップS5008において、プロセッサ210は、刺激付与モジュール1428として、第1視界画像に応じた第1刺激を、ユーザ5Aの動作に依らずにユーザ5Aに与える。一例として、本実施の形態に係るボード1531は、ユーザ5Aの体重移動により傾かないように、平板1532に固定されている。プロセッサ210は、第1刺激を与えるために、ボード1531の固定を解除する。これにより、第1刺激として、ボード1531の搖動がユーザ5Aの触覚器官に対して与えられる。より具体的には、図51に示すように、矢印5191が示す期間、すなわち視界画像5117A〜5117CがHMD120に表示される期間においては、ボード1531は固定機構5139によって平板1532に固定されている。プロセッサ210は、視界画像5117DをHMD120に表示させたタイミングで、固定機構5139を外すことによって、バネ1533を伸縮可能とする。これにより、第1刺激として、ボード1531の搖動がユーザ5Aの触覚器官に対して与えられる。そして、ユーザ5Aは、あたかも自分が空中に飛び出したかのような仮想体験を得ることができる。そして、矢印5192が示す期間、すなわち、視界画像5117DがHMD120に表示された後においては、ボード1531はバネ1533のみで平板1532と連結している状態となる。
ステップS5009において、プロセッサ210は、第1パートを終了し第2パートを開始する。第2パートは、一例として、上記ゲームの本編であってもよい。プロセッサ210は、一例として、仮想オブジェクト生成モジュール1421として、アバターオブジェクト6A以外のアバターオブジェクト6、ボールオブジェクト1951、およびゴールオブジェクト1952を生成し、仮想空間11に配置してもよい。
ステップS5010において、プロセッサ210は、アバター制御モジュール1423として、アバターオブジェクト6を移動させる。ステップS5011において、プロセッサ210は、アバター制御モジュール1423として、ボードの傾きに応じてアバターオブジェクト6の移動方向を決定する。ステップS5012において、プロセッサ210は、さらに、仮想カメラ制御モジュール1422として、アバターオブジェクト6Aに追随するように仮想カメラ14を移動させる。換言すれば、プロセッサ210は、ユーザ5Aの動作に応じて、仮想カメラの移動を制御する。
ステップS5013において、プロセッサ210は、仮想カメラ制御モジュール1422として、仮想カメラ14の視界に対応する第2視界画像を生成する。一例として、プロセッサ210は、ボード1531上でのユーザ5Aの体重移動に基づく仮想カメラ14の移動に応じて、図20に示す視界画像2017などの視界画像を生成する。ステップS5014において、プロセッサ210は、第2視界画像をHMD120に表示させる。
ステップS5015において、ユーザ5Aの動作に応じて、第2視界画像に応じた第2刺激がユーザに与えられる。第2パートは、図51における矢印5192が示す期間、であるため、ボード1531はバネ1533のみで平板1532と連結している。このため、ボード1531上でのユーザの体重移動に基づいてバネ1533が伸縮することによる搖動が、第2刺激としてユーザ5Aの触覚器官に対して与えられる。
以上のように、プロセッサ210は、ゲームの導入部である第1パートにおいて、第1視界画像に応じた第1刺激を、ユーザ5Aの動作に依らずにユーザ5Aに与える。具体的には、空中に飛び出すような仮想体験をユーザ5Aに与える視界画像5117DをHMD120に表示するとともに、固定機構5139を外すことによって生じるバネ1533の搖動をユーザ5Aに与える。これにより、あたかも上空に放り出されるような感覚をユーザ5Aに与えることができる。本実施の形態において、上空に放り出されるような感覚は、その後に開始される第2パート、すなわちゲーム本編の内容を想起させるような感覚である。具体的には、空中を浮遊して移動するというゲーム本編の内容を想起させるような感覚である。このような感覚をゲームの導入部でユーザ5Aに与えることにより、ゲーム本編へのユーザ5Aの没入感を向上させることができる。具体的には、ユーザ5Aは、導入部において空中に飛び出したという仮想体験を与えられているので、ゲーム本編でユーザ5Aに与えられる刺激が、バネ1533の搖動による刺激であったとしても、あたかも空中を浮遊して移動しているとユーザ5Aを錯覚させることができる。
また、導入部で与えられる刺激のリアリティが増加するほど、ゲーム本編での没入感が増加すると考えられる。このため、プロセッサ210は、導入部において刺激(第1刺激)をユーザ5Aに強制的に与える。これにより、ゲーム本編における没入感をより向上させることができる。
プロセッサ210は、第1刺激を与えるために、固定機構5139を外す以外の処理を行ってもよい。一例として、プロセッサ210は、視界画像5117DをHMD120に表示させたタイミングで、ユーザ5Aに装着されたワイヤーの牽引機構(不図示)を制御することにより、ユーザを現実空間において空中に持ち上げてもよい。
また、プロセッサ210は、ユーザ5Aの動作に応じて第2刺激をユーザに与えてもよい。例えば、プロセッサ210は、ユーザ5Aの体重移動に基づきアバターオブジェクト6Aの移動方向を制御した結果、アバターオブジェクト6Aが障害物オブジェクトに衝突したことを検出した場合、ボード1531に設けられた振動機構(不図示)を振動させてもよい。
また、本実施の形態に係るゲームは、ユーザ5Aに関連付けられたアバターオブジェクト6Aを含む複数のアバターオブジェクト6が属する第1チームが、ボールオブジェクト1951をゴールオブジェクト1952まで移動させるゲームに限定されない。一例として、本実施の形態に係るゲームは、ボブスレーのようなレースやタイムトライアルをテーマとしたゲームであってもよい。具体的には、該ゲームは、ユーザ5Aに関連付けられたアバターオブジェクト6Aが、ボブスレーのそりを模したオブジェクト(以下、そりオブジェクト)に乗り、コースを滑降する時間を他のユーザ5に関連付けられたアバターオブジェクト6と競うゲームであってもよい。
この例において、ユーザ5Aは、ボブスレーのそりを模した乗用部に乗り、体重移動を行うことで、そりオブジェクトの移動を制御する。該乗用部は、バネで筐体に連結されているとともに、固定機構で筐体に固定されている。プロセッサ210は、第1パートにおいて、スタート地点で待機しているそりオブジェクトに飛び乗るアバターオブジェクトからの視界に対応する視界画像17(第1視界画像)をHMD120に表示させる。プロセッサ210は、該視界画像17をHMD120に表示させたタイミングで、固定機構を外す。これにより、該視界画像17に応じた第1刺激として、乗用部の搖動がユーザ5Aの触覚器官に対して与えられる。そして、ユーザ5Aは、そりに飛び乗ったことによりそりが揺れたかのような仮想体験を得ることができる。
プロセッサ210は、スタートの合図を出した直後に第2パートを開始する。プロセッサ210は、乗用部に乗ったユーザの体重移動に基づくそりオブジェクトの移動に追随するように、仮想カメラ14を移動させる。つまり、プロセッサ210は、ユーザの体重移動に基づく視界画像17(第2視界画像)をHMD120に表示させる。第2パートでは、該視界画像17に応じた第2刺激として、乗用部に乗ったユーザの体重移動に基づいてバネが伸縮することによる搖動が、ユーザ5Aの触覚器官に対して与えられる。
以上、本開示の実施形態について説明したが、本発明の技術的範囲は、本実施形態の説明によって限定的に解釈されるべきではない。本実施形態は一例であって、特許請求の範囲に記載された発明の範囲内において、様々な実施形態の変更が可能であることが当業者によって理解されるところである。本発明の技術的範囲は、特許請求の範囲に記載された発明の範囲およびその均等の範囲に基づいて定められるべきである。
〔付記事項〕
本発明の一側面に係る内容を列記すると以下のとおりである。
(項目1) プログラムを説明した。本開示のある局面によれば、プログラムは、ユーザ(ユーザ5A)の頭部に関連付けられた画像表示装置(HMD120)を介して仮想体験を提供するために、プロセッサ(プロセッサ210)を備えたコンピュータ(コンピュータ200)によって実行される。プログラムは、プロセッサに、仮想体験をユーザに提供するための仮想空間(仮想空間11)を定義するステップ(S1801)と、仮想空間に第1オブジェクト(アバターオブジェクト6A、仮想カメラ14)を配置するステップ(S1802、S1803)と、仮想空間に、第1オブジェクトが向かうべき第1位置を設定するステップと、仮想空間に、第1位置をユーザに示す指示オブジェクト(スフィア3561、ガイド3772)を配置するステップ(S3401、S3405)と、指示オブジェクトを、第1位置に向かうように変形させるステップ(S3404、S3408)と、ユーザの頭部を除く身体の動作に応じて、第1オブジェクトの移動を制御するステップ(S3407)と、ユーザの頭部の姿勢と第1オブジェクトの位置とに応じて、第1オブジェクトからの視界を制御するステップ(S3402)と、視界に対応する視界画像(視界画像17)を定義するステップと、視界画像を画像表示装置に出力するステップ(S3403)と、を実行させる。
(項目2) (項目1)において、指示オブジェクトを配置するステップでは、第1位置を中心とした立体である指示オブジェクト(スフィア3561)を配置し、変形させるステップでは、指示オブジェクトを、第1位置に向かって縮小させる。
(項目3) (項目2)において、指示オブジェクトを配置するステップでは、第1位置を中心とし、かつ、仮想空間内に配置可能な最大の立体である指示オブジェクトを配置する。
(項目4) (項目2)または(項目3)において、指示オブジェクトを配置するステップでは、表面にメッシュ状のパターンを有する指示オブジェクトを配置する。
(項目5) (項目1)において、指示オブジェクトを配置するステップでは、第1オブジェクトから第1位置まで延伸する指示オブジェクト(ガイド3772)を配置し、変形させるステップでは、第1オブジェクトの移動に応じて、指示オブジェクトを変形させる。
(項目6) (項目5)において、指示オブジェクトを配置するステップでは、第1オブジェクトから、第1オブジェクトの進行方向に第1距離進んだ第2位置まで延伸する第1部分と、第2位置から第1位置まで延伸する第2部分とを含む指示オブジェクトを配置し、変形させるステップでは、第1オブジェクトの移動に応じて、第2部分を変形させる。
(項目7) (項目5)または(項目6)仮想空間を定義するステップでは、第1オブジェクトが、対象オブジェクト(ボールオブジェクト1951)が関連付けられた状態で目的位置(ゴールオブジェクト1952)へ到達することにより対象オブジェクトを目的位置まで移動させるゲームを、ユーザに仮想体験させるための仮想空間を定義し、第1位置を設定するステップでは、第1位置として、対象オブジェクトが配置された位置を設定し、プログラムは、プロセッサに、第1オブジェクトが対象オブジェクトに接触した場合、該第1オブジェクトに前記対象オブジェクトを関連付けるステップ(S3410)と、第1オブジェクトが対象オブジェクトに接触した場合、第1位置を、対象オブジェクトが配置された位置から目的位置に変更するステップと、をさらに実行させる。
(項目8) (項目7)において、仮想空間を定義するステップでは、ゲームとして、仮想空間に配置された、仮想空間を移動可能な1以上の第2オブジェクト(アバターオブジェクト6B〜6D)のいずれかが、対象オブジェクトが関連付けられた状態で目的位置へ到達することによっても、目的位置への対象オブジェクトの移動が達成されるゲームを、ユーザに仮想体験させるための仮想空間を定義し、プログラムは、プロセッサに、第2オブジェクトのいずれかが対象オブジェクトに接触した場合、該第2オブジェクトに対象オブジェクトを関連付けるステップ(S3413)と、第2オブジェクトのいずれかが対象オブジェクトに接触した場合、第1位置を、対象オブジェクトが配置された位置から、該第2オブジェクトがいる位置に変更するステップと、対象オブジェクトに関連付けられた第2オブジェクトに、第1オブジェクトが接触した場合、対象オブジェクトが関連付けられた第2オブジェクトに対する対象オブジェクトの関連付けを解消し、さらに、対象オブジェクトを第1オブジェクトに関連付けるステップと、をさらに実行させる。
(項目9) (項目1)から(項目8)のいずれかにおいて、移動を制御するステップでは、乗用部(ボード1531)に乗っているユーザの体重移動に基づく乗用部の傾きに応じて、第1オブジェクトの移動を制御する。
(項目10) 情報処理装置を説明した。本開示のある局面によると、情報処理装置(コンピュータ200)は、ユーザ(ユーザ5A)の頭部に関連付けられた画像表示装置(HMD120)と、画像表示装置を介して仮想体験を提供するために、プロセッサを備えたコンピュータによって実行されるプログラムを記憶する記憶部(ストレージ230)と、該プログラムを実行することにより、情報処理装置の動作を制御する制御部(プロセッサ210)と、を備えている。制御部は、仮想体験をユーザに提供するための仮想空間(仮想空間11)を定義し、仮想空間に第1オブジェクト(アバターオブジェクト6A、仮想カメラ14)を配置し、仮想空間に、第1オブジェクトが向かうべき第1位置を設定し、仮想空間に、第1位置をユーザに示す指示オブジェクト(スフィア3561、ガイド3772)を配置し、指示オブジェクトを、第1位置に向かうように変形させ、ユーザの頭部を除く身体の動作に応じて、第1オブジェクトの移動を制御し、ユーザの頭部の姿勢と第1オブジェクトの位置とに応じて、第1オブジェクトからの視界を制御し、視界に対応する視界画像(視界画像17)を定義し、視界画像を画像表示装置に出力する。
(項目11) プログラムを実行する方法を説明した。本開示のある局面によると、プログラムは、ユーザ(ユーザ5A)の頭部に関連付けられた画像表示装置(HMD120)を介して仮想体験を提供するために、プロセッサ(プロセッサ210)を備えたコンピュータ(コンピュータ200)によって実行される。プログラムは、プロセッサが、仮想体験をユーザに提供するための仮想空間(仮想空間11)を定義するステップ(S1801)と、仮想空間に第1オブジェクト(アバターオブジェクト6A、仮想カメラ14)を配置するステップ(S1802、S1803)と、仮想空間に、第1オブジェクトが向かうべき第1位置を設定するステップと、仮想空間に、第1位置をユーザに示す指示オブジェクト(スフィア3561、ガイド3772)を配置するステップ(S3401、S3405)と、指示オブジェクトを、第1位置に向かうように変形させるステップ(S3404、S3408)と、ユーザの頭部を除く身体の動作に応じて、第1オブジェクトの移動を制御するステップ(S3407)と、ユーザの頭部の姿勢と第1オブジェクトの位置とに応じて、第1オブジェクトからの視界を制御するステップ(S3402)と、視界に対応する視界画像(視界画像17)を定義するステップと、視界画像を画像表示装置に出力するステップ(S3403)と、を含む。
上記実施形態においては、HMDによってユーザが没入する仮想空間(VR空間)を例示して説明したが、HMDとして、透過型のHMDを採用してもよい。この場合、透過型のHMDを介してユーザが視認する現実空間に仮想空間を構成する画像の一部を合成した視界画像を出力することにより、拡張現実(AR:Augumented Reality)空間または複合現実(MR:Mixed Reality)空間における仮想体験をユーザに提供してもよい。この場合、操作オブジェクトに代えて、ユーザの手の動きに基づいて、仮想空間内における対象オブジェクトへの作用を生じさせてもよい。具体的には、プロセッサは、現実空間におけるユーザの手の位置の座標情報を特定するとともに、仮想空間内における対象オブジェクトの位置を現実空間における座標情報との関係で定義してもよい。これにより、プロセッサは、現実空間におけるユーザの手と仮想空間における対象オブジェクトとの位置関係を把握し、ユーザの手と対象オブジェクトとの間で上述したコリジョン制御等に対応する処理を実行可能となる。その結果、ユーザの手の動きに基づいて対象オブジェクトに作用を与えることが可能となる。