[本発明の実施形態の詳細]
本発明の実施形態に係る仮想空間を提供する方法、および、プログラムの具体例を、以下に図面を参照しつつ説明する。本発明はこれらの例示に限定されるものではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が本発明に含まれることが意図される。以下の説明では、図面の説明において同一の要素には同一の符号を付し、重複する説明を繰り返さない。
(HMDシステム100の構成)
図1は、HMDシステム100の構成を示す図である。この図に示すように、HMDシステム100は、HMD110、HMDセンサ120、コントローラセンサ140、制御回路部200、およびコントローラ300を備えている。
HMD110は、ユーザの頭部に装着される。HMD110は、非透過型の表示装置であるディスプレイ112、センサ114、および注視センサ130を備えている。HMD110は、右目用画像および左目用画像をディスプレイ112にそれぞれ表示することにより、ユーザの両目の視差に基づきユーザに立体的に視認される3次元画像を、ユーザに視認させる。これにより仮想空間をユーザに提供する。ディスプレイ112がユーザの眼前に配置されているので、ユーザは、ディスプレイ112に表示される画像を通じて仮想空間に没入できる。仮想空間は、背景、ならびにユーザが操作可能な各種のオブジェクトおよびメニュー画像等を含む。
ディスプレイ112は、右目用画像を表示する右目用サブディスプレイと、左目用画像を表示する左目用サブディスプレイとを含んでもよい。または、ディスプレイ112は、右目用画像および左目用画像を共通の画面に表示する1つの表示装置であってもよい。このような表示装置として、たとえば、表示画像が一方の目にしか認識できないようにするシャッターを高速に切り替えることにより、右目用画像および左目用画像を独立して交互に表示する表示装置が挙げられる。
(制御回路部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等の各要素には、予め、グローバル座標系が設定されている。このグローバル座標系は、現実空間における、鉛直方向、鉛直方向と直交する横方向、ならびに、鉛直方向および横方向の双方と直交する前後方向にそれぞれ平行な、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を装着したユーザが物体を見る際の視点座標系に対応する。
(uwv視野座標系)
図3は、HMD110に設定されるuwv視野座標系を例示する図である。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つの仮想カメラには、ユーザが三次元の仮想空間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を受信した場合も、両者の交点である注視点N1(不図示)を特定する。制御回路部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を持った左手とを、相互に自由に動かすことができる。
図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、影響対象特定部235、および影響反映部236を備えている。
仮想空間規定部231は、ユーザに提供される仮想空間2を表す仮想空間データを生成することによって、HMDシステム100における仮想空間2を規定する。仮想手制御部232は、ユーザによる右コントローラ320および左コントローラ330の操作に応じたユーザの各仮想手(仮想右手および仮想左手)を仮想空間2内に配置すると共に、仮想空間2内における各仮想手の挙動を制御する。関係判定部233は、仮想空間2内におけるユーザの仮想手同士の位置関係を判定する。付加オブジェクト制御部234は、判定された位置関係に基づく付加オブジェクトを仮想空間2内に配置すると共に、仮想空間2における付加オブジェクトの挙動を制御する。付加オブジェクトとは、仮想右手および仮想左手が仮想空間2において特定の関係を満たす場合に仮想空間2に規定されるオブジェクトである。言い換えると、付加オブジェクトは、ユーザの右手の状態を表す情報およびユーザの左手の状態を表す情報の双方に基づき仮想空間2に生成される付加画像の一種である。影響対象特定部235は、仮想空間2において付加オブジェクトによる影響を受けるオブジェクトを特定する。影響反映部236は、特定されたオブジェクトへの影響を仮想空間2に反映させる。
記憶部240は、制御回路部200が仮想空間2をユーザに提供するために用いる各種のデータを格納している。記憶部240は、雛形格納部241、コンテンツ格納部242、および判定テーブル243を備えている。雛形格納部241は、仮想空間2の雛形を表す各種の雛形データを格納している。コンテンツ格納部242は、仮想空間2において再生可能な各種のコンテンツを格納している。判定テーブル243は、仮想空間2における仮想右手と仮想左手との関係の判定に用いられる各種の判定値を格納している。
通信部250は、ネットワークNWを介して外部機器400(たとえばゲームサーバ)との間でデータを送受信する。
(仮想空間2の提供処理)
図9は、HMDシステム100が仮想空間2をユーザに提供する処理の流れを示すシーケンス図である。仮想空間2は、基本的に、HMD110および制御回路部200の協働によってユーザに提供される。図9に示す処理が開始されると、まず、S1において、仮想空間規定部231が、ユーザに提供される仮想空間2を表す仮想空間データを生成することによって、仮想空間2を規定する。生成の手順は次の通りである。まず仮想空間規定部231は、仮想空間2の雛形データを、雛形格納部241から取得する。雛形データは、仮想空間2の空間構造を規定する空間構造データを有する。空間構造データは、たとえば、中心21を中心とする360°の全天球の空間構造を規定するデータである。雛形データは、仮想空間2のXYZ座標系を規定するデータをさらに有する。雛形データは、天球を構成する各メッシュのXYZ座標系における位置を特定する座標データをさらに有する。また、雛形データは、仮想空間2内にオブジェクトを配置可能であるか否かを示すフラグをさらに有する。コンテンツには、HMD110の初期状態(起動時)にユーザに見せる画像を向いた初期方向が、予め規定されている。
仮想空間規定部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の向きを設定すればよい。
視界領域決定部222は、仮想カメラ1のuvw視野座標系に基づいて、仮想空間2における視界領域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内においてシューティングゲームをプレイする。たとえばユーザは、仮想空間内に登場する敵キャラクタを、短距離攻撃用の武器(剣など)または遠距離攻撃用の武器(銃など)を用いて攻撃する。
図10は、仮想空間2におけるゲームの進行を説明するフローチャートである。図10の処理が開始されると、S21において、コントローラセンサ140は、右コントローラ320の位置および傾き、ならびに、左コントローラ330の位置および傾きをそれぞれ検出する。S22において、HMDセンサ120は、各検出値を制御回路部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において、関係判定部233は、判定テーブル243を参照することによって、仮想空間2における仮想右手と仮想左手との関係を判定する。
図11は、判定テーブル243の詳細を示す図である。判定テーブル243は、複数の行および列によって構成されており、行ごとに、付加オブジェクトの種類(名称)、右コントローラ320の各ボタンの押下状態、位置、および傾きの各判定値、左コントローラ330の各ボタンの押下状態、位置、および傾きの各判定値、ならびに付加オブジェクトへの視線の各判定値を、互いに関連づけて格納している。
仮想空間2における仮想右手の状態(位置、傾き、各指の曲げ具合)は、右コントローラ320の各検出値によって決まる。同様に、仮想空間2における仮想左手の状態(位置、傾き、各指の曲げ具合)は、左コントローラ330の各検出値によって決まる。そこで関係判定部233は、仮想右手および仮想左手が特定の関係を満たすか否かを、右コントローラ320および左コントローラ330の各検出値と、判定テーブル243に格納されている各判定値とを照合することによって、判定する。
関係判定部233は、右コントローラ320の各検出値に一致する右コントローラ320の各判定値と、左コントローラ330の各検出値に一致する左コントローラ330の各判定値とが、判定テーブル243内において互いに関連付けて格納されている場合、仮想右手および仮想左手が特定の関係を満たすと判定する。具体的には、関係判定部233は、右コントローラ320の各検出値に一致する右コントローラ320の判定値と、左コントローラ330の各検出値に一致する左コントローラ330の判定値とを格納している行を、判定テーブル243から検索する。関係判定部233は、そのような行を判定テーブル243から発見した場合、仮想右手および仮想左手が特定の関係を満たすと判定する。
S27において、付加オブジェクト制御部234は、関係判定部233による判定結果に応じた付加オブジェクトを、仮想空間2に生成する。具体的には、付加オブジェクト制御部234は、発見された行に格納されている付加オブジェクトの名称を、判定テーブル243から取得し、その名称の付加オブジェクトを規定するデータを生成して仮想空間データに追加する。付加オブジェクト制御部234は、仮想空間2における付加オブジェクトの位置を、仮想右手および仮想左手の位置に関連した位置に設定する。たとえば、仮想右手と仮想左手との中間位置を、仮想空間2における付加オブジェクトの位置として設定する。付加オブジェクト制御部234は、仮想右手および仮想左手が特定の関係に無いと判定された場合、付加オブジェクトを仮想空間2に生成しない。
この後、S28において、注視センサ130は、ユーザの右目の視線および左目の視線をそれぞれ検出し、S29において、各検出値を制御回路部200に送信する。視線検出部212が、この検出値を受信する。S30において、視線検出部212は、受信した検出値を用いて、仮想カメラ1のuvw視野座標系におけるユーザの視線方向N0を特定する。
次に、S31において、影響対象特定部235は、仮想空間2内に配置される各オブジェクトのうち、付加オブジェクトによる影響を受けるオブジェクトを特定する。影響対象特定部235は、たとえば、仮想空間2内において、付加オブジェクトに規定される表示範囲内に位置するオブジェクトを、付加オブジェクトによる影響を受けるオブジェクトとして特定する。なお、詳しくは後述するが、影響対象特定部235は、付加オブジェクトの表示範囲内に視線方向N0が向いている場合に、付加オブジェクトの影響を受けるオブジェクトを特定すると共に、付加オブジェクトの表示範囲内に視線方向N0が向いていない場合には、付加オブジェクトの影響を受けるオブジェクトを特定しない。
S32において、影響反映部236は、特定されたオブジェクトへの付加オブジェクトによる影響を、仮想空間2に反映させる。具体的には、たとえば、仮想空間データにおける、特定されたオブジェクトの表示状態を規定する値を、付加オブジェクトによる影響に応じた表示状態に更新する。S27において付加オブジェクトが規定されない場合、S31およびS32は実行されない。
その後、視野画像生成部223は、現在の基準視線5に基づいて、仮想空間2における視界領域23を決定する。S33において、視界画像生成部223は、仮想空間データを処理することによって、仮想空間2に展開される仮想空間画像22の全体のうち、仮想空間2における視界領域23に投影される部分である視界画像26を生成(レンダリング)する。
仮想空間2に仮想右手および仮想左手が規定されているので、生成される視界画像26には、少なくとも仮想右手および仮想左手がさらに含まれる。また、付加オブジェクトが仮想空間2に規定された場合、視界画像26には付加オブジェクトがさらに含まれる。また、付加オブジェクトによる他のオブジェクトへの影響が仮想空間2に反映された場合、視界画像には、その影響により表示状態が変化したオブジェクトがさらに含まれる。
S34において、視野画像生成部223は、生成した視界画像26を更新用の視界画像としてHMD110に出力する。S35において、HMD110は、受信した視界画像26をディスプレイ112に表示することによって、視界画像26を更新する。
(ロックオンEA)
図10の処理によってディスプレイ112に表示される視界画像26の一例を、図12に示す。図12は、ディスプレイ112に表示される視界画像26の一例を示す図である。図12の(a)では、視界画像26は、背景画像、敵キャラクタ(オブジェクト)OA〜OC、仮想右手HR、仮想左手HL、およびロックオンEAを含んでいる。仮想右手HRは、右親指FRa、右人差し指FRb、および右中指FRcを含んでいる。仮想左手HLは、左親指FLa、左人差し指FLb、および左中指FLcを含んでいる。
ロックオンEAは、付加オブジェクトの一種である。ユーザは、シューティングゲームの実行中に、敵キャラクタOA〜OCを攻撃対象にするために、ロックオンEAを利用する。ロックオンEAは、視界画像26に含まれる仮想右手HRおよび仮想左手HLが特定の関係にある場合、視界画像26に現れる。言い換えると、ユーザは、ゲーム中にロックオンEAを用いるために、両手を適宜動かす必要がある。
図12の(a)では、敵キャラクタOAがロックオンEAの表示範囲に含まれている。そのため、視界画像26における敵キャラクタOAは、攻撃対象として選択されていることを示す状態となっている。一方、敵キャラクタOBおよびOCはロックオンEAの表示範囲に含まれないので、視界画像26における敵キャラクタOBおよびOCは、攻撃対象から外れていることを示す状態となっている。
図12の(a)に示す視界画像26をディスプレイ112に表示させるための手順を、以下に説明する。まずユーザは、ロックオンEAを表示させるための操作を、右コントローラ320および左コントローラ330に対して行う。本実施形態では、この操作は、図12の(a)に示す状態の仮想右手HRおよび仮想左手HLが視界画像26に含まれるように、右コントローラ320を持つ右手と左コントローラ330を持つ左手とを適宜動かすことである。
ロックオンEAを表示させるために、ユーザはまず、右コントローラ320の親指ボタン302aおよび人差し指ボタン302eを押下せず、かつ、右コントローラ320の中指ボタン302fを完全に押下する。さらにユーザは、右コントローラ320の親指ボタン302aおよび人差し指ボタン302eを押下せず、かつ、右コントローラ320の中指ボタン302fを完全に押下する。
ユーザはさらに、右親指FRaが視界画像26において上を向くと共に、右人差し指FRbが視界画像26において左を向くように、右コントローラ320を傾ける。また、左親指FLaが視界画像26において下を向くと共に、左人差し指FLbが視界画像26において右を向くように、左コントローラ330を傾ける。ユーザはさらに、右親指FRaの先端と左人差し指FLbの先端とが視界画像26内で接触すると共に、右人差し指FRbの先端と左親指FLaの先端とが視界画像26内において接触するように、右コントローラ320および左コントローラ330の位置を変化させる。
ユーザが上述したように右コントローラ320および左コントローラ330を操作すると、制御回路部200は、右コントローラ320の親指ボタン302a、人差し指ボタン302e、および中指ボタン302fの押下状態の検出値として、それぞれ「0」、「0」、および「1」を受信する。また、右コントローラ320の位置および傾きの検出値として、位置PR1および傾きDR1を受信する。さらに、左コントローラ330の親指ボタン302c、人差し指ボタン302g、中指ボタン302hの検出値として、それぞれ「0」、「0」、および「1」を受信する。さらに、左コントローラ330の位置および傾きの検出値として、位置PL1および傾きDL1を受信する。
これらの検出値は、判定テーブル243において「ロックオン」に関連付けられている右コントローラ320および左コントローラ330の各判定値に一致する。したがって、付加オブジェクト制御部234は、付加オブジェクトとしてロックオンEAを仮想空間2に規定する。
判定テーブル243において、「ロックオン」に対して視線の判定値として「必要」が関連付けられている。図12の(a)では、ロックオンEAが視界画像26に中央に配置されている。視線として視界方向を用いる場合、図12の(a)では、視界方向は視界画像26の中央に向かっているので、視線はロックオンEAに向けられている。そこで、影響対象特定部235は、ロックオンEAによる影響を受けるオブジェクトの特定を実行する。
図12の(a)では、仮想空間2において、敵キャラクタOAの位置は、ロックオンEAの表示範囲に含まれているが、敵キャラクタOBおよびOCの位置は、ロックオンEAの表示範囲に含まれていない。そこで影響対象特定部235は、ロックオンEAによる影響を受けるオブジェクトとして、ロックオンEAの表示範囲に含まれる敵キャラクタOAを特定する。特定された敵キャラクタOAへの影響は、ロックオンEAによる攻撃対象としての選択である。これにより影響反映部236は、敵キャラクタOAの表示状態を規定する値を、ロックオンEAによる選択がなされていることを示す値に更新する。
この後、制御回路部200が視界画像26を生成することによって、図12の(a)に示す視界画像26をHMD110のディスプレイ112に表示させることができる。
図13は、ロックオンEAによる影響を受けるオブジェクトを特定する方法を説明する図である。影響対象特定部235は、仮想空間2内におけるロックオンEAの表示範囲および仮想カメラ1の位置に基づき、ロックオンEAによる影響を受けるオブジェクトを特定してもよい。図13に示すように、影響対象特定部235は、仮想空間2における仮想カメラ1の位置を起点としてロックオンEAの表示範囲の外枠に向かう方向をそれぞれ特定し、さらに、これらの方向によって規定されるロックオンEAの広がり角γ1およびγ2を特定する。そして、これらの広がり角γ1およびγ2によって規定される仮想空間2内の広がり領域に位置するオブジェクトを、ロックオンEAによる影響を受けるオブジェクトとして特定する。なお、拡大ロックオンEBの場合も上記と同様である。
(ロックオンEAの拡大)
ユーザは、ロックオンEAをディスプレイ112に表示させた後、右コントローラ320および左コントローラ330を適宜操作することによって、図12の(b)に示すように、ロックオンEAを拡大させることができる。図12の(b)では、視界画像26は、背景画像、敵キャラクタOA〜OC、仮想右手HR、仮想左手HL、および拡大ロックオンEBを含んでいる。
拡大ロックオンEBは、付加オブジェクトの一種である。拡大ロックオンEBの表示範囲はロックオンEAよりも大きいので、敵キャラクタOA〜OCが拡大ロックオンEBの表示範囲に含まれている。したがって、敵キャラクタOAに加えて、敵キャラクタOBおよびOCも、攻撃対象として選択されていることを示す状態となっている。ユーザは、ロックオンEAを拡大することによって、より多くの敵キャラクタを攻撃対象として選択することができる。
図12の(b)に示す視界画像26をディスプレイ112に表示させるための手順を以下に説明する。ロックオンEAを拡大するために、ユーザは、右コントローラ320の傾きおよび左コントローラ330の傾きをそれぞれ維持したまま、仮想右手HRと仮想左手HLとが視界画像26において互いに遠ざかるように、右手と左手とを互いに遠ざける。これにより、右コントローラ320および左コントローラ330の位置が、互いに離間するように経時的に変化する。
コントローラ検出部213は、経時的にコントローラセンサ140から受信する位置の各検出値に基づき、右コントローラ320の位置および左コントローラ330の位置が、互いに離間するようにそれぞれ移動していることを検出する。コントローラ検出部213は、この検出に基づき、右コントローラ320および左コントローラ330の位置の検出値として、いずれも「離間移動」を生成する。右コントローラ320の押下状態および傾きの検出値、ならびに左コントローラ330の押下状態および傾きの検出値は、ロックオンEAの表示時から変わりない。これらの各検出値は、判定テーブル243において「拡大ロックオン」に関連付けられている各判定値に一致する。そこで付加オブジェクト制御部234は、付加オブジェクトとして拡大ロックオンEBを仮想空間2に規定する。
判定テーブル243において、「拡大ロックオン」に対して視線の判定値として「必要」が規定されている。図12の(b)では、拡大ロックオンEBが視界画像26に中央に配置されている。視線として視界方向を用いる場合、図12の(b)では、視界方向は視界画像26の中央に向かっているので、視線は拡大ロックオンEBに向けられている。そこで、影響対象特定部235は、拡大ロックオンEBによる影響を受けるオブジェクトの特定を実行する。
図12の(b)では、仮想空間2において、敵キャラクタOA〜OCの各位置は、いずれも拡大ロックオンEBの表示範囲に含まれている。そのため影響対象特定部235は、拡大ロックオンEBによる影響を受けるオブジェクトとして、敵キャラクタOA〜OCを特定する。特定された敵キャラクタOA〜OCへの影響は、拡大ロックオンEBによる攻撃対象としての選択である。敵キャラクタOAはすでにロックオンEAによる影響を受けているので、表示状態を変える必要はない。影響反映部236は、仮想空間データにおいて、敵キャラクタOBおよびOCの表示状態を規定する値を、拡大ロックオンEBによる選択がなされていることを示す値に更新する。
この後、制御回路部200が視界画像26を生成することによって、図12の(b)に示す視界画像26をHMD110のディスプレイ112に表示させることができる。
制御回路部200は、視界画像26におけるロックオンEA(または拡大ロックオンEB)に重なる部分を、ユーザによる指示(たとえば特定のボタンの押下)に基づきスクリーンショットとして取得してもよい。この場合、制御回路部200は、図13に示す広がり角を考慮することなく、視界画像26においてロックオンEA(または拡大ロックオンEB)にちょうど重なる箇所の部分画像を、スクリーンショットとして取得する。
(エネルギーEC)
図11の処理によってディスプレイ112に表示される視界画像26の他の例を、図14に示す。図14は、ディスプレイ112に表示される視界画像26の他の例を示す図である。図14の(a)では、視界画像26は、背景画像、敵キャラクタ(オブジェクト)OBおよびOC、仮想右手HR、仮想左手HL、およびエネルギーECを含んでいる。
エネルギーECは、付加オブジェクトの一種である。ユーザは、シューティングゲームの実行中に、敵キャラクタを攻撃するためのソードまたは敵キャラクタから身を守るためにシールドを利用するために、まず、エネルギーECを仮想空間2に生成する。エネルギーECは、視界画像26に含まれる仮想右手HRおよび仮想左手HLが特定の関係にある場合、視界画像26に現れる。言い換えると、ユーザは、エネルギーECをディスプレイ112に表示させるために、両手を適宜動かす必要がある。
図14の(a)に示す視界画像26をディスプレイ112に表示させるための手順を、以下に説明する。まずユーザは、エネルギーECを表示させるための操作を、右コントローラ320および左コントローラ330に対して行う。本実施形態では、この操作は、図14の(a)に示す状態の仮想右手HRおよび仮想左手HLが視界画像26に含まれるように、右コントローラ320を持つ右手と左コントローラ330を持つ左手とを適宜動かすことである。
エネルギーECを表示させるために、ユーザはまず、右コントローラ320の親指ボタン302aおよび人差し指ボタン302eを中程度に押下し、かつ、右コントローラ320の中指ボタン302fを完全に押下する。さらにユーザは、左コントローラ330の親指ボタン302cおよび人差し指ボタン302gを中程度に、かつ、左コントローラ330の中指ボタン302hを完全に押下する。
ユーザはさらに、仮想右手HRの甲が視界画像26に表示され、かつ、右親指FRaおよび右人差し指FRbが視界画像26において斜め左下を向くように、右コントローラ320を傾ける。また、仮想左手HLの手のひらが視界画像26に表示され、左親指FLaおよび左人差し指FLbが視界画像26において斜め右上を向くように、左コントローラ330を傾ける。ユーザはさらに、右親指FRaの先端、左人差し指FLbの先端、右人差し指FRbの先端、左親指FLaの先端が視界画像26内の小さな領域を取り囲むように、右コントローラ320および左コントローラ330の位置を変化させる。
ユーザが上述したように右コントローラ320および左コントローラ330を操作すると、制御回路部200は、右コントローラ320の親指ボタン302a、人差し指ボタン302e、および中指ボタン302fの押下状態の検出値として、それぞれ「中間」、「中間」、および「1」を受信する。また、右コントローラ320の位置および傾きの検出値として、位置PR2および傾きDR2を受信する。さらに、左コントローラ330の親指ボタン302c、人差し指ボタン302g、中指ボタン302hの検出値として、それぞれ「中間」、「中間」、および「1」を受信する。さらに、左コントローラ330の位置および傾きの検出値として、位置PL2および傾きDL2を受信する。
これらの検出値は、判定テーブル243において「エネルギーEC」に関連付けられている右コントローラ320および左コントローラ330の各判定値に一致する。したがって、付加オブジェクト制御部234は、付加オブジェクトとしてエネルギーECを仮想空間2に規定する。
この後、制御回路部200が視界画像26を生成することによって、図14の(a)に示す視界画像26をHMD110のディスプレイ112に表示させることができる。
ユーザは、エネルギーECをディスプレイ112に表示させた後、右コントローラ320および左コントローラ330を適宜操作することによって、図14の(b)に示すように、敵キャラクタを攻撃するためのソードEDを、ディスプレイ112に表示させることができる。図14の(b)では、視界画像26は、背景画像、敵キャラクタOBおよびOC、仮想右手HR、仮想左手HL、およびソードEDを含んでいる。ソードEDは、付加オブジェクトの一種である。
図14の(b)に示す視界画像26をディスプレイ112に表示させるための手順を以下に説明する。エネルギーECの表示後、ユーザは、右コントローラ320の傾きおよび左コントローラ330の傾きをそれぞれ維持したまま、仮想右手HRと仮想左手HLとが視界画像26において互いに遠ざかるように、右手と左手とを互いに遠ざける。これにより、右コントローラ320および左コントローラ330の位置が、互いに離間するように経時的に変化する。
コントローラ検出部213は、経時的にコントローラセンサ140から受信する位置の各検出値に基づき、右コントローラ320の位置および左コントローラ330の位置が、互いに離間するようにそれぞれ移動していることを検出する。コントローラ検出部213は、この検出に基づき、右コントローラ320および左コントローラ330の位置の検出値として、いずれも「離間移動」を生成する。右コントローラ320の押下状態および傾きの検出値、ならびに左コントローラ330の押下状態および傾きの検出値は、エネルギーECの表示時から変わりない。これらの各検出値は、判定テーブル243において「ソードED」に関連付けられている各判定値に一致する。そこで付加オブジェクト制御部234は、付加オブジェクトとしてソードEDを仮想空間2に規定する。
この後、制御回路部200が視界画像26を生成することによって、図14の(b)に示す視界画像26をHMD110のディスプレイ112に表示させることができる。図14の(c)に示すように、ユーザは、生成したソードEDを仮想右手HRまたは仮想左手HLで掴んで利用することができる。たとえば、ソードEDを振り回して敵キャラクタOBまたはOCを斬りつけたり、ソードEDを敵キャラクタOBまたはOCに投げつけたりすることができる。
(シールドEE)
図11の処理によってディスプレイ112に表示される視界画像26の他の例を、図15に示す。図15は、ディスプレイ112に表示される視界画像26のさらに他の例を示す図である。図15の(a)では、視界画像26は、背景画像、敵キャラクタ(オブジェクト)OBおよびOC、仮想右手HR、仮想左手HL、およびシールドEEを含んでいる。
シールドEEは、付加オブジェクトの一種である。ユーザは、図14の(b)に示すソードEDを表示させた後、両手を回転移動させることによって、シールドEEを表示させることができる。
図15の(b)に示す視界画像26をディスプレイ112に表示させるための手順を、以下に説明する。ソードEDの表示後、ユーザは、右コントローラ320の傾きおよび左コントローラ330の傾きをそれぞれ維持したまま、仮想右手HRと仮想左手HLとがソードEDの中央を原点とする円上を動くように、右手および左手を動かす。これにより、右コントローラ320および左コントローラ330の位置が、いずれも回転運動をするように経時的に変化する。
コントローラ検出部213は、経時的にコントローラセンサ140から受信する位置の各検出値に基づき、右コントローラ320の位置および左コントローラ330の位置が、いずれも回転移動していることを検出する。コントローラ検出部213は、この検出に基づき、右コントローラ320および左コントローラ330の位置の検出値として、いずれも「回転移動」を生成する。右コントローラ320の押下状態および傾きの検出値、ならびに左コントローラ330の押下状態および傾きの検出値は、ソードEDの表示時から変わりない。これらの各検出値は、判定テーブル243において「シールド」に関連付けられている各判定値に一致する。そこで付加オブジェクト制御部234は、付加オブジェクトとしてシールドEEを仮想空間2に規定する。
この後、制御回路部200が視界画像26を生成することによって、図15の(a)に示す視界画像26をHMD110のディスプレイ112に表示させることができる。図15の(b)に示すように、ユーザは、生成したシールドEEを仮想右手HRまたは仮想左手HLで掴んで利用することができる。たとえば、シールドEEを敵キャラクタの前に配置することによって、敵キャラクタからの攻撃を防ぐことができる。
本実施形態では、図12、図14、および図15に示すように、ユーザの仮想右手HRおよび仮想左手HLとの関係(位置関係)に応じた様々な付加オブジェクトが、仮想空間2に登場する。すなわちユーザは、両手を用いた幅広い範囲内での様々なポーズを取ることによって、仮想空間2の状態を様々に変化させることができる。ユーザは、両手を使った様々なポーズを取るために、両手をダイナミックに動かす必要がある。このような動きを通じて、ユーザは、仮想空間2における己の姿に高い躍動感と満足感(自尊心)を覚えることもできる。したがって、本実施形態によれば、エンタテインメント性の高い仮想空間2をユーザに提供することができる。
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能である。異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態も、本発明の技術的範囲に含まれる。各実施形態にそれぞれ開示された技術的手段を組み合わせることによって、新しい技術的特徴を形成することもできる。
たとえば制御回路部200は、視界方向ではなく視線方向N0を、基準視線5として特定してもよい。この場合、ユーザが視線を変化させるとそれに連動して仮想カメラ1の向きが変わるので、視界領域23の位置も視線変化に連動して変化する。その結果、視界画像26の内容が視線変化に応じて変化することになる。
また、制御回路部200は、ユーザの右手の状態を表す情報およびユーザの左手の状態を表す情報の双方に基づき、オブジェクトとしての機能を持たない単なる付加画像を、仮想空間2に生成してもよい。
〔ソフトウェアによる実現例〕
制御回路部200の制御ブロック(検出部210、表示制御部220、仮想空間制御部230、記憶部240、および通信部250)は、集積回路(ICチップ)等に形成された論理回路(ハードウェア)によって実現してもよいし、CPU(Central Processing Unit)を用いてソフトウェアによって実現してもよい。
後者の場合、制御ブロックは、各機能を実現するソフトウェアであるプログラムの命令を実行するCPU、前記プログラムおよび各種データがコンピュータ(又はCPU)で読み取り可能に記録されたROM(Read Only Memory)または記憶装置(これらを「記録媒体」と称する)、前記プログラムを展開するRAM(Random Access Memory)等を備えている。そして、コンピュータ(又はCPU)が前記プログラムを前記記録媒体から読み取って実行することにより、本発明の目的が達成される。前記記録媒体としては、「一時的でない有形の媒体」、例えば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路等を用いることができる。また、前記プログラムは、該プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して前記コンピュータに供給されてもよい。なお、本発明は、前記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
〔付記事項〕
本発明の一側面にかかる内容を列記すると以下の通りである。
(項目1)ヘッドマウントディスプレイ(以下、HMD)を装着したユーザに仮想空間を提供する方法であって、前記仮想空間を規定するステップと、前記仮想空間における前記ユーザの基準視線を特定するステップと、前記ユーザの右手の状態を表す情報および前記ユーザの左手の状態を表す情報を取得するステップと、前記右手の状態を表す情報および前記左手の状態の双方に基づく付加画像を、前記仮想空間に生成するステップと、前記基準視線に基づき、前記付加画像を少なくとも含む視界画像を生成するステップと、前記視界画像を前記HMDに表示させるステップとを有する、仮想空間を提供する方法。ユーザが両手を用いた幅広い範囲内の様々なポーズを取ることによって仮想空間の状態を様々に変化させることができるので、エンタテインメント性の高い仮想空間をユーザに提供することができる。
(項目2)前記右手の状態を表す情報に基づき、前記仮想空間に仮想右手を生成するステップと、前記左手の状態を表す情報に基づき、前記仮想空間に仮想左手を生成するステップと、をさらに有しており、前記付加画像を生成するステップにおいて、前記仮想空間における前記仮想右手および前記仮想左手の関係に基づく前記付加画像を生成し、前記視界画像を生成するステップにおいて、前記仮想右手および前記仮想左手をさらに含む前記視界画像を生成する、項目1の仮想空間を提供する方法。ユーザの右手および左手にそれぞれ対応した仮想右手および仮想左手が生成されるので、仮想空間のリアリティをより高めることができる。
(項目3)前記右手の状態を表す情報および前記左手の状態を表す情報を取得するステップにおいて、前記ユーザが右手に持つ右コントローラの検出値および前記ユーザが左手に持つ左コントローラの検出値を、前記右手の状態を表す情報および前記左手の状態を表す情報としてそれぞれ取得する、項目1または2の仮想空間を提供する方法。ユーザの右手の状態を表す情報および左手を表す情報を簡易に取得することができる。
(項目4)前記付加画像を生成するステップにおいて、前記仮想空間に前記付加画像として付加オブジェクトを生成する、項目1〜3のいずれか1つの仮想空間を提供する方法。ユーザの両手の関係に応じた付加オブジェクトを仮想空間内に登場させることができる。
(項目5)前記仮想空間において前記付加画像による影響を受けるオブジェクトを特定するステップと、特定された前記オブジェクトに対する前記影響を、前記仮想空間に反映させるステップとをさらに有する、項目1〜4のいずれか1つの仮想空間を提供する方法。ユーザが両手を適宜動かすことによって仮想空間内のオブジェクトに影響を与えることができる。
(項目6)前記影響を受けるオブジェクトを特定するステップにおいて、前記仮想空間において前記付加画像の表示範囲に重畳するオブジェクトを、前記付加画像による影響を受けるオブジェクトとして特定する、項目5の仮想空間を提供する方法。影響を受けるオブジェクトを適切に特定することができる。
(項目7)前記ユーザの視線方向を特定するステップをさらに有し、前記影響を受けるオブジェクトを特定するステップにおいて、前記付加画像および前記視線方向に基づき、前記影響を受けるオブジェクトを特定する、項目4または5の仮想空間を提供する方法。ユーザが注意を向けた領域内のオブジェクトに影響を与えることができる。
(項目8)前記HMDのロール方向を特定するステップをさらに有し、前記影響を受けるオブジェクトを特定するステップにおいて、前記付加画像および前記ロール方向に基づき、前記影響を受けるオブジェクトを特定する、項目5または6の仮想空間を提供する方法。ユーザの正面にある領域内のオブジェクトに影響を与えることができる。
(項目9)項目1〜8のいずれか1つの仮想空間を提供する方法の各ステップを、コンピュータに実行させるプログラム。
(項目10)項目9のプログラムを記録したコンピュータ読み取り可能な記録媒体。