<本開示が示す実施形態の詳細>
以下、本開示が示す実施形態の詳細について図面を参照しながら説明する。以下の説明では、基本的に、同一の構成要素には同一の符号を付している。このため、説明済みの構成要素(説明済みの参照番号が付された構成要素)については、必要がある場合を除き、原則、その説明を繰り返さない。
(第1実施形態)
[HMDシステムの構成]
図1を参照して、HMD(Head Mount Device)システム100の構成について説明する。図1は、ある実施の形態に従うHMDシステム100の構成の概略を表す図である。ある局面において、HMDシステム100は、家庭用のシステムとしてあるいは業務用のシステムとして提供される。
HMDシステム100は、HMD装置110と、HMDセンサ120と、コントローラ160と、コンピュータ200と、を備える。HMD装置110は、ディスプレイ112と、カメラ116と、マイク118と、注視センサ140と、を含む。コントローラ160は、モーションセンサ130を含み得る。
ある局面において、コンピュータ200は、インターネットその他のネットワーク19に接続可能であり、ネットワーク19に接続されているサーバ150その他のコンピュータと通信可能である。別の局面において、HMD装置110は、HMDセンサ120の代わりに、センサ114を含み得る。
HMD装置110は、ユーザの頭部に装着され、動作中に仮想空間をユーザに提供し得る。より具体的には、HMD装置110は、右目用の画像および左目用の画像をディスプレイ112にそれぞれ表示する。ユーザの各目がそれぞれの画像を視認すると、ユーザは、両目の視差に基づき当該画像を3次元の画像として認識し得る。ディスプレイ112はHMD装置110と一体に構成されていてもよいし、別体であってもよい。
ディスプレイ112は、例えば、非透過型の表示装置として実現される。ある局面において、ディスプレイ112は、ユーザの両目の前方に位置するようにHMD装置110の本体に配置されている。従って、ユーザは、ディスプレイ112に表示される3次元画像を視認すると、仮想空間に没入することができる。ある実施の形態において、仮想空間は、例えば、背景、オブジェクト、およびユーザが選択可能なメニューの画像等を含む。ある実施の形態において、ディスプレイ112は、所謂スマートフォンその他の情報表示端末が備える液晶ディスプレイまたは有機EL(Electro Luminescence)ディスプレイとして実現され得る。
ある局面において、ディスプレイ112は、右目用の画像を表示するためのサブディスプレイと、左目用の画像を表示するためのサブディスプレイとを含み得る。別の局面において、ディスプレイ112は、右目用の画像と左目用の画像とを一体として表示する構成であってもよい。この場合、ディスプレイ112は、高速シャッタを含む。高速シャッタは、画像がいずれか一方の目にのみ認識されるように、右目用の画像と左目用の画像とを交互に表示可能に作動する。
カメラ116は、HMD装置110を装着するユーザの顔画像を取得する。カメラ116によって取得された顔画像は、画像解析処理によってユーザの表情を検知するために使用され得る。カメラ116は、例えば、瞳の動き、まぶたの開閉、および眉毛の動き等を検知するために、HMD装置110本体に内蔵された赤外線カメラであってもよい。あるいは、カメラ116は、ユーザの口、頬、および顎等の動きを検知するために、図1に示されるようにHMD装置110の外側に配置された外付けカメラであってもよい。また、カメラ116は、上述した赤外線カメラおよび外付けカメラの両方によって構成されてもよい。
マイク118は、ユーザが発した音声を取得する。マイク118によって取得された音声は、音声解析処理によってユーザの感情を検知するために使用され得る。当該音声は、仮想空間に対して、音声による指示を与えるためにも使用され得る。また、当該音声は、ネットワーク19およびサーバ150等を介して、他のユーザが使用するHMDシステムに送られ、当該HMDシステムに接続されたスピーカ等から出力されてもよい。これにより、仮想空間を共有するユーザ間での会話(チャット)が実現される。
HMDセンサ120は、複数の光源(図示しない)を含む。各光源は例えば、赤外線を発するLED(Light Emitting Diode)により実現される。HMDセンサ120は、HMD装置110の動きを検出するためのポジショントラッキング機能を有する。HMDセンサ120は、この機能を用いて、現実空間内におけるHMD装置110の位置および傾きを検出する。
なお、別の局面において、HMDセンサ120は、カメラにより実現されてもよい。この場合、HMDセンサ120は、カメラから出力されるHMD装置110の画像情報を用いて、画像解析処理を実行することにより、HMD装置110の位置および傾きを検出することができる。
別の局面において、HMD装置110は、位置検出器として、HMDセンサ120の代わりに、センサ114を備えてもよい。HMD装置110は、センサ114を用いて、HMD装置110自身の位置および傾きを検出し得る。例えば、センサ114が角速度センサ、地磁気センサ、加速度センサ、あるいはジャイロセンサ等である場合、HMD装置110は、HMDセンサ120の代わりに、これらの各センサのいずれかを用いて、自身の位置および傾きを検出し得る。一例として、センサ114が角速度センサである場合、角速度センサは、現実空間におけるHMD装置110の3軸周りの角速度を経時的に検出する。HMD装置110は、各角速度に基づいて、HMD装置110の3軸周りの角度の時間的変化を算出し、さらに、角度の時間的変化に基づいて、HMD装置110の傾きを算出する。また、HMD装置110は、透過型表示装置を備えていてもよい。この場合、該透過型表示装置は、その透過率を調整することにより、一時的に非透過型の表示装置として構成可能であってもよい。また、ディスプレイ112に表示された視界画像上に、現実空間を提示する要素を含ませるようにしてもよい。例えば、HMD装置110に搭載されたカメラで撮影した画像を視界画像の一部に重畳して表示させてもよいし、当該透過型表示装置の一部の透過率を高く設定することにより、視界画像の一部から現実空間を視認可能にしてもよい。
注視センサ140は、ユーザ190の右目および左目の視線が向けられる方向(視線方向)を検出する。当該方向の検出は、例えば、公知のアイトラッキング機能によって実現される。注視センサ140は、当該アイトラッキング機能を有するセンサにより実現される。ある局面において、注視センサ140は、右目用のセンサおよび左目用のセンサを含むことが好ましい。注視センサ140は、例えば、ユーザ190の右目および左目に赤外光を照射するとともに、照射光に対する角膜および虹彩からの反射光を受けることにより各眼球の回転角を検出するセンサであってもよい。注視センサ140は、検出した各回転角に基づいて、ユーザ190の視線方向を検知することができる。
サーバ150は、コンピュータ200にプログラムを送信して、ユーザに仮想空間を提供し得る。
また、別の局面において、サーバ150は、他のユーザによって使用されるHMD装置に仮想現実を提供するための他のコンピュータ200と通信し得る。例えば、アミューズメント施設において、複数のユーザが参加型のゲームを行う場合、各コンピュータ200は、各ユーザの動作に基づく信号を他のコンピュータ200と通信して、同じ仮想空間において複数のユーザが共通のゲームを楽しむことを可能にする。
コントローラ160は、ユーザ190からコンピュータ200への命令の入力を受け付ける。ある局面において、コントローラ160は、ユーザ190によって把持可能に構成される。別の局面において、コントローラ160は、ユーザ190の身体あるいは衣類の一部に装着可能に構成される。別の局面において、コントローラ160は、コンピュータ200から送られる信号に基づいて、振動、音、光のうちの少なくともいずれかを出力するように構成されてもよい。別の局面において、コントローラ160は、仮想現実を提供する空間に配置されるオブジェクトの位置および動き等を制御するためにユーザ190によって与えられる操作を受け付ける。
モーションセンサ130は、ある局面において、ユーザの手に取り付けられて、ユーザの手の動きを検出する。例えば、モーションセンサ130は、手の回転速度、回転数等を検出する。検出された信号は、コンピュータ200に送られる。モーションセンサ130は、例えば、手袋型のコントローラ160に設けられている。ある実施の形態において、現実空間における安全のため、コントローラ160は、手袋型のようにユーザ190の手に装着されることにより容易に飛んで行かないものに装着されるのが望ましい。別の局面において、ユーザ190に装着されないセンサがユーザ190の手の動きを検出してもよい。例えば、ユーザ190を撮影するカメラの信号が、ユーザ190の動作を表す信号として、コンピュータ200に入力されてもよい。モーションセンサ130とコンピュータ200とは、有線により、または無線により互いに接続される。無線の場合、通信形態は特に限られず、例えば、Bluetooth(登録商標)その他の公知の通信手法が用いられる。
[ハードウェア構成]
図2を参照して、本実施の形態に係るコンピュータ200について説明する。図2は、一局面に従うコンピュータ200のハードウェア構成の一例を表すブロック図である。コンピュータ200は、主たる構成要素として、プロセッサ10と、メモリ11と、ストレージ12と、入出力インターフェース13と、通信インターフェース14とを備える。各構成要素は、それぞれ、バス15に接続されている。
プロセッサ10は、コンピュータ200に与えられる信号に基づいて、あるいは、予め定められた条件が成立したことに基づいて、メモリ11またはストレージ12に格納されているプログラムに含まれる一連の命令を実行する。ある局面において、プロセッサ10は、CPU(Central Processing Unit)、MPU(Micro Processor Unit)、FPGA(Field-Programmable Gate Array)その他のデバイスとして実現される。
メモリ11は、プログラムおよびデータを一時的に保存する。プログラムおよびデータの少なくともいずれかは、例えば、ストレージ12からロードされる。メモリ11に保存されるデータは、コンピュータ200に入力されたデータと、プロセッサ10によって生成されたデータとを含む。ある局面において、メモリ11は、RAM(Random Access Memory)その他の揮発性メモリとして実現される。
ストレージ12は、プログラムおよびデータを永続的に保持する。ストレージ12は、例えば、ROM(Read-Only Memory)、ハードディスク装置、フラッシュメモリ、その他の不揮発性記憶装置として実現される。ストレージ12に格納されるプログラムは、HMDシステム100において仮想空間を提供するためのプログラム、シミュレーションプログラム、ゲームプログラム、ユーザ認証プログラム、および他のコンピュータ200との通信を実現するためのプログラム等を含む。ストレージ12に格納されるデータは、仮想空間を規定するためのデータおよびオブジェクト等を含む。
なお、別の局面において、ストレージ12は、メモリカードのように着脱可能な記憶装置として実現されてもよい。さらに別の局面において、コンピュータ200に内蔵されたストレージ12の代わりに、外部の記憶装置に保存されているプログラムおよびデータを使用する構成が使用されてもよい。このような構成によれば、例えば、アミューズメント施設のように複数のHMDシステム100が使用される場面において、プログラムおよびデータ等の更新を一括して行うことが可能になる。
ある実施の形態において、入出力インターフェース13は、HMD装置110、HMDセンサ120またはモーションセンサ130との間で信号を通信する。ある局面において、入出力インターフェース13は、USB(Universal Serial Bus)インターフェース、DVI(Digital Visual Interface)、HDMI(登録商標)(High-Definition Multimedia Interface)その他の端子を用いて実現される。なお、入出力インターフェース13は上述のものに限られない。
ある実施の形態において、入出力インターフェース13は、さらに、コントローラ160と通信し得る。例えば、入出力インターフェース13は、モーションセンサ130から出力された信号の入力を受ける。別の局面において、入出力インターフェース13は、プロセッサ10から出力された命令を、コントローラ160に送る。当該命令は、振動、音声出力、発光等をコントローラ160に指示する。コントローラ160は、当該命令を受信すると、その命令に応じて、振動、音声出力または発光のいずれかを実行する。
通信インターフェース14は、ネットワーク19に接続されて、ネットワーク19に接続されている他のコンピュータ(例えば、サーバ150)と通信する。ある局面において、通信インターフェース14は、例えば、LAN(Local Area Network)その他の有線通信インターフェース、あるいは、WiFi(Wireless Fidelity)、Bluetooth(登録商標)、NFC(Near Field Communication)その他の無線通信インターフェースとして実現される。なお、通信インターフェース14は上述のものに限られない。
ある局面において、プロセッサ10は、ストレージ12にアクセスし、ストレージ12に格納されている1つ以上のプログラムをメモリ11にロードし、当該プログラムに含まれる一連の命令を実行する。当該1つ以上のプログラムは、コンピュータ200のオペレーティングシステム、仮想空間を提供するためのアプリケーションプログラム、コントローラ160を用いて仮想空間で実行可能なゲームソフトウェア等を含み得る。プロセッサ10は、入出力インターフェース13を介して、仮想空間を提供するための信号をHMD装置110に送る。HMD装置110は、その信号に基づいてディスプレイ112に映像を表示する。
サーバ150は、ネットワーク19を介して複数のHMDシステム100の各々の制御装置と接続される。
なお、図2に示される例では、コンピュータ200がHMD装置110の外部に設けられる構成が示されているが、別の局面において、コンピュータ200は、HMD装置110に内蔵されてもよい。一例として、ディスプレイ112を含む携帯型の情報通信端末(例えば、スマートフォン)がコンピュータ200として機能してもよい。
また、コンピュータ200は、複数のHMD装置110に共通して用いられる構成であってもよい。このような構成によれば、例えば、複数のユーザに同一の仮想空間を提供することもできるので、各ユーザは同一の仮想空間で他のユーザと同一のアプリケーションを楽しむことができる。なお、このような場合、本実施形態における複数のHMDシステム100は、入出力インターフェース13により、コンピュータ200に直接接続されてもよい。また、本実施形態におけるサーバ150の各機能は、コンピュータ200に実装されてもよい。
ある実施の形態において、HMDシステム100では、グローバル座標系が予め設定されている。グローバル座標系は、現実空間における鉛直方向、鉛直方向に直交する水平方向、ならびに、鉛直方向および水平方向の双方に直交する前後方向にそれぞれ平行な、3つの基準方向(軸)を有する。本実施の形態では、グローバル座標系は視点座標系の一つである。そこで、グローバル座標系における水平方向、鉛直方向(上下方向)、および前後方向は、それぞれ、x軸、y軸、z軸と規定される。より具体的には、グローバル座標系において、x軸は現実空間の水平方向に平行である。y軸は、現実空間の鉛直方向に平行である。z軸は現実空間の前後方向に平行である。
ある局面において、HMDセンサ120は、赤外線センサを含む。赤外線センサが、HMD装置110の各光源から発せられた赤外線をそれぞれ検出すると、HMD装置110の存在を検出する。HMDセンサ120は、さらに、各点の値(グローバル座標系における各座標値)に基づいて、HMD装置110を装着したユーザ190の動きに応じた、現実空間内におけるHMD装置110の位置および傾きを検出する。より詳しくは、HMDセンサ120は、経時的に検出された各値を用いて、HMD装置110の位置および傾きの時間的変化を検出できる。
グローバル座標系は現実空間の座標系と平行である。したがって、HMDセンサ120によって検出されたHMD装置110の各傾きは、グローバル座標系におけるHMD装置110の3軸周りの各傾きに相当する。HMDセンサ120は、グローバル座標系におけるHMD装置110の傾きに基づき、uvw視野座標系をHMD装置110に設定する。HMD装置110に設定されるuvw視野座標系は、HMD装置110を装着したユーザ190が仮想空間において物体を見る際の視点座標系に対応する。
[uvw視野座標系]
図3を参照して、uvw視野座標系について説明する。図3は、ある実施の形態に従うHMD装置110に設定されるuvw視野座標系を概念的に表す図である。HMDセンサ120は、HMD装置110の起動時に、グローバル座標系におけるHMD装置110の位置および傾きを検出する。プロセッサ10は、検出された値に基づいて、uvw視野座標系をHMD装置110に設定する。
図3に示されるように、HMD装置110は、HMD装置110を装着したユーザの頭部を中心(原点)とした3次元のuvw視野座標系を設定する。より具体的には、HMD装置110は、グローバル座標系を規定する水平方向、鉛直方向、および前後方向(x軸、y軸、z軸)を、グローバル座標系内においてHMD装置110の各軸周りの傾きだけ各軸周りにそれぞれ傾けることによって新たに得られる3つの方向を、HMD装置110におけるuvw視野座標系のピッチ方向(u軸)、ヨー方向(v軸)、およびロール方向(w軸)として設定する。
ある局面において、HMD装置110を装着したユーザ190が直立し、かつ、正面を視認している場合、プロセッサ10は、グローバル座標系に平行なuvw視野座標系をHMD装置110に設定する。この場合、グローバル座標系における水平方向(x軸)、鉛直方向(y軸)、および前後方向(z軸)は、HMD装置110におけるuvw視野座標系のピッチ方向(u軸)、ヨー方向(v軸)、およびロール方向(w軸)に一致する。
uvw視野座標系がHMD装置110に設定された後、HMDセンサ120は、HMD装置110の動きに基づいて、設定されたuvw視野座標系におけるHMD装置110の傾き(傾きの変化量)を検出できる。この場合、HMDセンサ120は、HMD装置110の傾きとして、uvw視野座標系におけるHMD装置110のピッチ角(θu)、ヨー角(θv)、およびロール角(θw)をそれぞれ検出する。ピッチ角(θu)は、uvw視野座標系におけるピッチ方向周りのHMD装置110の傾き角度を表す。ヨー角(θv)は、uvw視野座標系におけるヨー方向周りのHMD装置110の傾き角度を表す。ロール角(θw)は、uvw視野座標系におけるロール方向周りのHMD装置110の傾き角度を表す。
HMDセンサ120は、検出されたHMD装置110の傾き角度に基づいて、HMD装置110が動いた後のHMD装置110におけるuvw視野座標系を、HMD装置110に設定する。HMD装置110と、HMD装置110のuvw視野座標系との関係は、HMD装置110の位置および傾きに関わらず、常に一定である。HMD装置110の位置および傾きが変わると、当該位置および傾きの変化に連動して、グローバル座標系におけるHMD装置110のuvw視野座標系の位置および傾きが変化する。
ある局面において、HMDセンサ120は、赤外線センサからの出力に基づいて取得される赤外線の光強度および複数の点間の相対的な位置関係(例えば、各点間の距離など)に基づいて、HMD装置110の現実空間内における位置を、HMDセンサ120に対する相対位置として特定してもよい。また、プロセッサ10は、特定された相対位置に基づいて、現実空間内(グローバル座標系)におけるHMD装置110のuvw視野座標系の原点を決定してもよい。
[仮想空間]
図4を参照して、仮想空間についてさらに説明する。図4は、ある実施の形態に従う仮想空間2を表現する一態様を概念的に表す図である。仮想空間2は、中心21の360度方向の全体を覆う全天球状の構造を有する。図4では、説明を複雑にしないために、仮想空間2のうちの上半分の天球が例示されている。仮想空間2では各メッシュが規定される。各メッシュの位置は、仮想空間2に規定されるXYZ座標系における座標値として予め規定されている。コンピュータ200は、仮想空間2に展開(配置)可能な各要素(例えば、オブジェクト、静止画、動画等)を、仮想空間2上の展開位置(配置位置)に対応するメッシュに対応付けることで、ユーザによって視認可能な仮想空間要素が展開される仮想空間2をユーザに提供する。仮想空間要素とは、仮想空間2内に展開される要素であり、例えば、各種オブジェクト(例えば、ユーザが操作可能なオブジェクト、所定のアルゴリズムに基づいて動作するオブジェクト、および動作しないオブジェクトなど)や、各種画像(背景画像、ユーザが選択画像なメニュー画像、写真、動画像など)を含む。
ある局面において、仮想空間2では、中心21を原点とするXYZ座標系が規定される。XYZ座標系は、例えば、グローバル座標系に平行である。XYZ座標系は視点座標系の一種であるため、XYZ座標系における水平方向、鉛直方向(上下方向)、および前後方向は、それぞれX軸、Y軸、Z軸として規定される。したがって、XYZ座標系のX軸(水平方向)がグローバル座標系のx軸と平行であり、XYZ座標系のY軸(鉛直方向)がグローバル座標系のy軸と平行であり、XYZ座標系のZ軸(前後方向)がグローバル座標系のz軸と平行である。
HMD装置110の起動時、すなわちHMD装置110の初期状態において、仮想カメラ1が、仮想空間2の中心21に配置される。仮想カメラ1は、現実空間におけるHMD装置110の動きに連動して、仮想空間2を同様に移動する。これにより、現実空間におけるHMD装置110の位置および向きの変化が、仮想空間2において同様に再現される。
仮想カメラ1には、HMD装置110の場合と同様に、uvw視野座標系が規定される。仮想空間2における仮想カメラ1のuvw視野座標系は、現実空間(グローバル座標系)におけるHMD装置110のuvw視野座標系に連動するように規定されている。したがって、HMD装置110の傾きが変化すると、それに応じて、仮想カメラ1の傾きも変化する。また、仮想カメラ1が、HMD装置110を装着したユーザの現実空間における移動に連動して、仮想空間2において移動するようにしてもよいし、コントローラ160により受け付けられたユーザ190による操作に応じて、移動するようにしてもよい。
仮想カメラ1の向きは、仮想カメラ1の位置および傾きに応じて決まるので、ユーザが仮想空間要素を視認する際に基準となる視線(基準視線5)は、仮想カメラ1の向きに応じて決まる。但し、仮想カメラ1の向きを注視センサ140により検出されたユーザ190の視線方向に応じて決めるようにしてもよい。コンピュータ200のプロセッサ10は、基準視線5に基づいて、仮想空間2における視界領域23を規定する。視界領域23は、仮想空間2のうち、HMD装置110を装着したユーザの視界に対応する。
注視センサ140によって検出されるユーザ190の視線方向は、ユーザ190が物体を視認する際の視点座標系における方向である。HMD装置110のuvw視野座標系は、ユーザ190がディスプレイ112を視認する際の視点座標系に等しい。また、仮想カメラ1のuvw視野座標系は、HMD装置110のuvw視野座標系に連動している。したがって、ある局面に従うHMDシステム100は、注視センサ140によって検出されたユーザ190の視線方向を、仮想カメラ1のuvw視野座標系におけるユーザの視線方向とみなすことができる。
[ユーザの視線]
図5を参照して、ユーザの視線方向の決定について説明する。図5は、ある実施の形態に従うHMD装置110を装着するユーザ190の頭部を上から表した図である。
ある局面において、注視センサ140は、ユーザ190の右目および左目の各視線を検出する。ある局面において、ユーザ190が近くを見ている場合、注視センサ140は、視線R1およびL1を検出する。別の局面において、ユーザ190が遠くを見ている場合、注視センサ140は、視線R2およびL2を検出する。この場合、ロール方向wに対して視線R2およびL2がなす角度は、ロール方向wに対して視線R1およびL1がなす角度よりも小さい。注視センサ140は、検出結果をコンピュータ200に送信する。
コンピュータ200が、視線の検出結果として、視線R1およびL1の検出値を注視センサ140から受信した場合には、その検出値に基づいて、視線R1およびL1の交点である注視点N1を特定する。一方、コンピュータ200は、視線R2およびL2の検出値を注視センサ140から受信した場合には、視線R2およびL2の交点を注視点として特定する。コンピュータ200は、特定した注視点N1の位置に基づき、ユーザ190の視線方向N0を特定する。コンピュータ200は、例えば、ユーザ190の右目Rと左目Lとを結ぶ直線の中点と、注視点N1とを通る直線の延びる方向を、視線方向N0として検出する。視線方向N0は、ユーザ190が両目により実際に視線を向けている方向である。また、視線方向N0は、視界領域23に対してユーザ190が実際に視線を向けている方向に相当する。
また、別の局面において、HMDシステム100は、テレビジョン放送受信チューナを備えてもよい。このような構成によれば、HMDシステム100は、仮想空間2においてテレビ番組を表示することができる。
さらに別の局面において、HMDシステム100は、インターネットに接続するための通信回路、あるいは、電話回線に接続するための通話機能を備えていてもよい。
[視界領域]
図6および図7を参照して、視界領域23について説明する。図6は、仮想空間2において視界領域23をX方向から見たYZ断面を表す図である。図7は、仮想空間2において視界領域23をY方向から見たXZ断面を表す図である。
図6に示されるように、YZ断面における視界領域23は、領域24を含む。領域24は、仮想カメラ1の基準視線5と仮想空間2のYZ断面とによって定義される。プロセッサ10は、仮想空間2における基準視線5を中心として極角αを含む範囲を、領域24として規定する。
図7に示されるように、XZ断面における視界領域23は、領域25を含む。領域25は、基準視線5と仮想空間2のXZ断面とによって定義される。プロセッサ10は、仮想空間2における基準視線5を中心とした方位角βを含む範囲を、領域25として規定する。
ある局面において、HMDシステム100は、コンピュータ200からの信号に基づいて、視界画像をディスプレイ112に表示させることにより、ユーザ190に仮想空間を提供する。視界画像は、仮想空間2に展開された仮想空間要素のうち視界領域23に相当する空間内の仮想空間要素を表す画像である。ユーザ190が、頭に装着したHMD装置110を動かすと、その動きに連動して仮想カメラ1も動く。その結果、仮想空間2における視界領域23の位置が変化する。これにより、ディスプレイ112に表示される視界画像は、ユーザ190がHMD装置110を動かす前の視界領域23に相当する空間内の仮想空間要素を表す画像から、ユーザ190がHMD装置110を動かした後の視界領域23に相当する空間内の仮想空間要素を表す画像に更新される。ユーザは、仮想空間2における所望の方向を視認することができる。
ユーザ190は、HMD装置110を装着している間、現実世界を視認することなく、仮想空間2に展開される仮想空間要素を視認できる。そのため、HMDシステム100は、仮想空間2への高い没入感覚をユーザに与えることができる。
ある局面において、プロセッサ10は、HMD装置110を装着したユーザ190の実空間における移動に連動して、仮想空間2において仮想カメラ1を移動し得る。この場合、プロセッサ10は、仮想空間2における仮想カメラ1の位置および向きに基づいて、HMD装置110のディスプレイ112に投影される画像領域(すなわち、仮想空間2における視界領域23)を特定する。すなわち、仮想カメラ1によって、仮想空間2におけるユーザ190の視野が定義される。
ある実施の形態に従うと、仮想カメラ1は、二つの仮想カメラ、すなわち、右目用の画像を提供するための仮想カメラと、左目用の画像を提供するための仮想カメラとを含むことが望ましい。また、ユーザ190が3次元の仮想空間2を認識できるように、適切な視差が、二つの仮想カメラに設定されていることが好ましい。本実施の形態においては、仮想カメラ1が二つの仮想カメラを含み、二つの仮想カメラのロール方向が合成されることによって生成されるロール方向(w)がHMD装置110のロール方向(w)に適合されるように構成されているものとして、本開示に係る技術思想を例示する。
[コントローラ]
図8を参照して、コントローラ160の一例について説明する。図8は、ある実施の形態に従うコントローラ160の概略構成を表す図である。
図8の状態(A)に示されるように、ある局面において、コントローラ160は、右コントローラ160Rと左コントローラとを含み得る。右コントローラ160Rは、ユーザ190の右手で操作される。左コントローラは、ユーザ190の左手で操作される。ある局面において、右コントローラ160Rと左コントローラとは、別個の装置として対称に構成される。したがって、ユーザ190は、右コントローラ160Rを把持した右手と、左コントローラを把持した左手とをそれぞれ自由に動かすことができる。別の局面において、コントローラ160は両手の操作を受け付ける一体型のコントローラであってもよい。以下、右コントローラ160Rについて説明する。
右コントローラ160Rは、グリップ30と、フレーム31と、天面32とを備える。グリップ30は、ユーザ190の右手によって把持されるように構成されている。例えば、グリップ30は、ユーザ190の右手の掌と3本の指(中指、薬指、小指)とによって保持され得る。
グリップ30は、ボタン33,34と、モーションセンサ130とを含む。ボタン33は、グリップ30の側面に配置され、右手の中指による操作を受け付ける。ボタン34は、グリップ30の前面に配置され、右手の人差し指による操作を受け付ける。ある局面において、ボタン33,34は、トリガー式のボタンとして構成される。モーションセンサ130は、グリップ30の筐体に内蔵されている。なお、ユーザ190の動作がカメラその他の装置によってユーザ190の周りから検出可能である場合には、グリップ30は、モーションセンサ130を備えなくてもよい。
フレーム31は、その円周方向に沿って配置された複数の赤外線LED35を含む。赤外線LED35は、コントローラ160を使用するプログラムの実行中に、当該プログラムの進行に合わせて赤外線を発光する。赤外線LED35から発せられた赤外線は、右コントローラ160Rと左コントローラとの各位置および姿勢(傾き、向き)等を検出するために使用され得る。図8に示される例では、二列に配置された赤外線LED35が示されているが、配列の数は図8に示されるものに限られない。一列あるいは3列以上の配列が使用されてもよい。図8に示す例では、コントローラ160は、ユーザが手で把持するコントローラであるため、コントローラ160の位置および姿勢(傾き、向き)を検出することで、ユーザの手の動きを検知できる。なお、コントローラ160が、ユーザ190の身体あるいは衣類の一部に装着可能である場合、コントローラ160の位置および姿勢(傾き、向き)を検出することで、ユーザ190の身体あるいは衣類の一部の動きを検知できる。
天面32は、ボタン36,37と、アナログスティック38とを備える。ボタン36,37は、プッシュ式ボタンとして構成される。ボタン36,37は、ユーザ190の右手の親指による操作を受け付ける。アナログスティック38は、ある局面において、初期位置(ニュートラルの位置)から360度任意の方向への操作を受け付ける。当該操作は、例えば、仮想空間2に配置されるオブジェクトを移動させるための操作を含む。
ある局面において、右コントローラ160Rおよび左コントローラは、赤外線LED35その他の部材を駆動するための電池を含む。電池は、充電式、ボタン型、乾電池型等を含むが、これらに限定されない。別の局面において、右コントローラ160Rおよび左コントローラは、例えば、コンピュータ200のUSBインターフェースに接続され得る。この場合、右コントローラ160Rおよび左コントローラは、電池を必要としない。
図8の状態(A)および状態(B)に示されるように、例えば、ユーザ190の右手810に対して、ヨー、ロール、ピッチの各方向が規定される。ユーザ190が親指と人差し指とを伸ばした場合に、親指の伸びる方向がヨー方向、人差し指の伸びる方向がロール方向、ヨー方向の軸およびロール方向の軸によって規定される平面に垂直な方向がピッチ方向として規定される。
[HMD装置の制御装置]
図9を参照して、HMD装置110の制御装置について説明する。ある実施の形態において、制御装置は周知の構成を有するコンピュータ200によって実現される。図9は、ある実施の形態に従うコンピュータ200をモジュール構成として表すブロック図である。
図9に示されるように、コンピュータ200は、主制御モジュール220と、メモリモジュール240と、通信制御モジュール250とを備える。主制御モジュール220は、サブモジュールとして、仮想空間制御モジュール221と、仮想カメラ制御モジュール222と、操作オブジェクト制御モジュール223と、オブジェクト制御モジュール224と、コリジョン制御モジュール225と、コリジョン判定モジュール226と、視界画像生成モジュール227と、表示制御モジュール228と、を含む。但し、主制御モジュール220に、上述した全てのモジュールを含める必要はなく、その一部を含めないようにしてもよい。例えば、本実施形態においては、コリジョン制御モジュール225を主制御モジュール220に含めなくてもよい。
ある実施の形態において、主制御モジュール220は、プロセッサ10によって実現される。別の実施の形態において、複数のプロセッサ10が主制御モジュール220として作動してもよい。メモリモジュール240は、メモリ11またはストレージ12によって実現される。通信制御モジュール250は、通信インターフェース14によって実現される。
仮想空間制御モジュール221は、ユーザ190に提供される仮想空間2を制御する。本実施形態では、仮想空間制御モジュール221は、仮想空間2を表す仮想空間データを特定することにより、HMDシステム100における仮想空間2を規定する。なお本実施形態では、仮想空間2内への、仮想カメラ1、各種オブジェクト、及び背景画像などの仮想空間要素の配置を仮想空間制御モジュール221以外のモジュールが行う場合を例にとり説明するが、これに限定されず、仮想空間制御モジュール221が行うようにしてもよい。また、仮想空間2内への仮想空間要素の配置は、仮想空間2全体に対して行われてもよいし、後述の仮想カメラ制御モジュール222により決定された視界領域23に限定して行われてもよい。
仮想カメラ制御モジュール222は、仮想空間2へ仮想カメラ1を配置し、仮想空間2における仮想カメラ1の動作を制御する。本実施形態では、仮想カメラ制御モジュール222は、HMD装置110を装着したユーザの頭の向き(HMD装置110の動き)や、当該ユーザによるコントローラ160のキー操作(ボタン36,37やアナログスティック38の操作)に基づいて、仮想空間2における仮想カメラ1の挙動、向き等を制御できる。つまり、仮想カメラ1の視界領域23は、HMD装置110を装着したユーザの頭の向きに基づいて規定されてもよいし、ユーザによるコントローラ160のキー操作(ボタン36,37やアナログスティック38の操作)に基づいて規定されてもよい。但し、仮想カメラ1の動作制御は、これに限定されるものではない。
操作オブジェクト制御モジュール223は、仮想空間2へ操作オブジェクトを配置し、仮想空間2における操作オブジェクトの動作(移動および状態変化等)を制御する。操作オブジェクトは、HMD装置110を装着したユーザに関連付けられたオブジェクトであり、本実施形態では、手オブジェクトである場合を例にとり説明するが、これに限定されるものではない。なお本実施形態では、プレイヤキャラクタの手オブジェクトは、HMD装置110を装着したユーザの手に相当する。このため操作オブジェクト制御モジュール223は、当該ユーザが手に保持するコントローラ160の動きや当該ユーザによるコントローラ160のキー操作(ボタン36,37やアナログスティック38の操作)に基づいて、プレイヤキャラクタの手オブジェクトを動作させる。なお、手オブジェクトは、仮想空間2に配置されるオブジェクトを操作するための操作オブジェクトとなりうる。
また、操作オブジェクトを手オブジェクトではなく、指オブジェクト(仮想指)、足オブジェクト、及びユーザが使用するスティックに相当するスティックオブジェクト等としてもよい。操作オブジェクトが指オブジェクトの場合、特に、操作オブジェクトは、当該指が指し示す方向(軸方向)の軸の部分に対応している。
オブジェクト制御モジュール224は、仮想空間2へ操作オブジェクト以外のオブジェクトを配置し、仮想空間2における操作オブジェクト以外のオブジェクトの動作(移動および状態変化等)を制御する。操作オブジェクト以外のオブジェクトとしては、例えば、移動オブジェクト、対象オブジェクト、及び背景オブジェクトなどが挙げられるが、これらに限定されるものではない。移動オブジェクトは、操作オブジェクトによって直接又は間接的に操作される(扱われる)オブジェクトであればどのようなオブジェクトであってもよい。移動オブジェクトとしては、例えば、操作オブジェクト(手オブジェクト)によって投げられる手榴弾オブジェクトやボールオブジェクトなどが挙げられるが、これらに限定されるものではない。なお、操作オブジェクトによって間接的に操作される移動オブジェクトの例としては、操作オブジェクト(手オブジェクト)によって操作されるバットオブジェクトによって、任意の方向に飛ばされるボールオブジェクトなどが挙げられる、これらに限定されるものではない。
対象オブジェクトは、移動オブジェクトからの影響を受けるオブジェクトである。対象オブジェクトとしては、例えば、敵キャラクタや相手キャラクタなどが挙げられるが、これに限定されるものではない。背景オブジェクトは、例えば、ゲームのストーリーの進行に従って配置される森、山その他を含む風景、動物等を含み得る。なお、オブジェクト制御モジュール224は、動作しないオブジェクトについては、固定位置に配置したままに制御しておけばよい。
コリジョン制御モジュール225は、移動オブジェクトの動きに基づいて、移動オブジェクトに関連付けられたコリジョンエリアの形状及び大きさの少なくともいずれかを特定(決定)する制御を行う。移動オブジェクトの動きに関する情報は、移動オブジェクトの速さ、速度、加速度、向き、及び姿勢変化など移動オブジェクトの動きから特定可能な情報が挙げられるが、これらに限定されるものではない。またコリジョン判定モジュール226は、移動オブジェクトの早さに関する情報に基づいて、移動オブジェクトが対象オブジェクトに与える影響を特定(決定)する。
コリジョン判定モジュール226は、オブジェクト間のコリジョンエリアの衝突(接触)を判定することで、オブジェクト間の衝突を判定する。コリジョン判定モジュール226は、例えば、あるオブジェクトと、別のオブジェクトとが触れたタイミングを検出することができ、当該検出がされたときに、予め定められた処理を行う。またコリジョン判定モジュール226は、オブジェクトとオブジェクトとが触れている状態から離れたタイミングを検出することができ、当該検出がされたときに、予め定められた処理を行うこともできる。
本実施形態では、コリジョン判定モジュール226は、移動オブジェクトに関連付けられたコリジョンエリアと対象オブジェクトとの位置関係に基づいて、移動オブジェクトと対象オブジェクトとの衝突を判定する。コリジョン判定モジュール226は、移動オブジェクトと対象オブジェクトとが衝突していると判定した場合、対象オブジェクトに所定の影響を与える。
視界画像生成モジュール227は、仮想カメラ制御モジュール222により決定された視界領域23に基づいて、ディスプレイ112に表示される視界画像データを生成する。具体的には、視界画像生成モジュール227は、仮想カメラ1の動きに基づいて定義される仮想カメラの視界と、仮想空間制御モジュール221により特定された仮想空間データと、コリジョン判定モジュール226の衝突判定結果(対象オブジェクトに所定の影響を与えた結果)と、に基づいて、視界画像データを生成する。
表示制御モジュール228は、視界画像生成モジュール227により生成された視界画像データに基づいて、HMD装置110のディスプレイ112に視界画像を表示させる。例えば、表示制御モジュール228は、視界画像生成モジュール227により生成された視界画像データをHMD装置110に出力することで、視界画像をディスプレイ112に表示させる。
メモリモジュール240は、コンピュータ200が仮想空間2をユーザ190に提供するために使用されるデータを保持している。ある局面において、メモリモジュール240は、空間情報241と、オブジェクト情報242と、ユーザ情報243とを保持している。空間情報241には、例えば、仮想空間2を提供するために規定された1つ以上のテンプレートが含まれている。オブジェクト情報242には、例えば、仮想空間2において再生されるコンテンツ、当該コンテンツで使用されるオブジェクトを配置するための情報、そのほかプレイヤキャラクタの描画データやそのサイズ情報などの属性情報等が含まれている。当該コンテンツは、例えば、ゲーム、現実社会と同様の風景を表したコンテンツ等を含み得る。ユーザ情報243には、例えば、HMDシステム100の制御装置としてコンピュータ200を機能させるためのプログラム、オブジェクト情報242に保持される各コンテンツを使用するアプリケーションプログラム等が含まれている。
メモリモジュール240に格納されているデータおよびプログラムは、HMD装置110のユーザによって入力される。あるいは、プロセッサ10が、当該コンテンツを提供する事業者が運営するコンピュータ(例えば、サーバ150)からプログラムあるいはデータをダウンロードして、ダウンロードされたプログラムあるいはデータをメモリモジュール240に格納する。
通信制御モジュール250は、ネットワーク19を介して、サーバ150その他の情報通信装置と通信し得る。
ある局面において、主制御モジュール220は、例えば、ユニティテクノロジーズ社によって提供されるUnity(登録商標)を用いて実現され得る。別の局面において、主制御モジュール220は、各処理を実現する回路素子の組み合わせとしても実現され得る。
コンピュータ200における処理は、ハードウェアと、プロセッサ10により実行されるソフトウェアとによって実現される。このようなソフトウェアは、ハードディスクその他のメモリモジュール240に予め格納されている場合がある。また、ソフトウェアは、CD−ROMその他のコンピュータ読み取り可能な不揮発性のデータ記録媒体に格納されて、プログラム製品として流通している場合もある。あるいは、当該ソフトウェアは、インターネットその他のネットワークに接続されている情報提供事業者によってダウンロード可能なプログラム製品として提供される場合もある。このようなソフトウェアは、光ディスク駆動装置その他のデータ読取装置によってデータ記録媒体から読み取られて、あるいは、通信制御モジュール250を介してサーバ150その他のコンピュータからダウンロードされた後、メモリモジュール240に一旦格納される。そのソフトウェアは、プロセッサ10によってメモリモジュール240から読み出され、実行可能なプログラムの形式でRAMに格納される。プロセッサ10は、そのプログラムを実行する。
図9に示されるコンピュータ200を構成するハードウェアは、一般的なものである。コンピュータ200のハードウェアの動作は周知であるので、詳細な説明は繰り返さない。
なお、データ記録媒体としては、CD−ROM、FD(Flexible Disk)、ハードディスクに限られず、磁気テープ、カセットテープ、光ディスク(MO(Magnetic Optical Disc)/MD(Mini Disc)/DVD(Digital Versatile Disc))、IC(Integrated Circuit)カード(メモリカードを含む)、光カード、マスクROM、EPROM(Erasable Programmable Read-Only Memory)、EEPROM(Electrically Erasable Programmable Read-Only Memory)、フラッシュROMなどの半導体メモリ等の固定的にプログラムを担持する不揮発性のデータ記録媒体でもよい。
ここでいうプログラムとは、プロセッサ10により直接実行可能なプログラムだけでなく、ソースプログラム形式のプログラム、圧縮処理されたプログラム、暗号化されたプログラム等を含み得る。
[制御構造]
図10を参照して、本実施の形態に係るコンピュータ200の制御構造について説明する。図10は、ユーザ190によって使用されるHMDシステム100がユーザ190に仮想空間2を提供するために実行する処理を表すフローチャートである。
ステップS1において、コンピュータ200のプロセッサ10は、仮想空間制御モジュール221として、仮想空間データを特定し、仮想空間2を定義する。また、プロセッサ10は、操作オブジェクト制御モジュール223及びオブジェクト制御モジュール224として、この仮想空間2に操作オブジェクトや操作オブジェクト以外のオブジェクトを配置する。仮想空間制御モジュール221は、その動作を仮想空間2内に制御可能に定義する。
ステップS2において、プロセッサ10は、仮想カメラ制御モジュール222として、仮想カメラ1を初期化する。例えば、プロセッサ10は、メモリのワーク領域において、仮想カメラ1を仮想空間2において予め規定された中心点に配置し、仮想カメラ1の視線をユーザ190が向いている方向に向ける。
ステップS3において、プロセッサ10は、視界画像生成モジュール227として、初期の視界画像を表示するための視界画像データを生成する。表示制御モジュール228は、生成した視界画像データを、通信制御モジュール250を介してHMD装置110に送信(出力)する。
ステップS4において、HMD装置110のディスプレイ112は、コンピュータ200から受信した視界画像データに基づいて、視界画像を表示する。HMD装置110を装着したユーザ190は、視界画像を視認すると仮想空間2を認識し得る。
ステップS5において、HMDセンサ120は、HMD装置110から発信される複数の赤外線光に基づいて、HMD装置110の位置と傾きを検知する。検知結果は、動き検知データとして、コンピュータ200に送られる。
ステップS6において、プロセッサ10は、仮想カメラ制御モジュール222として、HMD装置110の位置と傾きとに基づいて、HMD装置110を装着したユーザ190の視界方向を特定する。
ステップS7において、コントローラ160は、現実空間におけるユーザ190の操作を検出する。例えば、ある局面において、コントローラ160は、ユーザ190によってボタンが押下されたことを検出する。別の局面において、コントローラ160は、ユーザ190の手の動作(例えば、ユーザ190がものを投げる素振りをした際の手の動作等)を検出する。検出内容を示す信号は、コンピュータ200に送られる。
ステップS8において、プロセッサ10は、操作オブジェクト制御モジュール223、オブジェクト制御モジュール224、コリジョン制御モジュール225、及びコリジョン判定モジュール226として、HMDセンサ120から送られた動き検知データ、コントローラ160から送られた検出内容および各種オブジェクトの制御内容を仮想空間2に反映する。
例えば、プロセッサ10は、操作オブジェクト制御モジュール223として、HMD装置110の動き検知データやコントローラ160の検出内容に基づいて、仮想空間2における操作オブジェクト(手オブジェクト)を動かす。また例えば、プロセッサ10は、オブジェクト制御モジュール224として、操作オブジェクトによって操作された移動オブジェクトや対象オブジェクトなどの操作オブジェクト以外のオブジェクトの動作を制御する。また例えば、プロセッサ10は、コリジョン制御モジュール225として、移動オブジェクトの動きに基づいて、移動オブジェクトに関連付けられたコリジョンエリアの形状及び大きさの少なくともいずれかを制御する。また例えば、プロセッサ10は、コリジョン判定モジュール226として、操作オブジェクトのコリジョンエリアと対象オブジェクトのコリジョンエリアとの衝突判定を行う。
ステップS9において、プロセッサ10は、視界画像生成モジュール227として、ステップS8における処理の結果に基づく視界画像を表示するための視界画像データを生成する。表示制御モジュール228は、生成した視界画像データをHMD装置110に出力する。
ステップS10において、HMD装置110のディスプレイ112は、受信した視界画像データに基づいて視界画像を更新し、更新後の視界画像を表示する。
次に、図11および図12を参照しながら、ユーザ190の状態と、仮想空間2内に配置された各種オブジェクトとの関係を説明する。図11(A)は、HMD装置110、及びコントローラ160L、160Rを装着したユーザ190の一例を示す図である。図11(B)は、図11(A)に示す状態における、仮想空間2内に配置された仮想カメラ1、左手オブジェクト400L、右手オブジェクト400R、手榴弾オブジェクト500、及び敵キャラクタ600の一例を示す図である。図12は、図11(B)に示す仮想空間2内を仮想カメラ1の視界領域23で撮影した(表した)視界画像Mの一例を示す図である。なお、以下の図面では、説明の関係上、図11(B)に示すように、手オブジェクト400を単なる円で表したり、敵キャラクタ600を単なる直方体として表したりする場合がある。
本実施形態では、仮想カメラ1は、ユーザ190が装着しているHMD110の動きに連動する。つまり、仮想カメラ1の視野は、HMD110の動きに応じて更新される。また本実施形態では、左手オブジェクト400Lは、ユーザ190の左手に装着されるコントローラ160Lの動きに応じて移動する操作オブジェクトであり、右手オブジェクト400Rは、ユーザ190の右手に装着されるコントローラ160Rの動きに応じて移動する操作オブジェクトである。以下では、左手オブジェクト400Lと右手オブジェクト400Rとを単に「手オブジェクト400」と総称する場合がある。また本実施形態では、手榴弾オブジェクト500は、手オブジェクト400によって操作される移動オブジェクトである。手榴弾オブジェクト500に対する手オブジェクト400による操作としては、例えば、手榴弾オブジェクト500をつかむ、手榴弾オブジェクト500からピン510を外す、つかんだ手榴弾オブジェクト500を対象オブジェクトである敵キャラクタ600に投げるなどが挙げられるが、これに限定されるものではない。なお、図11及び図12に示す例では、手榴弾オブジェクト500は、左手オブジェクト400Lによって保持されている。
また本実施形態では、各オブジェクトには、オブジェクト間の衝突(コリジョン)を判定するためのコリジョンエリアが設定されている。図11(B)に示す例では、左手オブジェクト400LにはコリジョンエリアCALが設定され、右手オブジェクト400RにはコリジョンエリアCARが設定され、手榴弾オブジェクト500にはコリジョンエリアCBが設定され、敵キャラクタ600にはコリジョンエリアCCが設定されている。以下では、コリジョンエリアCALとコリジョンエリアCARとを単に「コリジョンエリアCA」と総称する場合がある。本実施形態では、図11(B)に示すように、コリジョンエリアは、オブジェクトの中心位置を中心に設定されている場合を例にとり説明するが、これに限定されず、オブジェクトの中心位置以外の位置を中心としてもよい。また、コリジョンエリアの形状は、例えば、球状、直方体状、楕円状、及び棒状などどのような形状であってもよく、オブジェクト毎に大きさや形状が異なっていてもよい。
前述したように、図11及び図12に示す例では、手榴弾オブジェクト500は、左手オブジェクト400Lによって保持されている。手オブジェクト400による手榴弾オブジェクト500の保持は、コリジョンエリアCAとコリジョンエリアCBとの衝突を条件に可能である。例えば、コリジョン判定モジュール226によりコリジョンエリアCAとコリジョンエリアCBとが衝突していると判定されたことを条件に、手オブジェクト400により手榴弾オブジェクト500を保持させるようにしてもよい。また例えば、コリジョン判定モジュール226によりコリジョンエリアCAとコリジョンエリアCBとが衝突していると判定された状態で、ボタン36,37又はアナログスティック38がユーザ190により操作(押下)され続けていることを条件に、手オブジェクト400により手榴弾オブジェクト500を保持させるようにしてもよい。なお、手オブジェクト400による手榴弾オブジェクト500の保持は、どのように実現しても構わないが、例えば、オブジェクト制御モジュール224が、手オブジェクト400の移動(動作)に連動させて手榴弾オブジェクト500を移動させることで実現できる。
本実施形態では、ユーザ190が、手にコントローラ160が装着された状態で物を投げるような動作を行うことで、手オブジェクト400に、保持中の手榴弾オブジェクト500を敵キャラクタ600に向かって投げさせる。そして、投げられた手榴弾オブジェクト500のコリジョンエリアCBと敵キャラクタ600のコリジョンエリアCCとのコリジョン判定(当たり判定)結果に応じて、敵キャラクタ600に所定の影響が与えられる。
なお、手オブジェクト400による手榴弾オブジェクト500の投てきは、どのように実現しても構わない。例えば、ユーザ190が、手にコントローラ160が装着された状態で物を投げるような動作を行っている最中に、手榴弾オブジェクト500を保持させるために操作(押下)中のボタン36,37又はアナログスティック38の操作(押下)を解除することで、オブジェクト制御モジュール224が、コントローラ160の動きに基づく速度を手榴弾オブジェクト500に与え、当該速度に基づいて手榴弾オブジェクト500を移動させることで実現できる。
また、敵キャラクタ600に与えられる影響としては、例えば、敵キャラクタ600に関連付けられたパラメータの変動が挙げられる。本実施形態では、敵キャラクタ600に関連付けられたパラメータが体力やライフなどゲームを継続するために必要な要素であり、このパラメータを低下させることを想定しているが、これに限定されるものではない。なお、敵キャラクタ600に与えられる影響は、パラメータの変動ではなく、敵キャラクタ600の挙動の変化などであってもよいし、両者の併用であってもよい。
また本実施形態では、手榴弾オブジェクト500を爆発させるため、手榴弾オブジェクト500からピン510を抜いた後に手榴弾オブジェクト500を手オブジェクト400に投げさせることを想定している。しかしながら、仮想空間に没頭しているユーザ190が興奮のあまり手榴弾オブジェクト500からピン510を抜くための操作を忘れて、手榴弾オブジェクト500を手オブジェクト400に投げさせてしまうことが想定される。このため本実施形態では、手榴弾オブジェクト500がピン510を抜いた状態で投げられているかピン510が抜かれずに投げられているかに応じた制御を行う。
なお、手榴弾オブジェクト500からピン510を抜くための操作は、どのように実現しても構わない。例えば、手オブジェクト400に手榴弾オブジェクト500が保持されている状態で、ユーザ190が、コントローラ160のボタン36,37又はアナログスティック38の操作(押下)を行うことで、オブジェクト制御モジュール224が、手榴弾オブジェクト500からピン510を抜くようにしてもよい。また例えば、ピン510にもコリジョンエリアを設定し、このコリジョンエリアと手オブジェクト400のコリジョンエリアCA(主として、手榴弾オブジェクト500を保持していない方の手オブジェクト400のコリジョンエリアCAを想定)との衝突後に、コントローラ160のボタン36,37又はアナログスティック38の操作(押下)が行われたり、上記衝突が解除されたりしたこと(非接触の状態に戻ったこと)を条件に、オブジェクト制御モジュール224が、手榴弾オブジェクト500からピン510を抜くようにしてもよい。
次に、図13〜図19を参照しながら、本実施形態に係る情報処理方法、具体的には、コリジョンエリア及びコリジョン効果の制御手法について説明する。図13〜図15は、本実施形態のコリジョン制御処理の一例を示すフローチャートである。なお、図14は、手榴弾オブジェクト500がピン510を抜かれた状態で投げられている場合のコリジョン制御処理を示し、図15は、手榴弾オブジェクト500がピン510を抜かれていない状態で投げられている場合のコリジョン制御処理を示す。図13〜図15に示すコリジョン制御処理は、図10に示すフローチャートのステップS7〜S8の詳細処理の一例に該当する。図16(A)は、手榴弾オブジェクト500からピン510が抜かれた状態で、ユーザ190が物を投げる動作を行っている状態の一例を示す図であり、図16(B)は、図16(A)が示す状態において、手榴弾オブジェクト500の速度が閾値以上の場合のコリジョンエリアCBの制御例を示す図である。図17(A)は、手榴弾オブジェクト500からピン510が抜かれた状態で、ユーザ190が物を投げる動作を行っている状態の一例を示す図であり、図17(B)は、図17(A)が示す状態において、手榴弾オブジェクト500の速度が閾値未満の場合のコリジョンエリアCBの制御例を示す図である。図18(A)は、手榴弾オブジェクト500からピン510が抜かれていない状態で、ユーザ190が物を投げる動作を行っている状態の一例を示す図であり、図18(B)は、図18(A)が示す状態において、手榴弾オブジェクト500の速度が閾値以上の場合のコリジョン効果の制御例を示す図である。図19(A)は、手榴弾オブジェクト500からピン510が抜かれていない状態で、ユーザ190が物を投げる動作を行っている状態の一例を示す図であり、図19(B)は、図19(A)が示す状態において、手榴弾オブジェクト500の速度が閾値未満の場合のコリジョン効果の制御例を示す図である。
図13に示すように、まず、ステップS11において、プロセッサ10(オブジェクト制御モジュール224)は、手オブジェクト400により手榴弾オブジェクト500が投げられたか否かを判定する。プロセッサ10(オブジェクト制御モジュール224)は、例えば、ユーザ190が、手榴弾オブジェクト500を保持させるために操作(押下)中のボタン36,37又はアナログスティック38の操作(押下)を解除した場合、手榴弾オブジェクト500が投げられたと判定し、解除されていない場合、手榴弾オブジェクト500が投げられていないと判定する。なお、ステップS11の処理は、手榴弾オブジェクト500が投げられていないと判定されている間(ステップS11でNo)、定期的に行われる。
手榴弾オブジェクト500が投げられたと判定された場合(ステップS11でYes)、ステップS12において、プロセッサ10(オブジェクト制御モジュール224)は、投げられた手榴弾オブジェクト500に速度v(速度ベクトル)を設定し、設定した速度vで手榴弾オブジェクト500を移動させる。
プロセッサ10(オブジェクト制御モジュール224)は、例えば、手榴弾オブジェクト500を保持させるために操作(押下)中のボタン36,37又はアナログスティック38の操作(押下)が解除されたコントローラ160(ユーザ190が物を投げる動作を行った方の手に装着されているコントローラ160を想定)の絶対速度に基づいて、手榴弾オブジェクト500に速度vを与える。手榴弾オブジェクト500に与えられる速度vは、コントローラ160の絶対速度に基づいて求められた速度であればどのようなものでもよく、コントローラ160の絶対速度そのものであってもよいし、コントローラ160の絶対速度に所定の定数を乗じることで求められた速度であってもよい。
なお、コントローラ160の絶対速度は、現実空間内における固定位置から観測したHMD110の速度を示す。本実施形態では、コントローラ160の絶対速度は、現実空間内の所定の場所に設置されたHMDセンサ120に対するコントローラ160の速度である場合を例にとり説明するが、これに限定されるものではない。具体的には、プロセッサ10は、HMDセンサ120により検出された情報を取得する毎に、当該情報に基づいてコントローラ160の位置を特定し、特定した位置情報と、前回に特定した位置情報とに基づいて、コントローラ160の移動方向における絶対速度を特定する。例えば、n番目(nは1以上の整数)のフレームにおけるコントローラ160の位置がPn、(n+1)番目のフレームにおけるコントローラ160の位置がPn+1であり、フレーム間の時間間隔がΔTである場合、n番目のフレームにおけるコントローラ160の絶対速度avnは、avn=(位置(Pn+1)−位置Pn)/ΔTとなる。なお、ΔTは、1/フレームレートであり、例えば、フレームレートが90fps(frames per second)であれば、ΔT=1/90である。なお、コントローラ160の絶対速度を特定するモジュールは、例えば、操作オブジェクト制御モジュール223であってもよいし、オブジェクト制御モジュール224であってもよい。
図13に戻り、ステップS13において、プロセッサ10(オブジェクト制御モジュール224)は、手榴弾オブジェクト500からピン510が抜かれているか否かを判定する。プロセッサ10(オブジェクト制御モジュール224)は、例えば、手榴弾オブジェクト500が投げられる以前に、前述した手榴弾オブジェクト500からピン510を抜くための操作を検出している場合には、手榴弾オブジェクト500からピン510が抜かれていると判定し、当該操作を検出していない場合には、手榴弾オブジェクト500からピン510が抜かれていないと判定すればよい。手榴弾オブジェクト500からピン510が抜かれている場合(ステップS13でYes)、A(詳細には、図14のステップS21)に進み、手榴弾オブジェクト500からピン510が抜かれていない場合(ステップS13でNo)、B(詳細には、図15のステップS31)に進む。
ここで、図14を参照し、手榴弾オブジェクト500からピン510が抜かれている場合(図13のステップS13で「A」に進んだ場合)の制御例について説明する。図14のステップS21において、プロセッサ10(オブジェクト制御モジュール224)は、手榴弾オブジェクト500の爆発タイミングか否かを判定する。手榴弾オブジェクト500の爆発タイミングは、例えば、手榴弾オブジェクト500からピン510が抜かれてから所定時間経過後(例えば、5秒後)に設定できる。このため、プロセッサ10(オブジェクト制御モジュール224)は、手榴弾オブジェクト500からピン510が抜かれた時点でタイマーを設定し、このタイマーにより所定時間の計測が完了すれば、手榴弾オブジェクト500の爆発タイミングと判定し、所定時間の計測が完了していなければ、手榴弾オブジェクト500の爆発タイミングでないと判定すればよい。なお、ステップS21の処理は、手榴弾オブジェクト500の爆発タイミングでないと判定されている間(ステップS21でNo)、定期的に行われる。
手榴弾オブジェクト500の爆発タイミングであると判定された場合(ステップS21でYes)、ステップS22において、プロセッサ10(オブジェクト制御モジュール224)は、投げられた手榴弾オブジェクト500の速度vが閾値となる所定速度vth以上かどうかを判定する。なお、所定速度vthは、ゲーム内容に応じて適宜されていてもよいし、ユーザ190の手を動かす速度を予め計測して設定してもよい。
手榴弾オブジェクト500の速度vが所定速度vth以上(v≧vth)である場合(ステップS22でYes)、プロセッサ10(コリジョン制御モジュール225)は、ステップS23において、手榴弾オブジェクト500のコリジョンエリアCBの大きさの直径をR2(R<R1<R2)に特定(設定)し、ステップS25において、手榴弾オブジェクト500を爆発させる演出を行う。
一方、手榴弾オブジェクト500の速度vが所定速度vth未満(v<vth)である場合(ステップS22でNo)、プロセッサ10(コリジョン制御モジュール225)は、ステップS24において、手榴弾オブジェクト500のコリジョンエリアCBの大きさの直径をR1(R<R1<R2)に特定(設定)し、ステップS25において、手榴弾オブジェクト500を爆発させる演出を行う。なお「R」は、コリジョンエリアCBのデフォルトの大きさの直径である。
ここで、ステップS23やステップS24で設定されたコリジョンエリアCBの大きさは、手榴弾オブジェクト500が爆発した際の爆風の影響が及ぶ範囲に相当する。このため本実施形態では、手榴弾オブジェクト500の速度が遅い場合の爆風550の影響が及ぶ範囲(直径がR1のコリジョンエリアCB)よりも、手榴弾オブジェクト500の速度が速い場合の爆風550の影響が及ぶ範囲(直径がR2のコリジョンエリアCB)の方が大きくなる(図16、図17参照)。
実空間の場合、物理法則の関係上、ものを投げる速度が遅いほど飛距離も短くなり、ものを投げる速度が速いほど飛距離も長くなる傾向にある。このため、実空間において、手榴弾を投げて爆発させる場合を想定すると、遅く投げた場合よりも速く投げた場合の方が遠くまで手榴弾が届き、爆風の影響が目的物に及ぶ(届く)可能性が高いと考えられる。従って上述したような制御を行うことで、爆風の影響が及ぶ範囲にリアリティを持たせることが可能となり、ユーザ190に対する仮想空間への没入感を高めることが可能となる。
なお本実施形態では、コリジョンエリアCBの直径を変更することでコリジョンエリアCBの大きさを変更する場合を例にとり説明した。しかしながら、コリジョンエリアCBの大きさを変更するために用いるコリジョンエリアCBの要素(パラメータ)は、これに限定されず、半径などどのような値を用いてもよい。
続いて、ステップS26において、プロセッサ10(コリジョン判定モジュール226)は、手榴弾オブジェクト500(爆風550)のコリジョンエリアCBと敵キャラクタ600のコリジョンエリアCCとが衝突(接触)しているか否かを判定する。
プロセッサ10(コリジョン判定モジュール226)は、コリジョンエリアCBとコリジョンエリアCCとが衝突していると判定した場合(ステップS26でYes)、敵キャラクタ600に所定の影響を与える(ステップS27)。なお、図16に示す例の場合(手榴弾オブジェクト500の速度が速い場合)、手榴弾オブジェクト500(爆風550)のコリジョンエリアCBが、敵キャラクタ600のコリジョンエリアCCと衝突しているため、プロセッサ10(コリジョン判定モジュール226)は、敵キャラクタ600に関連づけられたパラメータを低下させる。
一方、プロセッサ10(コリジョン判定モジュール226)は、コリジョンエリアCBとコリジョンエリアCCとが衝突していないと判定した場合(ステップS26でNo)、敵キャラクタ600に所定の影響を与えない(ステップS27を行わない)。なお、図17に示す例の場合(手榴弾オブジェクト500の速度が遅い場合)、手榴弾オブジェクト500(爆風550)のコリジョンエリアCBが、敵キャラクタ600のコリジョンエリアCCと衝突していないため、プロセッサ10(コリジョン判定モジュール226)は、敵キャラクタ600に関連づけられたパラメータを低下させない。
次に、図15を参照し、手榴弾オブジェクト500からピン510が抜かれていない場合(図13のステップS13で「B」に進んだ場合)の制御例について説明する。図15のステップS31において、プロセッサ10(コリジョン判定モジュール226)は、手榴弾オブジェクト500のコリジョンエリアCBと敵キャラクタ600のコリジョンエリアCCとが衝突(接触)しているか否かを判定する。
コリジョンエリアCBとコリジョンエリアCCとが衝突していない場合(ステップS31でNo)、ステップS36へ進む。一方、コリジョンエリアCBとコリジョンエリアCCとが衝突している場合(ステップS31でYes)、ステップS32において、プロセッサ10(オブジェクト制御モジュール224)は、投げられた手榴弾オブジェクト500の速度vが閾値となる所定速度vth以上かどうかを判定する。
手榴弾オブジェクト500の速度vが所定速度vth以上(v≧vth)である場合(ステップS32でYes)、ステップS33において、プロセッサ10(コリジョン制御モジュール225)は、敵キャラクタ600に与える影響を第1の影響に設定する。
一方、手榴弾オブジェクト500の速度vが所定速度vth未満(v<vth)である場合(ステップS32でNo)、ステップS34において、プロセッサ10(コリジョン制御モジュール225)は、敵キャラクタ600に与える影響を第2の影響に設定する。
ここで、ステップS33で設定した第1の影響やステップS34で設定した第2の影響は、いずれも敵キャラクタ600に関連づけられたパラメータを低下させるものであるが、第2の影響よりも第1の影響の方がパラメータの低下量(例えば、敵キャラクタ600が受けるダメージ)が多いものとする。このため本実施形態では、ピン510が抜かれずに手榴弾オブジェクト500が投げられた場合、手榴弾オブジェクト500の速度が遅い場合よりも、手榴弾オブジェクト500の速度が速い場合の方が、敵キャラクタ600が受ける影響(敵キャラクタ600のパラメータ低下量)が大きくなる(図18、図19参照)。
前述したように、仮想空間に没頭しているユーザ190が興奮のあまり手榴弾オブジェクト500からピン510を抜くための操作を忘れて、手榴弾オブジェクト500を手オブジェクト400に投げさせてしまうことが想定される。この場合、手榴弾オブジェクト500は爆発しないため、手榴弾オブジェクト500が敵キャラクタ600に衝突しても、敵キャラクタ600に影響を与えない(敵キャラクタ600のパラメータを低下させない)という制御も考えられる。しかしながら、このような制御は、ユーザ190を仮想空間2に没入させるという観点からは好ましくない。また、実体験上においても、手榴弾のような鉄の塊をぶつけられれば通常は痛みを感じ、ぶつけられる速度が速いほど痛みは増すと考えられる。このため本実施形態では、上述したような制御を行うことで、敵キャラクタ600に与える影響にリアリティを持たせることが可能となり、ユーザ190に対する仮想空間への没入感を高めることが可能となる。但し、敵キャラクタ600に与える影響にリアリティを持たせるという観点からは、第1の影響によるパラメータの低下量は、前述した手榴弾オブジェクト500の爆風の影響によるパラメータの低下量よりも少ないことが好ましい。
続いて、ステップS35において、プロセッサ10(コリジョン判定モジュール226)は、手榴弾オブジェクト500を爆発させる演出を行い、設定した影響を敵キャラクタ600に与える。
このように本実施形態では、移動オブジェクトの移動速度に応じて、対象オブジェクトなどの他のオブジェクトとのコリジョン判定に用いられる移動オブジェクトのコリジョンエリアの大きさを変えたり、移動オブジェクトが対象オブジェクトなどの他のオブジェクトと衝突した場合のコリジョン効果を変えたりする。このため本実施形態によれば、ユーザ190の仮想空間への没入感を向上させることが可能となる。
なお本実施形態では、移動オブジェクトの移動速度に応じて、対象オブジェクトなどの他のオブジェクトとのコリジョン判定に用いられる移動オブジェクトのコリジョンエリアの大きさを変えたり、移動オブジェクトが対象オブジェクトなどの他のオブジェクトと衝突した場合のコリジョン効果を変えたりする場合を例にとり説明した。しかしながら、移動オブジェクトの移動速度ではなく、移動オブジェクトの速さ(スカラー量)や加速度などの移動オブジェクトの早さに関する情報を用いて、このような制御を行うようにしてもよい。
また本実施形態では、移動オブジェクトの移動速度が閾値以上であるか否かに応じて、対象オブジェクトなどの他のオブジェクトとのコリジョン判定に用いられる移動オブジェクトのコリジョンエリアの大きさを変えたり、移動オブジェクトが対象オブジェクトなどの他のオブジェクトと衝突した場合のコリジョン効果を変えたりする場合を例にとり説明した。しかしながら、移動オブジェクトの移動速度を段階分けし、この段階に応じて、対象オブジェクトなどの他のオブジェクトとのコリジョン判定に用いられる移動オブジェクトのコリジョンエリアの大きさを変えたり、移動オブジェクトが対象オブジェクトなどの他のオブジェクトと衝突した場合のコリジョン効果を変えたりするようにしてもよい。このようにすれば、移動オブジェクトのコリジョンエリアの大きさや移動オブジェクトのコリジョン効果をより細かく設定することができる。
(変形例1)
上記第1実施形態では、移動オブジェクトの移動速度が一様である場合を例にとり説明した。しかしながら、移動オブジェクトの移動に、運動の法則などの物理法則を適用することで(詳細には、移動オブジェクトに運動方程式を適用することで)、現実空間同様、移動オブジェクトの移動速度を時間経過とともに変化(減速)させるようにしてもよい。この場合、移動オブジェクトに適用する運動方程式を開発者自らが準備して移動オブジェクトに適用するようにしてもよいし、前述したUnityに実装されている機能を用いて、移動オブジェクトに運動方程式を適用するようにしてもよい。
例えば、投げられた手榴弾オブジェクト500に空気抵抗による減速を再現させるため、手榴弾オブジェクト500の速度(速度ベクトル)と逆方向に空気抵抗Rを適用するようにしてもよい。空気抵抗Rは、例えば、R=kvやR=kv2などで表現できる。なお、kは比例定数であり、vは手榴弾オブジェクト500の移動速度である。
変形例1のように、移動オブジェクトの移動に物理法則を適用し、移動オブジェクトの移動速度を変動させる場合、図14で説明したコリジョン制御処理のフローチャートについては、図20に示すフローチャートのように変形し、図15で説明したコリジョン制御処理のフローチャートについては、図21に示すフローチャートのように変形すればよい。
図20に示すフローチャートの図14に示すフローチャートとの相違点は、ステップS20が追加されている点である。図20に示すフローチャートでは、プロセッサ10(オブジェクト制御モジュール224)は、ステップS21において、手榴弾オブジェクト500の爆発タイミングでないと判定されている間(ステップS21でNoの間)、定期的に移動オブジェクトの速度vに物理法則を適用し、移動オブジェクトの速度vを更新(減速)する。
また、図21に示すフローチャートの図15に示すフローチャートとの相違点は、ステップS30が追加されている点である。図21に示すフローチャートでは、プロセッサ10(オブジェクト制御モジュール224)は、ステップS30において、コリジョンエリアCBとコリジョンエリアCCとの衝突/非衝突が決定(確定)されるまでの間、定期的に移動オブジェクトの速度vに物理法則を適用し、移動オブジェクトの速度vを更新(減速)する。
このように、物理法則を加味して移動オブジェクトの移動速度を更新すれば、移動オブジェクトの移動にリアリティを持たせられ、爆風の影響が及ぶ範囲や敵キャラクタ600に与える影響のリアリティを向上できるので、ユーザ190の仮想空間への没入感を向上させることが可能となる。
(第2実施形態)
上記第1実施形態では、移動オブジェクトが手榴弾オブジェクト500、対象オブジェクトが敵キャラクタ600であり、手榴弾オブジェクト500を敵キャラクタ600に投げることで、敵キャラクタ600に影響を与えるゲームを想定した例について説明した。但し、本開示の適用範囲はこれに限定されず、種々のゲームに適用できる。第2実施形態では、本開示を野球ゲームに適用した場合について説明する。但し、第1実施形態と同様の内容については、説明を繰り返さない。つまり、第2実施形態では、主として、第1実施形態との差異について説明する。
図22および図23を参照しながら、ユーザ190の状態と、仮想空間2内に配置された各種オブジェクトとの関係を説明する。図22(A)は、HMD装置110、及びコントローラ160L、160Rを装着したユーザ190の一例を示す図である。図22(B)は、図22(A)に示す状態における、仮想空間2内に配置された仮想カメラ1、左手オブジェクト400L、右手オブジェクト400R、ボールオブジェクト700、及び打者キャラクタ800の一例を示す図である。図23は、図22(B)に示す仮想空間2内を仮想カメラ1の視界領域23で撮影した(表した)視界画像Mの一例を示す図である。なお、図23に描かれている捕手キャラクタ900は、図示の関係上、図22(B)では描いていない。また、以下の図面では、説明の関係上、図22(B)に示すように、手オブジェクト400を単なる円で表す場合がある。
第2実施形態では、ボールオブジェクト700は、手オブジェクト400によって操作される移動オブジェクトである。ボールオブジェクト700に対する手オブジェクト400による操作としては、ボールオブジェクト700を対象オブジェクトである打者キャラクタ800に投げるなどが挙げられるが、これに限定されるものではない。また第2実施形態では、ボールオブジェクト700にはコリジョンエリアCDが設定され、打者キャラクタ800が所持する対象オブジェクトであるバットオブジェクト810には、コリジョンエリアCEが設定され、
打者キャラクタ800にはコリジョンエリアCFが設定されている。
第2実施形態でも、ユーザ190が、手にコントローラ160が装着された状態で物を投げるような動作を行うことで、手オブジェクト400に、保持中のボールオブジェクト700を捕手キャラクタ900に向かって投げさせる。そして、投げられたボールオブジェクト700のコリジョンエリアCDとバットオブジェクト810のコリジョンエリアCE又は打者キャラクタ800のコリジョンエリアCFとのコリジョン判定(当たり判定)結果に応じて、ゲームが進行する。
なお、手オブジェクト400によるボールオブジェクト700の投球は、どのように実現しても構わない。例えば、ユーザ190が、手にコントローラ160が装着された状態で物を投げるような動作を行っている最中に、ボタン36,37又はアナログスティック38を操作(押下)することで、オブジェクト制御モジュール224が、コントローラ160の動きに基づく速度をボールオブジェクト700に与え、当該速度に基づいてボールオブジェクト700を移動させることで実現できる。
次に、図24〜図29を参照しながら、第2実施形態に係る情報処理方法、具体的には、コリジョンエリア及びコリジョン効果の制御手法について説明する。図24〜図25は、第2実施形態のコリジョン制御処理の一例を示すフローチャートである。図24〜図25に示すコリジョン制御処理は、図10に示すフローチャートのステップS7〜S8の詳細処理の一例に該当する。図26(A)は、ユーザ190が物を投げる動作を行っている状態の一例を示す図であり、図26(B)は、図26(A)が示す状態において、ボールオブジェクト700の速度が閾値以上の場合のコリジョンエリアCDの制御例を示す図である。図27(A)は、ユーザ190が物を投げる動作を行っている状態の一例を示す図であり、図27(B)は、図27(A)が示す状態において、ボールオブジェクト700の速度が閾値未満の場合のコリジョンエリアCDの制御例を示す図である。図28(A)は、ユーザ190が物を投げる動作を行っている状態の一例を示す図であり、図28(B)は、図28(A)が示す状態において、ボールオブジェクト700の速度が閾値以上の場合のコリジョン効果の制御例を示す図である。図29(A)は、ユーザ190が物を投げる動作を行っている状態の一例を示す図であり、図29(B)は、図29(A)が示す状態において、ボールオブジェクト700の速度が閾値未満の場合のコリジョン効果の制御例を示す図である。
図24に示すように、まず、ステップS111において、プロセッサ10(オブジェクト制御モジュール224)は、手オブジェクト400によりボールオブジェクト700が投げられたか否かを判定する。プロセッサ10(オブジェクト制御モジュール224)は、例えば、ユーザ190が、ボタン36,37又はアナログスティック38を操作(押下)した場合、ボールオブジェクト700が投げられたと判定し、操作(押下)していない場合、ボールオブジェクト700が投げられていないと判定する。なお、ステップS111の処理は、ボールオブジェクト700が投げられていないと判定されている間(ステップS111でNo)、定期的に行われる。
ボールオブジェクト700が投げられたと判定された場合(ステップS111でYes)、ステップS112において、プロセッサ10(オブジェクト制御モジュール224)は、投げられたボールオブジェクト700に速度v(速度ベクトル)を設定し、設定した速度vでボールオブジェクト700を移動させる。なお、ボールオブジェクト700の速度vの設定手法は、第1実施形態で説明した手榴弾オブジェクト500の速度vの設定手法と同様の手法を採用できる。
ステップS113において、プロセッサ10(オブジェクト制御モジュール224)は、投げられたボールオブジェクト700の速度vが閾値となる所定速度vth以上かどうかを判定する。
ボールオブジェクト700の速度vが所定速度vth以上(v≧vth)である場合(ステップS113でYes)、図26に示すように、プロセッサ10(コリジョン制御モジュール225)は、ステップS114において、ボールオブジェクト700のコリジョンエリアCDの大きさの直径をR‘1(R‘1<R‘)に特定(設定)する。
一方、ボールオブジェクト700の速度vが所定速度vth未満(v<vth)である場合(ステップS113でNo)、図27に示すように、プロセッサ10(コリジョン制御モジュール225)は、ステップS115において、ボールオブジェクト700のコリジョンエリアCDの大きさの直径をR‘に特定(設定)する。なお「R‘」は、コリジョンエリアCDのデフォルトの大きさの直径である。
実際の野球の場合、一般的に、バッターは、球のスピードが速いほど打ちにくい。このため本実施形態では、ボールオブジェクト700の速度vが遅い場合よりも速い場合の方が、コリジョンエリアCDの大きさが小さくなるように制御し、バットオブジェクト810のコリジョンエリアCEと衝突しにくくする。これにより、打者キャラクタ800にボールオブジェクト700を打たせにくくすることができる。
続いて、ステップS116において、プロセッサ10(コリジョン判定モジュール226)は、ボールオブジェクト700のコリジョンエリアCDとバットオブジェクト810のコリジョンエリアCEとが衝突(接触)したか否かを判定する。なお、打者キャラクタ800が他のユーザにより操作される場合、当該他のユーザは、コリジョンエリアCDとコリジョンエリアCEとを衝突させるよう、打者キャラクタ800(バットオブジェクト810)を操作する。また、打者キャラクタ800がNPC(Non Player Character)の場合、コリジョンエリアCDとコリジョンエリアCEとを衝突させるよう、打者キャラクタ800(バットオブジェクト810)が動作制御される。
プロセッサ10(コリジョン判定モジュール226)が、コリジョンエリアCDとコリジョンエリアCEとが衝突していると判定した場合(ステップS116でYes)、ステップS117において、プロセッサ10(オブジェクト制御モジュール224)は、バットオブジェクト810でボールオブジェクト700を打ち返させる。
一方、プロセッサ10(コリジョン判定モジュール226)が、コリジョンエリアCDとコリジョンエリアCEとが衝突していないと判定した場合(ステップS116でNo)、図24および図25の「C」を経由して、図25のステップS118に進む。ステップS118において、プロセッサ10(コリジョン判定モジュール226)は、ボールオブジェクト700のコリジョンエリアCDと打者キャラクタ800のコリジョンエリアCFとが衝突(接触)しているか否かを判定する。
プロセッサ10(コリジョン判定モジュール226)が、コリジョンエリアCDとコリジョンエリアCFとが衝突していると判定した場合(ステップS118でYes)、ステップS119において、プロセッサ10(オブジェクト制御モジュール224)は、投げられたボールオブジェクト700の速度vが閾値となる所定速度vth以上かどうかを判定する。
ボールオブジェクト700の速度vが所定速度vth以上(v≧vth)である場合(ステップS119でYes)、ステップS120において、プロセッサ10(コリジョン制御モジュール225)は、打者キャラクタ800に与える影響を第1の影響に設定する。
一方、ボールオブジェクト700の速度vが所定速度vth未満(v<vth)である場合(ステップS119でNo)、ステップS121において、プロセッサ10(コリジョン制御モジュール225)は、打者キャラクタ800に与える影響を第2の影響に設定する。
ここで、ステップS120で設定した第1の影響やステップS121で設定した第2の影響は、いずれも打者キャラクタ800に痛がらせる演出を行わせるものであるが、第2の影響よりも第1の影響の方が痛がり度合いが大きいものとする。つまり本実施形態では、ボールオブジェクト700が打者キャラクタ800にぶつかるデッドボールの場合、ボールオブジェクト700の速度vが遅い場合よりも速い場合の方が、打者キャラクタ800を痛がらせる(図28、図29参照)。このため本実施形態では、打者キャラクタ800の反応にリアリティを持たせることが可能となり、ユーザ190に対する仮想空間への没入感を高めることが可能となる。但し、第1の影響や第2の影響は、上述の例に限定されるものではない。
続いて、ステップS122において、プロセッサ10(コリジョン判定モジュール226)は、設定した影響を打者キャラクタ800に与える。
このように第2実施形態においても、移動オブジェクトの移動速度に応じて、対象オブジェクトなどの他のオブジェクトとのコリジョン判定に用いられる移動オブジェクトのコリジョンエリアの大きさを変えたり、移動オブジェクトが対象オブジェクトなどの他のオブジェクトと衝突した場合のコリジョン効果を変えたりする。このため第2実施形態においても、ユーザ190の仮想空間への没入感を向上させることが可能となる。
また第2実施形態においても、第1実施形態で説明した変形や変形例1を適用できる。なお、第2実施形態において変形例1を適用する場合、コリジョンエリアCDとコリジョンエリアCE又はコリジョンエリアCFとの衝突/非衝突が決定(確定)されるまでの間、定期的に移動オブジェクト(ボールオブジェクト700)の速度vに物理法則を適用し、移動オブジェクト(ボールオブジェクト700)の速度vを更新(減速)するようにすればよい。例えば、図24および図25に示すフローチャートにおいて、コリジョンエリアCDとコリジョンエリアCE又はコリジョンエリアCFとの衝突/非衝突が決定(確定)されるまでの間、ステップS112〜ステップS115の処理を定期的に繰り返す(但し、2回目以降のステップS112では、前回の速度vに物理法則を適用して速度vを更新するものとする)。このようにすれば、速度vの速度変化に連動して、コリジョンエリアCDの大きさを変動でき、移動オブジェクト(ボールオブジェクト700)の打ちにくさや打ちやすさのリアリティを向上できるので、ユーザ190の仮想空間への没入感を向上させることが可能となる。
(変形例2)
上記第2実施形態において、移動オブジェクトに対して速度だけでなく回転を与えて移動させ、この移動させた移動オブジェクトに、変形例1で説明した物理法則を適用するようにしてもよい。このようにすれば、移動オブジェクトの軌道を変化させながら移動させること、即ち、変化を伴う動きを行う場合の移動オブジェクトの移動軌跡の制御が可能となり、移動オブジェクトの移動によりリアリティを持たせることができる。
この場合、移動オブジェクトに速度を与えるためのユーザの手の動き、即ち、移動オブジェクトに速度を与えるために用いられたコントローラ160における姿勢の時系列的な変化に基づいて、移動オブジェクトに回転を与えるようにすればよい。例えば、プロセッサ10(オブジェクト制御モジュール224)は、HMDセンサ120により検出された情報を取得する毎に、当該情報に基づいてコントローラ160の姿勢を特定し、特定した姿勢情報に基づいて、コントローラ160の姿勢変化を特定し、特定したコントローラ160の姿勢変化に基づいて、ボールオブジェクト700に回転を与えるようにすればよい。ボールオブジェクト700に与えられる回転は、コントローラ160の姿勢変化に基づく回転であればどのようなものでもよい。例えば、コントローラ160の姿勢変化方向を回転方向とする回転であってもよい。また例えば、図30に示すように、コントローラ160の姿勢変化パターン毎に、該当する球種(詳細には、コントローラ160の姿勢変化パターンを手の動きとみなした場合に想定される球種)、及び当該球種の回転パターン定義した情報(テーブル)をメモリモジュール240に準備しておき、プロセッサ10(オブジェクト制御モジュール224)は、特定したコントローラ160の姿勢変化パターンに対応付けられた球種の回転パターンをボールオブジェクト700に与えるようにしてもよい。
また、プロセッサ10(コリジョン制御モジュール225)は、ユーザの手の姿勢(詳細には、コントローラ160)の時系列的な変化も考慮して、コリジョンエリアを制御するようにしてもよい。例えば、プロセッサ10(オブジェクト制御モジュール224)が特定したコントローラ160の姿勢変化パターンが右下方向への回転であり、プロセッサ10(オブジェクト制御モジュール224)は、図31の矢印780が示すように、ボールオブジェクト700が右下に変化するような移動軌跡に制御したとする。この場合、プロセッサ10(コリジョン制御モジュール225)は、図31に示すように、ボールオブジェクト700のコリジョンエリアCDの形状を右下方向(変化方向)が長辺となる楕円形状に特定(決定)するようにしてもよい。なお、図31に示す例では、第2実施形態で説明したコリジョンエリアCDの直径に変えて、楕円形状のコリジョンエリアCDの短辺の大きさをボールオブジェクト700の速度に基づいて特定(決定)することを想定しているが、これに限定されるものではない。
このようにすれば、ボールオブジェクト700の移動軌跡に合わせてバットオブジェクト810を操作しないと、ボールオブジェクト700のコリジョンエリアCDとバットオブジェクト810のコリジョンエリアCEとを衝突させにくくなるので、移動オブジェクト(ボールオブジェクト700)の打ちにくさや打ちやすさのリアリティをより向上でき、ユーザ190の仮想空間への没入感を向上させることが可能となる。
なお変形例2では、ボールオブジェクト700の速度でコリジョンエリアCDの大きさ、ユーザの手の姿勢(コントローラ160)の時系列的な変化でコリジョンエリアCDの形状を特定する例について説明したが、これに限定されるものではない。例えば、ボールオブジェクト700の速度でコリジョンエリアCDの形状を特定したり、ユーザの手の姿勢(コントローラ160)の時系列的な変化でコリジョンエリアCDの大きさを特定したり、ボールオブジェクト700の速度及びユーザの手の姿勢(コントローラ160)の時系列的な変化の双方を考慮して、コリジョンエリアCDの形状及び大きさを特定したりするようにしてもよい。また、ユーザの手の姿勢(コントローラ160)の時系列的な変化に変えて、ボールオブジェクト700の移動軌跡を用いて、上述の制御を行うようにしてもよい。
また、プロセッサ10(コリジョン制御モジュール225)は、ユーザの手の姿勢(詳細には、コントローラ160)の時系列的な変化も考慮して、コリジョン効果を制御するようにしてもよい。例えば、プロセッサ10(オブジェクト制御モジュール224)が特定したコントローラ160の姿勢変化パターンが左方向への回転であり、プロセッサ10(オブジェクト制御モジュール224)は、図32の矢印791が示すように、ボールオブジェクト700が左に変化するような移動軌跡に制御したとする。この結果、ボールオブジェクト700のコリジョンエリアCDと打者キャラクタ800のコリジョンエリアCFとが衝突したとする。この場合、プロセッサ10(コリジョン制御モジュール225)は、ユーザの手の姿勢の時系列的な変化を考慮しない場合のボールオブジェクト700の移動軌跡(図32の矢印792)と、ユーザの手の姿勢の時系列的な変化を考慮した場合のボールオブジェクト700の移動軌跡(図32の矢印791)と、の類似度も考慮して、打者キャラクタ800に与える影響を設定するようにいてもよい。
一般的に人間は、同一の速度でものをぶつけられる場合、ものがぶつかることが予測できている場合よりもものがぶつかることが予測できていない場合の方が、痛みを感じる。このため、上述の類似度が低いほど、打者キャラクタ800にボールオブジェクト700がぶつかることが予測しにくい(ボールオブジェクト700の変化の度合いが大きい)と考え、プロセッサ10(コリジョン制御モジュール225)は、打者キャラクタ800に与える影響を大きく設定するようにいてもよい。上述したような制御を行うことで、敵キャラクタ600に与える影響にリアリティを持たせることが可能となり、ユーザ190に対する仮想空間への没入感を高めることが可能となる。
なお変形例2では、設定する影響(打者キャラクタ800の痛がり度合い)をパラメータで設定するようにしてもよい。例えば、ボールオブジェクト700の速度vが所定速度vth以上(v≧vth)である場合、プロセッサ10(コリジョン制御モジュール225)は、打者キャラクタ800に与える影響として、痛がり度合いのパラメータに+1を加算する。一方、ボールオブジェクト700の速度vが所定速度vth未満(v<vth)である場合、プロセッサ10(コリジョン制御モジュール225)は、打者キャラクタ800に与える影響として、痛がり度合いのパラメータを加算しない。また例えば、上述の類似度が所定類似度以下の場合、プロセッサ10(コリジョン制御モジュール225)は、打者キャラクタ800に与える影響として、痛がり度合いのパラメータに+1を加算する。一方、上述の類似度が所定類似度を超える場合、プロセッサ10(コリジョン制御モジュール225)は、打者キャラクタ800に与える影響として、痛がり度合いのパラメータを加算しない。そして、プロセッサ10(コリジョン判定モジュール226)は、最終的な痛がり度合いのパラメータの値を打者キャラクタ800に与え、当該パラメータの値に応じた演出(パラメータの値が大きいほど痛がる演出)を打者キャラクタ800に行わせる。
上述の各実施形態の説明においては、プレイヤキャラクタからの一人称視点で説明したが、これに限るものではない。例えば、プレイヤキャラクタPCの背後からプレイヤキャラクタと敵キャラクタとを撮影するよう仮想カメラを配置し、この仮想カメラから撮影された画像を視界画像としてもよい。この場合、仮想カメラは、プレイヤキャラクタの移動に追尾して、その背後を撮影する。
また、上述の各実施形態の説明においては、HMD装置110によってユーザ190が没入する仮想空間(VR空間)を例示して説明したが、HMD装置110として、透過型のHMD装置を採用してもよい。この場合、透過型のHMD装置を介してユーザ190が視認する現実空間に仮想空間を構成する画像の一部が視界画像として重畳されるように視界画像を出力することにより、拡張現実(AR:Augmented Reality)空間または複合現実(MR:Mixed Reality)空間における仮想体験をユーザ190に提供してもよい。この場合、プレイヤキャラクタの頭部オブジェクトに代えて、HMD装置110の動きに基づいて、仮想空間2内における対象オブジェクトへの作用を生じさせてもよい。具体的には、プロセッサ10は、現実空間におけるHMD装置110の位置の座標情報を特定するとともに、仮想空間2内における対象オブジェクトの位置を現実空間における座標情報との関係で定義してもよい。これにより、プロセッサ10は、現実空間におけるHMD装置110と仮想空間2における対象オブジェクトとの位置関係を把握し、HMD装置110と対象オブジェクトとの間で上述したコリジョン制御等に対応する処理を実行可能となる。その結果、HMD装置110の動きに基づいて対象オブジェクトに作用を与えることが可能となる。
以上、本開示の実施形態について説明をしたが、本発明の技術的範囲が本実施形態の説明によって限定的に解釈されるべきではない。本実施形態は一例であって、特許請求の範囲に記載された発明の範囲内において、様々な実施形態の変更が可能であることが当業者によって理解されるところである。本発明の技術的範囲は特許請求の範囲に記載された発明の範囲及びその均等の範囲に基づいて定められるべきである。
本明細書に開示された主題は、例えば以下のような項目として示される。
(項目1)
ヘッドマウントディスプレイ(例えば、HMD110)を介して仮想空間を提供するためにコンピュータ(例えば、コンピュータ200)で実行される情報処理方法であって、
前記仮想空間(例えば、仮想空間2)を規定するステップ(例えば、図10のステップS1)と、
操作オブジェクト(例えば、手オブジェクト400)と移動オブジェクト(例えば、手榴弾オブジェクト500、ボールオブジェクト700)と対象オブジェクト(例えば、敵キャラクタ600、打者キャラクタ800、バットオブジェクト810)とを前記仮想空間に配置するステップ(例えば、図10のステップS1)と、
ユーザ(例えば、ユーザ190)の動きに応じて、前記操作オブジェクトを動作させるステップ(例えば、図10のステップS7)と、
前記操作オブジェクトの動作に基づいて、前記移動オブジェクトを動かすステップ(例えば、図10のステップS8)と、
前記移動オブジェクトの早さに関する情報(例えば、速度)に基づいて、前記移動オブジェクトが前記対象オブジェクトに与える影響を特定するステップ(例えば、図15、図21のステップS33、S34、図25のステップS120、S121)と、
前記移動オブジェクトと前記対象オブジェクトとが第1の位置関係にある場合(例えば、コリジョンエリアCBとコリジョンエリアCCとが衝突している場合、コリジョンエリアCDとコリジョンエリアCFとが衝突している場合)に、前記対象オブジェクトに前記影響を与えるステップ(例えば、図15、図21のステップS35、図25のステップS122)と、
を含む情報処理方法。
本項目の情報処理方法では、移動オブジェクトの移動速度に応じて、移動オブジェクトが対象オブジェクトと衝突した場合のコリジョン効果が変化するので、ユーザの仮想体験を改善し得る。
(項目2)
前記移動オブジェクトを動かすステップでは、更に、物理法則に基づいて、前記移動オブジェクトを動かし(例えば、図20のステップS20、図21のステップS30)、
前記影響を特定するステップでは、更に、前記物理法則に基づいて、前記影響を特定する(例えば、図21のステップS33、S34)項目1に記載の情報処理方法。
本項目の情報処理方法では、移動オブジェクトの移動にリアリティを持たせられ、対象オブジェクトに与える影響のリアリティを向上できるので、ユーザの仮想体験を改善し得る。
(項目3)
前記影響を特定するステップでは、前記移動オブジェクトと前記対象オブジェクトとが前記第1の位置関係にある場合における前記移動オブジェクトの早さに関する情報に基づいて、前記影響を特定する(例えば、図21のステップS33、S34)項目2に記載の情報処理方法。
本項目の情報処理方法では、移動オブジェクトの移動にリアリティを持たせられ、対象オブジェクトに与える影響のリアリティを向上できるので、ユーザの仮想体験を改善し得る。
(項目4)
前記ユーザの動きは、前記ユーザの身体の一部(例えば、ユーザ190の手)の動きであり、
前記移動オブジェクトを動かすステップでは、更に、前記身体の一部の姿勢の時系列的な変化に基づいて、前記移動オブジェクトの移動軌跡(例えば、図32の矢印791が示すボールオブジェクト700の移動軌跡)を制御し、
前記影響を特定するステップでは、前記身体の一部の姿勢の時系列的な変化を考慮しない場合の前記移動オブジェクトの移動軌跡(例えば、図32の矢印792が示すボールオブジェクト700の移動軌跡)と、前記身体の一部の姿勢の時系列的な変化に基づく前記移動オブジェクトの移動軌跡(例えば、図32の矢印791が示すボールオブジェクト700の移動軌跡)と、の類似度に基づいて、前記影響を特定する項目2又は3に記載の情報処理方法。
本項目の情報処理方法では、移動オブジェクトの移動にリアリティを持たせられ、対象オブジェクトに与える影響のリアリティを向上できるので、ユーザの仮想体験を改善し得る。
(項目5)
前記移動オブジェクトの動きに基づいて、前記移動オブジェクトに関連付けられたコリジョンエリアの形状及び大きさの少なくともいずれかを特定するステップ(例えば、図14、図20のステップS23、S24、図24のステップS114、S115)をさらに含み、
前記影響を与えるステップでは、前記コリジョンエリアと前記対象オブジェクトとが第2の位置関係にある場合(例えば、コリジョンエリアCBとコリジョンエリアCCとが衝突している場合、コリジョンエリアCDとコリジョンエリアCEとが衝突している場合)に、前記対象オブジェクトに前記影響を与える(例えば、図14、図20のステップS27、図24のステップS117)項目1〜4のいずれか1つに記載の情報処理方法。
本項目の情報処理方法では、移動オブジェクトの移動速度に応じて、対象オブジェクトとのコリジョン判定に用いられる移動オブジェクトのコリジョンエリアの大きさが変化するので、ユーザの仮想体験を改善し得る。
(項目6)
前記移動オブジェクトを動かすステップでは、更に、物理法則に基づいて、前記移動オブジェクトを動かし、
前記形状及び大きさの少なくともいずれかを特定するステップでは、更に、前記物理法則に基づいて、前記形状及び大きさの少なくともいずれかを特定する(例えば、0169段落、変形例2)項目5に記載の情報処理方法。
本項目の情報処理方法では、移動オブジェクトの移動にリアリティを持たせられ、移動オブジェクトと対象オブジェクトとの衝突のリアリティを向上できるので、ユーザの仮想体験を改善し得る。
(項目7)
前記形状及び大きさの少なくともいずれかを特定するステップでは、前記移動オブジェクトの早さに関する情報に連動するように、前記形状及び大きさの少なくともいずれかを特定(例えば、0169段落)する項目6に記載の情報処理方法。
本項目の情報処理方法では、移動オブジェクトの移動にリアリティを持たせられ、移動オブジェクトと対象オブジェクトとの衝突のリアリティを向上できるので、ユーザの仮想体験を改善し得る。
(項目8)
前記ユーザの動きは、前記ユーザの身体の一部(例えば、ユーザ190の手)の動きであり、
前記移動オブジェクトを動かすステップでは、更に、前記身体の一部の姿勢の時系列的な変化に基づいて、前記移動オブジェクトの移動軌跡(例えば、図31の矢印780が示すボールオブジェクト700の移動軌跡)を制御し、
前記形状及び大きさの少なくともいずれかを特定するステップでは、前記身体の一部の姿勢の時系列的な変化に基づいて、前記形状及び大きさの少なくともいずれかを特定する(例えば、図31のコリジョンエリアCD)項目7に記載の情報処理方法。
本項目の情報処理方法では、移動オブジェクトの移動にリアリティを持たせられ、移動オブジェクトと対象オブジェクトとの衝突のリアリティを向上できるので、ユーザの仮想体験を改善し得る。
(項目9)
項目1〜8のいずれか1項に記載の方法をコンピュータに実行させるためのプログラム。
(項目10)
ヘッドマウントディスプレイを介して仮想空間を提供するためのコンピュータであって、
前記コンピュータが備えるプロセッサの制御により、
前記仮想空間を規定するステップと、
操作オブジェクトと移動オブジェクトと対象オブジェクトとを前記仮想空間に配置するステップと、
ユーザの動きに応じて、前記操作オブジェクトを動作させるステップと、
前記操作オブジェクトの動作に基づいて、前記移動オブジェクトを動かすステップと、
前記移動オブジェクトの早さに関する情報に基づいて、前記移動オブジェクトが前記対象オブジェクトに与える影響を特定するステップと、
前記移動オブジェクトと前記対象オブジェクトとが第1の位置関係にある場合に、前記対象オブジェクトに前記影響を与えるステップと、
が実行されるコンピュータ。