以下、本実施形態について説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
1.シミュレーションシステム
図1は、本実施形態のシミュレーションシステム(シミュレータ、ゲームシステム、画像生成システム)の構成例を示すブロック図である。本実施形態のシミュレーションシステムは例えばバーチャルリアリティ(VR)をシミュレートするシステムであり、ゲームコンテンツを提供するゲームシステム、スポーツ競技シミュレータや運転シミュレータなどのリアルタイムシミュレーションシステム、SNSのサービスを提供するシステム、映像等のコンテンツを提供するコンテンツ提供システム、或いは遠隔作業を実現するオペレーティングシステムなどの種々のシステムに適用可能である。なお、本実施形態のシミュレーションシステムは図1の構成に限定されず、その構成要素(各部)の一部を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。
操作部160は、ユーザ(プレーヤ)が種々の操作情報(入力情報)を入力するためのものである。操作部160は、例えば操作ボタン、方向指示キー、ジョイスティック、ハンドル、ペダル、レバー又は音声入力装置等の種々の操作デバイスにより実現できる。
記憶部170は各種の情報を記憶する。記憶部170は、処理部100や通信部196などのワーク領域として機能する。ゲームプログラムや、ゲームプログラムの実行に必要なゲームデータは、この記憶部170に保持される。記憶部170の機能は、半導体メモリ(DRAM、VRAM)、HDD(ハードディスクドライブ)、SSD、光ディスク装置などにより実現できる。記憶部170は、オブジェクト情報記憶部172、描画バッファ178を含む。
情報記憶媒体180(コンピュータにより読み取り可能な媒体)は、プログラムやデータなどを格納するものであり、その機能は、光ディスク(DVD、BD、CD)、HDD、或いは半導体メモリ(ROM)などにより実現できる。処理部100は、情報記憶媒体180に格納されるプログラム(データ)に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体180には、本実施形態の各部としてコンピュータ(入力装置、処理部、記憶部、出力部を備える装置)を機能させるためのプログラム(各部の処理をコンピュータに実行させるためのプログラム)が記憶される。
HMD200(頭部装着型表示装置)は、ユーザの頭部に装着されて、ユーザの眼前に画像を表示する装置である。HMD200は非透過型であることが望ましいが、透過型であってもよい。またHMD200は、いわゆるメガネタイプのHMDであってもよい。
HMD200は、センサ部210、表示部220、処理部240を含む。なおHMD200に発光素子を設ける変形実施も可能である。センサ部210は、例えばヘッドトラッキングなどのトラッキング処理を実現するためものである。例えばセンサ部210を用いたトラッキング処理により、HMD200の位置、方向を特定する。HMD200の位置、方向が特定されることで、ユーザの視点位置、視線方向を特定できる。
トラッキング方式としては種々の方式を採用できる。トラッキング方式の一例である第1のトラッキング方式では、後述の図2(A)、図2(B)で詳細に説明するように、センサ部210として複数の受光素子(フォトダイオード等)を設ける。そして外部に設けられた発光素子(LED等)からの光(レーザー等)をこれらの複数の受光素子により受光することで、現実世界の3次元空間でのHMD200(ユーザの頭部)の位置、方向を特定する。第2のトラッキング方式では、後述の図3(A)、図3(B)で詳細に説明するように、複数の発光素子(LED)をHMD200に設ける。そして、これらの複数の発光素子からの光を、外部に設けられた撮像部で撮像することで、HMD200の位置、方向を特定する。第3の方式では、センサ部210としてモーションセンサを設け、このモーションセンサを用いてHMD200の位置、方向を特定する。モーションセンサは例えば加速度センサやジャイロセンサなどにより実現できる。例えば3軸の加速度センサと3軸のジャイロセンサを用いた6軸のモーションセンサを用いることで、現実世界の3次元空間でのHMD200の位置、方向を特定できる。なお、第1のトラッキング方式と第2のトラッキング方式の組合わせ、或いは第1のトラッキング方式と第3のトラッキング方式の組合わせなどにより、HMD200の位置、方向を特定してもよい。またHMD200の位置、方向を特定することでユーザの視点位置、視線方向を特定するのではなく、ユーザの視点位置、視線方向を直接に特定するトラッキング処理を採用してもよい。
HMD200の表示部220は例えば有機ELディスプレイ(OEL)や液晶ディスプレイ(LCD)などにより実現できる。例えばHMD200の表示部220には、ユーザの左眼の前に設定される第1のディスプレイ又は第1の表示領域と、右眼の前に設定される第2のディスプレイ又は第2の表示領域が設けられており、立体視表示が可能になっている。立体視表示を行う場合には、例えば視差が異なる左眼用画像と右眼用画像を生成し、第1のディスプレイに左眼用画像を表示し、第2のディスプレイに右眼用画像を表示する。或いは1つのディスプレイの第1の表示領域に左眼用画像を表示し、第2の表示領域に右眼用画像を表示する。またHMD200には左眼用、右眼用の2つの接眼レンズ(魚眼レンズ)が設けられており、これによりユーザの視界の全周囲に亘って広がるVR空間が表現される。そして接眼レンズ等の光学系で生じる歪みを補正するための補正処理が、左眼用画像、右眼用画像に対して行われる。この補正処理は表示処理部120が行う。
HMD200の処理部240は、HMD200において必要な各種の処理を行う。例えば処理部240は、センサ部210の制御処理や表示部220の表示制御処理などを行う。また処理部240が、3次元音響(立体音響)処理を行って、3次元的な音の方向や距離や広がりの再現を実現してもよい。
音出力部192は、本実施形態により生成された音を出力するものであり、例えばスピーカ又はヘッドホン等により実現できる。
I/F(インターフェース)部194は、携帯型情報記憶媒体195とのインターフェース処理を行うものであり、その機能はI/F処理用のASICなどにより実現できる。携帯型情報記憶媒体195は、ユーザが各種の情報を保存するためのものであり、電源が非供給になった場合にもこれらの情報の記憶を保持する記憶装置である。携帯型情報記憶媒体195は、ICカード(メモリカード)、USBメモリ、或いは磁気カードなどにより実現できる。
通信部196は、有線や無線のネットワークを介して外部(他の装置)との間で通信を行うものであり、その機能は、通信用ASIC又は通信用プロセッサなどのハードウェアや、通信用ファームウェアにより実現できる。
なお本実施形態の各部としてコンピュータを機能させるためのプログラム(データ)は、サーバ(ホスト装置)が有する情報記憶媒体からネットワーク及び通信部196を介して情報記憶媒体180(あるいは記憶部170)に配信してもよい。このようなサーバ(ホスト装置)による情報記憶媒体の使用も本発明の範囲内に含めることができる。
処理部100(プロセッサ)は、操作部160からの操作情報や、HMD200でのトラッキング情報(HMDの位置及び方向の少なくとも一方の情報。視点位置及び視線方向の少なくとも一方の情報)や、プログラムなどに基づいて、ゲーム処理(シミュレーション処理)、仮想空間設定処理、移動体処理、仮想カメラ制御処理、表示処理、或いは音処理などを行う。
処理部100の各部が行う本実施形態の各処理(各機能)はプロセッサ(ハードウェアを含むプロセッサ)により実現できる。例えば本実施形態の各処理は、プログラム等の情報に基づき動作するプロセッサと、プログラム等の情報を記憶するメモリにより実現できる。プロセッサは、例えば各部の機能が個別のハードウェアで実現されてもよいし、或いは各部の機能が一体のハードウェアで実現されてもよい。例えば、プロセッサはハードウェアを含み、そのハードウェアは、デジタル信号を処理する回路及びアナログ信号を処理する回路の少なくとも一方を含むことができる。例えば、プロセッサは、回路基板に実装された1又は複数の回路装置(例えばIC等)や、1又は複数の回路素子(例えば抵抗、キャパシター等)で構成することもできる。プロセッサは、例えばCPU(Central Processing Unit)であってもよい。但し、プロセッサはCPUに限定されるものではなく、GPU(Graphics Processing Unit)、或いはDSP(Digital Signal Processor)等、各種のプロセッサを用いることが可能である。またプロセッサはASICによるハードウェア回路であってもよい。またプロセッサは、アナログ信号を処理するアンプ回路やフィルター回路等を含んでもよい。メモリ(記憶部170)は、SRAM、DRAM等の半導体メモリであってもよいし、レジスターであってもよい。或いはハードディスク装置(HDD)等の磁気記憶装置であってもよいし、光学ディスク装置等の光学式記憶装置であってもよい。例えば、メモリはコンピュータにより読み取り可能な命令を格納しており、当該命令がプロセッサにより実行されることで、処理部100の各部の処理(機能)が実現されることになる。ここでの命令は、プログラムを構成する命令セットでもよいし、プロセッサのハードウェア回路に対して動作を指示する命令であってもよい。
処理部100は、入力処理部102、演算処理部110、出力処理部140を含む。演算処理部110は、情報取得部111、仮想空間設定部112、移動体処理部113、仮想カメラ制御部114、ゲーム処理部115、イベント処理部116、報知処理部117、表示処理部120、音処理部130を含む。上述したように、これらの各部により実行される本実施形態の各処理は、プロセッサ(或いはプロセッサ及びメモリ)により実現できる。なお、これらの構成要素(各部)の一部を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。
入力処理部102は、操作情報やトラッキング情報を受け付ける処理や、記憶部170から情報を読み出す処理や、通信部196を介して情報を受信する処理を、入力処理として行う。例えば入力処理部102は、操作部160を用いてユーザが入力した操作情報やHMD200のセンサ部210等により検出されたトラッキング情報を取得する処理や、読み出し命令で指定された情報を、記憶部170から読み出す処理や、外部装置(サーバ等)からネットワークを介して情報を受信する処理を、入力処理として行う。ここで受信処理は、通信部196に情報の受信を指示したり、通信部196が受信した情報を取得して記憶部170に書き込む処理などである。
演算処理部110は、各種の演算処理を行う。例えば情報取得処理、仮想空間設定処理、移動体処理、仮想カメラ制御処理、ゲーム処理(シミュレーション処理)、イベント処理、報知処理、表示処理、或いは音処理などの演算処理を行う。
情報取得部111(情報取得処理のプログラムモジュール)は種々の情報の取得処理を行う。例えば情報取得部111は、HMD200を装着するユーザの位置情報などを取得する。情報取得部111はユーザの方向情報などを取得してもよい。
仮想空間設定部112(仮想空間設定処理のプログラムモジュール)は、オブジェクトが配置される仮想空間(オブジェクト空間)の設定処理を行う。例えば、移動体(人、ロボット、車、電車、飛行機、船、モンスター又は動物等)、マップ(地形)、建物、観客席、コース(道路)、樹木、壁、水面などの表示物を表す各種オブジェクト(ポリゴン、自由曲面又はサブディビジョンサーフェイスなどのプリミティブ面で構成されるオブジェクト)を仮想空間に配置設定する処理を行う。即ちワールド座標系でのオブジェクトの位置や回転角度(向き、方向と同義)を決定し、その位置(X、Y、Z)にその回転角度(X、Y、Z軸回りでの回転角度)でオブジェクトを配置する。具体的には、記憶部170のオブジェクト情報記憶部172には、仮想空間でのオブジェクト(パーツオブジェクト)の位置、回転角度、移動速度、移動方向等の情報であるオブジェクト情報がオブジェクト番号に対応づけて記憶される。仮想空間設定部112は、例えば各フレーム毎にこのオブジェクト情報を更新する処理などを行う。
移動体処理部113(移動体処理のプログラムモジュール)は、仮想空間内で移動する移動体についての種々の処理を行う。例えば仮想空間(オブジェクト空間、ゲーム空間)において移動体を移動させる処理や、移動体を動作させる処理を行う。例えば移動体処理部113は、操作部160によりユーザが入力した操作情報や、取得されたトラッキング情報や、プログラム(移動・動作アルゴリズム)や、各種データ(モーションデータ)などに基づいて、移動体(モデルオブジェクト)を仮想空間内で移動させたり、移動体を動作(モーション、アニメーション)させる制御処理を行う。具体的には、移動体の移動情報(位置、回転角度、速度、或いは加速度)や動作情報(パーツオブジェクトの位置、或いは回転角度)を、1フレーム(例えば1/60秒)毎に順次求めるシミュレーション処理を行う。なおフレームは、移動体の移動・動作処理(シミュレーション処理)や画像生成処理を行う時間の単位である。移動体は、例えば実空間のユーザ(プレーヤ)に対応するユーザ移動体である。ユーザ移動体は、仮想空間の仮想ユーザ(仮想プレーヤ、アバター)や、或いは当該仮想ユーザが搭乗(操作)する搭乗移動体(操作移動体)などである。
仮想カメラ制御部114(仮想カメラ制御処理のプログラムモジュール)は、仮想カメラの制御を行う。例えば、操作部160により入力されたユーザの操作情報やトラッキング情報などに基づいて、仮想カメラを制御する処理を行う。
例えば仮想カメラ制御部114は、ユーザの一人称視点又は三人称視点として設定される仮想カメラの制御を行う。例えば仮想空間において移動するユーザ移動体の視点(一人称視点)に対応する位置に、仮想カメラを設定して、仮想カメラの視点位置や視線方向を設定することで、仮想カメラの位置(位置座標)や姿勢(回転軸回りでの回転角度)を制御する。或いは、ユーザ移動体に追従する視点(三人称視点)の位置に、仮想カメラを設定して、仮想カメラの視点位置や視線方向を設定することで、仮想カメラの位置や姿勢を制御する。
例えば仮想カメラ制御部114は、視点トラッキングにより取得されたユーザの視点情報のトラッキング情報に基づいて、ユーザの視点変化に追従するように仮想カメラを制御する。例えば本実施形態では、ユーザの視点位置、視線方向の少なくとも1つである視点情報のトラッキング情報(視点トラッキング情報)が取得される。このトラッキング情報は、例えばHMD200のトラッキング処理を行うことで取得できる。そして仮想カメラ制御部114は、取得されたトラッキング情報(ユーザの視点位置及び視線方向の少なくとも一方の情報)に基づいて仮想カメラの視点位置、視線方向を変化させる。例えば、仮想カメラ制御部114は、実空間でのユーザの視点位置、視線方向の変化に応じて、仮想空間での仮想カメラの視点位置、視線方向(位置、姿勢)が変化するように、仮想カメラを設定する。このようにすることで、ユーザの視点情報のトラッキング情報に基づいて、ユーザの視点変化に追従するように仮想カメラを制御できる。
ゲーム処理部115(ゲーム処理のプログラムモジュール)は、ユーザがゲームをプレイするための種々のゲーム処理を行う。別の言い方をすれば、ゲーム処理部115(シミュレーション処理部)は、ユーザが仮想現実(バーチャルリアリティ)を体験するための種々のシミュレーション処理を実行する。ゲーム処理は、例えば、ゲーム開始条件が満たされた場合にゲームを開始する処理、開始したゲームを進行させる処理、ゲーム終了条件が満たされた場合にゲームを終了する処理、或いはゲーム成績を演算する処理などである。
イベント処理部116(イベント処理のプログラムモジュール)はイベントに関する各種の処理を行う。報知処理部117(報知処理のプログラムモジュール)は各種の報知処理を行う。例えばユーザに対する警告の報知処理などを行う。報知処理は、例えば画像や音による報知処理であってもよいし、振動デバイスや音響や空気砲などの体感装置を用いた報知処理であってもよい。
表示処理部120(表示処理のプログラムモジュール)は、ゲーム画像(シミュレーション画像)の表示処理を行う。例えば処理部100で行われる種々の処理(ゲーム処理、シミュレーション処理)の結果に基づいて描画処理を行い、これにより画像を生成し、表示部220に表示する。具体的には、座標変換(ワールド座標変換、カメラ座標変換)、クリッピング処理、透視変換、或いは光源処理等のジオメトリ処理が行われ、その処理結果に基づいて、描画データ(プリミティブ面の頂点の位置座標、テクスチャ座標、色データ、法線ベクトル或いはα値等)が作成される。そして、この描画データ(プリミティブ面データ)に基づいて、透視変換後(ジオメトリ処理後)のオブジェクト(1又は複数プリミティブ面)を、描画バッファ178(フレームバッファ、ワークバッファ等のピクセル単位で画像情報を記憶できるバッファ)に描画する。これにより、仮想空間において仮想カメラ(所与の視点。左眼用、右眼用の第1、第2の視点)から見える画像が生成される。なお、表示処理部120で行われる描画処理は、頂点シェーダ処理やピクセルシェーダ処理等により実現することができる。
音処理部130(音処理のプログラムモジュール)は、処理部100で行われる種々の処理の結果に基づいて音処理を行う。具体的には、楽曲(音楽、BGM)、効果音、又は音声などのゲーム音を生成し、ゲーム音を音出力部192に出力させる。なお音処理部130の音処理の一部(例えば3次元音響処理)を、HMD200の処理部240により実現してもよい。
出力処理部140は各種の情報の出力処理を行う。例えば出力処理部140は、記憶部170に情報を書き込む処理や、通信部196を介して情報を送信する処理を、出力処理として行う。例えば出力処理部140は、書き込み命令で指定された情報を、記憶部170に書き込む処理や、外部の装置(サーバ等)に対してネットワークを介して情報を送信する処理を行う。送信処理は、通信部196に情報の送信を指示したり、送信する情報を通信部196に指示する処理などである。
そして本実施形態のシミュレーションシステムは、図1に示すように、仮想空間設定部112と、移動体処理部113と、イベント処理部116と、表示処理部120を含む。
仮想空間設定部112は、仮想空間の設定処理を行う。例えばユーザに対応するユーザ移動体のオブジェクトや、敵等の相手の移動体のオブジェクトや、マップや背景を構成するオブジェクトを、仮想空間に配置設定する処理を行う。ユーザに対応するユーザ移動体は、例えばユーザが操作部160により操作する移動体や、実空間でのユーザの移動に追従して仮想空間において移動する移動体である。このユーザ移動体は、例えばキャラクタやアバターと呼ばれるものである。ユーザ移動体は、ユーザが搭乗するロボット等の搭乗移動体であってもよい。またユーザ移動体は、その画像が表示される表示物であってもよいし、画像が表示されない仮想的なものであってもよい。例えば仮想空間の画像として一人称視点の画像が表示される場合等には、ユーザ移動体は非表示であってもよいし、ユーザ移動体の一部の部位(例えば手、胸又は顔等)だけが表示されるものであってもよい。
移動体処理部113は、ユーザが移動可能な実空間のユーザに対応する仮想空間のユーザ移動体(仮想カメラ)を、仮想空間において移動させる処理を行う。例えば、ユーザが操作部160により入力した操作情報に基づいて、仮想空間においてユーザ移動体を移動させる。或いは、情報取得部111が、実空間でのユーザの位置情報を取得する場合には、移動体処理部113は、取得された位置情報(視点トラッキング情報)に基づいて、仮想空間においてユーザ移動体を移動させる処理を行う。例えば、実空間でのユーザの移動に追従して移動するように、仮想空間においてユーザ移動体を移動させる。例えばユーザ移動体の移動速度や移動加速度に基づいて、ユーザ移動体の位置等をフレーム毎に更新する処理を行って、ユーザ移動体を仮想空間(仮想フィールド)において移動させる。
イベント処理部116はイベントの処理を行う。例えばユーザに対応する仮想空間のユーザ移動体について発生する各種のイベントの処理を行う。
表示処理部120(描画処理部)は、仮想空間の画像(オブジェクト)の描画処理を行う。例えば表示処理部120は、仮想空間において仮想カメラ(所与の視点)から見える画像として、ユーザが視界を覆うように装着するHMD200の表示画像を生成する。例えばユーザキャラクタ(アバター)等のユーザ移動体の視点(一人称視点)に設定された仮想カメラから見える画像の描画処理を行う。或いは、ユーザ移動体に追従する視点(三人称視点)に設定された仮想カメラから見える画像の描画処理を行う。生成される画像は、例えば左眼用画像、右眼用画像などの立体視用の画像であることが望ましい。
そしてイベント処理部116は、ユーザ移動体の状態が所与の状態へと変化するイベントが発生したか否かを判断する。ユーザ移動体の状態は例えばユーザ移動体のサイズの状態であり、別の言い方をすればユーザ移動体の視点(視点位置、視線方向)の状態である。この場合には、発生するイベントは、ユーザ移動体のサイズが所与のサイズに変化するサイズ変化イベント(視点状態変化イベント)である。例えばイベントは、ユーザ移動体のサイズが小さくなったり、或いは大きくなったりするイベントである。なお、イベントは、ユーザ移動体の形状や外観などが変化するイベントや、ユーザ移動体の周囲の環境状況が変化するイベントであってもよい。
そして仮想空間設定部112は、イベントが発生すると判断された場合に、実空間での座標のスケールと仮想空間での座標のスケールとの対応関係を切り替える切り替え処理を行う。例えば実空間の座標系と仮想空間の座標系を対応づける際に縮小又は拡大のスケール変換を行う。具体的には仮想空間設定部112は、イベントが発生すると判断された場合に、実空間での位置座標についてのスケールと仮想空間での位置座標についてのスケールとの対応関係を切り替える。或いは実空間の座標軸のスケールと仮想空間の座標軸のスケールとの対応関係を切り替える。座標のスケールは、例えば座標空間(実空間、仮想空間)での長さ(位置座標又は座標軸)の尺度(目盛り)を表すものである。実空間での座標のスケールと仮想空間での座標のスケールとの対応関係は、例えば実空間での1mの長さが、仮想空間においてどのような長さに対応するかについての関係である。例えば座標のスケールの第1の対応関係(通常の対応関係)では、実空間での1mの長さが、仮想空間においても1m(略1m)になる。一方、座標のスケールの第2の対応関係では、実空間での1mの長さが、仮想空間では1mよりも短くなる(例えば10cm)。座標のスケールの第3の対応関係では、実空間での1mの長さが、仮想空間では1mよりも長くなる(例えば10m)。仮想空間設定部112は、ユーザ移動体の状態が所与の状態へと変化するイベントが発生すると、実空間での座標のスケールと仮想空間での座標のスケールとの対応関係を、例えば第1の対応関係から第2の対応関係に切り替えたり、第1の対応関係から第3の対応関係に切り替えたり、第2の対応関係から第3の対応関係に切り替える。
具体的には仮想空間設定部112は、イベントが発生すると判断された場合は、ユーザ移動体のローカル座標系から仮想空間のワールド座標系への座標変換の際に縮小又は拡大のスケール変換を行う。例えばユーザ移動体のローカル座標系を仮想空間のワールド座標系に対応づける際に縮小又は拡大のスケール変換を行う。これによりユーザ移動体に対応するオブジェクト(キャラクタオブジェクト、HMDオブジェクト)を縮小又は拡大するスケール変換を行ったり、当該オブジェクトの移動距離を縮小又は拡大するスケール変換を行うことが可能になる。ローカル座標系からワールド座標系への座標変換(モデリング変換)を行うことで、ユーザ移動体に対応するオブジェクトについての位置座標をローカル座標系の位置座標からワールド座標系への位置座標に変換できる。スケール変換は、例えば位置座標にスケール係数を乗算する変換処理である。
例えば仮想空間設定部112は、ユーザの左眼の視点に対応する左眼用の仮想カメラと、ユーザの右眼の視点に対応する右眼用の仮想カメラを、仮想空間に配置設定する。実空間のHMD200に対応する仮想空間のHMDオブジェクトは、これらの左眼用の仮想カメラと右眼用の仮想カメラにより構成されるオブジェクトである。このHMDオブジェクトは、上述したユーザ移動体に対応するオブジェクトである。仮想空間設定部112は、このHMDオブジェクトを縮小又は拡大するスケーリング変換を行う。これによりHMD200を装着したユーザは、あたかも自分自身のサイズが小さくなったり或いは大きくなったかのような仮想現実を体験できるようになる。例えば仮想空間設定部112は、上述のスケール変換により、実空間のユーザの左眼、右眼の視点の位置座標のスケールと、仮想空間の左眼用、右眼用の仮想カメラの位置座標のスケールとの対応関係を切り替える。例えば通常の対応関係である第1の対応関係では、ユーザの左眼、右眼の視点の位置座標のスケールと、左眼用、右眼用の仮想カメラの位置座標のスケールは同じになっている。そして仮想空間設定部112は、イベントが発生すると、この第1の対応関係から、左眼用、右眼用の仮想カメラの位置が低くなり、左眼用、右眼用の仮想カメラ間の距離が短くなる第2の対応関係に切り替える。こうすることで、ユーザ移動体のサイズが小さくなったときに見える画像を、HMD200の表示画像として生成できるようになる。或いは、仮想空間設定部112は、イベントが発生すると、この第1の対応関係から、左眼用、右眼用の仮想カメラの位置が高くなり、左眼用、右眼用の仮想カメラ間の距離が長くなる第3の対応関係に切り替える。こうすることで、ユーザ移動体のサイズが大きくなったときに見える画像を、HMD200の表示画像として生成できるようになる。
或いは仮想空間設定部112は、イベントが発生すると判断された場合は、ユーザ移動体が移動する仮想空間を、第1の仮想空間から、第1の仮想空間とは座標軸のスケールが異なる第2の仮想空間に切り替える。第1の仮想空間は、例えば実空間と同じ広さの座標空間となっている。一方、第2の仮想空間は、実空間よりも広い座標空間であったり、或いは実空間よりも狭い座標空間になる。例えば仮想空間設定部112は、イベントが発生すると判断された場合に、第1の仮想空間から、実空間よりも広い座標空間である第2の仮想空間に切り替える。この際にユーザ移動体のサイズについては変化させない。こうすることで、第2の仮想空間に対するユーザ移動体の相対的なサイズが小さくなるため、ユーザ移動体のサイズが小さくなったときに見える画像を、HMD200の表示画像として生成できるようになる。或いは、仮想空間設定部112は、イベントが発生すると判断された場合に、第1の仮想空間から、実空間よりも狭い座標空間である第2の仮想空間に切り替える。この際にユーザ移動体のサイズについては変化させない。こうすることで、第2の仮想空間に対するユーザ移動体の相対的なサイズが大きくなるため、ユーザ移動体のサイズが大きくなったときに見える画像を、HMD200の表示画像として生成できるようになる。
また仮想空間設定部112は、イベントとして、ユーザ移動体のサイズを変化させるイベントが発生した場合に、上記の切り替え処理を行う。例えば仮想空間設定部112は、ユーザ移動体のサイズを小さいサイズに変化させるイベントが発生した場合に、実空間での座標のスケールと仮想空間での座標のスケールとの対応関係を切り替える処理を行う。例えば実空間での座標のスケールと仮想空間での座標のスケールとの対応関係を、上述の第1の対応関係から第2の対応関係に切り替える。或いは仮想空間設定部112は、ユーザ移動体のサイズを大きいサイズに変化させるイベントが発生した場合に、実空間での座標のスケールと仮想空間での座標のスケールとの対応関係を切り替える処理を行う。例えば実空間での座標のスケールと仮想空間での座標のスケールとの対応関係を、上述の第1の対応関係から第3の対応関係に切り替える。
なおユーザ移動体の状態が所与の状態へと変化するイベントとしては、ユーザ移動体のサイズの変更イベント、ユーザ移動体の変形イベント、異なる種類の移動体への変更イベント(変身)、或いはユーザ移動体の視点や視線の変更イベントなどがある。
またイベント処理部116は、ユーザの行動情報、他のユーザの行動情報、及びゲームの状況の少なくとも1つに基づいて、イベントが発生したか否かを判断する。ユーザや他のユーザの行動情報は、例えばユーザや他のユーザが操作部160を操作することによる操作情報や、ユーザや他のユーザの部位の動きを検出するセンサからの検出情報などに基づき取得できる。例えばイベント処理部116は、ユーザが、操作部160であるゲームコントローラや手等の部位を、自身の方に向けたり、他のユーザが、ゲームコントローラや手等の部位を、ユーザの方に向けたことが検出された場合に、イベントが発生したと判断する。或いは、イベント処理部116は、ゲーム状況に基づいてイベントが発生したか否かを判断する。ゲーム状況は、例えばユーザ移動体の行動の状況、ユーザ移動体の環境の状況(ユーザ移動体が移動するマップの状況、ユーザ移動体の周囲の状況、或いは時刻等の時間情報の状況)、或いはゲームの進行状況などである。例えばイベント処理部116は、ユーザ移動体のサイズを第1のサイズから第2のサイズに変化させた後、実空間でのユーザの位置と仮想空間でのユーザ移動体の対応位置との間にズレが生じると判定した場合に、ユーザ移動体のサイズを第2のサイズから元の第1のサイズに戻すイベントを発生させる。
またイベント処理部116は、イベントの発生により、仮想空間でのユーザ移動体の位置と、実空間でのユーザの対応位置との間にズレが生じると判定した場合に、仮想空間でのユーザ移動体の位置を修正しながら、ユーザ移動体の状態を所与の状態に変化させる。実空間でのユーザの対応位置は、仮想空間でのユーザ移動体の位置に対応する位置(一対一に対応する位置)である。例えばユーザ移動体のサイズ等を変化させるイベントを発生すると、仮想空間でのユーザ移動体の位置と、実空間でのユーザの対応位置との間にズレが生じてしまう場合がある。イベント処理部116は、このようなズレが生じると判定した場合に、仮想空間でのユーザ移動体の位置を修正する。例えばユーザ移動体の位置が実空間でのユーザの対応位置に一致するように、ユーザ移動体の位置を修正する。例えばズレの所定しきい値以上である場合に、ユーザ移動体の位置の修正処理を行う。そして、このようにユーザ移動体の位置を修正して、ユーザ移動体の状態を所与の状態に変化させる。例えばユーザ移動体のサイズ等を変化させる。
また表示処理部120は、ユーザ移動体の位置を修正する際に、表示画像を変化させる処理を行う。例えばユーザ移動体の位置の修正の際に、特別な画像がHMD200の表示画像として表示されるようにする。この特別な画像は、位置修正時用に用意された画像であり、仮想空間の画像に代えて表示される画像である。
具体的には表示処理部120は、表示画像を変化させる処理として、表示画像をフェードアウトさせる処理を行う。フェードアウト処理は、表示画像である仮想空間の画像を、所定色の画像に変化させる処理である。例えばユーザ移動体の位置を修正する際に、仮想空間の画像から、所定色のフェードアウト画像に徐々に変化させる。具体的には表示処理部120は、表示画像をホワイトアウトさせる処理を行い、仮想空間の画像をホワイトアウト画像に変化させる。なおフェードアウト画像としてブラックアウト画像などの他の色の画像を用いてもよい。また表示画像をフェードアウトした後に、元の表示画像を復帰表示する際には、表示画像のフェードイン処理を行うことが望ましい。
また表示処理部120は、表示画像を変化させる処理として、仮想空間のオブジェクトを、仮想カメラを覆う位置に表示する処理を行ってもよい。例えば位置修正時用に用意されたオブジェクトを、ユーザ移動体(ユーザ)の視点に対応する仮想カメラを覆う位置に配置して表示する。そして仮想空間の画像に代えて、当該オブジェクトの画像がHMD200に表示されるようにする。このオブジェクトは、仮想カメラの少なくとも前方方向において視界を覆うものであればよい。またオブジェクトは例えば半透明のオブジェクトであってもよい。例えばユーザ移動体の位置を修正する際に、オブジェクトを透明から徐々に半透明度を上げて、透明オブジェクトから半透明オブジェクト又は不透明オブジェクトに変化させてもよい。
また図1に示すように本実施形態のシミュレーションシステムは情報取得部111を含む。情報取得部111は、実空間でのユーザの視点情報(視点位置や視線方向)のトラッキング情報を取得する。そして表示処理部120は、視点情報のトラッキング情報に基づきユーザの視点変化に追従するように制御される仮想カメラから見える画像を、HMD200の表示画像として生成する。例えば情報取得部111は、ユーザの視点位置、視線方向の少なくとも1つである視点情報のトラッキング情報(視点トラッキング情報)を取得する。このトラッキング情報は、例えばHMD200のトラッキング処理を行うことで取得できる。なおトラッキング処理によりユーザの視点位置、視線方向を直接に取得するようにしてもよい。一例としては、トラッキング情報は、ユーザの初期視点位置からの視点位置の変化情報(視点位置の座標の変化値)、及び、ユーザの初期視線方向からの視線方向の変化情報(視線方向の回転軸回りでの回転角度の変化値)の少なくとも一方を含むことができる。このようなトラッキング情報が含む視点情報の変化情報に基づいて、ユーザの視点位置や視線方向(ユーザの頭部の位置、姿勢の情報)を特定できる。
そして仮想カメラ制御部114は、取得された視点情報のトラッキング情報に基づいて仮想カメラを制御する。即ち仮想カメラ制御部114は、ユーザの視点情報のトラッキング情報に基づいて、ユーザの視点変化に追従するように仮想カメラを制御する。そして表示処理部120は、視点情報のトラッキング情報に基づき制御される仮想カメラから見える画像を、HMD200の表示画像として生成する。そして上述したように仮想空間設定部112は、イベントが発生すると判断された場合に、実空間のユーザの視点の位置座標のスケールと、仮想空間のユーザ移動体の視点に対応する仮想カメラの位置座標のスケールとの対応関係を切り替える処理を行う。そして、この切り替え処理において、視点情報のトラッキング情報に基づき求められた実空間のユーザの視点の位置座標の変換処理を行って、仮想カメラの位置座標を求めることになる。例えば実空間のユーザの視点の位置座標を小さくしたり、大きくする変換処理を行って、仮想カメラの位置座標を求める。
また本実施形態では、ユーザがプレイするゲームのゲーム処理として、仮想現実のシミュレーション処理を行う。仮想現実のシミュレーション処理は、実空間での事象を仮想空間で模擬するためのシミュレーション処理であり、当該事象をユーザに仮想体験させるための処理である。例えば実空間のユーザに対応する仮想ユーザやその搭乗移動体などのユーザ移動体を、仮想空間で移動させたり、移動に伴う環境や周囲の変化をユーザに体感させるための処理を行う。
なお図1の本実施形態のシミュレーションシステムの処理は、施設に設置されるPC等の処理装置、ユーザが装着する処理装置(PC)、或いはこれらの処理装置の分散処理などにより実現できる。或いは、本実施形態のシミュレーションシステムの処理を、サーバシステムと端末装置により実現してもよい。例えばサーバシステムと端末装置の分散処理などにより実現してもよい。
2.トラッキング処理
次にトラッキング処理の例について説明する。図2(A)に本実施形態のシミュレーションシステムに用いられるHMD200の一例を示す。図2(A)に示すようにHMD200には複数の受光素子201、202、203(フォトダイオード)が設けられている。受光素子201、202はHMD200の前面側に設けられ、受光素子203はHMD200の右側面に設けられている。またHMDの左側面、上面等にも不図示の受光素子が設けられている。
またユーザUSは、ゲームコントローラ290を所持しており、このゲームコントローラ290にも、受光素子204、205、206(フォトダイオード)が設けられている。これらの受光素子204、205、206を用いることで、ゲームコントローラ290の位置や方向を特定できる。なお、ユーザUSの手や指の動きを、いわゆるリープモーションと呼ばれる処理により検出してもよい。例えば不図示のコントローラがHMD200等に取り付けられており、このコントローラに基づいて、手や指の動きの検出処理を実現する。このコントローラは、例えば赤外線を照射するLED等の発光部と、赤外線に照らされた手や指を撮影する複数台の赤外線カメラを有する。そして赤外線カメラの撮影画像の画像解析結果に基づいて、手や指の動きを検出する。
またHMD200には、HMD200を装着するためのヘッドバンド260や、ヘッドホン270を接続するためのヘッドホン端子が設けられている。これにより例えば3次元音響(3次元オーディオ)の処理が施されたゲーム音を、ユーザUSは聴くことが可能になる。なお、ユーザUSの頭部の頷き動作や首振り動作をHMD200のセンサ部210等により検出することで、ユーザUSの操作情報を入力できるようにしてもよい。
またユーザUSは、不図示の処理装置(バックパックPC)を例えば背中に装着している。例えばユーザUSはジャケットを着ており、このジャケットの背面側に処理装置が取り付けられている。処理装置は例えばノート型PC等の情報処理装置により実現される。そしてこの処理装置とHMD200は不図示のケーブルにより接続されている。例えば処理装置は、HMD200に表示される画像(ゲーム画像等)の生成処理を行い、生成された画像のデータがケーブルを介してHMD200に送られ、HMD200に表示される。この処理装置は、このような画像の生成処理以外にも、本実施形態の各処理(情報取得処理、仮想空間設定処理、移動体処理、仮想カメラ制御処理、ゲーム処理、イベント処理、報知処理、表示処理又は音処理等)を行うことが可能になっている。なお、本実施形態の各処理を、施設に設置されたPC等の処理装置(不図示)により実現したり、当該処理装置と、ユーザUSが装着する処理装置の分散処理により実現してもよい。
図2(B)に示すように、シミュレーションシステムの周辺には、ベースステーション280、284が設置されている。ベースステーション280には発光素子281、282が設けられ、ベースステーション284には発光素子285、286が設けられている。発光素子281、282、285、286は、例えばレーザー(赤外線レーザー等)を出射するLEDにより実現される。ベースステーション280、284は、これら発光素子281、282、285、286を用いて、例えばレーザーを放射状に出射する。そして図2(A)のHMD200に設けられた受光素子201、202、203が、ベースステーション280、284からのレーザーを受光することで、HMD200のトラッキングが実現され、ユーザUSの頭の位置や向く方向(視点位置、視線方向)を検出できるようになる。またゲームコントローラ290に設けられた受光素子204、205、206がベースステーション280、284からのレーザーを受光することで、ゲームコントローラ290のトラッキングが実現され、ゲームコントローラ290の位置や向く方向を検出できるようになる。
図3(A)にHMD200の他の例を示す。図3(A)では、HMD200に対して複数の発光素子231〜236が設けられている。これらの発光素子231〜236は例えばLEDなどにより実現される。発光素子231〜234は、HMD200の前面側に設けられ、発光素子235や不図示の発光素子236は、背面側に設けられる。これらの発光素子231〜236は、例えば可視光の帯域の光を出射(発光)する。具体的には発光素子231〜236は、互いに異なる色の光を出射する。
そして図3(B)に示す撮像部150を、ユーザUSの周囲の少なくとも1つの場所(例えば前方側、或いは前方側及び後方側など)に設置し、この撮像部150により、HMD200の発光素子231〜236の光を撮像する。即ち、撮像部150の撮像画像には、これらの発光素子231〜236のスポット光が映る。そして、この撮像画像の画像処理を行うことで、ユーザUSの頭部(HMD)のトラッキングを実現する。即ちユーザUSの頭部の3次元位置や向く方向(視点位置、視線方向)を検出する。
例えば図3(B)に示すように撮像部150には第1、第2のカメラ151、152が設けられており、これらの第1、第2のカメラ151、152の第1、第2の撮像画像を用いることで、ユーザUSの頭部の奥行き方向での位置等が検出可能になる。またHMD200に設けられたモーションセンサのモーション検出情報に基づいて、ユーザUSの頭部の回転角度(視線)も検出可能になっている。従って、このようなHMD200を用いることで、ユーザUSが、周囲の360度の全方向うちのどの方向を向いた場合にも、それに対応する仮想空間(仮想3次元空間)での画像(ユーザの視点に対応する仮想カメラから見える画像)を、HMD200の表示部220に表示することが可能になる。
なお、発光素子231〜236として、可視光ではなく赤外線のLEDを用いてもよい。また、例えばデプスカメラ等を用いるなどの他の手法で、ユーザの頭部の位置や動き等を検出するようにしてもよい。
また、ユーザの視点位置、視線方向(ユーザの位置、方向)を検出するトラッキング処理の手法は、図2(A)〜図3(B)で説明した手法には限定されない。例えばHMD200に設けられたモーションセンサ等を用いて、HMD200の単体でトラッキング処理を実現してもよい。即ち、図2(B)のベースステーション280、284、図3(B)の撮像部150などの外部装置を設けることなく、トラッキング処理を実現する。或いは、公知のアイトラッキング、フェイストラッキング又はヘッドトラッキングなどの種々の視点トラッキング手法により、ユーザの視点位置、視線方向などの視点情報等を検出してもよい。
またHMD200として、いわゆるスマートフォンVR又はVRゴーグルと呼ばれるタイプのものを用いてもよい。このタイプのHMD200では、スマートフォンの表示部がユーザの目に対向するように、HMD200のゴーグル部の中にスマートフォンを収納する。ゴーグル部(VRゴーグル)の内側には、左眼用接眼レンズ、右眼用接眼レンズが内蔵されている。ユーザは、スマートフォンの表示部に表示された左眼用画像、右眼用画像を、各々、左眼用接眼レンズ、右眼用接眼レンズを介して見ることで、VRの立体視画像を鑑賞することができる。そしてユーザの視点位置、視線方向を特定するトラッキング処理は、スマートフォンに内蔵されるモーションセンサ(加速度センサ、ジャイロセンサ)などに基づいて実現できる。
3.本実施形態の手法
次に本実施形態の手法について詳細に説明する。なお、以下では、ユーザに対応するユーザ移動体を、ユーザキャラクタと記載して説明を行う。また本実施形態の手法は、種々のゲーム(仮想体験ゲーム、対戦ゲーム、RPG、アクションゲーム、競争ゲーム、スポーツゲーム、ホラー体験ゲーム、電車や飛行機等の乗り物のシミュレーションゲーム、パズルゲーム、コミュニケーションゲーム、或いは音楽ゲーム等)に適用でき、ゲーム以外にも適用可能である。
3.1 ゲームの説明
まず本実施形態により実現されるVR(バーチャルリアリティ)のゲームについて説明する。このゲームは、仮想空間(仮想世界)を移動可能な仮想現実の体験ゲームである。図4は本実施形態のシミュレーションシステムで用いられる部屋のプレイフィールドFLの説明図である。
部屋を模したプレイフィールドFL(プレイエリア、プレイ空間)には、ドアDR、机DK、本棚BSなどが配置され、壁には窓WD1、WD2が設けられている。なお本棚BS、窓WD1、WD2等は例えば壁に本棚や窓の画像を印刷することで表現してもよい。ユーザは、この部屋を模したプレイフィールドFLに入室して、VRのゲームを楽しむ。図4では、複数のユーザUS1、US2が入室しており、これらの2人のユーザUS1、US2によりVRのゲームを楽しめるようになっている。
各ユーザUS1、US2は、例えば処理装置(バックパックPC)を背中に装着しており、この処理装置により生成された画像がHMD1、HMD2(頭部装着型表示装置)に表示される。具体的にはユーザUS1、US2はジャケットを装着しており、このジャケットに処理装置(バックパックPC)が取り付けられている。またプレイフィールドFLには、不図示の管理用の処理装置が配置されており、この管理用の処理装置により、ユーザUS1、US2が装着する処理装置間のデータの同期処理(通信処理)などが行われる。例えばユーザUS1のHMD1にユーザUS2に対応するユーザキャラクタ(広義にはユーザ移動体)を表示し、ユーザUS2のHMD2にユーザUS1に対応するユーザキャラクタを表示するための同期処理などが行われる。また部屋にはオペレータが待機しており、管理用の処理装置の操作や、ユーザUS1、US2のHMD1、HMD2やジャケットの装着の手伝いや、ゲーム進行のためのオペレーション作業や誘導作業などを行う。
またプレイフィールドFLの部屋には、図2(B)で説明したベースステーション280、284が設置されており、これらのベースステーション280、284を用いて、ユーザUS1、US2の位置情報(視点位置情報)や方向情報(視線方向情報)の取得が可能になっている。
また図3のドアDRは別世界に通じるドアとなっている。例えばドアDRを開いたときに、そのドアDRの向こう側に別世界(部屋の風景とは異なる世界)が広がる。そしてドアDRをくぐって当該別世界に行くことができる仮想現実を、ユーザは体験できる。
例えば図4においてユーザUS1、US2のHMD1、HMD2には、部屋に対応する仮想空間の画像が表示されている。具体的には、部屋に対応する仮想空間に、部屋に配置・設置される物体に対応するオブジェクトを配置する。例えばドアDR、机DK、本棚BS、窓WD1、WD2に対応するオブジェクトを配置する。そして、この部屋の仮想空間において、ユーザUS1、US2の視点(第1、第2の視点)に対応する仮想カメラ(第1、第2の仮想カメラ)から見える画像を生成して、HMD1、HMD2(第1、第2の表示部)に表示する。このようにすれば、HMD1、HMD2を装着して移動するユーザUS1、US2は、あたかも本物の部屋を歩き回っているような仮想現実を体験できる。
そして、1回目にユーザ(US1、US2)がドアDRを開いた場合には、ドアDRの向こう側は部屋のままであり、ドアDRの領域(特異点に対応する領域)には、部屋の画像が表示される。そしてユーザがドアDRを閉めた後、再度、ドアDRを開くと、ドアDRの向こう側は氷の国に変化する。即ち図5に示すように、ドアDRの領域(ドアの開口領域)には、氷の国の仮想空間(VS2)の画像が表示される。このとき、図5に示すように、ドアDRの回りには、本棚BS、窓WD1、WD2などの部屋の仮想空間(VS1)の画像が表示される。
そして例えばユーザがドアDRを通過して(特異点に対応する場所を通過して)、ドアDRの向こう側に移動すると、ユーザに対応するユーザキャラクタ(ユーザ移動体)は、部屋の仮想空間から、氷の国の仮想空間へと移動することになる。ここで、ユーザキャラクタは、実空間でのユーザの移動に伴って仮想空間で移動するキャラクタ(表示物)であり、アバターとも呼ばれる。
本実施形態では、HMDを装着するユーザの視界の全周囲に亘って、広大なVR空間が広がるようになるため、ユーザの仮想現実感を格段に向上できる。即ち、ユーザは、あたかも現実世界の部屋や氷の国にいるような仮想現実を感じることができる。そしてユーザに対応するユーザキャラクタは、仮想空間である部屋や氷の国を自由に歩き回ることができる。
なお、本実施形態では、ユーザの実空間での位置情報を取得し、取得された位置情報に基づいてユーザキャラクタを仮想空間で移動させる場合について主に説明するが、本実施形態はこれに限定されない。例えば図1の操作部160(ゲームコントローラ等)からの操作情報等に基づいて、ユーザキャラクタを仮想空間で移動させてもよい。また、ユーザの手や指の動きは、例えばリープモーションの処理により検出される。そして、この検出結果に基づいて、ユーザに対応するユーザキャラクタの手や指の部位(パーツオブジェクト)を動かすモーション処理が行われる。これにより、ユーザは、例えばドアDRを開けるときに、自身の手や指の動きを、ユーザキャラクタの手や指の部位の動きを見ることで視覚的に認識できるようになる。
そして本実施形態では、一方のユーザが他方のユーザに対してゲームコントローラ290を向けて所定の操作を行うことで、他方のユーザに対応する仮想空間のユーザキャラクタを小さなサイズにして、こびとのようにすることが可能になっている。例えば図6ではユーザUS2がゲームコントローラ290の先端をユーザUS1の方に向けて、ゲームコントローラ290の操作ボタン(不図示)を押している。これによりユーザUS1に対応する仮想空間のユーザキャラクタUC1(図12〜図15)のサイズが縮小する。
図9はユーザキャラクタUC1のサイズが小さくなる前において、ユーザUS1のHMD1に表示される画像の例である。ユーザUS1のHMD1には、ユーザUS2に対応するユーザキャラクタUC2やその背後のドアDRが表示されている。なお説明の簡略化のために実空間のドアと仮想空間のドアを同じ符号によりドアDRと表記する。ユーザキャラクタUC2は、ゲームコントローラ290に対応したライトLTを手に持っており、ライトLTから光RYが照射されている。この光RYを浴びるとサイズが小さくなるというゲーム設定になっている。
図10はユーザキャラクタUC1のサイズが小さくなった後に、ユーザUS1のHMD1に表示される画像の例である。図10ではユーザキャラクタUC2やドアDRが図9に比べて大きく表示される。例えばユーザキャラクタUC2を、小さくなったユーザキャラクタUC1の視点から見た場合の画像が、ユーザUS1のHMD1に表示される。これにより、あたかも巨人のように見えるユーザキャラクタUC2が迫ってくるような画像を、ユーザUS1のHMD1に表示できるようになる。そして、ユーザUS1は、自身が小さくなるという不思議感と、大きさの違う相手とのやり取りを楽しめるようになる。
例えば図7は、ユーザキャラクタUC1のサイズが小さくなった後におけるユーザUS1の挙動を示す図である。ユーザUS1は、自身の視点の上側方向から迫ってくる巨大なユーザキャラクタUC2を見上げるような視線になっており、それを避けるかのように手を上方に上げている。このように本実施形態によれば迫力のある仮想現実をユーザは体験できるようになる。
図8、図11では、ユーザUS2に対応するユーザキャラクタUC2が、仮想空間のハンバーガーPAを手に持って、ユーザキャラクタUC1の方に突き出している。図11の画像に示すように、巨人のようなユーザキャラクタUC2が、大きなハンバーガーPAをユーザUS1の方に突き出して来る様子が、ユーザUS1のHMD1に表示されるようになる。例えばライトLTの光RYを照射することで、このハンバーガーPAも小さくすることができる。このように本実施形態のシミュレーションシステムによれば、ユーザUS1、US2は、一方のユーザが小さくなって、他方のユーザがそれに対して色々なイタズラをするというような、これまでにない遊びを楽しむことが可能になる。
3.2 座標のスケールの切り替え処理
本実施形態では、HMDを装着したユーザが、実空間(現実世界)のフィールドを移動して行なうゲームにおいて、実空間のフィールドに対応した仮想空間を設定する。そして仮想空間内のユーザキャラクタ(アバター)の状態(環境状態)が、所与の状態(小さくなる、大きくなる)へと変化するイベント(トリガー)が発動した際に、仮想空間の座標のスケール(座標尺度、座標目盛)を切り替えるシステムを実現する。これによりライト等のアイテムを用いて物が小さくなったり大きくなったりする世界観を、分かりやすく且つ破綻なく体験できるシステムの提供が可能になる。
具体的には本実施形態では、図5、図9〜図11のような仮想空間を設定し、図4、図6〜図8の実空間のユーザ(US1、US2)に対応する仮想空間のユーザキャラクタ(UC1、UC2)を仮想空間において移動させる。また、この仮想空間において仮想カメラ(左眼用、右眼用の仮想カメラ)から見える画像として、ユーザが視界を覆うように装着するHMDの表示画像を生成する。そしてユーザキャラクタ(ユーザ移動体)の状態が所与の状態へと変化するイベントが発生したか否かを判断する。そしてイベント(所与の状態へと変化させるトリガー)が発生すると判断された場合に、実空間での座標のスケールと仮想空間での座標のスケールとの対応関係を切り替える処理を行う。例えば実空間の1mの座標のスケールを、仮想空間では、1mよりも小さい座標のスケールに切り替えたり、1mよりも大きい座標のスケールに切り替える。
このようにすれば、イベントの発生によるユーザキャラクタの視点状態等の状態の変化(視点位置の変化等)を、座標のスケールの対応関係を切り替えるという簡素な処理で実現できる。そして図10、図11に示すように、ユーザキャラクタのサイズ等の状態が変化したことが反映された表示画像を、HMDに表示できるようになる。従って、イベントの発生によるユーザキャラクタの状態の変化を仮想空間の画像に反映させることができるシミュレーションシステムの提供が可能になる。
座標のスケールの対応関係の切り替え処理としては種々の処理が考えられる。例えば図12〜図14では、ユーザキャラクタの状態が変化するイベントが発生すると判断された場合は、ユーザキャラクタのローカル座標系から仮想空間のワールド座標系への座標変換の際に縮小又は拡大のスケール変換を行っている。例えば、実空間のユーザの視点の位置座標のスケールと、仮想カメラの位置座標のスケールとの対応関係を切り替えている。
図12では実空間のユーザUS1はHMD1を装着しており、その左眼の視点をVPLとし、右眼の視点をVPRとする。また仮想空間のユーザキャラクタUC1の左眼の視点に対応する左眼用の仮想カメラをVCLとし、右眼の視点に対応する右眼用の仮想カメラをVCRとする。オブジェクトHMDVは、実空間のHMD1に対応する仮想空間のHMDオブジェクト(HMDコンポーネントオブジェクト)である。オブジェクトHMDVは、左眼用の仮想カメラVCLと右眼用の仮想カメラVCRにより構成されるオブジェクトであり、ユーザキャラクタUC1に対応するオブジェクトである。本実施形態では、実空間のHMD1に対応するオブジェクトHMDVを仮想空間に配置することで、仮想カメラVCL、VCRから見える仮想空間の画像を生成している。
図12では、仮想空間の仮想カメラVCL、VCRの位置座標は、実空間の視点VPL、VPRの位置座標に対応しており、両者は例えば同じ座標になっている。また実空間のユーザUS1が距離LDだけ移動すると、仮想空間のユーザキャラクタUC1も対応する距離LDVだけ移動し、例えばLDV=LDになっている。なお、視点VPL、VPRの位置座標と仮想カメラVCL、VCRの位置座標は完全に一致している必要は必ずしもなく、ゲーム設定の調整の範囲で両者の位置座標に多少の差異(例えば10%程度の差異)があってもよい。即ち、両者の位置座標は実質的に同じであればよい。
一方、図13ではユーザキャラクタUC1のサイズが小さくなるイベントが発生している。このようなイベントの発生時に、本実施形態では、ユーザキャラクタUC1のローカル座標系(XL、YL、ZL)から仮想空間のワールド座標系(XW、YW、ZW)への座標変換の際に縮小のスケール変換を行う。これにより、ユーザキャラクタUC1に対応するオブジェクトであるオブジェクトHMDVに対して、縮小のスケール変換が行われるようになる。即ち、図13では、図12に比べて、オブジェクトHMDVの位置が低くなり(Y座標が小さくなり)、オブジェクトHMDVを構成する仮想カメラVCL、VCR間の距離(カメラ間距離)も短くなる。オブジェクトHMDV(VCR、VCL)の位置が低くなることで、図10に示すように、下方の視点からユーザキャラクタUC2を見ているような画像が、ユーザUS1のHMD1に表示されるようになる。また仮想カメラVCL、VCR間の距離が短くなることで、実空間とは異なった奥行き感になり、小さなサイズのユーザキャラクタUC1から見える奥行き感になる。また、このようなスケール変換が行われることで、実空間のユーザUS1が距離LDだけ移動した場合に、仮想空間のユーザキャラクタUC1は、距離LDよりも短い距離LDVだけ移動し、LDV<LDになる。即ち、縮小のスケール変換が行われることで、ユーザキャラクタUC1(オブジェクトHMDV)の移動の距離LDVについても縮小されて短くなる。
図14ではユーザキャラクタUC1のサイズが大きくなるイベントが発生している。このようなイベントの発生時に、本実施形態では、ユーザキャラクタUC1のローカル座標系(XL、YL、ZL)から仮想空間のワールド座標系(XW、YW、ZW)への座標変換の際に拡大のスケール変換を行う。これにより、オブジェクトHMDVに対して、拡大のスケール変換が行われるようになる。即ち、図14では、図12に比べて、オブジェクトHMDVの位置が高くなり(Y座標が大きくなり)、オブジェクトHMDVを構成する仮想カメラVCL、VCR間の距離も長くなる。オブジェクトHMDV(VCR、VCL)の位置が高くなることで、上方の視点からユーザキャラクタUC2を見ているような画像が、ユーザUS1のHMD1に表示されるようになる。また仮想カメラVCL、VCR間の距離が長くなることで、実空間とは異なった奥行き感になり、大きなサイズのユーザキャラクタUC1から見える奥行き感になる。また、このようなスケール変換が行われることで、実空間のユーザUS1が距離LDだけ移動した場合に、仮想空間のユーザキャラクタUC1は、距離LDよりも長い距離LDVだけ移動し、LDV>LDになる。即ち、拡大のスケール変換が行われることで、ユーザキャラクタUC1(オブジェクトHMDV)の移動の距離LDVについても拡大されて長くなる。
このように本実施形態では、ユーザキャラクタUC1のサイズが小さくなるイベントの発生時には、ワールド座標系への座標変換の際に縮小のスケール変換を行う。例えば視点VPL、VPRの位置座標のスケールと仮想カメラVCL、VCRの位置座標のスケールの対応関係を、図12の対応関係から図13の対応関係に切り替える。一方、ユーザキャラクタUC1のサイズが大きくなるイベントの発生時には、ワールド座標系への座標変換の際に拡大のスケール変換を行う。例えば視点VPL、VPRの位置座標のスケールと仮想カメラVCL、VCRの位置座標のスケールの対応関係を、図12の対応関係から図14の対応関係に切り替える。このようにすることで、座標のスケールの対応関係の切り替え処理を、縮小又は拡大のスケール変換を行うという簡素な処理で実現して、イベントの発生によるユーザキャラクタの状態の変化をユーザに仮想体験させることが可能になる。
図15は、座標のスケールの切り替え処理の他の例の説明図である。図15では、ユーザキャラクタの状態が変化するイベントが発生すると判断された場合に、ユーザキャラクタが移動する仮想空間を、第1の仮想空間から、第1の仮想空間とは座標軸のスケールが異なる第2の仮想空間に切り替えている。
具体的には図15では、イベント発生時に、第1の仮想空間VSP1から、第1の仮想空間VSP1とは座標軸のスケールが異なる第2の仮想空間VSP2に切り替えている。第1の仮想空間VSP1は、実空間RSPに対応する仮想空間であり、第1の仮想空間VSP1の座標軸のスケールは、実空間RSPの座標軸のスケールに対応しており、両者の座標軸のスケールは例えば同じになっている。これに対して第2の仮想空間VSP2の座標軸のスケールは、実空間RSPや第1の仮想空間VSP1の座標軸のスケールとは異なっており、第2の仮想空間VSP2は第1の仮想空間VSP1よりも広い仮想空間となっている。例えば第1の仮想空間VSP1のXV1軸、YV1軸、ZV1軸のスケールは、実空間RSPのX軸、Y軸、Z軸のスケールと同じになっている。これに対して、第2の仮想空間VSP2のXV2軸、YV2軸、ZV2軸のスケールは、実空間RSPのX軸、Y軸、Z軸のスケールとは異なっており、より広い座標空間を規定する座標のスケールになっている。例えば第2の仮想空間VSP2の各座標軸での1mのスケールは、第1の仮想空間VSP1の各座標軸での1mのスケールよりも長くなっている。そして第2の仮想空間VSP2に配置されるユーザキャラクタUC1以外のオブジェクトのサイズは、例えば第1の仮想空間VSP1に配置されるユーザキャラクタUC1以外のオブジェクトのサイズよりも大きくなっている。一方、ユーザキャラクタUC1のサイズは第1の仮想空間VSP1と第2の仮想空間VSP2とで同じになっている。このように第2の仮想空間VSP2を広い仮想空間にすることで、仮想空間に対するユーザキャラクタUC2のサイズが相対的に小さくなり、ユーザキャラクタUC2のサイズを小さくするイベントの実現が可能になる。
なお、ユーザキャラクタUC2のサイズを大きくするイベントの発生時には、第1の仮想空間VSP1から、第1の仮想空間VSP1よりも狭い第2の仮想空間VSP2に切り替えればよい。例えば第2の仮想空間VSP2の各座標軸での1mのスケールを、第1の仮想空間VSP1の各座標軸での1mのスケールよりも短くする。また第2の仮想空間VSP2では、第1の仮想空間VSP1に比べて、ユーザキャラクタUC2のサイズについては同じにしながら、他のオブジェクトのサイズを小さくする。
このようにすれば、座標のスケールの対応関係の切り替え処理を、仮想空間の広狭を切り替えることで実現して、イベントの発生によるユーザキャラクタの状態の変化をユーザに仮想体験させることが可能になる。
また本実施形態では、ユーザキャラクタのサイズを変化させるイベントが発生した場合に、図12〜図15に示すような座標のスケールの対応関係の切り替え処理を行っている。これにより、ユーザキャラクタのサイズが小さくなったり大きくなったりする仮想現実を、ユーザに体感させることが可能になる。但し、座標のスケールの対応関係の切り替え処理を行うイベントとしては種々のイベントを考えることができる。例えば人間のユーザキャラクタが、変身の動作を行うことで、違う外観の超人などのキャラクタに変身するようなイベントであってもよい。或いはユーザ移動体であるロボットのキャラクタが、違う形状のロボットのキャラクタに変形するようなイベントであってもよい。或いはロボットなどの搭乗移動体に対して、仮想ユーザが搭乗することで、ユーザの目線がロボットの目線になるようなイベントであってもよい。このようにユーザ移動体の状態が所与の状態へと変化するイベントとしては種々のイベントを想定できる。
また本実施形態では、ユーザの行動情報、他のユーザの行動情報、或いはゲーム状況などに基づいて、イベントが発生したか否かを判断する。
例えば図16(A)では、ユーザUS1がゲームコントローラ290を自身の方に向けて、サイズ縮小のための操作ボタンを押している。ユーザUS1がこのような操作の行動を行うことで、ユーザUS1に対応するユーザキャラクタUC1のサイズが変化するイベントが発生する。つまり図16(A)では、ユーザUS1の行動情報に基づいて、イベントが発生したか否かを判断している。また図16(B)では、他のユーザUS2がユーザUS1に対してゲームコントローラ290を向けて、サイズ縮小のための操作ボタンを押している。他のユーザUS2がこのような操作の行動を行うことで、ユーザUS1に対応するユーザキャラクタUC1のサイズが変化するイベントが発生する。つまり図16(B)では、他のユーザUS2の行動情報に基づいて、イベントが発生したか否かを判断している。
なお、イベントを発生させるユーザや他のユーザの行動は、図16(A)、図16(B)に示すようなゲームコントローラ290を用いた操作には限定されない。例えばユーザ又は他のユーザが手や顔や足などの部位を動かす行動を行ったことを、部位検出センサにより検出して、イベントを発生させる。或いは、ユーザ又は他のユーザが姿勢を変化させる行動を行ったことを、姿勢検出センサにより検出して、イベントを発生させる。或いは、ユーザや他のユーザが発話の行動を行ったことを、マイクにより検出することにより、イベントを発生させる。
また本実施形態では、ユーザキャラクタの行動状況、ユーザキャラクタの環境状況、或いはゲームの進行状況などのゲーム状況に基づいて、イベントが発生したか否かを判断してもよい。例えばユーザキャラクタが変身などの所定の行動を行った場合や、ユーザキャラクタがゲームのマップの所定の場所に来た場合に、イベントを発生させる。或いは、ユーザキャラクタの周囲が所定の状況になった場合や、ゲームの進行状況が所定の状況になった場合(例えばボス戦になった場合)に、イベントを発生させる。このように、ユーザキャラクタを所与の状態に変化させるイベントのトリガーは、ユーザ自身によるものであってもよいし、他のユーザの行動やゲーム状況(ゲーム進行上の演出)に基づく自動的なものであってもよい。
このようにすれば、ユーザや他のユーザの行動やゲーム状況に応じて、ユーザキャラクタを所与の状態に変化させるイベントを発生し、そのイベントの発生によるユーザキャラクタの状態の変化を、ユーザに仮想体験させることが可能になる。
3.3 位置の修正処理
また本実施形態では、イベントの発生により、仮想空間でのユーザキャラクタの位置と、実空間でのユーザの対応位置との間にズレが生じると判定した場合に、仮想空間でのユーザキャラクタの位置を修正する。そして、例えばユーザキャラクタの位置を修正しながら、ユーザキャラクタの状態を所与の状態に変化させる。
例えば図17(A)では、実空間のユーザUS1がドアDRの方へと移動している。即ちユーザUS1が、位置P1から位置P2へと距離LDだけ移動している。この場合に、ユーザUS1に対応する仮想空間のユーザキャラクタUC1のサイズが変化するイベントが発生しており、ユーザキャラクタUC1は小さなサイズに変化している。そして図17(B)に示すように、実空間のユーザUS1の移動に伴って、仮想空間のユーザキャラクタUC1も位置PV1から位置PV2Eへと距離LDVだけ移動している。ところが、ユーザキャラクタUC1のサイズが小さくなるイベントが発生していると、図13で説明したように、実空間でのユーザUS1の移動の距離LDに比べて、仮想空間でのユーザキャラクタUC1の移動の距離LDVは短くなる。そして、ユーザキャラクタUC1が、短い距離LDVだけ移動して、位置PV2Eに位置している状態において、ユーザキャラクタUC1が元のサイズに戻るイベントが発生したとする。すると、図17(B)の仮想空間でのユーザキャラクタUC1の位置PV2Eは、実空間でのユーザUS1の位置P2に対応しなくなってしまい、両者の位置にズレが生じてしまう。つまり、実空間のユーザUS1は距離LDだけ移動するのに、サイズが小さくなった仮想空間のユーザキャラクタUC1は、距離LDよりも短い距離LDVしか移動しないため、このような位置のズレが生じてしまう。
そこで本実施形態では、仮想空間でのユーザキャラクタUC1の位置PV2Eと、実空間でのユーザUS1の対応する位置P2との間にズレが生じると判定した場合に、図17(C)に示すように、仮想空間でのユーザキャラクタUC1の位置PV2Eを修正する。具体的には、位置PV2Eから、実空間の位置P2に対応する位置PV2へと、ユーザキャラクタUC1を移動させることで、ユーザキャラクタUC1が居る位置の修正を行う。
このようにすれば、イベントの発生によりユーザの位置とユーザキャラクタの位置にズレが生じるような事態が発生した場合にも、ユーザキャラクタの位置を修正することで、このような不自然な事態が発生するのを防止できるようになる。
特に図17(A)に示すように実空間のユーザUS1がドアDRなどの物体に近づいている場合には、このような位置の修正処理は重要である。即ち、図17(A)のように実空間でユーザUS1が長い距離LDを移動してドアDRに近づいていても、図17(B)に示すように仮想空間ではユーザキャラクタUC1は短い距離LDVしか移動していない。このためHMD1の表示画像を見ているユーザUS1は、ドアDRが直ぐ手前にあることに気づかず、ドアDRにぶつかってしまうおそれがある。この点、図17(C)のような位置の修正処理を行えば、ユーザキャラクタUC1が元のサイズに戻った際に、ドアDRが直ぐ近くにあることをユーザUS1に適切に報知できるようになる。
さて、このような位置の修正処理を行うと、ユーザキャラクタUC1が元のサイズに戻るイベントの発生時に、位置PV2Eから位置PV2に瞬間的に移動したような画像が、ユーザUS1のHMD1に表示されてしまう。このため、ユーザUS1が、このような瞬間的な移動に不自然さを感じてしまったり、場合によっては、ユーザUS1の3D酔いを引き起こしてしまうおそれがある。例えば実空間と仮想空間の間の立体感や見え方の違いで、乗り物酔いのようなものを感じてしまう。
そこで本実施形態では、図18(A)のようにユーザキャラクタUC1の位置を修正する際に、図18(B)に示すように表示画像を変化させる処理を行う。例えばユーザUS1のHMD1に対して、位置修正時用の特別な画像を表示する。具体的には表示画像を変化させる処理として、表示画像をフェードアウトさせる処理を行う。例えば表示画像のフェードアウト処理として、表示画像の全画素の色を徐々に白色に近づけるホワイトアウト処理を行う。具体的には位置の修正処理の開始タイミングでは、通常の仮想空間画像をHMD1に表示し、所定フレーム数(1フレームは1/60秒)の経過後にホワイトアウト処理(広義には表示画像を変化させる処理)を開始する。そしてユーザキャラクタUC1が位置PV2に移動する前までに、例えば全画面をホワイトアウトする。そして、ユーザキャラクタUC1が位置PV2に移動した後に、ホワイトアウトを解除して、通常の仮想空間画像をHMD1に表示する。即ち、通常の仮想空間画像のフェードイン処理を行って、HMD1に表示する。
このようにすることで、ユーザUS1が瞬間的な移動に対して不自然さを感じたり、3D酔いを引き起こしてしまうような事態を防止できる。例えば位置の修正処理の開始タイミングでは通常の仮想空間画像を表示することで、位置の移動が発生したことを、ある程度、ユーザUS1に知らせることができる。そして、その後に表示画像がホワイトアウトすることで、速い速度での瞬間的な移動については、ユーザUS1に感じさせないようにすることができ、3D酔い等の発生を防止できるようになる。
なお、位置修正時に表示画像を変化させる処理は、このようなホワイトアウト処理等のフェードアウト処理には限定されない。例えば表示画像を徐々にぼかす処理を行ったり、表示画像を徐々に半透明画像に変化させる処理を行ってもよい。或いは表示画像の輝度を徐々に低下させる処理を行ってもよい。
また表示画像を変化させる処理として、仮想空間のオブジェクトを、仮想カメラを覆う位置に表示する処理を行ってもよい。例えば図19(A)のようにユーザキャラクタUC1の位置を修正する際に、図19(B)に示すように、ユーザキャラクタUC1の視点に対応する仮想カメラVCL、VCRを覆う位置に、オブジェクトOBSを配置して表示する。例えばロボットの手の形のようなオブジェクトを登場させ、ユーザキャラクタUC1の視界を覆う位置に配置する。こうすることで、ユーザキャラクタUC1の位置の修正の際に、実空間のユーザUS1のHMD1には、オブジェクトOBSに覆われたような画像が表示されるようになる。従って、ユーザキャラクタUC1が瞬間的に移動してしまうような画像が表示されてしまうのを抑制でき、ユーザUS1が不自然さを感じたり、3D酔い等が発生するのを防止できるようになる。
なお、視界を覆うように配置するオブジェクトとしては、ゲーム設定やゲーム進行においてユーザUS1が不自然さを感じないようなオブジェクトを選定して、出現させればよい。但し、視界を覆うように配置するオブジェクトは、このようなオブジェクトに限定されるものではない。また、完全に不透明なオブジェクトではなく、半透明のオブジェクトをユーザキャラクタの視界を覆う位置に配置してもよい。
なお、上述のような表示画像の変化処理は、例えば図18(A)、図19(A)の位置修正処理における位置PV2EとPV2の差分が所与のしきい値を越えた場合に行えばよい。例えば位置PV2EとPV2の差分が小さい場合にも、ホワイトアウト処理等の表示画像の変化処理を行うと、頻繁にこのような表示画像の変化処理が行われてしまい、ユーザが不自然さを感じるなどの事態が生じる。この点、位置PV2EとPV2の差分が所与のしきい値を越えた場合にだけ、表示画像の変化処理を行えば、このような事態の発生を防止できる。
4.詳細な処理
次に本実施形態の詳細な処理例について図20のフローチャートを用いて説明する。
まず仮想空間の設定処理を行う(ステップS1)。そして設定された仮想空間において、ユーザキャラクタを移動させる処理を行う(ステップS2)。例えば実空間でのユーザの移動に連動するように仮想空間のユーザキャラクタを移動させる。
次に、ユーザキャラクタの状態が変化するイベントが発生するか否かを判断する(ステップS3)。例えばユーザキャラクタのサイズを変化させるイベントが発生するか否かを判断する。そしてイベントが発生する場合(イベントのトリガーが発生した場合)には、ユーザキャラクタの位置と実空間のユーザの対応位置との間にズレが生じるか否かを判断する(ステップS4)。例えばユーザキャラクタの位置と実空間のユーザの対応位置との間のズレが、所与のしきい値を越えたか否かを判断する。そして、ズレが生じると判断した場合には、ユーザキャラクタの位置の修正処理を行う(ステップS5)。例えば図17(C)に示すようにユーザキャラクタの位置を修正する処理を開始する。そして座標のスケールの切り替え処理を行う(ステップS6)。例えばユーザキャラクタのサイズを元のサイズに戻すための座標のスケールの切り替え処理を実行する。これにより、ユーザキャラクタの位置の修正処理の際に、ユーザが不自然さを感じたり、3D酔いが発生するなどの事態を防止できるようになる。
なお、上記のように本実施形態について詳細に説明したが、本発明の新規事項および効果から実体的に逸脱しない多くの変形が可能であることは当業者には容易に理解できるであろう。従って、このような変形例はすべて本発明の範囲に含まれるものとする。例えば、明細書又は図面において、少なくとも一度、より広義または同義な異なる用語(ユーザ移動体、表示画像の変化処理等)と共に記載された用語(ユーザキャラクタ、フェードアウト処理・ホワイトアウト処理等)は、明細書又は図面のいかなる箇所においても、その異なる用語に置き換えることができる。また位置情報の取得処理、仮想空間の設定処理、移動体の移動処理、イベント処理、表示処理、ゲーム処理、報知処理、対応関係の切り替え処理等も、本実施形態で説明したものに限定されず、これらと均等な手法・処理・構成も本発明の範囲に含まれる。また本発明は種々のゲームに適用できる。また本発明は、業務用ゲーム装置、家庭用ゲーム装置、又は多数のユーザが参加する大型アトラクションシステム等の種々のシミュレーションシステムに適用できる。