[本発明の実施形態の詳細]
本発明の実施形態に係る仮想空間を提供する方法、および、プログラムの具体例を、以下に図面を参照しつつ説明する。本発明はこれらの例示に限定されるものではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が本発明に含まれることが意図される。以下の説明では、図面の説明において同一の要素には同一の符号を付し、重複する説明を繰り返さない。
(HMDシステム100の構成)
図1は、HMDシステム100の構成を示す図である。この図に示すように、HMDシステム100は、HMD110、HMDセンサ120、コントローラセンサ140、制御回路部200、およびコントローラ300を備えている。
HMD110は、ユーザの頭部に装着される。HMD110は、非透過型の表示装置であるディスプレイ112、センサ114、および注視センサ130を備えている。HMD110は、右目用画像および左目用画像をディスプレイ112にそれぞれ表示することにより、ユーザの両目の視差に基づきユーザに立体的に視認される3次元画像を、ユーザに視認させる。これにより仮想空間をユーザに提供する。ディスプレイ112がユーザの眼前に配置されているので、ユーザは、ディスプレイ112に表示される画像を通じて仮想空間に没入できる。これにより、ユーザは仮想現実(Virtual Reality:VR)を体験することができる。仮想空間は、背景、ならびにユーザが操作可能な各種のオブジェクトおよびメニュー画像等を含み得る。
ディスプレイ112は、右目用画像を表示する右目用サブディスプレイと、左目用画像を表示する左目用サブディスプレイとを含んでもよい。または、ディスプレイ112は、右目用画像および左目用画像を共通の画面に表示する1つの表示装置であってもよい。このような表示装置として、たとえば、表示画像が一方の目にしか認識できないようにするシャッターを高速に切り替えることにより、右目用画像および左目用画像を独立して交互に表示する表示装置が挙げられる。
また、本実施形態において、HMD110には、透過型ディスプレイが適用されてもよい。つまり、HMD110は、透過型HMDであってもよい。この場合、前記3次元画像を透過型ディスプレイに表示することによって、後述する仮想オブジェクトを現実空間に仮想的に配置することができる。これにより、ユーザは現実空間に仮想オブジェクトが配置された複合現実(Mixes Reality:MR)を体験することができる。本実施形態において、仮想現実や複合現実といった、ユーザが仮想オブジェクトと相互作用できる体験を仮想体験と称することがある。以下では、仮想現実を提供するための方法を一例として詳説する。
(制御回路部200のハード構成)
図2は、制御回路部200のハード構成を示す図である。制御回路部200は、HMD110に仮想空間を提供させるためのコンピュータである。図2に示すように、制御回路部200は、プロセッサ、メモリ、ストレージ、入出力インターフェース、および通信インターフェースを備えている。これらは、データ伝送路としてのバスを通じて、制御回路部200内において互いに接続されている。
プロセッサは、CPU(Central Processing Unit)、MPU(Micro-processing unit)、またはGPU(Graphics Processing Unit)等を含んで構成され、制御回路部200およびHMDシステム100全体の動作を制御する。
メモリは、主記憶として機能する。メモリには、プロセッサによって処理されるプログラムおよび制御用データ(演算パラメータなど)が記憶される。メモリは、ROM(Read Only Memory)またはRAM(Random Access Memory)等を含んで構成され得る。
ストレージは、補助記憶として機能する。ストレージには、HMDシステム100全体の動作を制御するためのプログラム、各種のシミュレーションプログラム、ユーザ認証プログラム、および、仮想空間を規定するための各種のデータ(画像およびオブジェクト等)が格納されている。さらには、各種のデータを管理するためのテーブルを含むデータベースがストレージに構築されていてもよい。ストレージは、フラッシュメモリまたはHDD(Hard Disc Drive)等を含んで構成され得る。
入出力インターフェースは、USB(Universal Serial Bus)端子、DVI(Digital Visual Interface)端子、HDMI(登録商標)(High-Definition Multimedia Interface)端子等の各種の有線接続端子、および、無線接続のための各種の処理回路を含んで構成されている。入出力インターフェースは、HMD110と、HMDセンサ120およびコントローラセンサ140を含む各種のセンサと、コントローラ300とを互いに接続する。
通信インターフェースは、ネットワークNWを介して外部装置と通信するための各種の有線接続端子、および、無線接続のための各種の処理回路を含んで構成される。通信インターフェースは、LAN(Local Area Network)またはインターネットを介して通信するための各種の通信規格およびプロトコルに適合するように、構成されている。
制御回路部200は、ストレージに格納された所定のアプリケーションプログラムをメモリにロードして実行することによって、ユーザに仮想空間を提供する。プログラムの実行時に、メモリおよびストレージには、仮想空間内に配置される各種の仮想オブジェクトを操作したり、各種のメニュー画像等を表示および制御したりするための各種のプログラムが格納される。
制御回路部200は、HMD110に搭載されていてもよいし、されていなくてもよい。すなわち制御回路部200は、HMD110から独立した別のハードウェア(たとえば、パーソナルコンピュータ、またはネットワークを通じてHMD110と通信可能なサーバ装置)であってもよい。制御回路部200は、複数のハードウェアの協働によって1または複数の機能が実装される形態の装置であってもよい。または、制御回路部200が有する全機能のうち一部の機能のみがHMD110に実装され、残りの機能が別のハードウェアに実装されていてもよい。
HMDシステム100を構成するHMD110等の各要素には、予め、グローバル座標系(基準座標系、xyz座標系)が設定されている。このグローバル座標系は、現実空間における、鉛直方向、鉛直方向と直交する横方向、ならびに、鉛直方向および横方向の双方と直交する前後方向にそれぞれ平行な、3つの基準方向(軸)を有する。本実施形態では、グローバル座標系は視点座標系の一種であるため、グローバル座標系における横方向、鉛直方向(上下方向)、および前後方向を、それぞれx軸、y軸、z軸とする。具体的には、グローバル座標系のx軸は現実空間の横方向に平行であり、y軸は現実空間の鉛直方向に平行であり、z軸は現実空間の前後方向に平行である。
HMDセンサ120は、HMD110の動きを検出するためのポジション・トラッキング機能を有する。HMDセンサ120は、この機能によって、現実空間内におけるHMD110の位置および傾きを検出する。この検出を実現するために、HMD110は、図示しない複数の光源を備えている。各光源は、たとえば赤外線を発するLEDである。HMDセンサ120は、たとえば赤外線センサを含んで構成される。HMDセンサ120は、HMD110の光源から照射された赤外線を、赤外線センサによって検出することによって、HMD110の検出点を検出する。さらに、HMD110の検出点の検出値に基づき、ユーザの動きに応じたHMD110の現実空間内における位置および傾きを検出する。HMDセンサ120は、検出値の経時的変化に基づき、HMD110の位置および傾きの時間変化を決定することができる。
HMDセンサ120は、光学カメラを含んで構成されてもよい。この場合、HMDセンサ120は、光学カメラによって得られたHMD110の画像情報に基づき、HMD110の位置および傾きを検出する。
HMDセンサ120の代わりに、HMD110が、センサ114を用いて自身の位置および傾きを検出してもよい。この場合、センサ114は、たとえば角速度センサ、地磁気センサ、加速度センサ、またはジャイロセンサであればよい。HMD110は、これらのうち少なくとも1つを用いる。センサ114が角速度センサである場合、センサ114は、HMD110の動きに応じて、HMD110の現実空間における3軸周りの角速度を経時的に検出する。HMD110は、角速度の検出値に基づき、HMD110の3軸周りの角度の時間的変化を決定し、さらに、角度の時間的変化に基づきHMD110の傾きを検出することができる。
HMD110がセンサ114による検出値に基づきHMD110の位置および傾きを自ら検出する場合、HMDシステム100にHMDセンサ120は不要である。逆に、HMD110から離れた位置に配置されるHMDセンサ120がHMD110の位置および傾きを検出する場合、HMD110にセンサ114は不要である。
上述したように、グローバル座標系は現実空間の座標系と平行である。そのため、HMDセンサ120によって検出されたHMD110の各傾きは、グローバル座標系におけるHMD110の3軸周りの各傾きに相当する。HMDセンサ120は、グローバル座標系におけるHMDセンサ120の傾きの検出値に基づき、uvw視野座標系をHMD110に設定する。HMD110に設定されるuvw視野座標系は、HMD110を装着したユーザが物体を見る際の視点座標系に対応する。
(uvw視野座標系)
図3は、HMD110に設定されるuvw視野座標系を例示する図である。HMDセンサ120は、HMD110の起動時に、グローバル座標系におけるHMD110の位置および傾きを検出する。そして、傾きの検出値に基づく3次元のuvw視野座標系を、HMD110に設定する。図3に示すように、HMDセンサ120は、HMD110を装着したユーザの頭部を中心(原点)とした3次元のuvw視野座標系を、HMD110に設定する。具体的には、グローバル座標系を規定する横方向、鉛直方向、および前後方向(x軸、y軸、z軸)を、グローバル座標系内においてHMD110の各軸周りの傾きだけ各軸周りにそれぞれ傾けることによって得られる新たな3つの方向を、HMD110におけるuvw視野座標系のピッチ方向(u軸)、ヨー方向(v軸)、およびロール方向(w軸)として設定する。
図3に示すように、HMDセンサ120は、HMD110を装着したユーザが直立しかつ正面を視認している場合、グローバル座標系に平行なuvw視野座標系をHMD110に設定する。この場合、グローバル座標系の横方向(x軸)、鉛直方向(y軸)、および前後方向(z軸)が、そのまま、HMD110におけるuvw視野座標系のピッチ方向(u軸)、ヨー方向(v軸)、およびロール方向(w軸)に一致する。
HMDセンサ120は、HMD110にuvw視野座標系を設定した後、HMD110の動きに応じて、現在設定中のuvw視野座標系におけるHMD110の傾き(傾きの変化量)を検出することができる。この場合、HMDセンサ120は、HMD110の傾きとして、現在設定中のuvw視野座標系におけるHMD110のピッチ角(θu)、ヨー角(θv)、およびロール角(θw)をそれぞれ検出する。ピッチ角(θu)は、uvw視野座標系におけるピッチ方向周りのHMD110の傾き角度である。ヨー角(θv)は、uvw視野座標系におけるヨー方向周りのHMD110の傾き角度である。ロール角(θw)は、uvw視野座標系におけるロール方向周りのHMD110の傾き角度である。
HMDセンサ120は、HMD110の傾きの検出値に基づき、動いた後のHMD110におけるuvw視野座標系を、新たにHMD110に設定する。HMD110と、HMD110のuvw視野座標系との関係は、HMD110の位置および傾きによらず常に一定である。HMD110の位置および傾きが変わると、それの変化に連動して、グローバル座標系におけるHMD110のuvw視野座標系の位置および傾きが同様に変化する。
HMDセンサ120は、赤外線センサによって取得される赤外線の光強度および複数の検出点間の相対位置関係(検出点間の距離等)に基づき、HMD110の現実空間内における位置を、HMDセンサ120に対する相対位置として特定してもよい。また、特定した相対位置に基づき、現実空間内(グローバル座標系)におけるHMD110のuvw視野座標系の原点を決定してもよい。また、HMDセンサ120は、複数の検出点間の相対位置関係に基づきHMD110の現実空間内における傾きを検出し、さらに、その検出値に基づき現実空間内(グローバル座標系)におけるHMD110のuvw視野座標系の向きを決定してもよい。
(仮想空間2の概要)
図4は、ユーザに提供される仮想空間2の概要を説明する図である。この図に示すように、仮想空間2は、中心21の360°方向全体を覆う全天球状の構造を有する。図4には、仮想空間2の全体のうち上半分の天球のみを例示する。仮想空間2には、略正方形または略長方形の複数のメッシュが関連付けられている。仮想空間2における各メッシュの位置は、仮想空間2に規定される空間座標系(XYZ座標系)における座標として、予め規定されている。制御回路部200は、仮想空間2に展開可能なコンテンツ(静止画、動画等)を構成する各部分画像を、仮想空間2における対応する各メッシュに対応付けることによって、ユーザによって視認可能な仮想空間画像22が展開される仮想空間2をユーザに提供する。
仮想空間2には、中心21を原点とするXYZ空間座標系が規定されている。XYZ座標系は、たとえばグローバル座標系に平行である。XYZ座標系は視点座標系の一種であるため、XYZ座標系における横方向、鉛直方向(上下方向)、および前後方向を、それぞれX軸、Y軸、Z軸とする。すなわち、XYZ座標系のX軸(横方向)がグローバル座標系のx軸と平行であり、XYZ座標系のY軸(上下方向)がグローバル座標系のy軸と平行であり、XYZ座標系のZ軸(前後方向)がグローバル座標系のz軸と平行である。
HMD110の起動時(初期状態)において、仮想空間2の中心21に仮想カメラ1が配置されている。仮想カメラ1は、現実空間内におけるHMD110の動きに連動して、仮想空間2内において同様に動く。これにより、現実空間内におけるHMD110の位置および向きの変化が、仮想空間2内において同様に再現される。
仮想カメラ1には、HMD110と同様にuvw視野座標系が規定される。仮想空間2内における仮想カメラ1のuvw視野座標系は、現実空間(グローバル座標系)内におけるHMD110のuvw視野座標系に連動するように規定されている。したがって、HMD110の傾きが変化すると、それに連動して仮想カメラ1の傾きも変化する。仮想カメラ1は、HMD110を装着したユーザの現実空間における移動に連動して、仮想空間2において移動することもできる。
仮想空間2における仮想カメラ1の位置および傾きに応じて、仮想空間2における仮想カメラ1の向きが決まる。これにより、仮想空間2に展開される仮想空間画像22をユーザが視認する際の基準となる視線(基準視線5)が決まる。制御回路部200は、基準視線5に基づき、仮想空間2における視界領域23を決定する。視界領域23は、仮想空間2のうち、HMD110を装着したユーザの視界に対応する領域である。
図5は、視界領域23の断面を示す図である。図5の(a)に、仮想空間2において視界領域23をX方向から見たYZ断面を示す。図5の(b)に、仮想空間2において視界領域23をY方向から見たXZ断面を示す。視界領域23は、基準視線5と仮想空間2のYZ断面とによって定義される範囲である第1領域24(図5の(a)参照)と、基準視線5と仮想空間2のXZ断面とによって定義される範囲である第2領域25(図5の(b)参照)とを有する。制御回路部200は、仮想空間2における基準視線5を中心として極角αを含む範囲を、第1領域24として設定する。また、仮想空間2における基準視線5を中心とした方位角βを含む範囲を、第2領域25として設定する。
HMDシステム100は、仮想空間画像22のうち視界領域23に重畳する部分である視界画像26をHMD110のディスプレイ112に表示させることによって、ユーザに仮想空間2を提供する。ユーザがHMD110を動かせば、それに連動して仮想カメラ1も動き、その結果、仮想空間2における視界領域23の位置が変化する。これによりディスプレイ112に表示される視界画像26が、仮想空間画像22のうち、仮想空間2においてユーザが向いた箇所(=視界領域23)に重畳する画像に更新される。したがってユーザは、仮想空間2における所望の箇所を視認することができる。
ユーザは、HMD110を装着している間、現実世界を目にすることなく、仮想空間2に展開される仮想空間画像22のみを視認する。そのためHMDシステム100は、仮想空間2への高い没入感をユーザに与えることができる。
制御回路部200は、HMD110を装着したユーザの現実空間における移動に連動して、仮想カメラ1を仮想空間2内において移動させてもよい。この場合、制御回路部200は、仮想カメラ1の仮想空間2内における位置および向きに基づき、仮想空間2のうちHMD110のディスプレイ112に投影されることによってユーザが視認する視界領域23を特定する。
仮想カメラ1は、右眼用画像を提供する右眼用仮想カメラと、左眼用画像を提供する左眼用仮想カメラとを含むことが好ましい。さらに、2つの仮想カメラには、ユーザが3次元の仮想空間2を認識できるように適切な視差が設定されていることが好ましい。本実施形態では、このような2つの仮想カメラのロール方向が合成されることによって生成されるロール方向(w)がHMD110のロール方向(w)に適合されるような仮想カメラ1のみを、代表して図示および説明するものとする。
(視線方向の検出)
注視センサ130は、ユーザの右目および左目の視線が向けられる方向(視線方向)を検出するアイトラッキング機能を有する。注視センサ130として、アイトラッキング機能を有する公知のセンサを採用することができる。注視センサ130は、右目用センサおよび左目用センサを備えていることが好ましい。注視センサ130は、たとえば、ユーザの右目および左目に赤外光を照射すると共に、照射光に対する角膜および虹彩からの反射光を受光することによって、各眼球の回転角を検出するセンサでもよい。注視センサ130は、検出した各回転角に基づき、ユーザの視線方向を検知することができる。
注視センサ130によって検出されるユーザの視線方向は、ユーザが物体を視認する際の視点座標系における方向である。上述したように、HMD110のuvw視野座標系は、ユーザがディスプレイ112を視認する際の視点座標系に等しい。また、仮想カメラ1のuvw視野座標系は、HMD110のuvw視野座標系に連動している。したがってHMDシステム100では、注視センサ130によって検出されたユーザの視線方向を、仮想カメラ1のuvw視野座標系におけるユーザの視線方向と見なすことができる。
図6は、ユーザの視線方向を決定する方法を例示する図である。この図に示すように、注視センサ130は、ユーザUの右目および左目の視線を検出する。ユーザUが近くを見ている場合、注視センサ130は、ユーザUの視線R1およびL1を検出する。ユーザが遠くを見ている場合、注視センサ130は、ユーザの視線R1およびL1よりも、HMD110のロール方向(w)とのなす角が小さい視線R2およびL2を特定する。注視センサ130は、検出値を制御回路部200に送信する。
制御回路部200は、視線の検出値として視線R1およびL1を受信した場合、両者の交点である注視点N1を特定する。一方、視線R2およびL2を受信した場合も、両者の交点である注視点N2(不図示)を特定する。制御回路部200は、特定した注視点N1に基づき、ユーザUの視線方向N0を検出する。制御回路部200は、たとえば、ユーザUの右目Rと左目Lとを結ぶ直線の中点と、注視点N1とを通る直線の伸びる方向を、視線方向N0として検出する。視線方向N0は、ユーザUが両目により実際に視線を向けている方向である。視線方向N0はまた、視界領域23に対してユーザUが実際に視線を向けている方向でもある。
HMDシステム100は、HMDシステム100を構成するいずれかの要素に、マイクおよびスピーカを備えていてもよい。これにより、ユーザは仮想空間2内に対して、音声による指示を与えることができる。また、仮想空間内の仮想テレビにテレビ番組の放送を受信するために、HMDシステム100はいずれかの要素にテレビジョン受像機を含んでいてもよい。また、ユーザが取得した電子メール等を表示させるための、通信機能等を含んでいてもよい。
(コントローラ300)
図7は、コントローラ300の構成を表す図である。コントローラ300は、ユーザの身体の一部の動きを検知することにより、仮想オブジェクトの動きを制御するために用いる装置の一例である。図1および図7に示すように、コントローラ300は、ユーザが右手に持って使用する右コントローラ320と、ユーザが左手に持って使用する左コントローラ330とからなる。右コントローラ320および左コントローラ330は、それぞれ別体の装置として構成される。ユーザは、右コントローラ320を持った右手と、左コントローラ330を持った左手とを、相互に自由に動かすことができる。なお、ユーザの頭部以外である身体の一部の動きを検知するための方法は、当該身体の一部に装着されるセンサを含むコントローラを用いる例に限られず、画像認識、その他任意の物理的、光学的な手法等を適用できる。例えば、外部カメラを用いてユーザの身体の一部の初期位置を特定し、継続的にユーザの身体の一部の位置を特定することにより、ユーザの頭部以外である身体の一部の動きを検知できる。以下の説明においては、コントローラ300を用いたユーザの頭部以外である身体の一部の動きの検知について詳述する。
図1および図7に示すように、右コントローラ320および左コントローラ330は、それぞれ、操作ボタン302、赤外線LED(Light Emitting Diode)304、センサ306、およびトランシーバ308を備えている。後述するように、右コントローラ320および左コントローラ330は、赤外線LED304およびセンサ306のうちいずれか一方のみを備えていてもよい。
操作ボタン302は、コントローラ300に対するユーザからの操作入力を受け取るように構成された複数のボタン群である。本実施形態では、操作ボタン302は、プッシュ式ボタン、トリガー式ボタン、およびアナログスティックを含む。
プッシュ式ボタンは、親指で下向きに押下する動作によって操作するように構成されたボタンである。右コントローラ320は、プッシュ式ボタンとして、天面322上に親指ボタン302aおよび302bを備えている。左コントローラ330は、プッシュ式ボタンとして、天面332上に2つの親指ボタン302cおよび302dを備えている。親指ボタン302aおよび302bは、いずれも右手の親指によって操作(押下)される。親指ボタン302cおよび302dは、いずれも左手の親指によって操作(押下)される。
トリガー式ボタンは、人差し指または中指で引き金を引くような動作によって操作するように構成されたボタンである。右コントローラ320は、トリガー式ボタンとして、グリップ324の前面部分に人差し指ボタン302eを備えており、さらに、グリップ324の側面部分に中指ボタン302fを備えている。左コントローラ330は、トリガー式ボタンとして、グリップ334の前面部分に人差し指ボタン302gを備えており、さらに、グリップ334の側面部分に中指ボタン302hを備えている。人差し指ボタン302e、中指ボタン302f、人差し指ボタン302g、および中指ボタン302hは、それぞれ右手の人差し指、右手の中指、左手の人差し指、および左手の中指によって操作(押下)される。
右コントローラ320は、親指ボタン302aおよび302b、人差し指ボタン302e、ならびに中指ボタン302fの押下状態をそれぞれ検出し、これらの検出値を制御回路部200に出力する。一方、左コントローラ330は、親指ボタン302cおよび302d、人差し指ボタン302g、ならびに中指ボタン302hの押下状態をそれぞれ検出し、これらの検出値を制御回路部200に出力する。
本実施形態では、右コントローラ320および左コントローラ330の各ボタンの押下状態の検出値は、0から1のいずれかの値を取り得る。たとえば、ユーザが親指ボタン302aをまったく押下していない場合、親指ボタン302aの押下状態として「0」が検出される。一方、ユーザが親指ボタン302aを完全に(最も深く)押下している場合、親指ボタン302aの押下状態として「1」が検出される。
アナログスティックは、所定のニュートラル位置から360°任意の方向へ傾けて操作することが可能なスティック型のボタンである。右コントローラ320の天面322上にアナログスティック302iが設けられ、左コントローラ330の天面332上にアナログスティック302jが設けられる。アナログスティック302iおよび302jは、それぞれ右手および左手の親指によって操作される。
右コントローラ320および左コントローラ330は、それぞれ、グリップ(324および334)の両側面から天面(322および332)とは反対側の方向へ延びて半円状のリングを形成するフレーム326および336を備えている。各フレーム326および336の外表面には、複数の赤外線LED304が埋め込まれている。複数(たとえば10個程度)の赤外線LED304が、フレーム326、336の円周方向に沿って一列に並んで設けられる。フレーム326および336の円周方向に沿って、複数列(たとえば2列)の赤外線LED304が配置されていてもよい。
ユーザがコントローラ300を握る際、ユーザの各指はグリップ(324または334)とフレーム(326または336)との間にある。したがって、各フレーム326および336の外表面に配置された赤外線LED304は、ユーザの手または指によって覆い隠されてしまうことはない。フレーム326および336の外表面に加えて、さらに、グリップ324および334の表面のうちユーザの指で隠されない部分にも、赤外線LED304が設けられていてもよい。赤外線LED304は、コンピュータゲームのプレイ中に赤外線を発光する。赤外線LED304から発せられた赤外光は、右コントローラ320および左コントローラ330のそれぞれの位置および傾きを検出するために利用される。
右コントローラ320および左コントローラ330は、赤外線LED304の代わりに、または赤外線LED304に加えて、さらにセンサ306を内蔵する。センサ306は、たとえば磁気センサ、角速度センサ、若しくは加速度センサのいずれか、またはこれらの組み合わせであってよい。センサ306によっても、右コントローラ320および左コントローラ330の位置および傾きを検出することができる。
センサ306は、ユーザが右コントローラ320および左コントローラ330をそれぞれ右手および左手で持って動かした際、右コントローラ320および左コントローラ330の向きおよび動きに応じた値(磁気、角速度、または加速度の値)を、出力する。制御回路部200は、センサ306からの出力値を適宜の方法によって加工することによって、右コントローラ320および左コントローラ330のそれぞれの位置および傾きを検出することができる。
トランシーバ308は、右コントローラ320および左コントローラ330と、制御回路部200との間でデータを送受信するように構成される。トランシーバ308は、ユーザが操作ボタン302を介して右コントローラ320または左コントローラ330に与えた操作入力に基づくデータを、制御回路部200へ送信する。また、トランシーバ308は、赤外線LED304の発光を右コントローラ320または左コントローラ330に指示する命令を、制御回路部200から受信する。さらに、トランシーバ308は、センサ306によって検出した各種の値に対応するデータを、制御回路部200へ送信する。
右コントローラ320および左コントローラ330は、ユーザの手に振動による触覚フィードバックを伝えるためのバイブレータを備えていてもよい。この構成では、トランシーバ308は、上述した各データの送受信に加えて、バイブレータに触覚フィードバックを行わせるための命令を制御回路部200から受信することができる。トランシーバ308は、無線通信によってデータを送受信するように構成されるのが好適である。この構成では、右コントローラ320および左コントローラ330に有線通信用のケーブルが接続されないので、ユーザは、右コントローラ320を持った右手および左コントローラ330を持った左手を、より自由にそれぞれ動かせる。
コントローラセンサ140は、右コントローラ320および左コントローラ330の動きを検出するためのポジション・トラッキング機能を有する。コントローラセンサ140は、この機能によって、現実空間内における右コントローラ320および左コントローラ330の位置および傾きを検出する。この検出を実現するために、コントローラセンサ140は、右コントローラ320および左コントローラ330の赤外線LED304から発せられた赤外光を、それぞれ検出する。コントローラセンサ140は、たとえば、赤外波長領域において画像を撮像する赤外カメラを備えており、この赤外カメラによって撮像した画像のデータに基づき、右コントローラ320および左コントローラ330の位置および傾きを検出する。
赤外カメラによって撮像された画像は、右コントローラ320および左コントローラ330の表面に埋め込まれている多数の赤外線LED304の配置を反映した明暗画像である。ある1つの撮像画像には、互いに左右に離れた2つの明点の集団が含まれ得る。2つの集団のうち左側の集団は、ユーザが右手で持っている右コントローラ320の赤外線LED304に対応する。右側の集団は、ユーザが左手で持っている左コントローラ330の赤外線LED304に対応する。コントローラセンサ140は、左側の集団を構成している明点の並んでいる方向から、右コントローラ320の傾きを検出する。たとえば、明点が撮像画像内で横方向(即ち水平方向)に並んでいる場合、右コントローラ320の傾きを、フレーム326が水平に保持された傾きとして検出すればよい。また、撮像画像内で明点の並んでいる方向が横方向からある角度だけ斜めになっている場合、右コントローラ320の傾きを、フレーム326が水平から当該角度だけ傾いた傾きとして検出すればよい。同様に、コントローラセンサ140は、撮像画像内における右側の集団を構成している明点の並んでいる方向から、左コントローラ330の傾きを検出する。
コントローラセンサ140は、撮像画像内の明点(赤外線LED304)を識別することによって、右コントローラ320および左コントローラ330の位置をそれぞれ検出する。たとえば、撮像画像から検出したされた2つの明点の集団のうち、左側の集団を構成している複数の明点の重心位置を、右コントローラ320の位置として検出する。さらに、右側の集団を構成している複数の明点の重心位置を、左コントローラ330の位置として検出する。
コントローラセンサ140の代わりに、右コントローラ320および左コントローラ330が、センサ306を用いて自身の位置および傾きを検出してもよい。この場合、たとえば、右コントローラ320の三軸角速度センサ(センサ306)が、右コントローラ320の3つの直交する各軸周りの回転を検出する。右コントローラ320は、各検出値に基づき、右コントローラ320がどちらの方向にどれだけ回転したかを検出し、さらに、逐次検出した回転方向と回転量とを累積することによって、右コントローラ320の傾きを算出する。同様に、左コントローラ330は、左コントローラ330の三軸角速度センサ(センサ306)からの検出値を用いて、左コントローラ330の傾きを算出すればよい。右コントローラ320および左コントローラ330は、三軸角速度センサの検出値に加えて、たとえば三軸磁気センサおよび/または三軸加速度センサからの検出値を併用してもよい。
詳細な説明は省略するが、右コントローラ320は、三軸角速度センサ(センサ306)からの検出値を用いて、右コントローラ320の位置を検出することができる。また、左コントローラ330は、三軸角速度センサ(センサ306)からの検出値を用いて、左コントローラ330の位置を検出することができる。
(制御回路部200の機能的構成)
図8は、制御回路部200の機能的構成を示すブロック図である。制御回路部200は、HMDセンサ120、コントローラセンサ140、注視センサ130、およびコントローラ300から受信した各種のデータを用いることによって、ユーザに提供される仮想空間2を制御すると共に、HMD110のディスプレイ112への画像表示を制御する。図8に示すように、制御回路部200は、検出部210、表示制御部220、仮想空間制御部230、記憶部240、および通信部250を備えている。制御回路部200は、図2に示す各ハードウェアの協働によって、検出部210、表示制御部220、仮想空間制御部230、記憶部240、および通信部250として機能する。検出部210、表示制御部220、および仮想空間制御部230は、主としてプロセッサおよびメモリの協働によってその機能が実現され得る。記憶部240は、主としてメモリおよびストレージの協働によってその機能が実現され得る。通信部250は、主としてプロセッサおよび通信インターフェースの協働によってその機能が実現され得る。
検出部210は、制御回路部200に接続される各種のセンサ(HMDセンサ120等)から検出値を受信する。また、必要に応じて、受信した検出値を用いた所定の処理を実行する。検出部210は、HMD検出部211、視線検出部212、およびコントローラ検出部213を備えている。HMD検出部211は、HMD110およびHMDセンサ120から検出値をそれぞれ受信する。視線検出部212は、注視センサ130から検出値を受信する。コントローラ検出部213は、コントローラセンサ140、右コントローラ320、および左コントローラ330から、それぞれの検出値を受信する。
表示制御部220は、HMD110のディスプレイ112への画像表示を制御する。表示制御部220は、仮想カメラ制御部221、視界領域決定部222、および視界画像生成部223を備えている。仮想カメラ制御部221は、仮想空間2内に仮想カメラ1を配置すると共に、仮想空間2内における仮想カメラ1の挙動を制御する。視界領域決定部222は、視界領域23を決定する。視界画像生成部223は、決定された視界領域23に基づき、ディスプレイ112に表示される視界画像26を生成する。
仮想空間制御部230は、ユーザに提供される仮想空間2を制御する。仮想空間制御部230は、仮想空間規定部231、仮想手制御部232、領域特定部233、および接触判定部234を備えている。
仮想空間規定部231は、ユーザに提供される仮想空間2を表す仮想空間データを生成することによって、HMDシステム100における仮想空間2を規定する。仮想手制御部232は、ユーザによる右コントローラ320および左コントローラ330の操作に応じたユーザの各仮想手(仮想右手および仮想左手)を仮想空間2内に配置すると共に、仮想空間2内における各仮想手の挙動を制御する。領域特定部233は、仮想空間26におけるオブジェクト、すなわち仮想オブジェクトに、ユーザ操作の対象となる操作対象オブジェクト(たとえば仮想手)との接触を判定するための判定領域を設定する。接触判定部234は、前記判定領域と前記操作対象オブジェクトとの位置関係に基づいて、前記判定領域が設定される前記仮想オブジェクトと前記操作対象オブジェクトとの接触を判定する。
記憶部240は、制御回路部200が仮想空間2をユーザに提供するために用いる各種のデータを格納している。記憶部240は、雛形格納部241およびコンテンツ格納部242を備えている。雛形格納部241は、仮想空間2の雛形を表す各種の雛形データを格納している。コンテンツ格納部242は、仮想空間2において再生可能な各種のコンテンツを格納している。
雛形データは、仮想空間2の空間構造を規定する空間構造データを有する。空間構造データは、たとえば、中心21を中心とする360°の全天球の空間構造を規定するデータである。雛形データは、仮想空間2のXYZ座標系を規定するデータをさらに有する。雛形データは、天球を構成する各メッシュのXYZ座標系における位置を特定する座標データをさらに有する。また、雛形データは、仮想空間2内に仮想オブジェクトを配置可能であるか否かを示すフラグをさらに有していてもよい。
コンテンツは、仮想空間2において再生可能なコンテンツである。本実施形態では、このコンテンツはゲームコンテンツである。コンテンツは、ゲームの背景画像、および、ゲームに登場する仮想オブジェクト(キャラクタ、アイテム等)を規定するデータを少なくとも有する。各コンテンツには、HMD110の初期状態(起動時)にユーザに見せる画像を向いた初期方向が、予め規定されている。
通信部250は、ネットワークNWを介して外部機器400(たとえばゲームサーバ)との間でデータを送受信する。
(仮想空間2の提供処理)
図9は、HMDシステム100が仮想空間2をユーザに提供する処理の流れを示すシーケンス図である。仮想空間2は、基本的に、HMD110および制御回路部200の協働によってユーザに提供される。図8に示す処理が開始されると、まず、ステップS1において、仮想空間規定部231が、ユーザに提供される仮想空間2を表す仮想空間データを生成することによって、仮想空間2を規定する。生成の手順は次の通りである。まず仮想空間規定部231は、仮想空間2の雛形データを雛形格納部241から取得することによって、仮想空間2の原型を定義する。仮想空間規定部231は、さらに、仮想空間2において再生されるコンテンツを、コンテンツ格納部242から取得する。本実施形態では、このコンテンツはゲームコンテンツである。
仮想空間規定部231は、取得した雛形データに、取得したコンテンツを適合することによって、仮想空間2を規定する仮想空間データを生成する。仮想空間規定部231は、仮想空間データにおいて、仮想空間2の天球を構成する各メッシュの管理データに、コンテンツに含まれる背景画像を構成する各部分画像を適宜関連付ける。仮想空間規定部231は、コンテンツに規定される初期方向を仮想空間2のXYZ座標系におけるZ方向に合致させるように、各部分画像と各メッシュとを関連付けることが好ましい。
仮想空間規定部231は、さらに、必要に応じて、コンテンツに含まれる各仮想オブジェクトの管理データを、仮想空間データに追加する。その際、各管理データに、対応する仮想オブジェクトが仮想空間2において配置される位置を表す座標を設定する。これにより各仮想オブジェクトが、仮想空間2における当該座標の位置にそれぞれ配置される。
その後、ユーザによってHMD110が起動されると、ステップS2において、HMDセンサ120が、HMD110の初期状態における位置および傾きを検出して、ステップS3において、検出値を制御回路部200に出力する。HMD検出部211は、この検出値を受信する。この後、ステップS4において、仮想カメラ制御部221は、仮想空間2において仮想カメラ1を初期化する。
初期化の手順は次の通りである。まず仮想カメラ制御部221は、仮想空間2内における初期位置(図4における中心21等)に、仮想カメラ1を配置する。次に、仮想空間2における仮想カメラ1の向きを設定する。その際、仮想カメラ制御部221は、HMDセンサ120からの検出値に基づき初期状態のHMD110のuvw視野座標系を特定すると共に、HMD110のuvw視野座標系に一致するuvw視野座標系を仮想カメラ1に設定することによって、仮想カメラ1の向きを設定すればよい。仮想カメラ制御部221は、仮想カメラ1にuvw視野座標系を設定する際、仮想カメラ1のロール方向(w軸)をXYZ座標系のZ方向(Z軸)に適合させる。具体的には、仮想カメラ制御部221は、仮想カメラ1のロール方向をXZ平面に投影して得られる方向を、XYZ座標系のZ方向に一致させると共に、XZ平面に対する仮想カメラ1のロール方向の傾きを、水平面に対するHMD110のロール方向の傾きに一致させる。このような適合処理によって、初期状態の仮想カメラ1のロール方向がコンテンツの初期方向に適合されるので、コンテンツの再生開始後におけるユーザが最初に向く水平方向の向きを、コンテンツの初期方向に一致させることができる。
仮想カメラ1の初期化処理が終わると、視界領域決定部222は、仮想カメラ1のuvw視野座標系に基づき、仮想空間2における視界領域23を決定する。具体的には、仮想カメラ1のuvw視野座標系のロール方向(w軸)をユーザの基準視線5として特定し、この基準視線5に基づき視界領域23を決定する。ステップS5において、視界画像生成部223は、仮想空間データを処理することによって、仮想空間2に展開される仮想空間画像22の全体のうち、仮想空間2における視界領域23に投影される部分に相当する視界画像26を生成(レンダリング)する。ステップS6において、視界画像生成部223は、生成した視界画像26を初期視界画像としてHMD110に出力する。ステップS7において、HMD110は、受信した初期視界画像をディスプレイ112に表示する。これによりユーザは初期視界画像を視認する。
その後、ステップS8において、HMDセンサ120が、HMD110の現在の位置および傾きを検出して、ステップS9において、これらの検出値を制御回路部200に出力する。HMD検出部211は、各検出値を受信する。仮想カメラ制御部221は、HMD110の位置および傾きの検出値に基づき、HMD110における現在のuvw視野座標系を特定する。さらに、ステップS10において、仮想カメラ制御部221は、XYZ座標系におけるuvw視野座標系のロール方向(w軸)を、HMD110の視界方向として特定する。
本実施形態では、ステップS11において、仮想カメラ制御部221が、特定したHMD110の視界方向を、仮想空間2におけるユーザの基準視線5として特定する。ステップS12において、仮想カメラ制御部221は、特定した基準視線5に基づき、仮想カメラ1を制御する。仮想カメラ制御部221は、基準視線5の位置(起点)および方向が仮想カメラ1の初期状態と同一であれば、仮想カメラ1の位置および方向をそのまま維持する。一方、基準視線5の位置(起点)および/または方向が、仮想カメラ1の初期状態から変化していれば、仮想空間2内における仮想カメラ1の位置および/または傾きを、変化後の基準視線5に応じた位置および/または傾きに変更する。また、制御後の仮想カメラ1に対してuvw視野座標系を再設定する。
ステップS13において、視界領域決定部222は、特定した基準視線5に基づき、仮想空間2における視界領域23を決定する。その後、ステップS14において、視界画像生成部223は、仮想空間データを処理することによって、仮想空間2に展開される仮想空間画像22の全体のうち、仮想空間2における視界領域23に投影(重畳)される部分である視界画像26を生成(レンダリング)する。ステップS15において、視界画像生成部223は、生成した視界画像26を更新用の視界画像としてHMD110に出力する。ステップS16において、HMD110は、受信した視界画像26をディスプレイ112に表示することによって、視界画像26を更新する。これにより、ユーザがHMD110を動かせば、それに連動して視界画像26が更新される。
(仮想空間ゲームの提供)
本実施形態では、ユーザは、右コントローラ320および左コントローラ330を操作することによって、仮想空間2内においてゲームをプレイする。このゲームでは、ユーザは、仮想空間2において、ユーザの頭部以外の身体の一部の動きに連動して動作する操作対象オブジェクトにより、他の仮想オブジェクトに触れることができる。詳細は後述するが、制御回路部200は、第1仮想オブジェクトが第2仮想オブジェクトと重畳しかつ第2仮想オブジェクトの前面に位置する重畳部分を含む場合、前記第1仮想オブジェクトと操作対象オブジェクトとの接触を判定するための判定領域を前記重畳部分と重畳するように設定し、前記第2仮想オブジェクトと操作対象オブジェクトとの接触を判定するための判定領域を前記重畳部分に重畳しないように設定する。これにより、ユーザは、直感的な操作により、第1仮想オブジェクトと第2仮想オブジェクトのうち、ユーザの所望の仮想オブジェクトに対して、操作対象オブジェクトを接触させることができる。前記ゲームは、たとえばカードゲームであってもよい。この場合、前記操作対象オブジェクトは仮想手であってもよく、前記第1仮想オブジェクトおよび前記第2仮想オブジェクトはユーザが選択できるカードの仮想オブジェクト(現実のカードを模した外観および形状の仮想オブジェクト)であってもよい。カードの仮想オブジェクトが複数重畳して配置されているような場合であっても、前記判定により、ユーザは、直感的な操作により、仮想手によって所望のカードの仮想オブジェクトに触れることができる。
図10は、仮想空間2におけるゲーム中の処理の流れを示すシーケンス図である。ステップS20において、仮想空間規定部231は、選択画面を構成する各部分画像をコンテンツ格納部242から読み出し、仮想空間データにおいて、仮想空間2の天球を構成する各メッシュの管理データに、前記各部分画像を関連付ける。また、仮想空間規定部231は、選択画面に含まれる各仮想オブジェクトの管理データを、仮想空間データに追加する。仮想オブジェクトの管理データには、仮想オブジェクトの形状、仮想空間2における位置(座標)および傾き(姿勢)を示すデータが含まれている。仮想空間規定部231は、管理データを仮想空間データに追加する際、各管理データに、対応する仮想オブジェクトが仮想空間2において配置される位置を表す座標を設定する。前記仮想オブジェクトは、ユーザが選択する対象となる仮想オブジェクトであり、たとえばカードである。ユーザは、この仮想オブジェクトに対して、操作対象オブジェクトを接触させることにより、接触させた当該仮想オブジェクトを選択することができる。以下では、操作対象オブジェクトが仮想手である例を説明する。
ステップS21において、コントローラセンサ140は、右コントローラ320の位置および傾き、ならびに、左コントローラ330の位置および傾きをそれぞれ検出する。ステップS22において、コントローラセンサ140は、各検出値を制御回路部200に送信する。コントローラ検出部213は、これらの検出値を受信する。
ステップS23において、コントローラ300は、各ボタンの押下状態を検出する。具体的には、右コントローラ320は、親指ボタン302a、人差し指ボタン302e、および中指ボタン302fの押下状態をそれぞれ検出する。一方、左コントローラ330は、親指ボタン302c、人差し指ボタン302g、および中指ボタン302hの押下状態をそれぞれ検出する。ステップS24において、右コントローラ320および左コントローラ330は、各検出値を制御回路部200に送信する。コントローラ検出部213は、これらの検出値を受信する。
ステップS25において、仮想手制御部232は、受信した各検出値を用いて、ユーザの各仮想手(仮想右手および仮想左手)を、仮想空間2に生成する。具体的には、仮想右手を規定するデータおよび仮想左手を規定するデータをそれぞれ生成し、仮想空間データに追加する。
仮想手制御部232は、右コントローラ320位置および傾きの検出値、ならびに右コントローラ320の各ボタンの押下状態の検出値を用いて、ユーザの仮想右手を規定する。その際、仮想空間2における仮想右手の位置として、グローバル座標系における右コントローラ320の位置を規定する。仮想手制御部232は、さらに、右コントローラ320の傾きの検出値に基づき、右コントローラ320に設定されたuvw視野座標系に連動するuvw視野座標系を仮想右手に設定することによって、仮想空間2内における仮想右手の傾きを規定する。
仮想手制御部232は、さらに、右コントローラ320の親指ボタン302a、人差し指ボタン302e、および中指ボタン302fの各検出値に基づき、仮想右手を構成する右親指、右人差し指、および右中指の表示状態を規定する。なお、右薬指および右小指の表示状態は、右中指に合致させるように規定する。
仮想手制御部232は、あるボタンの押下状態の検出値が「0」の場合、そのボタンに対応する仮想手の指の表示状態として、指を完全に伸ばした状態を規定する。一方、あるボタンの押下状態が「1」の場合、そのボタンに対応する仮想手の指の表示状態として、指を完全に折り曲げた状態を規定する。また、あるボタンの押下状態が「中間(0と1との間の値)」の場合、そのボタンに対応する仮想手の指の表示状態として、押下状態に応じた程度に指を折り曲げた表示状態を規定する。
同様に、仮想手制御部232は、左コントローラ330の各検出値に基づき、仮想空間2における仮想左手の位置、傾き、および各指の状態を規定する。これらの処理によって、仮想手制御部232は、仮想右手および仮想左手を、仮想空間2に配置する。
ステップS26〜ステップS34の処理は、図9のステップS8〜ステップS16と同様である。ステップS26〜ステップS34の処理により、ステップS20で仮想空間規定部231が生成した選択画面のうち、視界領域23に投影(重畳)される部分である視界画像がディスプレイ112に表示される。
ステップS35では、ステップS23と同様に、コントローラ300は、各ボタンの押下状態を検出する。ステップS36では、コントローラ300は、各検出値を制御回路部200に送信する。コントローラ検出部213は、これらの検出値を受信する。
ステップS37において、仮想空間規定部231は、前記受信した検出値に基づいて、仮想手に仮想オブジェクトをセットするための操作であるオブジェクトセット操作(第1操作)を検出したか否かを判定する。コントローラ300に対するどのような操作をオブジェクトセット操作とするかは予め決めておけばよい。たとえば、左コントローラ330の人差し指ボタン302gを押下する操作を、仮想左手に仮想オブジェクトをセットするためのオブジェクトセット操作としてもよい。
ステップS37において、仮想空間規定部231は、オブジェクトセット操作を検出したと判定した場合(ステップS37でYES)、仮想空間2における仮想手上(手のひら側が好ましい)に複数の仮想オブジェクトが重ねて配置された状態となるように、仮想空間データを更新する。たとえば、仮想オブジェクトOA〜ODを、上からOA、OB、OC、OCの順に仮想手上に配置する場合、仮想空間規定部231は、仮想オブジェクトODの位置を仮想手の直上の位置として仮想空間データを更新する。以下同様に、仮想オブジェクトOCの位置を仮想オブジェクトODの直上の位置とし、仮想オブジェクトOBの位置を仮想オブジェクトOCの直上の位置とし、仮想オブジェクトOAの位置を仮想オブジェクトOBの直上の位置として仮想空間データを更新する。
そして、視界画像生成部223は、前記更新後の仮想空間データに基づいて視界画像26を生成し(ステップS38)、生成した視界画像26を更新用の視界画像としてHMD110に出力する(ステップS39)。ステップS40において、HMD110は、受信した視界画像26をディスプレイ112に表示することによって、視界画像26を更新する。これにより、ユーザは、仮想手上に複数の仮想オブジェクトが重畳して配置された画像を視認する。
ステップS41では、ステップS35と同様に、コントローラ300は、各ボタンの押下状態を検出する。ステップS42では、コントローラ300は、各検出値を制御回路部200に送信する。コントローラ検出部213は、これらの検出値を受信する。
ステップS43において、仮想空間規定部231は、前記受信した検出値に基づいて、仮想手にセットされた仮想オブジェクトを広げる操作(第2操作)を検出したか否かを判定する。コントローラ300に対するどのような操作を、仮想オブジェクトを広げる操作とするかは予め決めておけばよい。たとえば、仮想左手上に仮想オブジェクトが配置された状態において、左コントローラ330の親指ボタン302cを完全に押下した後、アナログスティック302jを傾ける操作を、仮想オブジェクトを広げる操作としてもよい。また、たとえば、左コントローラ330の天面332をタッチパネルで構成した場合、該タッチパネルに対するスワイプ操作を、仮想オブジェクトを広げる操作としてもよい。この他にも、たとえば、仮想空間規定部231は、ユーザの親指の動きを光学的に検知した検知結果に基づき、ユーザの親指が仮想オブジェクトを広げるように動いたことを検出した場合に、仮想オブジェクトを広げる操作が行われたと判定してもよい。これにより、現実に手に持ったカードを広げるときと同じ感覚で親指を動かすという直感的な操作により、仮想空間2中のカードの仮想オブジェクトを広げることも可能になる。
ステップS43において、仮想空間規定部231は、仮想オブジェクトを広げる操作を検出したと判定した場合(ステップS43でYES)、仮想手上に重畳して配置されている複数の仮想オブジェクトが広げられた状態となるように、仮想空間データを更新する。なお、複数の仮想オブジェクトが広げられた状態とは、他の仮想オブジェクトによって仮想カメラ1の死角となっている、仮想オブジェクトの部分(他の仮想オブジェクトとの重畳部分)の面積が狭くなった状態である。たとえば、仮想手上に重畳配置された仮想オブジェクトがカードの仮想オブジェクトであれば、各仮想オブジェクトを扇状にずらした状態であってもよい。
ステップS44において、視界画像生成部223は、前記更新後の仮想空間データに基づいて視界画像26を生成し、ステップS45において、前記視界画像26を更新用の視界画像としてHMD110に出力する。ステップS46において、HMD110は、受信した視界画像26をディスプレイ112に表示することによって、視界画像26を更新する。これにより、ユーザは、仮想手上に複数の仮想オブジェクトが重なった状態で広げられた画像を視認する。
ステップS47において、領域特定部233は、仮想オブジェクトと仮想手との接触を判定する際に使用する判定領域を設定する。判定領域を設定する処理の詳細は、図12に基づいて後述する。
(表示する画像の例)
図10のステップS38において生成する視界画像26は、たとえば図11の(a)のような画像であってもよい。この例では、カードの仮想オブジェクトである仮想オブジェクトOAおよびOBが仮想左手OLに把持されている。仮想オブジェクトOAは、絵柄が正面(仮想カメラ1側)を向く配置となっているので、ユーザは仮想オブジェクトOAがどのようなカードであるかを認識することができる。一方、仮想オブジェクトOBは、仮想オブジェクトOAの背後に位置しており、その大部分が仮想オブジェクトOAによって死角となっているから、ユーザは仮想オブジェクトOBがどのようなカードであるかを認識することはできない。なお、仮想オブジェクトOBの背後にも複数の仮想オブジェクトが配置されているが、これらの仮想オブジェクトは仮想オブジェクトOAおよびOBに隠れており、表示されていない。
図10のステップS44において生成する視界画像26は、たとえば図11の(b)のような画像であってもよい。この例では、カードの仮想オブジェクトである仮想オブジェクトOA〜ODが仮想左手OLに把持されている。図11の(a)の状態と比べて、仮想手OL上における、仮想オブジェクトOA、OBの位置がそれぞれ変化しており、これにより仮想オブジェクトOA、OBの重畳部分の面積が狭くなっている。また、図11の(a)では仮想オブジェクトOA、OBの背後に隠れて視認できなかった仮想オブジェクトOC、ODについても視認できるようになっている。この結果、図11の(a)の画像では視認できなかった、仮想オブジェクトOB〜ODの左肩部分に表示されている数字を読み取ることができるようになっている。
(判定領域を設定する処理)
領域特定部233が判定領域を設定する処理(図10のステップS47)の詳細を図12に基づいて説明する。ステップS50において、領域特定部233は、各仮想オブジェクトの判定領域を設定する。前記判定領域は、仮想オブジェクトから仮想カメラ1に向かって延在する部分を少なくとも含むように、仮想オブジェクトの周囲の領域において設定する。領域特定部233は、設定した各判定領域を、対応する仮想オブジェクトと関連付けておく。なお、ステップS50で設定する判定領域については、図13に基づいて後述する。
ステップS51において、領域特定部233は、各仮想オブジェクトの重なりの状態、すなわち仮想カメラ1から見て、いずれの仮想オブジェクトがいずれの仮想オブジェクトに重なっているか、および重なっている仮想オブジェクトのいずれがより仮想カメラ1に近いかを特定する。具体的には、領域特定部233は、ステップS50で判定領域を設定した各仮想オブジェクトの仮想空間2における位置および姿勢と、仮想カメラ1のロール方向(図3のw軸方向であり、基準視線5の方向でもある)とに基づいて重なりの状態を特定する。
ステップS52において、領域特定部233は、S51において重なっていることが特定された仮想オブジェクト間の境界を特定する。なお、境界の特定については、図14および図15に基づいて後述する。そして、ステップS53において、領域特定部233は、各仮想オブジェクトについて、ステップS50で特定した判定領域のうち、ステップS52で特定した境界よりも外側の部分を排除する。なお、仮想オブジェクトの判定領域のうち、境界よりも外側の部分を排除するとは、境界よりも外側の部分は前記仮想オブジェクトの判定領域ではないとみなすことを意味する。これにより、各仮想オブジェクトの判定領域が確定し、判定領域を設定する処理は終了する。
(判定領域の設定例(重複排除前))
図12のステップS50で設定する判定領域は、たとえば、図13に示すように、仮想オブジェクトの上下左右方向にも延在していてもよい。図13には、仮想オブジェクトOAの周囲に判定領域JAを特定した例を示している。なお、図13では仮想カメラ1から見た仮想オブジェクトOAを平面的に示しているが、判定領域JAは、仮想オブジェクトOAの手前側(仮想カメラ1が位置している側)にも延在している、六面体状の領域である。また、図13では、1つの仮想オブジェクトOAとその判定領域JAのみを示しているが、選択対象となる各仮想オブジェクトについて、同様にして判定領域を設定する。なお、各仮想オブジェクトに設定する判定領域の形状や範囲は、各仮想オブジェクトに応じてそれぞれ異なるものとしてもよい。
図11の例のように一方の仮想手で仮想オブジェクトを把持した場合、ユーザは上側から仮想オブジェクトに触れようとする場合が多い。このため、判定領域JAは、図13の例のように、仮想オブジェクトOAの上側に位置する部分JA1を含むことが好ましい。ここで、上側とは、HMD100の視野座標系におけるヨー方向において、仮想オブジェクトOAよりも上側を意味する。これにより、ユーザは、上端側から仮想オブジェクトOAに容易に触れることができる。
また、判定領域JAは、図13の例のように、仮想オブジェクトOAの下端部から下側に向かって延在する部分JA2、および仮想オブジェクトOAの側端部から側方に向かって延在する部分JA3、JA4を含んでいてもよい。部分JA1〜JA4の広さは、ユーザが直感的に仮想オブジェクトOAを掴むことができるように設定することが好ましい。たとえば、図13のように、部分JA1の幅は、部分JA2の幅や、部分JA3、JA4の幅よりも長くしてもよく、部分JA3、JA4の幅は部分JA2の幅よりも長くしてもよい。これにより、仮想オブジェクトOAは上側からが最も触れやすくなり、次いで側方側からが触れやすくなる。なお、部分JA1の幅は、仮想オブジェクトOAの上辺から部分JA1の上端までの長さであり、部分JA2の幅は、仮想オブジェクトOAの下辺から部分JA2の下端までの長さであり、部分JA3の幅は、仮想オブジェクトOAの左辺から部分JA3の左端までの長さであり、部分JA4の幅は、仮想オブジェクトOAの右辺から部分JA4の右端までの長さである。また、仮想オブジェクトOAの背後に位置する他の仮想オブジェクトについても同様に、当該仮想オブジェクトの上側(HMD100のヨー方向において、当該仮想オブジェクトよりも上側)に位置する部分を含む判定領域を設定することが好ましい。
判定領域に、仮想オブジェクトの外縁から仮想オブジェクトの外側に向かって延在する部分を含める場合、いずれの方向に延在する部分を広くするかは予め決めておいてもよい。また、領域特定部233は、仮想オブジェクトの仮想空間2における姿勢を特定して、特定した姿勢に応じていずれの方向に延在する部分を広くするかを決定してもよい。この場合、領域特定部233は、仮想オブジェクトの姿勢変化に応じて、いずれの方向にどれだけ判定領域を延在させるかを変化させてもよい。
また、図11の例のように、一方の仮想手で下側が把持された仮想オブジェクトを、他方の仮想手で選ぶ場合には、領域特定部233は、仮想オブジェクトの把持されている側の端部(図11の例では下端部あるいは左下端部)と反対側の端部(上端部あるいは右上端部)から仮想オブジェクトの外側に向かって延在する部分がより広くなるように判定領域を設定してもよい。仮想オブジェクトにおいて、一方の仮想手によって把持されている側と反対側の端部には、前記一方の仮想手と干渉することなく他方の仮想手を近付けることができるから、前記の設定により、ユーザは一方の仮想手に把持された仮想オブジェクトに容易に触れることができる。
(境界の特定例)
図12のステップS52では、たとえば、図14のような境界を特定してもよい。図14の例では、仮想オブジェクトOB(第2仮想オブジェクト)の上に仮想オブジェクトOA(第1仮想オブジェクト)が重なっている。仮想オブジェクトOAにおける仮想オブジェクトOBとの重畳部分Aは、線分Aa、Ab、Ac、Ad、およびAeで規定される五角形の領域である。
この例では、領域特定部233は、仮想オブジェクトOAの外形を規定する輪郭線のうち、仮想オブジェクトOAと仮想オブジェクトOBを区切る輪郭線(仮想カメラ1から見て仮想オブジェクトOBに重畳する線分)、すなわち線分Aa、Abを特定する。そして、領域特定部233は、図14の(a)に示すように、線分Aa、Abのうち、仮想オブジェクトOBとの重なり部分が最も長い線分Aaを含む直線LAを特定する。直線LAは、仮想オブジェクトOAの外形を構成する4辺のうち、左側の長辺を含む直線であるとも言える。そして、領域特定部233は、この直線LAを通る平面を判定領域JAと判定領域JBとの境界と特定する。この平面は、仮想カメラ1のロール方向(図3のw軸方向であり、基準視線5の方向でもある)と平行であることが望ましい。これにより、仮想カメラ1から仮想オブジェクトOAが見える部分には判定領域JAを設定し、仮想カメラ1から仮想オブジェクトOBが見える部分には判定領域JBを設定することができる。
境界を特定した領域特定部233は、図14の(b)に示すように、仮想オブジェクトOAの周囲全周に特定されていた判定領域JA(図13参照)のうち、直線LAよりも左側(仮想オブジェクトOAの外側)の部分を排除する。つまり、領域特定部233には、直線LAよりも左側の部分は判定領域JAではないとみなす。これにより、判定領域JAは、直線LAよりも右側(仮想オブジェクトOA側)の部分が残る。つまり、領域特定部233は、仮想カメラ1から見て重畳部分Aに重畳する判定領域は、仮想オブジェクトOBよりも前面に位置する仮想オブジェクトOAの判定領域JA(第1領域)に設定する。このようにして設定された判定領域JAは、仮想カメラ1から見た平面内において、直線LAよりも仮想オブジェクトOB側には重畳していない。
一方、領域特定部233は、仮想オブジェクトOBの判定領域JBについては、直線LAよりも右側(重畳部分A側)の部分を排除する。つまり、領域特定部233は、直線LAよりも右側の部分は判定領域JBではないとみなす。これにより、判定領域JBには、直線LAよりも左側(仮想オブジェクトOB側)の部分が残る。つまり、領域特定部233は、仮想オブジェクトOAよりも背後に位置する仮想オブジェクトOBについては、仮想カメラ1から見て重畳部分Aに重畳しない判定領域JB(第2領域)を設定する。このようにして設定された判定領域JBは、仮想カメラ1から見た平面内において、直線LAよりも仮想オブジェクトOA側には重畳していない。
このように、領域特定部233は、複数の仮想オブジェクトが重なっている場合に、それら複数の仮想オブジェクトの判定領域が重畳しないように調整するので、ユーザは意図通りの仮想オブジェクトを直感的に選択することができる。
図14の例では、線分Abを通る境界は特定していないが、領域特定部233は、線分Abを通る境界を特定してもよい。図15の例では、図15の(a)に示すように、領域特定部233は、線分Aaを通る半直線LBと、線分Abを通る半直線LCを境界としている。この場合、図15の(b)に示すように、領域特定部233は、仮想オブジェクトOAの判定領域JAのうち、半直線LBよりも左側の部分と、半直線LCよりも下側の部分は排除し、半直線LBよりも右側かつ半直線LCよりも上側の部分を残している。一方、領域特定部233は、仮想オブジェクトOBの判定領域JBについては、半直線LBよりも右側の部分と、半直線LCよりも上側の部分は排除し、半直線LBよりも左側かつ半直線LCよりも下側の部分を残している。
図14の例は、図15の例と比べて境界の数が少ないため、判定領域の特定に要する演算処理の負荷が少なく済むという利点がある。一方、図15の例は、図14の例と比べて、仮想オブジェクトOBについて、その上方や側方から仮想手を近付けて選択することが容易になると共に、その下方から仮想手を近付けて選択することも容易になるという利点がある。なお、図11の例のように、その下側を仮想左手OLで把持した仮想オブジェクトOAおよび仮想オブジェクトOBを仮想右手で選択する場合、これらの仮想オブジェクトの下方の判定領域は、仮想左手OLの位置と重なるため重要度が低い。このため、この場合には、図14の例のように、仮想オブジェクトOAの下側の短辺に沿った境界の特定は行わないことが好ましい。
(判定領域の設定例(重複排除後))
図16には、広げた状態で仮想左手OLに把持されたカード型の仮想オブジェクトOA〜ODについて、領域特定部233が判定領域JA〜JDを設定した例を示している。仮想オブジェクトOAは、4つの仮想オブジェクトのうち、最も手前(仮想カメラ1側)に位置しており、仮想オブジェクトOB、OC、ODの順で位置が奥側(仮想カメラ1から遠い側)となる。
この例では、領域特定部233は、仮想オブジェクトOAと仮想オブジェクトOBの境界を、仮想オブジェクトOAの左側の長辺を通る平面と特定し、該平面より右側の領域を仮想オブジェクトOAの判定領域JAに設定する。また、領域特定部233は、仮想オブジェクトOBと仮想オブジェクトOCの境界を、仮想オブジェクトOBの左側の長辺を通る平面と特定し、該平面より右側であり、かつ仮想オブジェクトOAと仮想オブジェクトOBの境界である平面よりも左側の領域を仮想オブジェクトOBの判定領域JBに設定する。領域特定部233は、仮想オブジェクトOCについても同様に、仮想オブジェクトOCの左側の長辺を通る平面より右側であり、かつ仮想オブジェクトOBと仮想オブジェクトOCの境界である平面よりも左側の領域を仮想オブジェクトOCの判定領域JCに設定する。領域特定部233は、仮想オブジェクトODについては、仮想オブジェクトOCと仮想オブジェクトODの境界である平面よりも左側の領域を仮想オブジェクトODの判定領域JDに設定する。なお、判定領域間の境界となる前記平面は、前述のように、仮想カメラ1のロール方向(図3のw軸方向であり、基準視線5の方向でもある)と平行であることが望ましい。
ユーザは、右コントローラ320の現実空間における位置を移動させることにより、仮想空間2における仮想右手ORを移動させることができる。そして、ユーザは、仮想右手ORを仮想オブジェクトOA〜ODのうち所望の仮想オブジェクトに近付けて、仮想オブジェクトを掴む操作を右コントローラ320に対して行うことにより、所望の仮想オブジェクトを選択することができる。
(仮想オブジェクトを選択する際の処理)
判定領域を設定した後、ユーザが仮想オブジェクトを選択する際の処理を図17に基づいて説明する。ステップS60において、コントローラセンサ140は、右コントローラ320の位置および傾き、ならびに、左コントローラ330の位置および傾きをそれぞれ検出する。ステップS61において、コントローラセンサ140は、各検出値を制御回路部200に送信する。コントローラ検出部213は、これらの検出値を受信する。
ステップS62において、仮想手制御部232は、受信した各検出値を用いて、ユーザの各仮想手(仮想右手および仮想左手)の仮想空間2における位置および傾きを更新する。具体的には、仮想空間2における仮想右手の位置を、グローバル座標系における右コントローラ320の現在位置に更新する。また、仮想手制御部232は、右コントローラ320の傾きの検出値に基づき、仮想空間2内における仮想右手の傾きを更新する。同様に、仮想手制御部232は、左コントローラ330の各検出値に基づき、仮想空間2における仮想左手の位置および傾きを更新する。ステップS63において、視界画像生成部223は、仮想手の位置および傾きが更新された視界画像を生成してHMD110に出力し、ステップS64において、HMD110は、受信した視界画像をディスプレイ112に表示し、これによりユーザが視認する視界画像が更新される。
ステップS65において、接触判定部234は、仮想手が仮想オブジェクトに接触したか判定する。具体的には、接触判定部234は、図10のステップS47で設定した判定領域と、仮想空間2において仮想手が占める領域とに重畳部分があるか否かを判定する。なお、仮想手の一部(例えば指先や手のひら)と、判定領域とに重畳部分があるか否かを判定してもよい。また、接触判定部234は、仮想手についても判定領域を設定し、仮想手の判定領域と仮想オブジェクトの判定領域とに重畳部分があるか否かを判定してもよい。なお、仮想右手で仮想オブジェクトに触れる場合、ユーザは、右コントローラ320を動かす操作(第3操作)を行うことにより、仮想右手を判定領域内まで移動させることができる。
接触判定部234が、重畳部分がないと判定した場合(ステップS65においてNO)、処理は図示のフローの冒頭に戻る。一方、接触判定部234は、重畳部分があると判定した場合(ステップS65においてYES)、コントローラ300が、ステップS66において検出し、ステップS67において送信した、各ボタンの押下状態を示す各検出値に基づき、掴む操作を検出したか否かを判定する(ステップS68)。どのような操作を掴む操作とするかは特に限定されないが、たとえば仮想手の親指と、人差し指および中指とが接触するまで各指に対応するボタンを押下する操作を掴む操作としてもよい。
接触判定部234が、掴む操作が行われていないと判定した場合(ステップS68においてNO)、処理は図示のフローの冒頭に戻る。一方、接触判定部234は、掴む操作が行われたと判定した場合(ステップS68においてYES)、仮想オブジェクトが掴まれたと判定する(ステップS69)。仮想オブジェクトが掴まれたと判定した後の処理は、ゲーム内容に応じたものとすればよい。たとえば、掴まれた仮想オブジェクトと、掴んだ仮想手とを関連付けて、仮想手が移動したときには仮想オブジェクトも仮想手と連動して移動させてもよい。この関連付けは、たとえば、仮想手によって仮想オブジェクトを掴んでいる状態が解除された(掴んでいる指を伸ばす操作が行われた)ときに解消してもよい。
〔変形例〕
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能である。異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態も、本発明の技術的範囲に含まれる。各実施形態にそれぞれ開示された技術的手段を組み合わせることによって、新しい技術的特徴を形成することもできる。
前記実施形態では、領域特定部233が、各仮想オブジェクトに判定領域を設定した後、設定した判定領域間で重畳部分が生じないように調整する(重畳部分を排除する)例を示したが、重畳しない判定領域を設定する方法はこの例に限られない。例えば、領域特定部233は、まず仮想オブジェクト間の境界を特定し、特定した境界を超えないように(各仮想オブジェクトについて、仮想カメラ1から見える部分から判定領域を延在させ、他の仮想オブジェクト上には延在させないように)各仮想オブジェクトの判定領域を設定してもよい。
ユーザが操作する仮想オブジェクトは、ユーザの頭部以外の身体の一部の動きに連動して仮想空間2内を移動するものであればよく、仮想手に限られない。たとえば、仮想空間2内の敵キャラクタ(仮想オブジェクト)と、武器を使って戦うゲームであれば、武器がユーザの操作する仮想オブジェクトとなる。
どのような仮想オブジェクトの判定領域を特定するかも特に限定されず、仮想空間2中の全ての仮想オブジェクトの判定領域を特定してもよいし、一部の仮想オブジェクトの判定領域を特定してもよい。また、仮想オブジェクトの形状も特に限定されない。なお、仮想空間2に占める体積が大きい仮想オブジェクトは、判定領域を特定するまでもなくユーザが容易に選択できるので、体積が閾値以下の仮想オブジェクト、あるいは厚さが閾値以下の仮想オブジェクトについてのみ判定領域を特定してもよい。
また、仮想オブジェクトとの接触による操作をMR等に適用することによって仮想体験を提供する場合には、操作対象オブジェクトに換えてユーザの実際の頭部以外の身体の一部を物理的・光学的手法等によって検知し、当該身体の一部と仮想オブジェクトの位置関係に基づいて、当該身体の一部と仮想オブジェクトとの接触を判定してもよい。なお、透過型HMDを用いて仮想体験を提供する場合には、ユーザの基準視線は、非透過型HMDと同様に、HMDの動き、または、ユーザの視線を検知することによって特定してもよい。仮想オブジェクトに対する判定領域の設定方法、および設定した判定領域に基づく、ユーザの体の一部と仮想オブジェクトと接触の判定方法等は上記実施形態で説明した方法と同様である。
〔ソフトウェアによる実現例〕
制御回路部200の制御ブロック(検出部210、表示制御部220、仮想空間制御部230、記憶部240、および通信部250)は、集積回路(ICチップ)等に形成された論理回路(ハードウェア)によって実現してもよいし、CPUを用いてソフトウェアによって実現してもよい。
後者の場合、制御ブロックは、各機能を実現するソフトウェアであるプログラムの命令を実行するCPU、前記プログラムおよび各種データがコンピュータ(又はCPU)で読み取り可能に記録されたROMまたは記憶装置(これらを「記録媒体」と称する)、前記プログラムを展開するRAM等を備えている。そして、コンピュータ(又はCPU)が前記プログラムを前記記録媒体から読み取って実行することにより、本発明の目的が達成される。前記記録媒体としては、「一時的でない有形の媒体」、たとえば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路等を用いることができる。また、前記プログラムは、該プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して前記コンピュータに供給されてもよい。なお、本発明は、前記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
〔付記事項〕
本発明の一側面にかかる内容を列記すると以下の通りである。
(項目1)頭部にヘッドマウントディスプレイを装着したユーザに仮想空間を提供する方法であって、前記仮想空間に配置された、第1仮想オブジェクトと第2仮想オブジェクトを少なくとも含む複数の仮想オブジェクトを特定するとともに、前記ユーザの頭部以外の身体の一部の動きに連動して動作する操作対象オブジェクトを前記仮想空間に配置するステップと、前記ユーザの前記仮想空間における基準視線を特定するステップと、前記仮想空間に配置され、前記基準視線に基づいて前記ユーザに視認させる視界領域を設定する仮想カメラを特定するステップと、前記第1仮想オブジェクトと前記操作対象オブジェクトとの接触を判定するための、前記第1仮想オブジェクトに関連付けられる第1領域と、前記第2仮想オブジェクトと前記操作対象オブジェクトとの接触を判定するための、前記第2仮想オブジェクトに関連付けられる第2領域とをそれぞれ設定するステップと、前記第1領域または前記第2領域と前記操作対象オブジェクトとの位置関係に基づいて、前記第1仮想オブジェクトまたは前記第2仮想オブジェクトと前記操作対象オブジェクトとの接触を判定するステップと、を含み、前記第1仮想オブジェクトは、前記仮想カメラから見て前記第2仮想オブジェクトと重畳しかつ前記第2仮想オブジェクトの前面に位置する重畳部分を含み、前記仮想カメラから見て前記重畳部分と重畳する前記第1領域と、前記仮想カメラから見て前記重畳部分と重畳しない前記第2領域とをそれぞれ設定する、方法。第2仮想オブジェクトよりも前面側である、第1仮想オブジェクトにおける重畳部分には、該重畳部分と重畳する第1領域を設定し、第2領域は重畳部分に重畳しないように設定するから、ユーザが、直感的な操作によって、所望の仮想オブジェクトと接触することを可能にすることができる。
(項目2)前記第1領域は、前記ヘッドマウントディスプレイのヨー方向において、前記第1仮想オブジェクトよりも上側に位置する部分を含む、項目1に記載の方法。ユーザは、第1仮想オブジェクトの上側から、前記操作対象オブジェクトを第1仮想オブジェクトに容易に接触させることができる。
(項目3)前記第2領域は、前記ヘッドマウントディスプレイのヨー方向において、前記第2仮想オブジェクトよりも上側に位置する部分を含む、項目1または2に記載の方法。ユーザは、第2仮想オブジェクトの上側から、前記操作対象オブジェクトを第2仮想オブジェクトに容易に接触させることができる。
(項目4)前記第1仮想オブジェクトの外形を規定しかつ前記仮想カメラから見て前記第2仮想オブジェクトに重畳する線分を特定するステップをさらに含み、前記線分に基づいて前記第1領域および第2領域を設定する、項目1または2に記載の方法。前記線分は、第1仮想オブジェクトの外形を規定しかつ仮想カメラから見て第2仮想オブジェクトに重畳する線分であり、仮想カメラから見て、第1仮想オブジェクトと第2仮想オブジェクトの境目となっているから、第1領域および第2領域を適切に設定することができる。
(項目5)複数の異なる前記線分が特定された場合、最も長い前記線分に基づいて前記第1領域および前記第2領域を設定する、項目4に記載の方法。複数の線分に基づいて第1領域および第2領域を設定する場合と比べて、第1領域および第2領域の設定に要する演算量を低く抑えつつ、第1領域および第2領域を概ね適切に設定することができる。
(項目6)前記仮想カメラから見て、前記線分よりも前記第2仮想オブジェクト側には重畳しない前記第1領域と、前記仮想カメラから見て、前記線分よりも前記第1仮想オブジェクト側には重畳しない前記第2領域とを設定する、項目4または5に記載の方法。ユーザは、仮想カメラから見て、前記線分よりも第2仮想オブジェクト側に操作対象オブジェクトを近付けることにより第2仮想オブジェクトに触れることができ、前記線分よりも第1仮想オブジェクト側に操作対象オブジェクトを近付けることにより第1仮想オブジェクトに触れることができる。よって、ユーザは、直感的な操作により、操作対象オブジェクトを所望の仮想オブジェクトに触れさせることができる。
(項目7)前記操作対象オブジェクトは、前記ユーザの一方の手の動きに連動して動作する第1仮想手と、前記ユーザの他方の手の動きに連動して動作する第2仮想手を含み、前記第1仮想手に対する前記ユーザによる第1操作に基づいて、前記第1仮想手に関連付けて前記第1仮想オブジェクトと前記第2仮想オブジェクトとを前記仮想カメラから見て重畳させて配置するステップと、前記第1操作よりも後の、前記第1仮想手に対する前記ユーザによる第2操作に基づいて、前記第1仮想オブジェクトおよび前記第2仮想オブジェクトの少なくとも1つを移動させることによって、前記重畳部分の面積を狭くするステップと、をさらに含み、前記第2操作よりも後の、前記第2仮想手に対する前記ユーザによる第3操作に基づいて、前記第1仮想オブジェクトまたは前記第2仮想オブジェクトと前記第2仮想手との接触を判定する、項目1〜6の何れかに記載の方法。ユーザは、第1仮想手に対する第1操作、第1仮想手に対する第2操作、および第2仮想手に対する第3操作をこの順番に行うことにより、複数の仮想オブジェクトのうち、所望のオブジェクトに第2仮想手で触れることができる。
(項目8)頭部にヘッドマウントディスプレイを装着したユーザに仮想体験を提供する方法であって、第1仮想オブジェクトと第2仮想オブジェクトを少なくとも含む複数の仮想オブジェクトを特定するステップと、前記ユーザの頭部以外の身体の一部の位置を特定するステップと、前記ユーザの基準視線を特定するステップと、前記第1仮想オブジェクトと前記身体の一部との接触を判定するための、前記第1仮想オブジェクトに関連付けられる第1領域と、前記第2仮想オブジェクトと前記身体の一部との接触を判定するための、前記第2仮想オブジェクトに関連付けられる第2領域とをそれぞれ設定するステップと、前記第1領域または前記第2領域と前記身体の一部との位置関係に基づいて、前記第1仮想オブジェクトまたは前記第2仮想オブジェクトと前記身体の一部との接触を判定するステップと、を含み、前記第1仮想オブジェクトは、前記ユーザから見て前記第2仮想オブジェクトと重畳しかつ前記第2仮想オブジェクトの前面に位置する重畳部分を含み、前記ユーザから見て前記重畳部分と重畳する前記第1領域と、前記ユーザから見て前記重畳部分と重畳しない前記第2領域とをそれぞれ設定する、方法。第2仮想オブジェクトよりも前面側である、第1仮想オブジェクトにおける重畳部分には、該重畳部分と重畳する第1領域を設定し、第2領域は重畳部分に重畳しないように設定するから、ユーザが、直感的な操作によって、所望の仮想オブジェクトと接触することを可能にすることができる。
(項目9)項目1〜8のいずれか1つの方法の各ステップを、コンピュータに実行させるプログラム。
(項目10)項目9のプログラムを記録したコンピュータ読み取り可能な記録媒体。