【文献】
鈴川絢子,VR運転体験!トレインマイスターをやってきた - YouTube,2016年 5月18日,動画,URL,https://www.youtube.com/watch?v=dn6-gG7qn90
【文献】
ふじのっち,メタルギア ソリッド 4 ガンズ・オブ・ザ・パトリオット METAL GEAR SOLID 4,週刊ファミ通,株式会社エンターブレイン,2008年 6月27日,第23巻 第26号,p.100
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0010】
[本発明の実施形態の詳細]
本発明の実施形態に係る仮想空間を提供する方法、および、プログラムの具体例を、以下に図面を参照しつつ説明する。本発明はこれらの例示に限定されるものではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が本発明に含まれることが意図される。以下の説明では、図面の説明において同一の要素には同一の符号を付し、重複する説明を繰り返さない。
【0011】
(HMDシステム100の構成)
図1は、HMDシステム100の構成を示す図である。この図に示すように、HMDシステム100は、HMD(ヘッドマウントディスプレイ)110、HMDセンサ120、コントローラセンサ140、制御回路部200、およびコントローラ300を備えている。
【0012】
HMD110は、ユーザの頭部に装着される。HMD110は、非透過型の表示装置であるディスプレイ112、センサ114、および注視センサ130を備えている。HMD110は、右目用画像および左目用画像をディスプレイ112にそれぞれ表示することにより、ユーザの両目の視差に基づきユーザに立体的に視認される3次元画像を、ユーザに視認させる。これにより仮想空間をユーザに提供する。ディスプレイ112がユーザの眼前に配置されているので、ユーザは、ディスプレイ112に表示される画像を通じて仮想空間に没入できる。これにより、ユーザは仮想現実(Virtual Reality:VR)を体験することができる。仮想空間は、背景、ならびにユーザが操作可能な各種のオブジェクトおよびメニュー画像等を含み得る。
【0013】
ディスプレイ112は、右目用画像を表示する右目用サブディスプレイと、左目用画像を表示する左目用サブディスプレイとを含んでもよい。または、ディスプレイ112は、右目用画像および左目用画像を共通の画面に表示する1つの表示装置であってもよい。このような表示装置として、例えば、表示画像が一方の目にしか認識できないようにするシャッターを高速に切り替えることにより、右目用画像および左目用画像を独立して交互に表示する表示装置が挙げられる。
【0014】
また、本実施形態において、HMD110には、透過型ディスプレイが適用されてもよい。つまり、HMD110は、透過型HMDであってもよい。この場合、3次元画像を透過型ディスプレイに表示することによって、後述する仮想オブジェクトを現実空間に仮想的に配置することができる。これにより、ユーザは現実空間に仮想オブジェクトが配置された複合現実(Mixes Reality:MR)を体験することができる。本実施形態において、仮想現実や複合現実といった、ユーザが仮想オブジェクトと相互作用できる体験を仮想体験と称することがある。以下では、仮想現実を提供するための方法を一例として詳説する。
【0015】
(制御回路部200のハード構成)
図2は、制御回路部200のハード構成を示す図である。制御回路部200は、HMD110に仮想空間を提供させるためのコンピュータである。
図2に示すように、制御回路部200は、プロセッサ、メモリ、ストレージ、入出力インターフェース、および通信インターフェースを備えている。これらは、データ伝送路としてのバスを通じて、制御回路部200内において互いに接続されている。
【0016】
プロセッサは、CPU(Central Processing Unit)、MPU(Micro-processing unit)、またはGPU(Graphics Processing Unit)等を含んで構成され、制御回路部200およびHMDシステム100全体の動作を制御する。
【0017】
メモリは、主記憶として機能する。メモリには、プロセッサによって処理されるプログラムおよび制御用データ(演算パラメータなど)が記憶される。メモリは、ROM(Read Only Memory)またはRAM(Random Access Memory)等を含んで構成され得る。
【0018】
ストレージは、補助記憶として機能する。ストレージには、HMDシステム100全体の動作を制御するためのプログラム、各種のシミュレーションプログラム、ユーザ認証プログラム、および、仮想空間を規定するための各種のデータ(画像およびオブジェクト等)が格納されている。さらには、各種のデータを管理するためのテーブルを含むデータベースがストレージに構築されていてもよい。ストレージは、フラッシュメモリまたはHDD(Hard Disc Drive)等を含んで構成され得る。
【0019】
入出力インターフェースは、USB(Universal Serial Bus)端子、DVI(Digital Visual Interface)端子、HDMI(登録商標)(High-Definition Multimedia Interface)端子等の各種の有線接続端子、および、無線接続のための各種の処理回路を含んで構成されている。入出力インターフェースは、HMD110と、HMDセンサ120およびコントローラセンサ140を含む各種のセンサと、コントローラ300とを互いに接続する。
【0020】
通信インターフェースは、ネットワークNWを介して外部装置と通信するための各種の有線接続端子、および、無線接続のための各種の処理回路を含んで構成される。通信インターフェースは、LAN(Local Area Network)またはインターネットを介して通信するための各種の通信規格およびプロトコルに適合するように、構成されている。
【0021】
制御回路部200は、ストレージに格納された所定のアプリケーションプログラムをメモリにロードして実行することによって、ユーザに仮想空間を提供する。プログラムの実行時に、メモリおよびストレージには、仮想空間内に配置される各種のオブジェクトを操作したり、各種のメニュー画像等を表示および制御したりするための各種のプログラムが格納される。
【0022】
制御回路部200は、HMD110に搭載されていてもよいし、されていなくてもよい。すなわち制御回路部200は、HMD110から独立した別のハードウェア(例えば、パーソナルコンピュータ、またはネットワークを通じてHMD110と通信可能なサーバ装置)であってもよい。制御回路部200は、複数のハードウェアの協働によって1または複数の機能が実装される形態の装置であってもよい。または、制御回路部200が有する全機能のうち一部の機能のみがHMD110に実装され、残りの機能が別のハードウェアに実装されていてもよい。
【0023】
HMDシステム100を構成するHMD110等の各要素には、予め、グローバル座標系(基準座標系、xyz座標系)が設定されている。このグローバル座標系は、現実空間における、鉛直方向、鉛直方向と直交する横方向、ならびに、鉛直方向および横方向の双方と直交する前後方向にそれぞれ平行な、3つの基準方向(軸)を有する。本実施形態では、グローバル座標系は視点座標系の一種であるため、グローバル座標系における横方向、鉛直方向(上下方向)、および前後方向を、それぞれx軸、y軸、z軸とする。具体的には、グローバル座標系のx軸は現実空間の横方向に平行であり、y軸は現実空間の鉛直方向に平行であり、z軸は現実空間の前後方向に平行である。
【0024】
HMDセンサ120は、HMD110の動きを検出するためのポジション・トラッキング機能を有する。HMDセンサ120は、この機能によって、現実空間内におけるHMD110の位置および傾きを検出する。この検出を実現するために、HMD110は、図示しない複数の光源を備えている。各光源は、例えば赤外線を発するLEDである。HMDセンサ120は、例えば赤外線センサを含んで構成される。HMDセンサ120は、HMD110の光源から照射された赤外線を、赤外線センサによって検出することによって、HMD110の検出点を検出する。さらに、HMD110の検出点の検出値に基づき、ユーザの動きに応じたHMD110の現実空間内における位置および傾きを検出する。HMDセンサ120は、検出値の経時的変化に基づき、HMD110の位置および傾きの時間変化を決定することができる。
【0025】
HMDセンサ120は、光学カメラを含んで構成されてもよい。この場合、HMDセンサ120は、光学カメラによって得られたHMD110の画像情報に基づき、HMD110の位置および傾きを検出する。
【0026】
HMDセンサ120の代わりに、HMD110が、センサ114を用いて自身の位置および傾きを検出してもよい。この場合、センサ114は、例えば角速度センサ、地磁気センサ、加速度センサ、またはジャイロセンサであればよい。HMD110は、これらのうち少なくとも1つを用いる。センサ114が角速度センサである場合、センサ114は、HMD110の動きに応じて、HMD110の現実空間における3軸回りの角速度を経時的に検出する。HMD110は、角速度の検出値に基づき、HMD110の3軸回りの角度の時間的変化を決定し、さらに、角度の時間的変化に基づきHMD110の傾きを検出することができる。
【0027】
HMD110がセンサ114による検出値に基づきHMD110の位置および傾きを自ら検出する場合、HMDシステム100にHMDセンサ120は不要である。逆に、HMD110から離れた位置に配置されるHMDセンサ120がHMD110の位置および傾きを検出する場合、HMD110にセンサ114は不要である。
【0028】
上述したように、グローバル座標系は現実空間の座標系と平行である。そのため、HMDセンサ120によって検出されたHMD110の各傾きは、グローバル座標系におけるHMD110の3軸周りの各傾きに相当する。HMDセンサ120は、グローバル座標系におけるHMDセンサ120の傾きの検出値に基づき、uvw視野座標系をHMD110に設定する。HMD110に設定されるuvw視野座標系は、HMD110を装着したユーザが物体を見る際の視点座標系に対応する。
【0029】
(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軸)として設定する。
【0030】
図3に示すように、HMDセンサ120は、HMD110を装着したユーザが直立しかつ正面を視認している場合、グローバル座標系に平行なuvw視野座標系をHMD110に設定する。この場合、グローバル座標系の横方向(x軸)、鉛直方向(y軸)、および前後方向(z軸)が、そのまま、HMD110におけるuvw視野座標系のピッチ方向(u軸)、ヨー方向(v軸)、およびロール方向(w軸)に一致する。
【0031】
HMDセンサ120は、HMD110にuvw視野座標系を設定した後、HMD110の動きに応じて、現在設定中のuvw視野座標系におけるHMD110の傾き(傾きの変化量)を検出することができる。この場合、HMDセンサ120は、HMD110の傾きとして、現在設定中のuvw視野座標系におけるHMD110のピッチ角(θu)、ヨー角(θv)、およびロール角(θw)をそれぞれ検出する。ピッチ角(θu)は、uvw視野座標系におけるピッチ方向周りのHMD110の傾き角度である。ヨー角(θv)は、uvw視野座標系におけるヨー方向周りのHMD110の傾き角度である。ロール角(θw)は、uvw視野座標系におけるロール方向周りのHMD110の傾き角度である。
【0032】
HMDセンサ120は、HMD110の傾きの検出値に基づき、動いた後のHMD110におけるuvw視野座標系を、新たにHMD110に設定する。HMD110と、HMD110のuvw視野座標系との関係は、HMD110の位置および傾きによらず常に一定である。HMD110の位置および傾きが変わると、それの変化に連動して、グローバル座標系におけるHMD110のuvw視野座標系の位置および傾きが同様に変化する。
【0033】
HMDセンサ120は、赤外線センサによって取得される赤外線の光強度および複数の検出点間の相対位置関係(検出点間の距離等)に基づき、HMD110の現実空間内における位置を、HMDセンサ120に対する相対位置として特定してもよい。また、特定した相対位置に基づき、現実空間内(グローバル座標系)におけるHMD110のuvw視野座標系の原点を決定してもよい。また、HMDセンサ120は、複数の検出点間の相対位置関係に基づきHMD110の現実空間内における傾きを検出し、さらに、その検出値に基づき現実空間内(グローバル座標系)におけるHMD110のuvw視野座標系の向きを決定してもよい。
【0034】
(仮想空間2の概要)
図4は、ユーザに提供される仮想空間2の概要を説明する図である。この図に示すように、仮想空間2は、中心21の360°方向全体を覆う全天球状の構造を有する。
図4には、仮想空間2の全体のうち上半分の天球のみを例示する。仮想空間2には、略正方形または略長方形の複数のメッシュが関連付けられている。仮想空間2における各メッシュの位置は、仮想空間2に規定される空間座標系(XYZ座標系)における座標として、予め規定されている。制御回路部200は、仮想空間2に展開可能なコンテンツ(静止画、動画等)を構成する各部分画像を、仮想空間2における対応する各メッシュに対応付けることによって、ユーザによって視認可能な仮想空間画像22が展開される仮想空間2をユーザに提供する。
【0035】
仮想空間2には、中心21を原点とするXYZ空間座標系が規定されている。XYZ座標系は、例えばグローバル座標系に平行である。XYZ座標系は視点座標系の一種であるため、XYZ座標系における横方向、鉛直方向(上下方向)、および前後方向を、それぞれX軸、Y軸、Z軸とする。すなわち、XYZ座標系のX軸(横方向)がグローバル座標系のx軸と平行であり、XYZ座標系のY軸(上下方向)がグローバル座標系のy軸と平行であり、XYZ座標系のZ軸(前後方向)がグローバル座標系のz軸と平行である。
【0036】
HMD110の起動時(初期状態)において、仮想空間2の中心21に仮想カメラ1が配置されている。仮想カメラ1は、現実空間内におけるHMD110の動きに連動して、仮想空間2内において同様に動く。これにより、現実空間内におけるHMD110の位置および向きの変化が、仮想空間2内において同様に再現される。
【0037】
仮想カメラ1には、HMD110と同様にuvw視野座標系が規定される。仮想空間2内における仮想カメラ1のuvw視野座標系は、現実空間(グローバル座標系)内におけるHMD110のuvw視野座標系に変動するように規定されている。したがって、HMD110の傾きが変化すると、それに連動して仮想カメラ1の傾きも変化する。仮想カメラ1は、HMD110を装着したユーザの現実空間における移動に連動して、仮想空間2において移動することもできる。
【0038】
仮想空間2における仮想カメラ1の位置および傾きに応じて、仮想空間2における仮想カメラ1の向きが決まる。これにより、仮想空間2に展開される仮想空間画像22をユーザが視認する際の基準となる視線(基準視線5)が決まる。制御回路部200は、基準視線5に基づき、仮想空間2における視界領域23を決定する。視界領域23は、仮想空間2のうち、HMD110を装着したユーザの視界に対応する領域である。
【0039】
図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として設定する。
【0040】
HMDシステム100は、仮想空間画像22のうち視界領域23に重畳する部分である視界画像26をHMD110のディスプレイ112に表示させることによって、ユーザに仮想空間2を提供する。ユーザがHMD110を動かせば、それに連動して仮想カメラ1も動き、その結果、仮想空間2における視界領域23の位置が変化する。これによりディスプレイ112に表示される視界画像26が、仮想空間画像22のうち、仮想空間2においてユーザが向いた箇所(=視界領域23)に重畳する画像に更新される。したがってユーザは、仮想空間2における所望の箇所を視認することができる。
【0041】
ユーザは、HMD110を装着している間、現実世界を目にすることなく、仮想空間2に展開される仮想空間画像22のみを視認する。そのためHMDシステム100は、仮想空間2への高い没入感をユーザに与えることができる。
【0042】
制御回路部200は、HMD110を装着したユーザの現実空間における移動に連動して、仮想カメラ1を仮想空間2内において移動させてもよい。この場合、制御回路部200は、仮想カメラ1の仮想空間2内における位置および向きに基づき、仮想空間2のうちHMD110のディスプレイ112に投影されることによってユーザが視認する視界領域23を特定する。
【0043】
仮想カメラ1は、右眼用画像を提供する右眼用仮想カメラと、左眼用画像を提供する左眼用仮想カメラとを含むことが好ましい。さらに、2つの仮想カメラには、ユーザが3次元の仮想空間2を認識できるように適切な視差が設定されていることが好ましい。本実施形態では、このような2つの仮想カメラのロール方向が合成されることによって生成されるロール方向(w)がHMD110のロール方向(w)に適合されるような仮想カメラ1のみを、代表して図示および説明するものとする。
【0044】
(視線方向の検出)
注視センサ130は、ユーザの右目および左目の視線が向けられる方向(視線方向)を検出するアイトラッキング機能を有する。注視センサ130として、アイトラッキング機能を有する公知のセンサを採用することができる。注視センサ130は、右目用センサおよび左目用センサを備えていることが好ましい。注視センサ130は、例えば、ユーザの右目および左目に赤外光を照射すると共に、照射光に対する角膜および虹彩からの反射光を受光することによって、各眼球の回転角を検出するセンサでもよい。注視センサ130は、検出した各回転角に基づき、ユーザの視線方向を検知することができる。
【0045】
注視センサ130によって検出されるユーザの視線方向は、ユーザが物体を視認する際の視点座標系における方向である。上述したように、HMD110のuvw視野座標系は、ユーザがディスプレイ112を視認する際の視点座標系に等しい。また、仮想カメラ1のuvw視野座標系は、HMD110のuvw視野座標系に連動している。したがってHMDシステム100では、注視センサ130によって検出されたユーザの視線方向を、仮想カメラ1のuvw視野座標系におけるユーザの視線方向と見なすことができる。
【0046】
図6は、ユーザの視線方向を決定する方法を例示する図である。この図に示すように、注視センサ130は、ユーザUの右目および左目の視線を検出する。ユーザUが近くを見ている場合、注視センサ130は、ユーザUの視線R1およびL1を検出する。ユーザが遠くを見ている場合、注視センサ130は、ユーザの視線R1およびL1よりも、HMD110のロール方向(w)とのなす角が小さい視線R2およびL2を特定する。注視センサ130は、検出値を制御回路部200に送信する。
【0047】
制御回路部200は、視線の検出値として視線R1およびL1を受信した場合、両者の交点である注視点N1を特定する。一方、視線R2およびL2を受信した場合も、両者の交点である注視点N1(不図示)を特定する。制御回路部200は、特定した注視点N1に基づき、ユーザUの視線方向N0を検出する。制御回路部200は、例えば、ユーザUの右目Rと左目Lとを結ぶ直線の中点と、注視点N1とを通る直線の伸びる方向を、視線方向N0として検出する。視線方向N0は、ユーザUが両目により実際に視線を向けている方向である。視線方向N0はまた、視界領域23に対してユーザUが実際に視線を向けている方向でもある。
【0048】
HMDシステム100は、HMDシステム100を構成するいずれかの要素に、マイクおよびスピーカを備えていてもよい。これにより、ユーザは仮想空間2内に対して、音声による指示を与えることができる。また、仮想空間内の仮想テレビにテレビ番組の放送を受信するために、HMDシステム100はいずれかの要素にテレビジョン受像機を含んでいてもよい。また、ユーザが取得した電子メール等を表示させるための、通信機能等を含んでいてもよい。
【0049】
(コントローラ300)
図7は、コントローラ300の構成を表す図である。コントローラ300は、ユーザの身体の一部の動きを検知することにより、仮想オブジェクトの動きを制御するために用いる装置の一例である。
図1に示すように、コントローラ300は、ユーザが右手に持って使用する右コントローラ320と、ユーザが左手に持って使用する左コントローラ330とからなる。右コントローラ320および左コントローラ330は、それぞれ別体の装置として構成される。ユーザは、右コントローラ320を持った右手と、左コントローラ330を持った左手とを、動かすことにより、ユーザの手の動きに連動する仮想オブジェクト(以下、状況に応じて仮想手、仮想右手、仮想左手、などと称することがある。)を自由に動かすことができる。なお、ユーザの頭部以外である身体の一部の動きを検知するための方法は、当該身体の一部に装着されるセンサを含むコントローラを用いる例に限られず、画像認識、その他任意の物理的、光学的な手法等を適用できる。例えば、外部カメラを用いてユーザの身体の一部の初期位置を特定し、継続的にユーザの身体の一部の位置を特定することにより、ユーザの頭部以外である身体の一部の動きを検知できる。以下の説明においては、コントローラ300を用いたユーザの頭部以外である身体の一部の動きの検知について詳述する。
【0050】
図1に示すように、右コントローラ320および左コントローラ330は、それぞれ、操作ボタン302、赤外線LED(Light Emitting Diode)304、センサ306、およびトランシーバ308を備えている。右コントローラ320および左コントローラ330は、赤外線LED304およびセンサ306のうちいずれか一方のみを備えていてもよい。以下の説明において、右コントローラ320および左コントローラ330は共通の構成を有するため、右コントローラ320の構成のみを説明する。
【0051】
コントローラセンサ140は、右コントローラ320の動きを検出するためのポジション・トラッキング機能を有する。コントローラセンサ140は、現実空間内における右コントローラ320の位置および傾きを検出する。コントローラセンサ140は、右コントローラ320の赤外線LED304から発せられた赤外光を、それぞれ検出する。コントローラセンサ140は、赤外波長領域において画像を撮像する赤外カメラを備えており、この赤外カメラによって撮像した画像のデータに基づき、右コントローラ320の位置および傾きを検出する。
【0052】
コントローラセンサ140の代わりに、右コントローラ320が、センサ306を用いて自身の位置および傾きを検出してもよい。この場合、右コントローラ320の三軸角速度センサ(センサ306)が、右コントローラ320の3つの直交する各軸回りの回転を検出する。右コントローラ320は、各検出値に基づき、右コントローラ320がどちらの方向にどれだけ回転したかを検出し、逐次検出した回転方向と回転量とを累積することによって、右コントローラ320の傾きを算出する。右コントローラ320は、三軸角速度センサの検出値に加えて、三軸磁気センサおよび/または三軸加速度センサからの検出値を併用してもよい。
【0053】
操作ボタン302は、コントローラ300に対するユーザからの操作入力を受け取るように構成された複数のボタン群である。本実施形態では、操作ボタン302は、プッシュ式ボタン、トリガー式ボタン、およびアナログスティックを含む。
【0054】
プッシュ式ボタンは、親指で下向きに押下する動作によって操作するように構成されたボタンである。右コントローラ320は、プッシュ式ボタンとして、天面322上に親指ボタン302aおよび302bを備えている。親指ボタン302aおよび302bは、いずれも右手の親指によって操作(押下)される。右手の親指によって親指ボタン302aおよび302bが押下され、または、天面322上に親指が配置されることにより、仮想右手の親指が伸ばした状態から曲げられた状態に変化される。
【0055】
トリガー式ボタンは、人差し指または中指で引き金を引くような動作によって操作するように構成されたボタンである。右コントローラ320は、トリガー式ボタンとして、グリップ324の前面部分に人差し指ボタン302eを備えている。人差し指ボタン302eをおり、右手の人差し指によって操作することにより、仮想右手の人差し指が伸ばした状態から曲げられた状態に変化される。また、グリップ324の側面部分に中指ボタン302fを備えている。中指ボタン302fを右手の中指によって操作することにより、仮想右手の中指、薬指、小指が伸ばした状態から曲げられた状態に変化される。
【0056】
右コントローラ320は、親指ボタン302aおよび302b、人差し指ボタン302e、ならびに中指ボタン302fの押下状態をそれぞれ検出し、これらの検出値を制御回路部200に出力する。
【0057】
本実施形態では、右コントローラ320の各ボタンの押下状態の検出値は、0から1のいずれかの値を取り得る。例えば、ユーザが親指ボタン302aをまったく押下していない場合、親指ボタン302aの押下状態として「0」が検出される。一方、ユーザが親指ボタン302aを完全に(最も深く)押下している場合、親指ボタン302aの押下状態として「1」が検出される。これにより、仮想手における各指の曲がり具合を調整してもよい。例えば、「0」の状態を指が伸びている状態として定義し、「1」の状態を指が曲げられている状態として定義することにより、ユーザは直感的な動作によって仮想手の指を制御することができる。
【0058】
アナログスティックは、所定のニュートラル位置から360°任意の方向へ傾けて操作することが可能なスティック型のボタンである。右コントローラ320の天面322上にアナログスティック302iが設けられる。アナログスティック302iは、右手の親指によって操作される。
【0059】
右コントローラ320は、グリップ324の両側面から天面322とは反対側の方向へ延びて半円状のリングを形成するフレーム326を備えている。フレーム326の外表面には、複数の赤外線LED304が埋め込まれている。
【0060】
赤外線LED304は、プレイ中に赤外線を発光する。赤外線LED304から発せられた赤外光は、右コントローラ320の位置および傾きを検出するために利用される。
【0061】
右コントローラ320は、赤外線LED304の代わりに、または赤外線LED304に加えて、さらにセンサ306を内蔵する。センサ306は、例えば磁気センサ、角速度センサ、若しくは加速度センサのいずれか、またはこれらの組み合わせであってよい。センサ306によって、右コントローラ320の位置および傾きを検出することができる。
【0062】
トランシーバ308は、右コントローラ320と、制御回路部200との間でデータを送受信するように構成される。トランシーバ308は、ユーザが操作ボタン302を介して右コントローラ320に与えた操作入力に基づくデータを、制御回路部200へ送信する。また、トランシーバ308は、赤外線LED304の発光を右コントローラ320に指示する命令を、制御回路部200から受信する。さらに、トランシーバ308は、センサ306によって検出した各種の値に対応するデータを、制御回路部200へ送信する。
【0063】
右コントローラ320は、ユーザの手に振動による触覚フィードバックを伝えるためのバイブレータを備えていてもよい。この構成では、トランシーバ308は、上述した各データの送受信に加えて、バイブレータに触覚フィードバックを行わせるための命令を制御回路部200から受信することができる。
【0064】
(制御回路部200の機能的構成)
図8は、制御回路部200の機能的構成を示すブロック図である。制御回路部200は、HMDセンサ120、コントローラセンサ140、注視センサ130、およびコントローラ300から受信した各種のデータを用いることによって、ユーザに提供される仮想空間2を制御する。また、制御回路部200は、HMD110のディスプレイ112への画像表示を制御する。
図8に示すように、制御回路部200は、検出部210、表示制御部220、仮想空間制御部230、記憶部240、および通信部250を備えている。制御回路部200は、
図2に示す各ハードウェアの協働によって、検出部210、表示制御部220、仮想空間制御部230、記憶部240、および通信部250として機能する。検出部210、表示制御部220、および仮想空間制御部230は、主としてプロセッサおよびメモリの協働によってその機能が実現され得る。記憶部240は、主としてメモリおよびストレージの協働によってその機能が実現され得る。通信部250は、主としてプロセッサおよび通信インターフェースの協働によってその機能が実現され得る。
【0065】
検出部210は、制御回路部200に接続される各種のセンサ(HMDセンサ120等)から検出値を受信する。また、検出部210は、必要に応じて、受信した検出値を用いた所定の処理を実行する。検出部210は、HMD検出部211、視線検出部212、およびコントローラ検出部213を備えている。HMD検出部211は、HMD110およびHMDセンサ120から検出値をそれぞれ受信する。視線検出部212は、注視センサ130から検出値を受信する。コントローラ検出部213は、コントローラセンサ140、右コントローラ320、および左コントローラ330から、それぞれの検出値を受信する。
【0066】
表示制御部220は、HMD110のディスプレイ112への画像表示を制御する。表示制御部220は、仮想カメラ制御部221、視界領域決定部222、および視界画像生成部223を備えている。仮想カメラ制御部221は、仮想空間2内に仮想カメラ1を配置する。そして、仮想カメラ制御部221は、仮想空間2内における仮想カメラ1の挙動を制御する。視界領域決定部222は、視界領域23を決定する。視界画像生成部223は、決定された視界領域23に基づき、ディスプレイ112に表示される視界画像26を生成する。
【0067】
仮想空間制御部230は、ユーザに提供される仮想空間2を制御する。仮想空間制御部230は、仮想空間規定部231、仮想手制御部232、選択肢制御部233、および設定部234を備えている。
【0068】
仮想空間規定部231は、ユーザに提供される仮想空間2を表す仮想空間データを生成することによって、HMDシステム100における仮想空間2を規定する。仮想手制御部232は、ユーザによる右コントローラ320および左コントローラ330の操作に応じたユーザの各仮想手(仮想右手および仮想左手)を仮想空間2内に配置する。仮想手制御部232は、仮想空間2内における各仮想手の挙動を制御する。
【0069】
選択肢制御部233は、選択肢の選択を受け付けるための仮想オブジェクトであるユーザインタフェース(UI)オブジェクトを仮想空間2内に配置する。そして、選択肢制御部233は、UIオブジェクトに対する仮想身体の挙動に基づいて選択肢の選択を受け付ける。なお、仮想身体とは、ユーザの頭部以外の身体の一部の動きに連動する仮想オブジェクトである。本実施形態では、仮想身体が仮想手である例を説明する。
【0070】
選択肢制御部233は、表示領域を含むUIオブジェクトを生成する。選択肢制御部233は、この表示領域に、ユーザが選択可能な選択肢を表示する。また、選択肢制御部233が生成するUIオブジェクトは、操作部分を含む。選択肢制御部233は、操作部分に対する、仮想身体を介したユーザ操作に応じて、表示領域に表示する選択肢を切り替える。
【0071】
設定部234は、HMDシステム100の動作モードを設定する。
【0072】
記憶部240は、制御回路部200が仮想空間2をユーザに提供するために用いる各種のデータを格納している。記憶部240は、雛形格納部241、コンテンツ格納部242、および選択肢格納部243を備えている。雛形格納部241は、仮想空間2の雛形を表す各種の雛形データを格納している。コンテンツ格納部242は、仮想空間2において再生可能な各種のコンテンツを格納している。選択肢格納部243は、仮想空間2に配置される選択肢を格納している。
【0073】
雛形データは、仮想空間2の空間構造を規定する空間構造データを有する。空間構造データは、例えば、中心21を中心とする360°の全天球の空間構造を規定するデータである。雛形データは、仮想空間2のXYZ座標系を規定するデータをさらに有する。雛形データは、天球を構成する各メッシュのXYZ座標系における位置を特定する座標データをさらに有する。また、雛形データは、仮想空間2内に仮想オブジェクトを配置可能であるか否かを示すフラグをさらに有する。
【0074】
コンテンツは、仮想空間2において再生可能なコンテンツである。例えば、コンテンツがゲームコンテンツの場合、コンテンツは、ゲームの背景画像、および、ゲームに登場する仮想オブジェクト(キャラクタ、アイテム等)を規定するデータを少なくとも有する。各コンテンツには、HMD110の初期状態(起動時)にユーザに見せる画像を向いた初期方向が、予め規定されている。
【0075】
通信部250は、ネットワークNWを介して外部機器400(例えばゲームサーバ)との間でデータを送受信する。
【0076】
(仮想空間2の提供処理)
図9は、HMDシステム100が仮想空間2をユーザに提供する処理の流れを示すシーケンス図である。仮想空間2は、基本的に、HMD110および制御回路部200の協働によってユーザに提供される。
図8に示す処理が開始されると、まず、ステップS1において、仮想空間規定部231が、ユーザに提供される仮想空間2を表す仮想空間データを生成することによって、仮想空間2を規定する。生成の手順は次の通りである。まず仮想空間規定部231は、仮想空間2の雛形データを雛形格納部241から取得することによって、仮想空間2の原型を定義する。仮想空間規定部231は、さらに、仮想空間2において再生されるコンテンツを、コンテンツ格納部242から取得する。本実施形態では、このコンテンツはゲームコンテンツである。
【0077】
仮想空間規定部231は、取得した雛形データに、取得したコンテンツを適合することによって、仮想空間2を規定する仮想空間データを生成する。仮想空間規定部231は、仮想空間データにおいて、仮想空間2の天球を構成する各メッシュの管理データに、コンテンツに含まれる背景画像を構成する各部分画像を適宜関連付ける。仮想空間規定部231は、コンテンツに規定される初期方向を仮想空間2のXYZ座標系におけるZ方向に合致させるように、各部分画像と各メッシュとを関連付けることが好ましい。
【0078】
仮想空間規定部231は、さらに、必要に応じて、コンテンツに含まれる各仮想オブジェクトの管理データを、仮想空間データに追加する。その際、各管理データに、対応する仮想オブジェクトが仮想空間2において配置される位置を表す座標を、設定する。これにより各仮想オブジェクトが、仮想空間2における当該座標の位置にそれぞれ配置される。
【0079】
その後、ユーザによってHMD110が起動されると、ステップS2において、HMDセンサ120が、HMD110の初期状態における位置および傾きを検出して、ステップS3において、検出値を制御回路部200に出力する。HMD検出部211は、この検出値を受信する。この後、ステップS4において、仮想カメラ制御部221は、仮想空間2において仮想カメラ1を初期化する。
【0080】
初期化の手順は次の通りである。まず仮想カメラ制御部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のロール方向がコンテンツの初期方向に適合されるので、コンテンツの再生開始後におけるユーザが最初に向く水平方向の向きを、コンテンツの初期方向に一致させることができる。
【0081】
仮想カメラ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に表示する。これによりユーザは初期視界画像を視認する。
【0082】
その後、ステップS8において、HMDセンサ120が、HMD110の現在の位置および傾きを検出して、ステップS9において、これらの検出値を制御回路部200に出力する。HMD検出部211は、各検出値を受信する。仮想カメラ制御部221は、HMD110の位置および傾きの検出値に基づき、HMD110における現在のuvw視野座標系を特定する。さらに、ステップS10において、仮想カメラ制御部221は、XYZ座標系におけるuvw視野座標系のロール方向(w軸)を、HMD110の視界方向として特定する。
【0083】
本実施形態では、ステップS11において、仮想カメラ制御部221が、特定したHMD110の視界方向を、仮想空間2におけるユーザの基準視線5として特定する。ステップS12において、仮想カメラ制御部221は、特定した基準視線5に基づき、仮想カメラ1を制御する。仮想カメラ制御部221は、基準視線5の位置(起点)および方向が仮想カメラ1の初期状態と同一であれば、仮想カメラ1の位置および方向をそのまま維持する。一方、基準視線5の位置(起点)および/または方向が、仮想カメラ1の初期状態から変化していれば、仮想空間2内における仮想カメラ1の位置および/または傾きを、変化後の基準視線5に応じた位置および/または傾きに変更する。また、制御後の仮想カメラ1に対してuvw視野座標系を再設定する。
【0084】
ステップS13において、視界領域決定部222は、特定した基準視線5に基づき、仮想空間2における視界領域23を決定する。その後、ステップS14において、視界画像生成部223は、仮想空間データを処理することによって、仮想空間2に展開される仮想空間画像22の全体のうち、仮想空間2における視界領域23に投影(重畳)される部分である視界画像26を生成(レンダリング)する。ステップS15において、視界画像生成部223は、生成した視界画像26を更新用の視界画像としてHMD110に出力する。ステップS16において、HMD110は、受信した視界画像26をディスプレイ112に表示することによって、視界画像26を更新する。これにより、ユーザがHMD110を動かせば、それに連動して視界画像26が更新される。
【0085】
(ユーザに選択肢を選択させる処理および表示例)
前述のように、選択肢制御部233は、UIオブジェクトを生成する。そして、ユーザは、このUIオブジェクトを操作することにより、複数の選択肢の中から所望の選択肢を選択することができる。より詳細には、ユーザは、選択肢を選択する際、まずUIオブジェクトの操作部分を仮想身体によって選択する。そして、ユーザは、操作部分を仮想身体によって選択した状態のまま、仮想身体を移動させることにより、UIオブジェクトにおける操作部分の位置を移動させる。これらの操作により、ユーザは、複数の選択肢を切り替えることができる。このように、UIオブジェクトを用いた選択肢の選択においては、ユーザが仮想身体により操作部分を選択して移動させる操作を行うことにより選択肢が切り替わる。このため、HMDシステム100によれば、ユーザに対し、操作を確実に行ったということを認識させることができ、ユーザの仮想体験をさらに改善することができる。
【0086】
以下、HMDシステム100がユーザに選択肢を選択させる処理と、該処理によってディスプレイ112に表示される視界画像26の例を
図10および
図11に基づいて説明する。なお、以下では、UIオブジェクトが、操作部分として操作レバーSLを含むUIオブジェクトOBであり、操作部分を選択する仮想身体が、仮想手である例を説明する。また、仮想身体によって操作部分を選択するためのユーザ操作が、仮想手を操作レバーSLと接するかまたは操作レバーSLに近接する位置に移動させ、かつ該位置において当該仮想手に握る動作を行わせる操作であるとする。つまり、選択肢制御部233は、操作レバーSLが仮想手によって握られた場合に、操作レバーSLが仮想手によって選択されたと検出する。また、UIオブジェクトOBを介してユーザが選択可能な選択肢が、HMDシステム100の動作モードの1つである「Single Mode」、および他の1つである「Multi Mode」を含む例を説明する。選択肢「Multi Mode」の選択が確定した場合には、設定部234はHMDシステム100を「Multi Mode」で動作させる。一方、選択肢「Single Mode」の選択が確定した場合には、設定部234はHMDシステム100を「Single Mode」で動作させる。
【0087】
図10は、HMDシステム100が仮想空間2において、UIオブジェクトによりユーザに選択肢を選択させる処理の流れを示すシーケンス図である。また、
図11は、
図10の処理によってディスプレイ112に表示される視界画像26の一例を示す図である。ユーザによる一連の操作によって、ディスプレイ112に表示される視界画像26は、視界画像26aから視界画像26eまで順次切り替わる。
【0088】
ステップS21において、選択肢制御部233はUIオブジェクトOBを生成する。UIオブジェクトOBは、
図11に示すように、操作レバーSLと表示領域DEを含む。選択肢制御部233は、操作レバーSLを仮想手で選択した状態で、該仮想手を方向DRに移動させるユーザ操作を検出した場合に、操作レバーSLを方向DRに沿って移動させる。視界画像26aに示すように、初期状態のUIオブジェクトOBにおいては、操作レバーSLが初期位置である位置X1(第1位置)に表示されている。また、表示領域DEには初期画像として、ユーザに選択操作を促す文字列である「Please Select」(第1情報)が表示されている。
【0089】
ステップS22において、視界画像生成部223はUIオブジェクトOBを含む視界画像をHMD110に出力する。ステップS23において、HMD110は、受信した視界画像をディスプレイ112に表示することによって、視界画像を更新する。
【0090】
ステップS24において、コントローラセンサ140は、右コントローラ320の位置および傾き、ならびに、左コントローラ330の位置および傾きをそれぞれ検出する。ステップS25において、コントローラセンサ140は、各検出値を制御回路部200に送信する。コントローラ検出部213は、これらの検出値を受信する。ステップS26において、コントローラ300が、各ボタンの押下状態を検出する。ステップS27において、右コントローラ320および左コントローラ330は、各検出値を制御回路部200に送信する。コントローラ検出部213は、これらの検出値を受信する。ステップS28において、仮想手制御部232が、コントローラ検出部213が受信した各検出値を用いて、ユーザの仮想右手HRおよび仮想左手HLを、仮想空間2に生成する。仮想手制御部232は、右コントローラ320の位置および傾きの検出値、ならびに右コントローラ320の各ボタンの押下状態の検出値を用いて、ユーザの仮想右手HRを規定する。同様に、仮想手制御部232は、左コントローラ330の各検出値に基づき、仮想空間2における仮想左手HLの位置、傾き、および各指の状態を規定する。ステップS29において、仮想手制御部232は仮想右手HRおよび仮想左手HLを含む視界画像をHMD110に出力する。ステップS30において、HMD110は、受信した視界画像をディスプレイ112に表示することによって、視界画像を更新する。これにより、例えば
図11の視界画像26aがディスプレイ112に表示される。
【0091】
ステップS31において、選択肢制御部233は、操作レバーSLが仮想手に握られたことを検出する。例えば、選択肢制御部233は、仮想右手HRが、仮想手制御部232によって操作レバーSLと接するかまたは操作レバーSLに近接する位置に移動され、かつ該位置において当該仮想右手HRによって握る動作が行われた場合に、操作レバーSLが仮想右手HRに握られたと検出してもよい。なお、仮想右手HRに握る動作を行わせるためのユーザ操作は、例えば右コントローラ320の各ボタンを押下する操作である。
【0092】
視界画像26bは、仮想右手HRが、初期位置である位置X1にある操作レバーSLを握っている状態、すなわち、ユーザが仮想右手HRにより操作レバーSLを選択した状態を示している。
【0093】
ステップS32において、選択肢制御部233は、操作レバーSLを握った状態で仮想手が移動したことを検出する。すなわち、選択肢制御部233は、操作レバーSLが仮想手により選択されたまま、該仮想手により何れかの方向に移動させられたことを検出する。例えば、選択肢制御部233は、各コントローラの位置および傾きの検出値に基づいて、仮想手が操作レバーSLを握った状態であること、および仮想手が方向DRに移動したことを検出する。
【0094】
ステップS33において、選択肢制御部233は、予め設定された複数の選択肢のうち、仮想手の移動先となった位置に対応する所定の選択肢を仮選択状態とする。なお、仮選択状態とは、複数の選択肢の1つを選択しているが、その選択を確定していない状態である。選択肢制御部233は、後述のステップS37の処理により、仮選択状態の選択肢の選択を確定する。つまり、選択肢制御部233は、仮想手の移動先となった位置に対応する選択肢を選択可能にする。選択肢制御部233は、仮選択状態とした選択肢に関連する情報(第2情報)を表示領域DEに表示してもよい。これにより、仮選択状態となっている選択肢をユーザに明確に認識させることができる。
【0095】
ステップS34において、視界画像生成部223はUIオブジェクトOBを含む視界画像をHMD110に出力する。ステップS35において、HMD110は、受信した視界画像をディスプレイ112に表示することによって、視界画像を更新する。更新後の視界画像は、例えば、視界画像26cのような画像であってもよい。本例では、仮想手制御部232は、操作レバーSLを握った状態の仮想右手HRを、方向DRに移動させている。そして、選択肢制御部233は、操作レバーSLを、初期位置である位置X1から、位置X2(第2位置)まで移動させる。また、選択肢制御部233は、仮選択状態となっている選択肢を示す「Multi Mode」との文字列を表示領域DEに表示させる。本例では、ユーザは、操作レバーSLを現実空間において握り、そして引っ張るような感覚で選択肢「Multi Mode」を仮選択状態とすることができる。
【0096】
なお、選択肢「Multi Mode」を仮選択状態とするための位置X2には、マージンを設けてもよい。例えば、操作レバーSLが位置X2を含む所定の距離範囲L1(第1距離範囲)にあるときには、選択肢「Multi Mode」を仮選択状態としてもよい。また、選択肢制御部233は、選択肢を仮選択状態とするときに、制御回路部200を介してコントローラ300を振動させることにより、ユーザの身体の一部にコントローラ300を介して振動を与えるステップをさらに実行してもよい。これにより、選択肢が仮選択状態となったことをユーザに確実に認識させることができる。
【0097】
ステップS36において、選択肢制御部233は、仮想手が操作レバーSLを離したか否かを判定する。選択肢制御部233は、仮想手が操作レバーSLを離したか否かを、制御回路部200がコントローラ300から受信する各検出値に基づいて判定可能である。選択肢制御部233は、仮想手が操作レバーSLを離していないと判定した場合(ステップS36でNO)、ステップS32の処理に戻り、操作レバーSLを握った状態で仮想手が移動したことを検出する。そしてステップS33において、選択肢制御部233は、仮選択状態とする選択肢を、仮想手の移動先となった位置に対応する選択肢に切り替える。この後、ステップS34の処理により制御回路部200が視界画像をHMD110に送信し、ステップS35の処理によりHMD110が視界画像を更新する。
【0098】
更新後の視界画像は、例えば、視界画像26dのような画像であってもよい。本例では、仮想手制御部232は、操作レバーSLを握った状態の仮想右手HRを、方向DRにさらに移動させている。そして、選択肢制御部233は、操作レバーSLを、位置X2から位置X3(第3位置)まで移動させている。また、選択肢制御部233は、操作レバーSLが位置X3に位置しているとき、仮選択状態となっている選択肢を示す「Single Mode」との文字列を表示領域DEに表示させている。つまり、視界画像26cでは仮選択状態となっている選択肢が「Multi Mode」であったが、視界画像26dでは仮選択状態となっている選択肢が「Single Mode」に切り替わっている。
【0099】
なお、選択肢「Single Mode」を仮選択状態とするための位置X3にも、マージンを設けてもよい。例えば、操作レバーSLが位置X3を含む所定の距離範囲L2(第2距離範囲)にあるときには、選択肢「Single Mode」を仮選択状態としてもよい。また、選択肢制御部233は、仮選択状態である選択肢を切り替える際に、制御回路部200を介してコントローラ300を振動させることにより、ユーザに対し振動を与えるステップをさらに実行してもよい。これにより、仮選択状態である選択肢が切り替わったことをユーザに確実に認識させることができる。
【0100】
ステップS36において、選択肢制御部233は、仮想手が操作レバーSLを離したと判定した場合(ステップS36でYES)、選択肢制御部233は、選択肢の仮選択状態を維持する。つまり、選択肢制御部233は、仮想手が操作レバーSLを離した後は、仮選択状態の選択肢を切り替えない。そして、選択肢制御部233は、仮選択状態としていた選択肢の選択を確定する(ステップS37)。例えば、選択肢制御部233が選択肢「Multi Mode」の選択を確定した場合には、設定部234がHMDシステム100を「Multi Mode」で動作させる。一方、選択肢制御部233が選択肢「Single Mode」の選択を確定した場合には、設定部234がHMDシステム100を「Single Mode」で動作させる。
【0101】
また、選択肢制御部233は、仮想手が操作レバーSLを離したと判定した場合、操作レバーSLを初期位置に戻す。よって、操作レバーSLが初期位置に戻った場合には、選択肢制御部233は、仮想手が操作レバーSLを離したときに仮選択状態としていた選択肢が選択可能な状態を維持する。この場合に、選択肢制御部233は、当該選択肢の選択を確定させる。視界画像生成部223は、操作レバーSLが初期位置に戻ったUIオブジェクトOBの視界画像をHMD110に送信し、HMD110は視界画像を更新する。
【0102】
更新後の視界画像は、例えば、視界画像26eのような画像であってもよい。本例では、仮想手制御部232は、指が伸びた状態の仮想右手HRを表示させている。選択肢制御部233は、操作レバーSLを初期位置に表示させている。また、選択肢制御部233は、確定された選択肢を示す「Single Mode」との文字列を表示領域DEに表示させている。つまり、本例は、選択肢「Single Mode」が仮選択状態である視界画像26dの状態において、仮想手が操作レバーSLを離した場合に表示される視界画像の例を示している。なお、選択肢「Multi Mode」が仮選択状態である視界画像26cの状態において、仮想手が操作レバーSLを離した場合には、選択肢制御部233は、確定された選択肢を示す「Multi Mode」との文字列を表示領域DEに表示させる。
【0103】
なお、仮想オブジェクトとの接触による操作をMR等に適用することによって仮想体験を提供する場合には、操作対象オブジェクトに換えてユーザの実際の頭部以外の身体の一部を物理的・光学的手法等によって検知し、当該身体の一部と仮想オブジェクトの位置関係に基づいて、当該身体の一部と仮想オブジェクトとの接触を判定してもよい。なお、透過型HMDを用いて仮想体験を提供する場合には、ユーザの基準視線は、非透過型HMDと同様に、HMDの動き、または、ユーザの視線を検知することによって特定してもよい。
【0104】
〔ソフトウェアによる実現例〕
制御回路部200の制御ブロック(検出部210、表示制御部220、仮想空間制御部230、記憶部240、および通信部250)は、集積回路(ICチップ)等に形成された論理回路(ハードウェア)によって実現してもよいし、CPU(Central Processing Unit)を用いてソフトウェアによって実現してもよい。
【0105】
後者の場合、制御ブロックは、各機能を実現するソフトウェアであるプログラムの命令を実行するCPU、前記プログラムおよび各種データがコンピュータ(又はCPU)で読み取り可能に記録されたROM(Read Only Memory)または記憶装置(これらを「記録媒体」と称する)、前記プログラムを展開するRAM(Random Access Memory)等を備えている。そして、コンピュータ(又はCPU)が前記プログラムを前記記録媒体から読み取って実行することにより、本発明の目的が達成される。前記記録媒体としては、「一時的でない有形の媒体」、たとえば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路等を用いることができる。また、前記プログラムは、該プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して前記コンピュータに供給されてもよい。なお、本発明は、前記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
【0106】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【0107】
〔付記事項〕
本発明の一側面にかかる内容を列記すると以下の通りである。
【0108】
(項目1)頭部にヘッドマウントディスプレイを装着したユーザに仮想空間を提供する方法であって、前記ヘッドマウントディスプレイの動きに基づいて、前記仮想空間のうち前記ヘッドマウントディスプレイに出力される視界画像を生成するステップと、前記仮想空間に、前記ユーザからの指示を受け付けるユーザインタフェース(以下、UI)オブジェクトであって、操作部分を第1位置に含むUIオブジェクトを生成するステップと、前記仮想空間に、前記ユーザの前記頭部以外の身体の一部の動きに連動する仮想身体を生成するステップと、前記操作部分が、前記仮想身体により選択されたことを検出するステップと、前記操作部分が前記仮想身体により選択されたまま、該仮想身体により何れかの方向に移動させられたことを検出するステップと、前記操作部分が前記仮想身体により選択されたまま、前記第1位置とは異なる第2位置に位置している間、所定の選択肢を前記UIオブジェクトに対する前記指示に基づき選択可能とするステップと、を含む方法。
【0109】
前記の方法によれば、仮想身体により操作部分を選択して移動させることにより選択肢を選択可能とするので、ユーザに対し、操作を確実に行ったということを認識させることができる。これにより、ユーザの仮想体験をさらに改善することができる。
【0110】
(項目2)前記UIオブジェクトを基準として、前記方向において、前記第2位置を含む第1距離範囲と、前記第2位置および前記第1位置と異なる第3位置を含む第2距離範囲とが設定され、前記選択可能とするステップでは、前記第1距離範囲に前記操作部分が位置している場合、前記所定の選択肢を選択可能とし、前記第2距離範囲に前記操作部分が位置している場合、前記所定の選択肢と異なる選択肢を選択可能とする項目1の方法。
【0111】
前記の方法によれば、複数の選択肢をユーザの操作感に合わせて、切り替えて選択可能とすることができる。
【0112】
(項目3)前記UIオブジェクトには表示領域が設けられており、前記表示領域には、前記操作部分が前記第1位置に位置しているとき、第1情報が表示されており、前記操作部分が前記第2位置に位置しているとき、前記所定の選択肢に応じた第2情報を前記表示領域に表示させる項目1または2に記載の方法。
【0113】
前記の方法によれば、操作部分が第1位置とは異なる位置にあるときに、表示領域に選択肢に応じた第2情報を表示することにより、ユーザの操作感に合わせて、選択肢を提示することができる。
【0114】
(項目4)前記身体の一部と接触しているコントローラによって、前記身体の一部の動きと前記仮想身体とは連動しており、前記所定の選択肢を選択可能にするとき、前記身体の一部に前記コントローラを介して振動を与えるステップをさらに含む項目1〜3のいずれかの方法。
【0115】
前記の方法によれば、選択肢が選択可能となったことをユーザに確実に認識させることができる。
【0116】
(項目5)前記第2位置において前記仮想身体による前記操作部分の選択が解除された場合、前記操作部分を前記第1位置に戻すステップと、前記操作部分が前記第1位置に戻った場合、前記所定の選択肢を選択可能な状態を維持するステップと、をさらに含む項目1〜4のいずれかの方法。
【0117】
前記の方法によれば、ユーザの操作感に合わせて、選択可能状態を解除し、選択肢を維持することができる。
【0118】
(項目6)前記操作部分が前記第1位置に戻った場合、前記所定の選択肢を選択させるステップをさらに含む項目5の方法。前記の方法によれば、ユーザの容易な操作により、選択肢を選択することができる。
【0119】
(項目7)頭部にヘッドマウントディスプレイを装着したユーザに仮想体験を提供する方法であって、前記ユーザからの指示を受け付けるユーザインタフェース(以下、UI)オブジェクトであって、操作部分を第1位置に含むUIオブジェクトを生成するステップと、前記操作部分が、前記ユーザの頭部以外の身体の一部により選択されたことを検出するステップと、前記操作部分が前記身体の一部により選択されたまま、該身体の一部により何れかの方向に移動させられたことを検出するステップと、前記操作部分が前記身体の一部により選択されたまま、前記第1位置とは異なる第2位置に位置している間、所定の選択肢を前記UIオブジェクトに対する前記指示に基づき選択可能とするステップと、を含む方法。
【0120】
前記の方法によれば、仮想身体により操作部分を選択して移動させることにより選択肢を選択可能とするので、ユーザに対し、操作を確実に行ったということを認識させることができる。これにより、ユーザの仮想体験をさらに改善することができる。
【0121】
(項目8)項目1〜7のいずれかに記載の方法の各ステップを、コンピュータに実行させるプログラム。
【0122】
(項目9)項目8に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
【解決手段】選択肢制御部(233)は、位置(X1)に操作部分を含むUIオブジェクト(OB)を、仮想空間に生成する。選択肢制御部(233)は、仮想右手(HR)によって操作部分が選択されたまま、操作部分が位置(X1)とは異なる位置(X2)に位置している間、選択肢をUIオブジェクト(OB)に対する指示に基づき選択可能とする。