[本発明の実施形態の詳細]
本発明の実施形態に係る仮想空間を提供する方法、および、プログラムの具体例を、以下に図面を参照しつつ説明する。本発明はこれらの例示に限定されるものではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が本発明に含まれることが意図される。以下の説明では、図面の説明において同一の要素には同一の符号を付し、重複する説明を繰り返さない。
(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を装着したユーザが物体を見る際の視点座標系に対応する。
(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つの仮想カメラには、ユーザが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を受信した場合も、両者の交点である注視点N1(不図示)を特定する。制御回路部200は、特定した注視点N1に基づき、ユーザUの視線方向N0を検出する。制御回路部200は、たとえば、ユーザUの右目Rと左目Lとを結ぶ直線の中点と、注視点N1とを通る直線の伸びる方向を、視線方向N0として検出する。視線方向N0は、ユーザUが両目により実際に視線を向けている方向である。視線方向N0はまた、視界領域23に対してユーザUが実際に視線を向けている方向でもある。
HMDシステム100は、HMDシステム100を構成するいずれかの要素に、マイクおよびスピーカを備えていてもよい。これにより、ユーザは仮想空間2内に対して、音声による指示を与えることができる。また、仮想空間内の仮想テレビにテレビ番組の放送を受信するために、HMDシステム100はいずれかの要素にテレビジョン受像機を含んでいてもよい。また、ユーザが取得した電子メール等を表示させるための、通信機能等を含んでいてもよい。
(コントローラ300)
コントローラ300は、ユーザの身体の一部の動きを検知することにより、仮想オブジェクトの動きを制御するために用いる装置の一例である。図1に示すように、コントローラ300は、ユーザが右手に持って使用する右コントローラ320と、ユーザが左手に持って使用する左コントローラ330とからなる。右コントローラ320および左コントローラ330は、それぞれ別体の装置として構成される。ユーザは、右コントローラ320を持った右手と、左コントローラ330を持った左手とを動かすことにより、ユーザの手の動きに連動する仮想オブジェクト(以下、状況に応じて、可動オブジェクト、または具体的に、仮想手、仮想右手、仮想左手、などと称することがある。)を、自由に動かすことができる。なお、ユーザの頭部以外である身体の一部の動きを検知するための方法は、当該身体の一部に装着されるセンサを含むコントローラを用いる例に限られず、画像認識、その他任意の物理的、光学的な手法等を適用できる。例えば、外部カメラを用いてユーザの身体の一部の初期位置を特定し、継続的にユーザの身体の一部の位置を特定することにより、ユーザの頭部以外である身体の一部の動きを検知できる。以下の説明においては、コントローラ300を用いたユーザの頭部以外である身体の一部の動きの検知について詳述する。
図1に示すように、右コントローラ320および左コントローラ330は、それぞれ、操作ボタン302、赤外線LED(Light Emitting Diode)304、センサ306、およびトランシーバ308を備えている。右コントローラ320および左コントローラ330は、赤外線LED304およびセンサ306のうちいずれか一方のみを備えていてもよい。図7は、右コントローラ320の構成を表す図である。以下の説明において、右コントローラ320および左コントローラ330は共通の構成を有するため、右コントローラ320の構成のみを説明する。
コントローラセンサ140は、右コントローラ320の動きを検出するためのポジション・トラッキング機能を有する。コントローラセンサ140は、現実空間内における右コントローラ320の位置および傾きを検出する。コントローラセンサ140は、右コントローラ320の赤外線LED304から発せられた赤外光を、それぞれ検出する。コントローラセンサ140は、赤外波長領域において画像を撮像する赤外カメラを備えており、この赤外カメラによって撮像した画像のデータに基づき、右コントローラ320の位置および傾きを検出する。
コントローラセンサ140の代わりに、右コントローラ320が、センサ306を用いて自身の位置および傾きを検出してもよい。この場合、右コントローラ320の三軸角速度センサ(センサ306)が、右コントローラ320の3つの直交する各軸回りの回転を検出する。右コントローラ320は、各検出値に基づき、右コントローラ320がどちらの方向にどれだけ回転したかを検出し、逐次検出した回転方向と回転量とを累積することによって、右コントローラ320の傾きを算出する。右コントローラ320は、三軸角速度センサの検出値に加えて、三軸磁気センサおよび/または三軸加速度センサからの検出値を併用してもよい。
操作ボタン302は、コントローラ300に対するユーザからの操作入力を受け取るように構成された複数のボタン群である。本実施形態では、操作ボタン302は、プッシュ式ボタン、トリガー式ボタン、およびアナログスティックを含む。
プッシュ式ボタンは、親指で下向きに押下する動作によって操作するように構成されたボタンである。右コントローラ320は、プッシュ式ボタンとして、天面322上に親指ボタン302aおよび302bを備えている。親指ボタン302aおよび302bは、いずれも右手の親指によって操作(押下)される。右手の親指によって親指ボタン302aおよび302bが押下され、または、天面322上に親指が配置されることにより、仮想右手の親指が伸ばした状態から曲げられた状態に変化される。
トリガー式ボタンは、人差し指または中指で引き金を引くような動作によって操作するように構成されたボタンである。右コントローラ320は、トリガー式ボタンとして、グリップ324の前面部分に人差し指ボタン302eを備えている。人差し指ボタン302eを右手の人差し指によって操作することにより、仮想右手の人差し指が伸ばした状態から曲げられた状態に変化される。また、グリップ324の側面部分に中指ボタン302fを備えている。中指ボタン302fを右手の中指によって操作することにより、仮想右手の中指、薬指、小指が伸ばした状態から曲げられた状態に変化される。
右コントローラ320は、親指ボタン302aおよび302b、人差し指ボタン302e、ならびに中指ボタン302fの押下状態をそれぞれ検出し、これらの検出値を制御回路部200に出力する。
本実施形態では、右コントローラ320の各ボタンの押下状態の検出値は、0から1のいずれかの値を取り得る。たとえば、ユーザが親指ボタン302aをまったく押下していない場合、親指ボタン302aの押下状態として「0」が検出される。一方、ユーザが親指ボタン302aを完全に(最も深く)押下している場合、親指ボタン302aの押下状態として「1」が検出される。これにより、仮想手における各指の曲がり具合を調整してもよい。例えば、「0」の状態を指が伸びている状態として定義し、「1」の状態を指が曲げられている状態として定義することにより、ユーザは直感的な動作によって仮想手の指を制御することができる。
アナログスティックは、所定のニュートラル位置から360°任意の方向へ傾けて操作することが可能なスティック型のボタンである。右コントローラ320の天面322上にアナログスティック302iが設けられる。アナログスティック302iは、右手の親指によって操作される。
右コントローラ320は、グリップ324の両側面から天面322とは反対側の方向へ延びて半円状のリングを形成するフレーム326を備えている。フレーム326の外表面には、複数の赤外線LED304が埋め込まれている。
赤外線LED304は、コンピュータゲームのプレイ中に赤外線を発光する。赤外線LED304から発せられた赤外光は、右コントローラ320の位置および傾きを検出するために利用される。
右コントローラ320は、赤外線LED304の代わりに、または赤外線LED304に加えて、さらにセンサ306を内蔵する。センサ306は、たとえば磁気センサ、角速度センサ、若しくは加速度センサのいずれか、またはこれらの組み合わせであってよい。センサ306によって、右コントローラ320の位置および傾きを検出することができる。
トランシーバ308は、右コントローラ320と、制御回路部200との間でデータを送受信するように構成される。トランシーバ308は、ユーザが操作ボタン302を介して右コントローラ320に与えた操作入力に基づくデータを、制御回路部200へ送信する。また、トランシーバ308は、赤外線LED304の発光を右コントローラ320に指示する命令を、制御回路部200から受信する。さらに、トランシーバ308は、センサ306によって検出した各種の値に対応するデータを、制御回路部200へ送信する。
右コントローラ320は、ユーザの手に振動による触覚フィードバックを伝えるためのバイブレータを備えていてもよい。この構成では、トランシーバ308は、上述した各データの送受信に加えて、バイブレータに触覚フィードバックを行わせるための命令を制御回路部200から受信することができる。
(制御回路部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、ユーザインターフェース(UI)オブジェクト制御部233、および、移動先特定部234を備えている。
仮想空間規定部231は、ユーザに提供される仮想空間2を表す仮想空間データを生成することによって、HMDシステム100における仮想空間2を規定する。仮想手制御部232は、ユーザによる右コントローラ320および左コントローラ330の操作に応じたユーザの各仮想手(仮想右手および仮想左手)を仮想空間2内に配置すると共に、仮想空間2内における各仮想手の挙動を制御する。
UIオブジェクト制御部233は、UIオブジェクトを仮想空間2内に配置すると共に、仮想空間2におけるUIオブジェクトの挙動を制御する。UIオブジェクトとは、仮想空間2に配置される仮想オブジェクトのうち、仮想カメラ1の移動先を指定するためのオブジェクトである。UIオブジェクトは、仮想空間2における位置に関する属性を含む。属性は、仮想空間における座標情報などを含む。座標情報は、UIオブジェクトの中心の座標、UIオブジェクトの外縁の座標、複数のUIオブジェクトの交点の座標などを示す情報である。UIオブジェクト制御部233は、ユーザによって入力される第1操作に基づいて、1以上のUIオブジェクトを配置し、配置したUIオブジェクトの上記座標情報を変更することにより、1以上の属性を変更する。
移動先特定部234は、UIオブジェクトの属性に基づいて仮想カメラ1の移動先を特定する。移動先特定部234は、第1操作が入力された後、ユーザによって第2操作が入力された時点のUIオブジェクトの属性に基づいて、仮想空間2における、UIオブジェクトの所定の位置の座標を特定する。そして、当該座標を仮想カメラ1の移動先として特定する。移動先特定部234は、特定した移動先の仮想空間2における座標を、仮想カメラ制御部221に出力する。
記憶部240は、制御回路部200が仮想空間2をユーザに提供するために用いる各種のデータを格納している。記憶部240は、雛形格納部241、コンテンツ格納部242、および変更規則格納部243を備えている。雛形格納部241は、仮想空間2の雛形を表す各種の雛形データを格納している。コンテンツ格納部242は、仮想空間2において再生可能な各種のコンテンツを格納している。変更規則格納部243は、UIオブジェクトの属性を変更するときの変更規則を格納している。UIオブジェクト制御部233は、第1操作に応じて、前記変更規則にしたがってUIオブジェクトの属性を変更する。
雛形データは、仮想空間2の空間構造を規定する空間構造データを有する。空間構造データは、たとえば、中心21を中心とする360°の全天球の空間構造を規定するデータである。雛形データは、仮想空間2のXYZ座標系を規定するデータをさらに有する。雛形データは、天球を構成する各メッシュのXYZ座標系における位置を特定する座標データをさらに有する。また、雛形データは、仮想空間2内に仮想オブジェクトを配置可能であるか否かを示すフラグをさらに有する。
コンテンツは、仮想空間2において再生可能なコンテンツである。本実施形態では、このコンテンツはゲームコンテンツである。コンテンツは、ゲームの背景画像、および、ゲームに登場する仮想オブジェクト(キャラクタ、アイテム等)を規定するデータを少なくとも有する。各コンテンツには、HMD110の初期状態(起動時)にユーザに見せる画像を向いた初期方向が、予め規定されている。
通信部250は、ネットワークNWを介して外部機器400(たとえばゲームサーバ)との間でデータを送受信する。
(仮想空間2の提供処理)
図9は、HMDシステム100が仮想空間2をユーザに提供する処理の流れを示すシーケンス図である。仮想空間2は、基本的に、HMD110および制御回路部200の協働によってユーザに提供される。まず、ステップS1において、仮想空間規定部231が、ユーザに提供される仮想空間2を表す仮想空間データを生成することによって、仮想空間2を規定する。生成の手順は次の通りである。まず仮想空間規定部231は、仮想空間2の雛形データを雛形格納部241から取得することによって、仮想空間2の原型を定義する。仮想空間規定部231は、さらに、仮想空間2において再生されるコンテンツを、コンテンツ格納部242から取得する。本実施形態では、このコンテンツはゲームコンテンツである。
仮想空間規定部231は、取得した雛形データに、取得したコンテンツを適合することによって、仮想空間2を規定する仮想空間データを生成する。仮想空間規定部231は、仮想空間データにおいて、仮想空間2の天球を構成する各メッシュの管理データに、コンテンツに含まれる背景画像を構成する各部分画像を適宜関連付ける。仮想空間規定部231は、コンテンツに規定される初期方向を仮想空間2のXYZ座標系におけるZ方向に合致させるように、各部分画像と各メッシュとを関連付けることが好ましい。
仮想空間規定部231は、さらに、必要に応じて、コンテンツに含まれる各仮想オブジェクトの管理データを、仮想空間データに追加する。その際、各管理データに、対応する仮想オブジェクトが仮想空間2において配置される位置を表す座標を、設定する。これにより各仮想オブジェクトが、仮想空間2における当該座標の位置にそれぞれ配置される。
その後、ユーザによってHMD110が起動されると、ステップS2において、HMDセンサ120が、HMD110の初期状態における位置および傾きを検出して、ステップS3において、検出値を制御回路部200に出力する。HMD検出部211は、この検出値を受信する。この後、ステップS4において、仮想カメラ制御部221は、仮想空間2において仮想カメラ1を初期化する。
初期化の手順は次の通りである。まず仮想カメラ制御部221は、仮想空間2内における初期位置(図4における中心21等)に、仮想カメラ1を配置する。次に、仮想空間2における仮想カメラ1の向きを設定する。その際、仮想カメラ制御部221は、HMDセンサ120からの検出値に基づき初期状態のHMD110のuvw視野座標系を特定すると共に、HMD110のuvw視野座標系に一致するuvw視野座標系を仮想カメラ1に設定することによって、仮想カメラ1の向きを設定すればよい。仮想カメラ制御部221は、仮想カメラ1にuvw視野座標系を設定する際、仮想カメラ1のロール方向(w軸)をXYZ座標系のZ方向(Z軸)に適合させる。具体的には、仮想カメラ制御部221は、仮想カメラ1のロール方向をXZ平面に投影して得られる方向を、XYZ座標系のZ方向に一致させると共に、XZ平面に対する仮想カメラ1のロール方向の傾きを、水平面に対するHMD110のロール方向の傾きに一致させる。このような適合処理によって、初期状態の仮想カメラ1のロール方向がコンテンツの初期方向に適合されるので、コンテンツの再生開始後におけるユーザが最初に向く水平方向の向きを、コンテンツの初期方向に一致させることができる。
仮想カメラ1の初期化処理が終わると、視界領域決定部222は、仮想カメラ1のuvw視野座標系に基づき、仮想空間2における視界領域23を決定する。具体的には、仮想カメラ1のuvw視野座標系のロール方向(w軸)をユーザの基準視線5として特定し、この基準視線5に基づき視界領域23を決定する。ステップS5において、視界画像生成部223は、仮想空間データを処理することによって、仮想空間2に展開される仮想空間画像22の全体のうち、仮想空間2における視界領域23に投影される部分に相当する視界画像26を生成(レンダリング)する。ステップS6において、視界画像生成部223は、生成した視界画像26を初期視界画像としてHMD110に出力する。ステップS7において、HMD110は、受信した初期視界画像をディスプレイ112に表示する。これによりユーザは初期視界画像を視認する。
その後、ステップS8において、HMDセンサ120が、HMD110の現在の位置および傾きを検出して、ステップS9において、これらの検出値を制御回路部200に出力する。HMD検出部211は、各検出値を受信する。仮想カメラ制御部221は、HMD110の位置および傾きの検出値に基づき、HMD110における現在のuvw視野座標系を特定する。さらに、ステップS10において、仮想カメラ制御部221は、XYZ座標系におけるuvw視野座標系のロール方向(w軸)を、HMD110の視界方向として特定する。
本実施形態では、ステップS11において、仮想カメラ制御部221が、特定したHMD110の視界方向を、仮想空間2におけるユーザの基準視線5として特定する。ステップS12において、仮想カメラ制御部221は、特定した基準視線5に基づき、仮想カメラ1を制御する。仮想カメラ制御部221は、基準視線5の位置(起点)および方向が仮想カメラ1の初期状態と同一であれば、仮想カメラ1の位置および方向をそのまま維持する。一方、基準視線5の位置(起点)および/または方向が、仮想カメラ1の初期状態から変化していれば、仮想空間2内における仮想カメラ1の位置および/または傾きを、変化後の基準視線5に応じた位置および/または傾きに変更する。また、制御後の仮想カメラ1に対してuvw視野座標系を再設定する。
ステップS13において、視界領域決定部222は、特定した基準視線5に基づき、仮想空間2における視界領域23を決定する。その後、ステップS14において、視界画像生成部223は、仮想空間データを処理することによって、仮想空間2に展開される仮想空間画像22の全体のうち、仮想空間2における視界領域23に投影(重畳)される部分である視界画像26を生成(レンダリング)する。ステップS15において、視界画像生成部223は、生成した視界画像26を更新用の視界画像としてHMD110に出力する。ステップS16において、HMD110は、受信した視界画像26をディスプレイ112に表示することによって、視界画像26を更新する。これにより、ユーザがHMD110を動かせば、それに連動して視界画像26が更新される。
<仮想カメラの移動方法−概要>
制御回路部200は、移動方法を実行することによって、ユーザに対して、仮想空間2を移動するための、操作性に優れたユーザインターフェースを提供する。制御回路部200は、仮想カメラ1の移動先を指定する仮想オブジェクトを仮想空間2に配置する。仮想オブジェクトは、ユーザが移動先を指定するためのユーザインターフェースを実現するUIオブジェクトである。
制御回路部200は、ユーザにより入力された第1操作を受け付け、第1操作に基づいて、仮想空間2におけるUIオブジェクトの位置に関する属性を変更する。制御回路部200は、第1操作よりも後にユーザにより入力された第2操作を受け付けて、第2操作が入力された時点のUIオブジェクトの属性に基づいて、仮想カメラ1の移動先を特定する。制御回路部200は、特定した移動先に仮想カメラ1を移動させる。
(移動方法の一例)
UIオブジェクト制御部233は、UIオブジェクトを、仮想カメラ1を囲むように配置する。検出部210が第1操作を受け付けると、UIオブジェクト制御部233は、仮想空間2におけるUIオブジェクトの外縁の位置を、第1操作に含まれる経時的情報に基づいて変更する。第1操作の受け付け時点から時間が経過するのに伴って、UIオブジェクトの大きさを変更してもよい。本方法において、UIオブジェクトは、移動の距離を指定するためのオブジェクトである。
第1操作を受け付けた後、検出部210は、仮想カメラ1の移動方向を特定するための入力をユーザから受け付ける。検出部210は、受け付けた入力内容に基づいて、HMD110の傾き、または、ユーザの視線方向を特定する。移動先特定部234は、特定された傾きまたは視線方向に基づいて、移動方向を特定してもよい。
移動先特定部234は、ユーザによって第2操作が入力されると、第2操作の入力時点における、移動方向とUIオブジェクトの外縁とに基づいて、UIオブジェクトの属性を特定する。そして、特定した属性に基づいて、仮想カメラ1の移動先を特定する。移動先特定部234は、仮想空間2における、移動方向と外縁との交点の座標を、仮想カメラ1の移動先として特定してもよい。
図10は、移動方法の一例を示す図であり、図11は、該移動方法を実行するHMDシステム100の処理の流れを説明するフローチャートである。UIオブジェクトは、例えば円オブジェクト40である。第1操作および第2操作は、例えばコントローラ300を介してなされる。移動方向を特定するための入力は、例えばHMD110を所望の方向に向けることによってなされる。
ステップS21において、コントローラ検出部213は、コントローラ300から受信した検出値に基づき、第1操作の入力有無を検出する。ステップS21でYESの場合、ステップS22において、UIオブジェクト制御部233は、円オブジェクト40を仮想空間2内に配置する。UIオブジェクト制御部233は、円オブジェクト40を、仮想カメラ1の位置が円オブジェクト40の中心となるように配置してもよい。
ステップS23において、UIオブジェクト制御部233は、第2操作が入力されるまで(ステップS26でNO)、円オブジェクト40の属性を変更する。UIオブジェクト制御部233は、円オブジェクト40の中心を仮想カメラ1の位置に維持したまま、経時的情報に基づいて、円オブジェクト40の半径を徐々に延ばしてもよい。円オブジェクト40は、仮想カメラ1を中心として、波紋が広がっていくように、HMD110に提示されてもよい。経時的情報は、第1操作の検出値に基づいて、コントローラ検出部213によって特定される。経時的情報は、ボタンが押下された時点からの経過時間、ボタンが押下され続けている時間、ある期間中にボタンが押下された回数などである。
ステップS24において、HMD検出部211は、仮想カメラ1の移動方向を特定するための入力として、HMDセンサ120から送信される検出値を受信する。HMD検出部211は、受信した検出値に基づいて、HMD110の視界方向を特定する。
ステップS24でYESの場合、ステップS25において、移動先特定部234は、特定された視界方向に基づいて移動方向を特定する。該移動方向を示す視線41は、レーザビームのような態様でHMD110に提示されてもよい。
ステップS26において、コントローラ検出部213は、コントローラ300から受信した検出値に基づき、第2操作の入力有無を検出する。ステップS26でYESの場合、ステップS27において、移動先特定部234は、第2操作が入力された時点の、円オブジェクト40の属性を特定する。例えば、円オブジェクト40の外縁と視線41との交点50を特定してもよい。
ステップS28において、移動先特定部234は、仮想空間2における、特定した交点50の座標を取得し、当該座標に基づいて仮想カメラ1の移動先を特定する。移動先特定部234は、取得した座標をそのまま移動先として特定してもよいし、該座標を基準にして所定の規則に基づいて算出した座標を移動先として特定してもよい。
ステップS29において、仮想カメラ制御部221は、移動先特定部234が移動先として特定した座標が示す位置に仮想カメラ1を移動させる。
移動後の仮想カメラ1の位置に基づいて、図9に示されているステップS8〜ステップS16の処理が実行され、HMD110に表示される視界画像が更新される。該視界画像は、第2操作が入力されることによって仮想カメラ1の移動先が確定したときに、該移動先の位置にワープするように切り替わってもよい。
本方法によれば、ユーザは、第1操作を入力することにより、UIオブジェクトの属性の変更を開始させる。そして、属性の変化を観察しながら移動したい方向に視線41を向ける。属性が変更されている間、ユーザは自由に視線41を送る方向を変更することができる。視線41は、視線方向または視界方向である。ユーザは、所望の移動距離にUIオブジェクトの外縁が到達したタイミングで第2操作を入力することにより、UIオブジェクトの外縁を確定させる。これにより、UIオブジェクトの外縁と視線41とに基づいて、仮想カメラ1の移動先が特定される。以上のとおり、ユーザは、第2操作による1度の操作によって、移動距離と移動方向とを同時に指定することができる。この結果、HMDシステム100における、仮想空間の移動に係る操作性が向上し、仮想空間への没入感が改善される。
(移動方法の他の例)
本方法において、第1操作は、ユーザの身体の一部に連動するように仮想空間2内を動作する可動オブジェクトの動作を入力する操作である。UIオブジェクト制御部233は、UIオブジェクトが仮想空間2を移動するときの移動態様を、可動オブジェクトの動作に基づいて、当該UIオブジェクトに特徴付ける。UIオブジェクト制御部233は、移動態様に基づいて、仮想空間2におけるUIオブジェクトを移動させることにより、UIオブジェクトの位置に関する属性を変更する。移動先特定部234は、第2操作が入力された時点の移動態様に基づいて、仮想空間2におけるUIオブジェクトの位置を特定する。移動先特定部234は、特定した位置の座標に基づいて仮想カメラ1の移動先を特定する。
図12は、移動方法の他の例を示す図であり、図13は、該移動方法を実現するHMDシステム100の処理の流れを説明するフローチャートである。可動オブジェクトは、例えば仮想手である。仮想手を動作させるための第1操作は、例えばユーザがコントローラ300を所望の速度で所望の方向に動かしたり、傾けたりすることによってなされる。UIオブジェクトは、例えば仮想手の動作に基づいて仮想空間2内を移動する、移動オブジェクト42である。
ステップS41において、コントローラ検出部213は、コントローラセンサ140から受信した検出値に基づき、第1操作の入力有無を検出する。ステップS41でYESの場合、ステップS42において、仮想手制御部232は、検出値に基づいて特定された、コントローラ300の位置および傾きに基づいて、仮想手を動作させる。
ステップS43において、UIオブジェクト制御部233は、移動オブジェクト42の移動態様を、仮想手の動作に基づいて特定し、特定した移動態様を移動オブジェクト42に特徴付ける。UIオブジェクト制御部233は、動作した仮想手の初速および初速ベクトルに少なくとも基づいて、移動オブジェクト42に移動態様を特徴付けてもよい。
ステップS44において、UIオブジェクト制御部233は、移動態様に基づいて、仮想空間2に配置した移動オブジェクト42を移動させることにより、移動オブジェクト42の属性を変更する。UIオブジェクト制御部233は、第2操作が入力されるまで(ステップS45でNO)、移動オブジェクト42の移動を継続してもよい。
ステップS45において、コントローラ検出部213は、コントローラ300から受信した検出値に基づき、第2操作の入力有無を検出する。ステップS45でYESの場合、ステップS46において、移動先特定部234は、第2操作が入力された時点の、仮想空間2における移動オブジェクト42の位置を特定する。
ステップS47において、移動先特定部234は、移動オブジェクト42の位置の仮想空間2における座標を取得し、当該座標に基づいて仮想カメラ1の移動先を特定する。移動先特定部234は、取得した座標をそのまま移動先として特定してもよいし、該座標を基準にして所定の規則に基づいて算出した座標を移動先として特定してもよい。ステップS48以降は、上述のステップS29以降と同様である。
本方法によれば、ユーザは、第2操作による1度の操作によって、移動先を指定することができる。この結果、HMDシステム100における、仮想空間の移動に係る操作性が向上し、仮想空間への没入感が改善される。
(移動方法のさらに他の例)
本方法において、UIオブジェクトは、第1操作に含まれる方向情報に基づいて仮想空間2内を移動するアバターである。UIオブジェクト制御部233は、該方向情報に基づいて、アバターを仮想空間2内の任意の位置に移動させることにより、属性を変更する。移動先特定部234は、第2操作が入力された時点のアバターの位置の、仮想空間2における位置を特定する。移動先特定部234は、特定した位置の座標に基づいて仮想カメラ1の移動先を特定する。
図14は、移動方法のさらに他の例を示す図であり、図15は、当該移動方法を実現するHMDシステム100の処理の流れを説明するフローチャートである。アバターを動かすための第1操作は、ユーザが、方向情報を入力することによってなされる。UIオブジェクトは、該方向情報に基づいて仮想空間2内を移動する、アバター43である。
ステップS61において、コントローラ検出部213は、コントローラ300から受信した検出値に基づき、第1操作の入力有無を検出する。ステップS61でYESの場合、ステップS62において、UIオブジェクト制御部233は、アバター43を仮想空間2内に配置する。
ステップS63において、UIオブジェクト制御部233は、第1操作に含まれる方向情報に基づいて、アバター43を移動させる。さらに、方向情報に基づいて、アバター43の向きを変更してもよい。
ステップS64において、コントローラ検出部213は、コントローラ300から受信した検出値に基づき、第2操作の入力有無を検出する。ステップS64でYESの場合、ステップS65において、移動先特定部234は、第2操作が入力された時点の、仮想空間2におけるアバター43の位置を特定する。なお、必要に応じてさらに向きを特定してもよい。
ステップS66において、移動先特定部234は、アバター43の位置の仮想空間2における座標を取得し、当該座標に基づいて仮想カメラ1の移動先を特定する。移動先特定部234は、取得した座標をそのまま移動先として特定してもよいし、該座標を基準にして所定の規則に基づいて算出した座標を移動先として特定してもよい。移動先特定部234は、必要に応じて、アバター43の向きを仮想カメラ1の移動後の向きとしてさらに特定してもよい。
ステップS67において、仮想カメラ制御部221は、移動先特定部234が移動先として特定した座標が示す位置に仮想カメラ1を移動させる。仮想カメラ制御部221は、特定されたアバター43の向きに基づいて、移動後の仮想カメラ1の向きを設定してもよい。以降は、移動後の仮想カメラ1の位置および向きに基づいて、上述の各移動方法と同様に、HMD110に表示される視界画像が更新される。
仮想カメラ制御部221は、アバター43の正面方向を向く第2仮想カメラ(図示せず)を、アバター43の位置に配置してもよい。表示制御部220は、視界画像中の一部の領域に、第2仮想カメラに基づく視界画像を配置して、HMD110に表示させてもよい。
本方法によれば、ユーザは、第2操作による1度の操作によって、移動先を指定することができる。この結果、HMDシステム100における、仮想空間の移動に係る操作性が向上し、仮想空間への没入感が改善される。
(変形例)
上述の各移動方法において、制御回路部200は、視界方向ではなく視線方向N0を、基準視線5として特定してもよい。この場合、ユーザが視線を変化させるとそれに連動して仮想カメラ1の向きが変わるので、視界領域23の位置も視線変化に連動して変化する。その結果、視界画像26の内容が視線変化に応じて変化することになる。
上述の移動方法の一例において、視線検出部212が、注視センサ130から受信した検出値に基づいて、ユーザの視線方向N0を特定することにより、移動方向を特定するための入力を受け付けてもよい。
当該移動方法は、基準視線5に基づいて、ユーザが注視した仮想空間2内のオブジェクトを選択するユーザインターフェースを採用するゲームなどに適用されることが想定される。当該ゲームにおいては、視線41は、第1操作が入力される前のタイミングで、HMD110に提示されてもよい。
当該移動方法において、UIオブジェクトは、円オブジェクト40に限定されず、任意の形状で規定されてよい。また、UIオブジェクトは、円オブジェクト40のように平面で規定されてもよいし、球体などの立体で規定されてもよい。
当該移動方法において、移動先特定部234は、ステップS28において、仮想カメラ1の移動後の向きをさらに特定してもよい。
上述の移動方法の他の例において、移動オブジェクト42の属性は、向きに関する情報を含んでいてもよい。移動先特定部234は、ステップS47において、第2操作が入力された時点の移動オブジェクト42の向きを、仮想カメラ1の移動後の向きとして特定してもよい。
上述の移動方法の他の例において、移動オブジェクト42は、ボールやサイコロなど、任意の形状、体積、質量および質感を備えた物体の仮想オブジェクトである。変更規則格納部243には、移動オブジェクト42および仮想空間2の環境に関する、物理法則に係る各種情報が記憶されている。各種情報とは、移動オブジェクト42の形状、体積、質量および表面の質感、ならびに、仮想空間2の環境における重力加速度、摩擦係数および空気抵抗などである。UIオブジェクト制御部233は、各種情報を考慮し、移動オブジェクト42に特徴付けるべき移動態様を特定してもよい。一例として、物理法則は、現実空間における物理法則に相当する。UIオブジェクト制御部233は、可動オブジェクトの初速および初速ベクトルに加えて、上述の各種情報を考慮して、移動オブジェクト42の移動経路および移動速度を算出することにより、移動態様を特定してもよい。これにより、移動オブジェクト42の移動態様を現実空間における移動態様に近づけることができる。
上述の各移動方法において、UIオブジェクト制御部233は、UIオブジェクトの属性を第1操作にしたがって変更している間、当該属性によって特定される仮想カメラ1の移動経路を、メモリに一時的に記憶させておいてもよい。例えば、UIオブジェクト制御部233は、第2操作が入力されるまでの期間、アバター43の移動の軌跡44(図14)など一時的に記憶させる。視界画像生成部223は、軌跡44に基づいて、移動過渡期の視界画像も生成し、これらの視界画像を、順次、HMD110に出力してもよい。この結果、移動経路をたどって移動後の位置にたどり着くことをユーザに視認させることができる。なお、移動過渡期の各視界画像に対して、情報量を低減させる処理を施すことが好ましい。具体的には、視界画像の全体または一部の解像度を低下させることが好ましい。これにより、ユーザが映像酔いを起こしにくくなる。
また、仮想オブジェクトとの接触による操作をMR等に適用することによって仮想体験を提供する場合には、操作対象オブジェクトに換えてユーザの実際の頭部以外の身体の一部を物理的・光学的手法等によって検知し、当該身体の一部と仮想オブジェクトの位置関係に基づいて、当該身体の一部と仮想オブジェクトとの接触を判定してもよい。なお、透過型HMDを用いて仮想体験を提供する場合には、ユーザの基準視線は、非透過型HMDと同様に、HMDの動き、または、ユーザの視線を検知することによって特定してもよい。特定した基準視線に基づく判定領域の設定方法は上記実施形態で説明した通りである。
〔ソフトウェアによる実現例〕
制御回路部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の傾き、または、前記ユーザの視線方向に基づいて、前記ユーザの前記仮想空間における基準視線を特定するステップと、前記仮想空間に配置され、前記基準視線に基づいて前記ユーザに視認させる視界領域を設定する仮想カメラを特定するステップと、前記仮想カメラの移動先を指定する仮想オブジェクトを前記仮想空間に配置するステップと、ユーザにより入力された第1操作を受け付け、前記第1操作に基づいて、前記仮想オブジェクトの前記仮想空間における位置に関する属性を変更するステップと、前記第1操作よりも後にユーザにより入力された第2操作を受け付け、前記第2操作が入力された時点の前記属性に基づいて、前記仮想カメラの移動先を特定するステップと、前記移動先に前記仮想カメラを移動させるステップとを有する、方法。これにより、仮想空間への没入感を改善することができる。
(項目2)前記仮想オブジェクトを、前記仮想カメラを囲むように配置し、前記仮想空間における、前記仮想オブジェクトの外縁の位置を、前記第1操作に含まれる経時的情報に基づいて変更し、前記第1操作の入力後に、前記仮想カメラの移動方向を特定するための入力を受け付け、前記第2操作の入力時点における前記移動方向と前記外縁とに基づいて、前記属性を特定する、項目1の方法。
(項目3)前記HMDの前記傾きまたは前記ユーザの前記視線方向に基づいて、前記移動方向を特定する、項目2の方法。
(項目4)前記移動方向と前記外縁との交点の、前記仮想空間における位置に基づいて、前記属性を特定する、項目2または3の方法。
(項目5)前記仮想オブジェクトは円であり、該円の半径を前記経時的情報に基づいて変更する、項目2〜4のいずれか1つの方法。
(項目6)前記第1操作は、前記ユーザの身体の一部に連動するように前記仮想空間内を動作する可動オブジェクトの動作を入力するものであり、前記仮想オブジェクトが前記仮想空間内を移動するときの移動態様を、前記可動オブジェクトの動作に基づいて、前記仮想オブジェクトに特徴付け、前記第2操作が入力された時点の前記移動態様に基づいて、前記属性を特定する、項目1の方法。
(項目7)前記移動態様を、前記可動オブジェクトの初速および初速ベクトルに少なくとも基づいて特徴付ける、項目6の方法。
(項目8)前記仮想オブジェクトは、前記第1操作に含まれる方向情報に基づいて前記仮想空間内を移動するアバターであり、前記方向情報に基づいて前記アバターを前記仮想空間内の任意の位置に移動させることにより、前記属性を変更する、項目1の方法。
(項目9)前記アバターの正面方向を向く第2仮想カメラを、前記仮想空間における前記アバターの位置に配置するステップと、前記視界領域に基づいて生成される視界画像中の一部の領域に、前記第2仮想カメラに基づく視界画像を配置して前記HMDに表示させるステップとをさらに含む、項目8の方法。
(項目10)前記第1操作に基づいて前記仮想オブジェクトの向きを特定し、前記仮想オブジェクトの向きに基づいて前記仮想カメラの向きを設定するステップをさらに有する、項目1〜9のいずれか1つの方法。
(項目11)項目1〜12のいずれか1つの方法の各ステップを、コンピュータに実行させるプログラム。
(項目12)項目11のプログラムを記録したコンピュータ読み取り可能な記録媒体。