[本発明の実施形態の詳細]
本発明の実施形態に係る仮想空間を提供する方法、および、プログラムの具体例を、以下に図面を参照しつつ説明する。本発明はこれらの例示に限定されるものではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が本発明に含まれることが意図される。以下の説明では、図面の説明において同一の要素には同一の符号を付し、重複する説明を繰り返さない。
(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のロール方向の傾きに一致させる。このような適合処理によって、初期状態の仮想カメラ2のロール方向がコンテンツの初期方向に適合されるので、コンテンツの再生開始後におけるユーザが最初に向く水平方向の向きを、コンテンツの初期方向に一致させることができる。
仮想カメラ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の位置または基準視線5の方向に基づく延在方向に延在する部分を少なくとも含む、操作対象オブジェクトとの接触を判定するための判定領域を設定する。これにより、ユーザは、直感的な操作により、操作対象オブジェクトと、他の仮想オブジェクトとを接触させることができる。前記ゲームは、たとえばカードゲームであってもよい。この場合、前記操作対象オブジェクトは仮想手であってもよく、前記他の仮想オブジェクトはユーザが選択できるカードのオブジェクト(現実のカードを模した外観および形状の仮想オブジェクト)であってもよい。厚さが薄いカードの仮想オブジェクトであっても、前記判定領域を設定することにより、ユーザは、直感的な操作により、仮想手によってカードの仮想オブジェクトに触れることができる。
図10は、仮想空間2におけるゲーム中の処理の流れを示すシーケンス図である。ステップS20において、仮想空間規定部231は、選択画面を構成する各部分画像をコンテンツ格納部242から読み出し、仮想空間データにおいて、仮想空間2の天球を構成する各メッシュの管理データに、前記各部分画像を関連付ける。また、仮想空間規定部231は、選択画面に含まれる各仮想オブジェクトの管理データを、仮想空間データに追加する。仮想オブジェクトの管理データには、仮想オブジェクトの形状、仮想空間2における位置(座標)および傾き(姿勢)を示すデータが含まれている。管理データを仮想空間データに追加する際、各管理データに、対応する仮想オブジェクトが仮想空間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に生成する。具体的には、仮想右
手の形状、仮想空間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で生成した選択画面のうち、視界領域23に投影(重畳)される部分である視界画像26がディスプレイ112に表示される。
ステップS35において、領域特定部233は、選択画面に含まれる各仮想オブジェクトの姿勢を特定する。ステップS35の処理は、ユーザの選択の対象となる仮想オブジェクトのみについて行えばよく、仮想空間2に含まれる全ての仮想オブジェクトについて行う必要はない。ステップS36〜ステップS39の処理も同様である。仮想オブジェクトの姿勢は、その仮想オブジェクトの管理データを参照して特定することができる。
ステップS36において、領域特定部233は、仮想オブジェクトと仮想手との接触を判定する際に使用する判定領域を設定するための基準ベクトルを特定する。基準ベクトルの始点は、判定領域の始点を示しており、ステップS35で特定した姿勢に基づいて決定する。具体的には、領域特定部233は、ステップS35で特定した姿勢に基づいて、仮想オブジェクトにおける視界画像26として表示される領域を特定し、該領域内に基準ベクトルの始点を設定する。たとえば、仮想オブジェクトがカードである場合には、カード表面(仮想カメラ1に向いている面)の中央位置に前記始点を設定してもよい。基準ベクトルの大きさは、判定領域の奥行きを示しており、判定領域を仮想オブジェクトからどの程度まで離れた位置まで延在させるかに応じて決定すればよい。基準ベクトルの方向は、判定領域の延在方向を示している。たとえば、仮想オブジェクトがカードである場合には、カード表面の法線方向を基準ベクトルの方向としてもよい。
ステップS37において、領域特定部233は、前記特定した基準ベクトルを基準として判定領域を設定する。領域特定部233は、基準ベクトルの始点から終点までの区間に、基準ベクトルの方向に延在するように、判定領域設定してもよい。たとえば、仮想オブジェクトを基準ベクトルに沿って、基準ベクトルの始点から終点までに沿って移動させたときに前記仮想オブジェクトが通過する領域を判定領域に設定してもよい。
ステップS38において、領域特定部233は、仮想カメラ1の位置または基準視線5の方向(仮想カメラ1の向き)に基づいて、ステップS36で特定した基準ベクトルを調整する。仮想カメラ1の位置に基づく基準ベクトルの調整については図12に基づいて後述する。基準視線5の方向に基づく基準ベクトルの調整については図13および図14に基づいて後述する。
ステップS39において、領域特定部233は、前記調整した基準ベクトルを基準として判定領域を再度設定し、これにより判定領域が仮想カメラ1の位置または基準視線5の方向に応じた適切な範囲に調整される。詳細は図11に基づいて後述するが、前記調整後の判定領域に基づいて、仮想オブジェクトと仮想手との接触判定が行われる。
なお、仮想カメラ1の位置または基準視線5の方向が変化した場合、ステップS38およびステップS39の処理は再度行われる。つまり、HMDセンサ120から新たに受信した検出値に基づき、前述のステップS28〜ステップS32の処理が行われ、仮想カメラ1の位置および/または基準視線5の方向が変化した場合、変化後の仮想カメラ1の位置および/または基準視線5の方向に基づいてステップS38およびステップS39の処理が行われる。これにより、選択画面の表示中にHMD110を装着したユーザが、現実空間で移動したり、頭を傾けたりした場合にも、仮想手により仮想オブジェクトに容易に触れることができる状態を維持することができる。
(判定領域を設定した後の処理)
領域特定部233が判定領域を設定した後の処理を図11に基づいて説明する。ステップS60において、コントローラセンサ140は、右コントローラ320の位置および傾き、ならびに、左コントローラ330の位置および傾きをそれぞれ検出する。ステップS61において、コントローラセンサ140は、各検出値を制御回路部200に送信する。コントローラ検出部213は、これらの検出値を受信する。
ステップS62において、仮想手制御部232は、受信した各検出値を用いて、ユーザの各仮想手(仮想右手および仮想左手)の仮想空間2における位置および傾きを更新する。具体的には、仮想空間2における仮想右手の位置を、グローバル座標系における右コントローラ320の現在位置に更新する。また、仮想手制御部232は、右コントローラ320の傾きの検出値に基づき、仮想空間2内における仮想右手の傾きを更新する。同様に、仮想手制御部232は、左コントローラ330の各検出値に基づき、仮想空間2における仮想左手の位置および傾きを更新する。ステップS63において、視界画像生成部223は、仮想手の位置および傾きが更新された視界画像26を生成してHMD110に出力する。そして、ステップS64において、HMD110は、受信した視界画像26をディスプレイ112に表示し、これによりユーザが視認する視界画像26が更新される。
ステップS65において、接触判定部234は、仮想手が仮想オブジェクトに接触したか判定する。具体的には、接触判定部234は、図10のステップS39で調整した判定領域と、仮想空間2において仮想手が占める領域とに重畳部分があるか否かを判定する。接触判定部234が、重畳部分がないと判定した場合(ステップS65においてNO)、処理は図示のフローの冒頭に戻る。一方、接触判定部234が、重畳部分があると判定した場合(ステップS65においてYES)、接触判定部234は、コントローラ300が
検出して(ステップS66)、制御回路部200に送信した(ステップS67)、各ボタンの押下状態を示す各検出値に基づき、掴む操作が検出されたか否かを判定する(ステップS68)。どのような操作を掴む操作とするかは特に限定されないが、たとえば仮想手の親指と、人差し指および中指とが接触するまで各指に対応するボタンを押下する操作を掴む操作としてもよい。
接触判定部234は、掴む操作は行われていないと判定した場合(ステップS68においてNO)、処理は図示のフローの冒頭に戻る。一方、掴む操作が行われたと判定した場合(ステップS68においてYES)、接触判定部234は、仮想オブジェクトが掴まれたと判定する(ステップS69)。接触判定部234は、が、仮想オブジェクトが掴まれたと判定した後の処理は、ゲーム内容に応じたものとすればよい。たとえば、接触判定部234は、掴まれた仮想オブジェクトと、掴んだ仮想手とを関連付けて、仮想手が移動したときには仮想オブジェクトも仮想手と連動して移動させてもよい。この関連付けは、たとえば、仮想手によって仮想オブジェクトを掴んでいる状態が解除された(掴んでいる指を伸ばす操作が行われた)ときに解除してもよい。
(仮想カメラ1の位置に基づく基準ベクトルの調整)
図12には、仮想空間2のY軸方向から見た、仮想カメラ1とユーザの選択対象となる仮想オブジェクトOA〜ODと基準位置27を図示している。同図の(a)において、各仮想オブジェクトOA〜ODの表面(仮想カメラ1側を向いている面)の中心付近を始点とする実線の矢印Va〜Vdは、各仮想オブジェクトOA〜ODの基準ベクトルを示している。なお、基準ベクトルVa〜Vdの始点は、仮想オブジェクトOA〜ODの表面であってもよいし、内部であってもよい。
図10のステップS38において、仮想カメラ1の位置に基づいて基準ベクトルを調整する場合、領域特定部233は、仮想空間2における任意の位置(例えば、仮想オブジェクトOA〜ODの近傍)に基準位置27を設定する。基準位置27は、基準視線5の方向の変位量や、仮想カメラ1の位置の変位量に応じた基準視線の方向の変位量を特定するために設定される。図12の例では、X軸方向に一列に並んだ4つの仮想オブジェクトOA〜ODのうち仮想オブジェクトOBとOCの間で、仮想オブジェクトOA〜ODの仮想カメラ1側を向いた面よりも仮想カメラ1寄りの位置に基準位置27を設定している。基準位置27は、仮想オブジェクトOA〜ODの位置に基づいて特定された位置であればよく、仮想オブジェクトOA〜ODの内部領域に設定してもよいし、仮想オブジェクトOA〜ODの外部領域に設定してもよい。
この例のように、複数の仮想オブジェクトに対して1つの基準位置27を設定することにより、複数の仮想オブジェクトの基準ベクトルを一括して調整することができ、演算処理の負荷を低く抑えることができる。なお、演算処理の負荷が大きくなることを許容できるのであれば、各仮想オブジェクトのそれぞれに基準位置27を設定してもよい。
基準位置27を設定した後、領域特定部233は、仮想カメラ1の位置P1から基準位置27に向かう方向Dを特定する。なお、方向Dは、仮想オブジェクトOA〜ODを選択するときのユーザの視線方向と概ね一致する。そして、領域特定部233は、方向Dと平行となり、かつ方向Dと逆向きとなるように基準ベクトルVa〜Vdを調整する。図12の(a)のように、方向DがZ軸と平行であり、かつZ軸の正の方向を向いている場合、領域特定部233は、基準ベクトルVa〜VdをZ軸と平行に、かつZ軸の負の方向を向くように調整する。一方、図12の(b)の例では、仮想カメラ1の位置がP2に移動しており、これにより、方向DがY軸回りにθ回転している。よって、領域特定部233は、基準ベクトルVa〜Vdを回転させて調整する。この調整における回転角度はθ、回転方向はY軸回り反時計方向であり、回転において基準ベクトルVa〜Vdの始点は変化さ
せない。
なお、前述の例では、説明を簡単にするため、方向DのY軸方向成分は考慮せずに基準ベクトルを調整する例を示したが、Y軸方向成分も考慮して基準ベクトルを調整してもよい。この場合、領域特定部233は、Y軸方向において、仮想カメラ1よりも高い位置の仮想オブジェクトの基準ベクトルを仮想カメラ1に向かうように(斜め下方に向くように)調整する。同様に、領域特定部233は、仮想カメラ1よりも低い位置の仮想オブジェクトの基準ベクトルを仮想カメラ1に向かうように(斜め上方に向くように)調整する。判定領域は、基準ベクトルを基準として特定されるから、前記調整により、ユーザは高い位置の仮想オブジェクトと低い位置の仮想オブジェクトのいずれも、仮想オブジェクトに向けて手を伸ばすという直感的な操作で容易に選択できるようになる。
(基準視線5の方向に基づく基準ベクトルの調整)
図13には、図12と同様に、仮想空間2のY軸方向から見た、仮想カメラ1、仮想オブジェクトOA〜OD、および基準ベクトルVa〜Vdを示している。また、仮想カメラ1のロール方向(図3のw軸方向であり、基準視線5の方向でもある)は、wで示している。
図10のステップS38において、基準視線5の方向に基づいて基準ベクトルを調整する場合、領域特定部233は、仮想カメラ1のロール方向wを特定する。そして、領域特定部233は、基準ベクトルVa〜Vdを、前記特定したロール方向wと平行となり、かつロール方向wと逆向きとなるように回転させて調整する。
図13の(a)の例のように、ロール方向wがZ軸と平行であり、かつZ軸の正の方向を向いている場合、基準ベクトルVa〜VdはZ軸と平行であり、かつZ軸の負の方向を向くように調整する。一方、図13の(b)の例では、ロール方向wが図13の(a)の例と比べて、Y軸回り反時計方向に角度θだけ回転している。よって、領域特定部233は、基準ベクトルVa〜Vdをロール方向wと平行かつ逆向きとなるように回転させて調整する。この調整における回転角度はθ、回転方向はY軸回り反時計方向であり、回転において基準ベクトルVa〜Vdの始点は変化させない。
図14の例では、X軸方向から見た、仮想カメラ1、仮想オブジェクトOE、OF、および各仮想オブジェクトOE、OFの基準ベクトルVe、Vfを示している。前述の基準ベクトルVa〜Vdと同様に、基準ベクトルVe、Vfも、ロール方向wと平行かつ逆向きとなるように調整される。
図14の(a)の例では、ロール方向wがZ軸と平行であり、かつZ軸の正の向きであるから、領域特定部233は、Z軸と平行であり、かつZ軸の負の向きとなるように基準ベクトルVe、Vfを調整する。
一方、図14の(b)の例では、ロール方向wが図14の(a)の例と比べて、X軸周り反時計方向に角度θ回転している(仮想カメラ1の仰角がθとなっている)。よって、領域特定部233は、基準ベクトルVe、Vfをロール方向wと平行かつ逆向きとなるように回転させて調整する。この調整における回転角度はθ、回転方向はX軸回り反時計方向であり、回転において基準ベクトルVe、Vfの始点は変化させない。
これにより、仮想カメラ1に対してロール方向wに位置する(仮想カメラ1の正面に位置する)仮想オブジェクトOEの基準ベクトルVeは、仮想オブジェクトOEから仮想カメラ1に向かうベクトルとなる。一方、仮想カメラ1に対してロール方向wからずれた位置にある仮想オブジェクトOFの基準ベクトルVfは、仮想オブジェクトOFから仮想カ
メラ1よりも下方に向かう(仮想カメラ1から遠ざかる向きの)ベクトルとなる。
なお、図14(b)の例とは逆に、XZ平面において、ロール方向wがX軸周り時計方向に回転している場合(仮想カメラ1の正面が水平よりも下方を向いている場合)には、基準ベクトルVeは、仮想カメラ1よりも上方に向かう(仮想カメラ1から遠ざかる向きの)ベクトルとなる。一方、基準ベクトルVfは、仮想カメラ1に向かうベクトルとなる。
以上のように、領域特定部233は、仮想カメラ1の正面方向、すなわちHMD110を装着したユーザの頭部の正面方向に位置する仮想オブジェクトには、その仮想オブジェクトから仮想カメラ1に向けて判定領域を設定する。よって、ユーザは、仮想オブジェクトに向けて真っ直ぐ手を伸ばすという直感的な操作で、その仮想オブジェクトに触れることができる。一方、前記方向から外れている仮想オブジェクトの判定領域は、仮想カメラ1から遠ざかる向きに判定領域が設定されるから、ユーザは、このような仮想オブジェクトには触れにくくなる。よって、ユーザの触れたい仮想オブジェクトに触れやすくすることができると共に、ユーザが触れる意図のない仮想オブジェクトには触れにくくすることができる。
(判定領域の設定例)
図15には、カード型の仮想オブジェクトOG〜OJのそれぞれに判定領域JG〜JJを設定した例を示している。同図の(a)と(b)は、設定されている判定領域JG〜JJは同じであり、視点を変えて図示したものである。同図の(b)に示すように、仮想オブジェクトOG〜OJは、曲線上に配置されている。より詳細には、仮想オブジェクトOG〜OJは、仮想カメラ1を中心とした円弧あるいは球面上にその重心位置が並ぶように、かつ各仮想オブジェクトOG〜OJの正面が仮想カメラ1を向くように配置されている。このような配置とすることにより、ユーザは各仮想オブジェクトOG〜OJに表示された情報を読み取りやすく、また各仮想オブジェクトOG〜OJを仮想手で選択する操作を行いやすい。仮想オブジェクトOG〜OJのうち、仮想オブジェクトOIについては、外縁に枠線FRが付されている。枠線FRは、たとえば仮想手が判定領域JIに入ったときや、判定領域JIに入った仮想手により仮想オブジェクトOIを掴む操作が行われたときに表示させてもよい。仮想オブジェクトOG、OH、OJについても同様である。
判定領域JG〜JJは、基準視線5の方向に基づいた調整(図13および図14参照)後の基準ベクトルを基準として特定された領域である。なお、判定領域やその外縁は、画像として表示する必要はないが、本例では説明のため、判定領域JG〜JJの外枠を図示している。また、同図では視界領域23を破線で示している。
判定領域JG〜JJは、いずれも六面体状の領域であり、仮想オブジェクトOG〜OJから仮想カメラ1に向かって延在している。領域特定部233は、仮想カメラ1のロール方向wと平行かつ逆向きとなるように仮想オブジェクトOGの基準ベクトルを調整する。次に、該調整後の基準ベクトルに沿って、仮想オブジェクトOGの仮想カメラ1に向いた面を、調整後の基準ベクトルの終点まで平行移動させて、判定領域JGを規定する6面のうち、最も仮想カメラ1寄りの面を特定する。そして、前記特定した面と仮想オブジェクトOGの仮想カメラ1に向いた面とを対向する2面とした六面体の領域を判定領域JGと特定する。仮想オブジェクトOH〜OJについても同様にして判定領域JH〜JJを特定することができる。
仮想カメラ1のロール方向wは、HMD110のロール方向、すなわちHMD110を装着しているユーザの顔の正面方向と等しい。よって、図示の例では、ユーザは、自身の正面に表示されている仮想オブジェクトOG〜OJのうち所望の仮想オブジェクトに向け
て、右コントローラ320または左コントローラ330を持った手を真直ぐに伸ばせば、その仮想オブジェクトに仮想手で触れる(正確には接触判定部234に仮想手と仮想オブジェクトが接触したと判定させる)ことができる。
なお、図示の例では、判定領域JG、JJの一部は、視界領域23外に出ているが、視界領域23の内部のみを対象として判定領域を設定してもよい。また、判定領域は視界領域23の内外を考慮せずに特定し、接触判定(図11のステップS65)の際に、視界領域23外の部分については接触したと判定しないようにしてもよい。これにより、ユーザの視界に入っていない位置で仮想オブジェクトへの接触があったと判定されることを防ぐことができる。ただし、これらの例では、視界領域23をモニタリングする等の処理が必要になり、処理負荷が大きくなるので、処理負荷を低く抑えるという観点からは、視界領域23を考慮せずに判定領域の特定および接触判定を行うことが好ましい。
図16の(a)には、仮想カメラ1のロール方向がXZ平面に対してX軸周り半時計方向に回転している場合、すなわち仮想カメラ1が仮想空間2中において斜め上方に向いている場合の判定領域JH〜JJの例を示している。この場合、図14の(b)に示したように、仮想オブジェクトOG〜OJの基準ベクトルをX軸周り時計方向に回転させて調整する。これにより、調整後の基準ベクトルを基準として特定される判定領域JH〜JJは、図16の(a)に示すように、斜め下方に向けて延在する領域となる。
図16の(b)には、仮想カメラ1のロール方向がXZ平面に対してX軸周り時計方向に回転している場合、すなわち仮想カメラ1が仮想空間2中において斜め下方に向いている場合の判定領域JH〜JJの例を示している。この場合、仮想オブジェクトOG〜OJの基準ベクトルをX軸周り反時計方向に回転させて調整するから、調整後の基準ベクトルを基準として特定される判定領域JH〜JJは、図16の(b)に示すように、斜め上方に向けて延在する領域となる。
〔変形例〕
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能である。異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態も、本発明の技術的範囲に含まれる。各実施形態にそれぞれ開示された技術的手段を組み合わせることによって、新しい技術的特徴を形成することもできる。
判定領域の形状および範囲は、ユーザが所望の仮想オブジェクトに容易に触れることができるようなものとすればよく、前述した各例に限定されない。たとえば、判定領域は、仮想オブジェクトの内部領域の全部または一部を含む領域としてもよい。また、前述の各例では、判定領域の全体の延在方向を調整している。しかし、判定領域の一部(例えばカードである仮想オブジェクトの上方に延在する領域)は調整の対象外とし、他の一部(例えばカードである仮想オブジェクトの正面から延在する領域)のみ延在方向を調整してもよい。
ユーザが操作する仮想オブジェクトは、ユーザの頭部以外の身体の一部の動きに連動して仮想空間2内を移動するものであればよく、仮想手に限られない。たとえば、仮想空間2内の敵キャラクタ(仮想オブジェクト)と、武器を使って戦うゲームであれば、武器がユーザの操作する仮想オブジェクトとなる。
どのような仮想オブジェクトの判定領域を設定するかも特に限定されず、仮想空間2中の全ての仮想オブジェクトの判定領域を設定してもよいし、一部の仮想オブジェクトの判定領域を設定してもよい。また、仮想オブジェクトの形状も特に限定されない。なお、仮想空間2に占める体積が大きい仮想オブジェクトは、判定領域を設定するまでもなくユー
ザが容易に選択できるので、体積が閾値以下の仮想オブジェクト、あるいは厚さが閾値以下の仮想オブジェクトについてのみ判定領域を設定してもよい。
また、仮想オブジェクトとの接触による操作をMR等に適用することによって仮想体験を提供する場合には、操作対象オブジェクトに換えてユーザの実際の頭部以外の身体の一部を物理的・光学的手法等によって検知し、当該身体の一部と仮想オブジェクトの位置関係に基づいて、当該身体の一部と仮想オブジェクトとの接触を判定してもよい。なお、透過型HMDを用いて仮想体験を提供する場合には、ユーザの基準視線は、非透過型HMDと同様に、HMDの動き、または、ユーザの視線を検知することによって特定してもよい。特定した基準視線に基づく判定領域の設定方法は上記実施形態で説明した通りである。
〔ソフトウェアによる実現例〕
制御回路部200の制御ブロック(検出部210、表示制御部220、仮想空間制御部230、記憶部240、および通信部250)は、集積回路(ICチップ)等に形成された論理回路(ハードウェア)によって実現してもよいし、CPUを用いてソフトウェアによって実現してもよい。
後者の場合、制御ブロックは、各機能を実現するソフトウェアであるプログラムの命令を実行するCPU、前記プログラムおよび各種データがコンピュータ(又はCPU)で読み取り可能に記録されたROMまたは記憶装置(これらを「記録媒体」と称する)、前記プログラムを展開するRAM等を備えている。そして、コンピュータ(又はCPU)が前記プログラムを前記記録媒体から読み取って実行することにより、本発明の目的が達成される。前記記録媒体としては、「一時的でない有形の媒体」、たとえば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路等を用いることができる。また、前記プログラムは、該プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して前記コンピュータに供給されてもよい。なお、本発明は、前記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
〔付記事項〕
本発明の一側面にかかる内容を列記すると以下の通りである。
(項目1)頭部にヘッドマウントディスプレイを装着したユーザに仮想空間を提供する方法であって、前記仮想空間に配置された複数の仮想オブジェクトを特定するとともに、前記ユーザの頭部以外の身体の一部の動きに連動して動作する操作対象オブジェクトを前記仮想空間に配置するステップと、前記ユーザの前記仮想空間における基準視線を特定するステップと、前記仮想空間に配置され、前記基準視線に基づいて前記ユーザに視認させる視界領域を規定する仮想カメラを特定するステップと、前記複数の仮想オブジェクトのうち少なくとも一つに、前記仮想空間における前記仮想カメラの位置または前記基準視線の方向に基づく延在方向に延在する部分を少なくとも含む、前記操作対象オブジェクトとの接触を判定するための領域を設定するステップと、前記領域と前記操作対象オブジェクトとの位置関係に基づいて、前記領域が設定される前記仮想オブジェクトと前記操作対象オブジェクトとの接触を判定するステップと、を含む方法。仮想カメラの位置または基準視線の方向に基づく延在方向に延在する部分を少なくとも含む領域を設定し、該領域と操作対象オブジェクトとの位置関係に基づいて接触を判定するので、ユーザが、直感的な操作によって、所望の仮想オブジェクトと接触することが可能になる。
(項目2)前記部分は、前記領域が設定される前記仮想オブジェクトから、前記基準視線の方向とは逆向きの前記延在方向に延在する、項目1に記載の方法。仮想カメラに対して基準視線の方向に位置する仮想オブジェクト(ユーザが注意を向けた仮想オブジェクト
)を選択し易くし、仮想カメラに対して基準視線の方向から外れた位置の仮想オブジェクト(ユーザの注意が向いていない仮想オブジェクト)を選択し難くすることができる。
(項目3)前記延在方向を規定する基準ベクトルを特定するステップをさらに含み、前記設定するステップにおいて、前記仮想カメラの位置または前記基準視線の方向に基づいて前記基準ベクトルを回転させ、回転後の基準ベクトルを基準として前記領域を設定する、項目1または2に記載の方法。基準ベクトルを用いた演算によって、仮想空間においてユーザが、操作対象オブジェクトを直感的に操作して、所望の仮想オブジェクトに接触させることを可能にすることができる。
(項目4)前記設定するステップにおいて、前記基準視線の方向と平行かつ逆向きとなるように前記基準ベクトルを回転させる、項目3に記載の方法。基準ベクトルを用いた演算によって、仮想カメラに対して基準視線の方向に位置する仮想オブジェクトを選択し易くし、仮想カメラに対して基準視線の方向から外れた位置の仮想オブジェクトを選択し難くすることができる。
(項目5)前記設定するステップにおいて、前記仮想カメラの位置から、前記領域が設定される前記仮想オブジェクトの位置、または該仮想オブジェクトの位置に基づいて特定した位置に向かう方向と平行かつ逆向きとなるように前記基準ベクトルを回転させる、項目3に記載の方法。ユーザが、仮想オブジェクトとの距離感を把握することができずに、仮想オブジェクトの手前側(仮想オブジェクトよりも仮想カメラ側)に操作対象オブジェクトを移動させた場合であっても、仮想オブジェクトに触れようとしたユーザの意図を汲んで、操作対象オブジェクトと仮想オブジェクトとが接触したと判定することができる。
(項目6)前記仮想カメラの位置または前記基準視線の方向が変化した場合に、変化後の前記仮想カメラの位置または変化後の前記基準視線の方向に基づく前記延在方向に、前記部分を延在させるステップをさらに含む、項目1〜5のいずれか1つの方法。仮想カメラの位置または基準視線の方向が変化した場合にも、ユーザが、直感的な操作によって、所望の仮想オブジェクトと接触することが可能な状態を維持することができる。
(項目7)頭部にヘッドマウントディスプレイを装着したユーザに仮想体験を提供する方法であって、複数の仮想オブジェクトを特定するステップと、前記ユーザの頭部以外の身体の一部の位置を特定するステップと、前記ユーザの基準視線を特定するステップと、複数の前記仮想オブジェクトのうち少なくとも一つに、前記基準視線の方向に基づく延在方向に延在する部分を少なくとも含む領域を設定するステップと、前記領域と前記身体の一部の位置との位置関係に基づいて、前記領域が設定される前記仮想オブジェクトと前記身体の一部との接触を判定するステップと、を含む方法。基準視線の方向に基づく延在方向に延在する部分を少なくとも含む領域を設定し、該領域とユーザの身体の一部の位置との位置関係に基づいて接触を判定するので、ユーザは、所望の仮想オブジェクトに直感的に接触することが可能になる。
(項目8)前記部分は、前記領域が設定される前記仮想オブジェクトから、前記基準視線の方向とは逆向きの前記延在方向に延在する、項目7に記載の方法。基準視線の方向に位置する仮想オブジェクト(ユーザが注意を向けた仮想オブジェクト)を選択し易くし、基準視線の方向から外れた位置の仮想オブジェクト(ユーザの注意が向いていない仮想オブジェクト)を選択し難くすることができる。
(項目9)前記延在方向を規定する基準ベクトルを特定するステップをさらに含み、前記設定するステップにおいて、前記基準視線の方向に基づいて前記基準ベクトルを回転させ、回転後の基準ベクトルを基準として前記領域を設定する、項目7または8に記載の方
法。基準ベクトルを用いた演算によって、ユーザが所望の仮想オブジェクトに直感的に接触することを可能にすることができる。
(項目10)前記設定するステップにおいて、前記基準視線の方向と平行かつ逆向きとなるように前記基準ベクトルを回転させる、項目9に記載の方法。基準ベクトルを用いた演算によって、基準視線の方向に位置する仮想オブジェクトを選択し易くし、基準視線の方向から外れた位置の仮想オブジェクトを選択し難くすることができる。
(項目11)前記基準視線の方向が変化した場合に、変化後の前記基準視線の方向に基づく前記延在方向に、前記部分を延在させるステップをさらに含む、項目7〜10のいずれか1項に記載の仮想体験を提供する方法。基準視線の方向が変化した場合にも、ユーザが、所望の仮想オブジェクトに接触することが可能な状態を維持することができる。
(項目12)項目1〜11のいずれか1つの方法の各ステップを、コンピュータに実行させるプログラム。
(項目13)項目12のプログラムを記録したコンピュータ読み取り可能な記録媒体。