JP2019211864A - コンピュータプログラム、情報処理装置および情報処理方法 - Google Patents
コンピュータプログラム、情報処理装置および情報処理方法 Download PDFInfo
- Publication number
- JP2019211864A JP2019211864A JP2018105367A JP2018105367A JP2019211864A JP 2019211864 A JP2019211864 A JP 2019211864A JP 2018105367 A JP2018105367 A JP 2018105367A JP 2018105367 A JP2018105367 A JP 2018105367A JP 2019211864 A JP2019211864 A JP 2019211864A
- Authority
- JP
- Japan
- Prior art keywords
- rotation amount
- hmd
- sensor
- user
- rotation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Processing Or Creating Images (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
【課題】ユーザの仮想体験の質を向上させる。【解決手段】本実施形態に係るコンピュータプログラムは、ヘッドマウントデバイスを装着したユーザに仮想体験を提供するためにコンピュータに実行させるためのコンピュータプログラムであって、前記仮想体験を提供するための仮想空間を規定するステップと、前記仮想空間に仮想カメラを設定するステップと、前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの動きを検出する第1センサを用いて、前記ヘッドマウントデバイスの第1回転量を計算するステップと、前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第2センサを用いて、前記ヘッドマウントデバイスの第2回転量を計算するステップと、前記第2回転量に応じて、前記第1回転量を補正するステップと、前記補正された第1回転量に基づいて、前記仮想カメラの向きを制御するステップとを備える。【選択図】図15
Description
本開示は、コンピュータプログラム、情報処理装置および情報処理方法に関する。
ユーザの頭部に装着されて、ユーザに仮想空間を提供するヘッドマウントデバイス(HMD)が、バーチャルリアリティ(VR)を体験するツールの1つ注目されている。VRでは、現実空間におけるユーザの頭の向き(HMDの向き)と連動するように、仮想空間内における仮想カメラの向き(視界)を制御する。
しかしながら、HMDの向きと仮想カメラの向きがずれると、ユーザにずれた画像が提示されるため、ユーザの仮想体験の質が低下する。
本開示は、ユーザの仮想体験の質を向上させることが可能なコンピュータプログラム、情報処理装置および情報処理方法を提供する。
本発明の実施形態に係るコンピュータプログラムは、ヘッドマウントデバイスを装着したユーザに仮想体験を提供するためにコンピュータに実行させるためのコンピュータプログラムであって、前記仮想体験を提供するための仮想空間を規定するステップと、前記仮想空間に仮想カメラを設定するステップと、前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの動きを検出する第1センサを用いて、前記ヘッドマウントデバイスが回転した量である第1回転量を計算するステップと、前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第2センサを用いて、前記ヘッドマウントデバイスが回転した量である第2回転量を計算するステップと、前記第2回転量に応じて、前記第1回転量を補正するステップと、前記補正された第1回転量に基づいて、前記仮想カメラの向きを制御するステップとを備える。
以下、この技術的思想の実施の形態について図面を参照しながら詳細に説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。本開示において示される1以上の実施形態において、各実施形態が含む要素を互いに組み合わせることができ、かつ、当該組み合わせられた結果物も本開示が示す実施形態の一部をなすものとする。
[HMDシステムの構成]
図1を参照して、HMD(Head-Mounted Device)システム100の構成について説明する。図1は、本実施の形態に従うHMDシステム100の構成の概略を表す図である。HMDシステム100は、家庭用のシステムとしてあるいは業務用のシステムとして提供される。
図1を参照して、HMD(Head-Mounted Device)システム100の構成について説明する。図1は、本実施の形態に従うHMDシステム100の構成の概略を表す図である。HMDシステム100は、家庭用のシステムとしてあるいは業務用のシステムとして提供される。
HMDシステム100は、サーバ600と、HMDセット110A,110B,110C,110Dと、外部機器700と、ネットワーク2とを含む。HMDセット110A,110B,110C,110Dの各々は、ネットワーク2を介してサーバ600や外部機器700と通信可能に構成される。以下、HMDセット110A,110B,110C,110Dを総称して、HMDセット110とも言う。HMDシステム100を構成するHMDセット110の数は、4つに限られず、3つ以下でも、5つ以上でもよい。HMDセット110は、HMD120と、コンピュータ200と、HMDセンサ410と、ディスプレイ430と、コントローラ300とを備える。HMD120は、モニタ130と、注視センサ140と、第1カメラ150と、第2カメラ160と、マイク170と、スピーカ180とを含む。コントローラ300は、モーションセンサ420を含み得る。
ある局面において、コンピュータ200は、インターネットその他のネットワーク2に接続可能であり、ネットワーク2に接続されているサーバ600その他のコンピュータと通信可能である。その他のコンピュータとしては、例えば、他のHMDセット110のコンピュータや外部機器700が挙げられる。別の局面において、HMD120は、HMDセンサ410の代わりに、センサ190を含み得る。
HMD120は、ユーザ5の頭部に装着され、動作中に仮想空間をユーザ5に提供し得る。より具体的には、HMD120は、右目用の画像および左目用の画像をモニタ130にそれぞれ表示する。ユーザ5の各目がそれぞれの画像を視認すると、ユーザ5は、両目の視差に基づき当該画像を3次元画像として認識し得る。HMD120は、モニタを備える所謂ヘッドマウントディスプレイと、スマートフォンその他のモニタを有する端末を装着可能なヘッドマウント機器のいずれをも含み得る。
モニタ130は、例えば、非透過型の表示装置として実現される。ある局面において、モニタ130は、ユーザ5の両目の前方に位置するようにHMD120の本体に配置されている。したがって、ユーザ5は、モニタ130に表示される3次元画像を視認すると、仮想空間に没入することができる。ある局面において、仮想空間は、例えば、背景、ユーザ5が操作可能なオブジェクト、ユーザ5が選択可能なメニューの画像を含む。ある局面において、モニタ130は、所謂スマートフォンその他の情報表示端末が備える液晶モニタまたは有機EL(Electro Luminescence)モニタとして実現され得る。
別の局面において、モニタ130は、透過型の表示装置として実現され得る。この場合、HMD120は、図1に示されるようにユーザ5の目を覆う密閉型ではなく、メガネ型のような開放型であり得る。透過型のモニタ130は、その透過率を調整することにより、一時的に非透過型の表示装置として構成可能であってもよい。モニタ130は、仮想空間を構成する画像の一部と、現実空間とを同時に表示する構成を含んでいてもよい。例えば、モニタ130は、HMD120に搭載されたカメラで撮影した現実空間の画像を表示してもよいし、一部の透過率を高く設定することにより現実空間を視認可能にしてもよい。
ある局面において、モニタ130は、右目用の画像を表示するためのサブモニタと、左目用の画像を表示するためのサブモニタとを含み得る。別の局面において、モニタ130は、右目用の画像と左目用の画像とを一体として表示する構成であってもよい。この場合、モニタ130は、高速シャッタを含む。高速シャッタは、画像がいずれか一方の目にのみ認識されるように、右目用の画像と左目用の画像とを交互に表示可能に作動する。
ある局面において、HMD120は、図示せぬ複数の光源を含む。各光源は例えば、赤外線を発するLED(Light Emitting Diode)により実現される。HMDセンサ410は、HMD120の動きを検出するためのポジショントラッキング機能を有する。より具体的には、HMDセンサ410は、HMD120が発する複数の赤外線を読み取り、現実空間内におけるHMD120の位置および傾きを検出する。
別の局面において、HMDセンサ410は、カメラにより実現されてもよい。この場合、HMDセンサ410は、カメラから出力されるHMD120の画像情報を用いて、画像解析処理を実行することにより、HMD120の位置および傾きを検出することができる。
別の局面において、HMD120は、位置検出器として、HMDセンサ410の代わりに、あるいはHMDセンサ410に加えてセンサ190を備えてもよい。HMD120は、センサ190を用いて、HMD120自身の位置および傾きを検出し得る。例えば、センサ190が角速度センサ、地磁気センサ、あるいは加速度センサである場合、HMD120は、HMDセンサ410の代わりに、これらの各センサのいずれかを用いて、自身の位置および傾きを検出し得る。一例として、センサ190が角速度センサである場合、角速度センサは、現実空間におけるHMD120の3軸周りの角速度を経時的に検出する。HMD120は、各角速度に基づいて、HMD120の3軸周りの角度の時間的変化を算出し、さらに、角度の時間的変化に基づいて、HMD120の傾きを算出する。
注視センサ140は、ユーザ5の右目および左目の視線が向けられる方向を検出する。つまり、注視センサ140は、ユーザ5の視線を検出する。視線の方向の検出は、例えば、公知のアイトラッキング機能によって実現される。注視センサ140は、当該アイトラッキング機能を有するセンサにより実現される。ある局面において、注視センサ140は、右目用のセンサおよび左目用のセンサを含むことが好ましい。注視センサ140は、例えば、ユーザ5の右目および左目に赤外光を照射するとともに、照射光に対する角膜および虹彩からの反射光を受けることにより各眼球の回転角を検出するセンサであってもよい。注視センサ140は、検出した各回転角に基づいて、ユーザ5の視線を検知することができる。
第1カメラ150は、ユーザ5の顔の下部を撮影する。より具体的には、第1カメラ150は、ユーザ5の鼻および口などを撮影する。第2カメラ160は、ユーザ5の目および眉などを撮影する。HMD120のユーザ5側の筐体をHMD120の内側、HMD120のユーザ5とは逆側の筐体をHMD120の外側と定義する。ある局面において、第1カメラ150は、HMD120の外側に配置され、第2カメラ160は、HMD120の内側に配置され得る。第1カメラ150および第2カメラ160が生成した画像は、コンピュータ200に入力される。別の局面において、第1カメラ150と第2カメラ160とを1台のカメラとして実現し、この1台のカメラでユーザ5の顔を撮影するようにしてもよい。
マイク170は、ユーザ5の発話を音声信号(電気信号)に変換してコンピュータ200に出力する。スピーカ180は、音声信号を音声に変換してユーザ5に出力する。別の局面において、HMD120は、スピーカ180に替えてイヤホンを含み得る。
コントローラ300は、有線または無線によりコンピュータ200に接続されている。コントローラ300は、ユーザ5からコンピュータ200への命令の入力を受け付ける。ある局面において、コントローラ300は、ユーザ5によって把持可能に構成される。別の局面において、コントローラ300は、ユーザ5の身体あるいは衣類の一部に装着可能に構成される。さらに別の局面において、コントローラ300は、コンピュータ200から送信される信号に基づいて、振動、音、光のうちの少なくともいずれかを出力するように構成されてもよい。さらに別の局面において、コントローラ300は、ユーザ5から、仮想空間に配置されるオブジェクトの位置や動きを制御するための操作を受け付ける。
ある局面において、コントローラ300は、複数の光源を含む。各光源は例えば、赤外線を発するLEDにより実現される。HMDセンサ410は、ポジショントラッキング機能を有する。この場合、HMDセンサ410は、コントローラ300が発する複数の赤外線を読み取り、現実空間内におけるコントローラ300の位置および傾きを検出する。別の局面において、HMDセンサ410は、カメラにより実現されてもよい。この場合、HMDセンサ410は、カメラから出力されるコントローラ300の画像情報を用いて、画像解析処理を実行することにより、コントローラ300の位置および傾きを検出することができる。
モーションセンサ420は、ある局面において、ユーザ5の手に取り付けられて、ユーザ5の手の動きを検出する。例えば、モーションセンサ420は、手の回転速度、回転数等を検出する。検出された信号は、コンピュータ200に送られる。モーションセンサ420は、例えば、コントローラ300に設けられている。ある局面において、モーションセンサ420は、例えば、ユーザ5に把持可能に構成されたコントローラ300に設けられている。別の局面において、現実空間における安全のため、コントローラ300は、手袋型のようにユーザ5の手に装着されることにより容易に飛んで行かないものに装着される。さらに別の局面において、ユーザ5に装着されないセンサがユーザ5の手の動きを検出してもよい。例えば、ユーザ5を撮影するカメラの信号が、ユーザ5の動作を表わす信号として、コンピュータ200に入力されてもよい。モーションセンサ420とコンピュータ200とは、一例として、無線により互いに接続される。無線の場合、通信形態は特に限られず、例えば、Bluetooth(登録商標)その他の公知の通信手法が用いられる。
ディスプレイ430は、モニタ130に表示されている画像と同様の画像を表示する。これにより、HMD120を装着しているユーザ5以外のユーザにも当該ユーザ5と同様の画像を視聴させることができる。ディスプレイ430に表示される画像は、3次元画像である必要はなく、右目用の画像や左目用の画像であってもよい。ディスプレイ430としては、例えば、液晶ディスプレイや有機ELモニタなどが挙げられる。
サーバ600は、コンピュータ200にプログラムを送信し得る。別の局面において、サーバ600は、他のユーザによって使用されるHMD120に仮想現実を提供するための他のコンピュータ200と通信し得る。例えば、アミューズメント施設において、複数のユーザが参加型のゲームを行なう場合、各コンピュータ200は、各ユーザの動作に基づく信号をサーバ600を介して他のコンピュータ200と通信して、同じ仮想空間において複数のユーザが共通のゲームを楽しむことを可能にする。各コンピュータ200は、各ユーザの動作に基づく信号をサーバ600を介さずに他のコンピュータ200と通信するようにしてもよい。
外部機器700は、コンピュータ200と通信可能な機器であればどのような機器であってもよい。外部機器700は、例えば、ネットワーク2を介してコンピュータ200と通信可能な機器であってもよいし、近距離無線通信や有線接続によりコンピュータ200と直接通信可能な機器であってもよい。外部機器700としては、例えば、スマートデバイス、PC(Personal Computer)、及びコンピュータ200の周辺機器などが挙げられるが、これらに限定されるものではない。
[コンピュータのハードウェア構成]
図2を参照して、本実施の形態に係るコンピュータ200について説明する。図2は、本実施の形態に従うコンピュータ200のハードウェア構成の一例を表すブロック図である。コンピュータ200は、主たる構成要素として、プロセッサ210と、メモリ220と、ストレージ230と、入出力インターフェイス240と、通信インターフェイス250とを備える。各構成要素は、それぞれ、バス260に接続されている。
図2を参照して、本実施の形態に係るコンピュータ200について説明する。図2は、本実施の形態に従うコンピュータ200のハードウェア構成の一例を表すブロック図である。コンピュータ200は、主たる構成要素として、プロセッサ210と、メモリ220と、ストレージ230と、入出力インターフェイス240と、通信インターフェイス250とを備える。各構成要素は、それぞれ、バス260に接続されている。
プロセッサ210は、コンピュータ200に与えられる信号に基づいて、あるいは、予め定められた条件が成立したことに基づいて、メモリ220またはストレージ230に格納されているプログラムに含まれる一連の命令を実行する。ある局面において、プロセッサ210は、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、MPU(Micro Processor Unit)、FPGA(Field-Programmable Gate Array)その他のデバイスとして実現される。
メモリ220は、プログラムおよびデータを一時的に保存する。プログラムは、例えば、ストレージ230からロードされる。データは、コンピュータ200に入力されたデータと、プロセッサ210によって生成されたデータとを含む。ある局面において、メモリ220は、RAM(Random Access Memory)その他の揮発メモリとして実現される。
ストレージ230は、プログラムおよびデータを永続的に保持する。ストレージ230は、例えば、ROM(Read-Only Memory)、ハードディスク装置、フラッシュメモリ、その他の不揮発記憶装置として実現される。ストレージ230に格納されるプログラムは、HMDシステム100において仮想空間を提供するためのプログラム、シミュレーションプログラム、ゲームプログラム、ユーザ認証プログラム、他のコンピュータ200との通信を実現するためのプログラムを含む。ストレージ230に格納されるデータは、仮想空間を規定するためのデータおよびオブジェクト等を含む。
別の局面において、ストレージ230は、メモリカードのように着脱可能な記憶装置として実現されてもよい。さらに別の局面において、コンピュータ200に内蔵されたストレージ230の代わりに、外部の記憶装置に保存されているプログラムおよびデータを使用する構成が使用されてもよい。このような構成によれば、例えば、アミューズメント施設のように複数のHMDシステム100が使用される場面において、プログラムやデータの更新を一括して行なうことが可能になる。
入出力インターフェイス240は、HMD120、HMDセンサ410、モーションセンサ420およびディスプレイ430との間で信号を通信する。HMD120に含まれるモニタ130,注視センサ140,第1カメラ150,第2カメラ160,マイク170およびスピーカ180は、HMD120の入出力インターフェイス240を介してコンピュータ200との通信を行ない得る。ある局面において、入出力インターフェイス240は、USB(Universal Serial Bus)、DVI(Digital Visual Interface)、HDMI(登録商標)(High-Definition Multimedia Interface)その他の端子を用いて実現される。入出力インターフェイス240は上述のものに限られない。
ある局面において、入出力インターフェイス240は、さらに、コントローラ300と通信し得る。例えば、入出力インターフェイス240は、コントローラ300およびモーションセンサ420から出力された信号の入力を受ける。別の局面において、入出力インターフェイス240は、プロセッサ210から出力された命令を、コントローラ300に送る。当該命令は、振動、音声出力、発光等をコントローラ300に指示する。コントローラ300は、当該命令を受信すると、その命令に応じて、振動、音声出力または発光のいずれかを実行する。
通信インターフェイス250は、ネットワーク2に接続されて、ネットワーク2に接続されている他のコンピュータ(例えば、サーバ600)と通信する。ある局面において、通信インターフェイス250は、例えば、LAN(Local Area Network)その他の有線通信インターフェイス、あるいは、WiFi(Wireless Fidelity)、Bluetooth(登録商標)、NFC(Near Field Communication)その他の無線通信インターフェイスとして実現される。通信インターフェイス250は上述のものに限られない。
ある局面において、プロセッサ210は、ストレージ230にアクセスし、ストレージ230に格納されている1つ以上のプログラムをメモリ220にロードし、当該プログラムに含まれる一連の命令を実行する。当該1つ以上のプログラムは、コンピュータ200のオペレーティングシステム、仮想空間を提供するためのアプリケーションプログラム、仮想空間で実行可能なゲームソフトウェア等を含み得る。プロセッサ210は、入出力インターフェイス240を介して、仮想空間を提供するための信号をHMD120に送る。HMD120は、その信号に基づいてモニタ130に映像を表示する。
図2に示される例では、コンピュータ200は、HMD120の外部に設けられる構成が示されているが、別の局面において、コンピュータ200は、HMD120に内蔵されてもよい。一例として、モニタ130を含む携帯型の情報通信端末(例えば、スマートフォン)がコンピュータ200として機能してもよい。
コンピュータ200は、複数のHMD120に共通して用いられる構成であってもよい。このような構成によれば、例えば、複数のユーザに同一の仮想空間を提供することもできるので、各ユーザは同一の仮想空間で他のユーザと同一のアプリケーションを楽しむことができる。
ある実施の形態において、HMDシステム100では、現実空間における座標系である実座標系が予め設定されている。実座標系は、現実空間における鉛直方向、鉛直方向に直交する水平方向、並びに、鉛直方向および水平方向の双方に直交する前後方向にそれぞれ平行な、3つの基準方向(軸)を有する。実座標系における水平方向、鉛直方向(上下方向)、および前後方向は、それぞれ、x軸、y軸、z軸と規定される。より具体的には、実座標系において、x軸は現実空間の水平方向に平行である。y軸は、現実空間の鉛直方向に平行である。z軸は現実空間の前後方向に平行である。
ある局面において、HMDセンサ410は、赤外線センサを含む。赤外線センサが、HMD120の各光源から発せられた赤外線をそれぞれ検出すると、HMD120の存在を検出する。HMDセンサ410は、さらに、各点の値(実座標系における各座標値)に基づいて、HMD120を装着したユーザ5の動きに応じた、現実空間内におけるHMD120の位置および傾き(向き)を検出する。より詳しくは、HMDセンサ410は、経時的に検出された各値を用いて、HMD120の位置および傾きの時間的変化を検出できる。
HMDセンサ410によって検出されたHMD120の各傾きは、実座標系におけるHMD120の3軸周りの各傾きに相当する。HMDセンサ410は、実座標系におけるHMD120の傾きに基づき、uvw視野座標系をHMD120に設定する。HMD120に設定されるuvw視野座標系は、HMD120を装着したユーザ5が仮想空間において物体を見る際の視点座標系に対応する。
[uvw視野座標系]
図3を参照して、uvw視野座標系について説明する。図3は、ある実施の形態に従うHMD120に設定されるuvw視野座標系を概念的に表す図である。HMDセンサ410は、HMD120の起動時に、実座標系におけるHMD120の位置および傾きを検出する。プロセッサ210は、検出された値に基づいて、uvw視野座標系をHMD120に設定する。
図3を参照して、uvw視野座標系について説明する。図3は、ある実施の形態に従うHMD120に設定されるuvw視野座標系を概念的に表す図である。HMDセンサ410は、HMD120の起動時に、実座標系におけるHMD120の位置および傾きを検出する。プロセッサ210は、検出された値に基づいて、uvw視野座標系をHMD120に設定する。
図3に示されるように、HMD120は、HMD120を装着したユーザ5の頭部を中心(原点)とした3次元のuvw視野座標系を設定する。より具体的には、HMD120は、実座標系を規定する水平方向、鉛直方向、および前後方向(x軸、y軸、z軸)を、実座標系内においてHMD120の各軸周りの傾きだけ各軸周りにそれぞれ傾けることによって新たに得られる3つの方向を、HMD120におけるuvw視野座標系のピッチ軸(u軸)、ヨー軸(v軸)、およびロール軸(w軸)として設定する。
ある局面において、HMD120を装着したユーザ5が直立し、かつ、正面を視認している場合、プロセッサ210は、実座標系に平行なuvw視野座標系をHMD120に設定する。この場合、実座標系における水平方向(x軸)、鉛直方向(y軸)、および前後方向(z軸)は、HMD120におけるuvw視野座標系のピッチ軸(u軸)、ヨー軸(v軸)、およびロール軸(w軸)に一致する。
uvw視野座標系がHMD120に設定された後、HMDセンサ410は、HMD120の動きに基づいて、設定されたuvw視野座標系におけるHMD120の傾きを検出できる。この場合、HMDセンサ410は、HMD120の傾きとして、uvw視野座標系におけるHMD120のピッチ角(θu)、ヨー角(θv)、およびロール角(θw)をそれぞれ検出する。ピッチ角(θu)は、uvw視野座標系におけるピッチ軸周りのHMD120の傾き角度を表す。ヨー角(θv)は、uvw視野座標系におけるヨー軸周りのHMD120の傾き角度を表す。ロール角(θw)は、uvw視野座標系におけるロール軸周りのHMD120の傾き角度を表す。
HMDセンサ410は、検出されたHMD120の傾きに基づいて、HMD120が動いた後のHMD120におけるuvw視野座標系を、HMD120に設定する。HMD120と、HMD120のuvw視野座標系との関係は、HMD120の位置および傾きに関わらず、常に一定である。HMD120の位置および傾きが変わると、当該位置および傾きの変化に連動して、実座標系におけるHMD120のuvw視野座標系の位置および傾きが変化する。
ある局面において、HMDセンサ410は、赤外線センサからの出力に基づいて取得される赤外線の光強度および複数の点間の相対的な位置関係(例えば、各点間の距離など)に基づいて、HMD120の現実空間内における位置を、HMDセンサ410に対する相対位置として特定してもよい。プロセッサ210は、特定された相対位置に基づいて、現実空間内(実座標系)におけるHMD120のuvw視野座標系の原点を決定してもよい。
[仮想空間]
図4を参照して、仮想空間についてさらに説明する。図4は、ある実施の形態に従う仮想空間11を表現する一態様を概念的に表す図である。仮想空間11は、中心12の360度方向の全体を覆う全天球状の構造を有する。図4では、説明を複雑にしないために、仮想空間11のうちの上半分の天球が例示されている。仮想空間11では各メッシュが規定される。各メッシュの位置は、仮想空間11に規定されるグローバル座標系であるXYZ座標系における座標値として予め規定されている。コンピュータ200は、仮想空間11に展開可能なパノラマ画像13(静止画、動画等)を構成する各部分画像を、仮想空間11において対応する各メッシュにそれぞれ対応付ける。
図4を参照して、仮想空間についてさらに説明する。図4は、ある実施の形態に従う仮想空間11を表現する一態様を概念的に表す図である。仮想空間11は、中心12の360度方向の全体を覆う全天球状の構造を有する。図4では、説明を複雑にしないために、仮想空間11のうちの上半分の天球が例示されている。仮想空間11では各メッシュが規定される。各メッシュの位置は、仮想空間11に規定されるグローバル座標系であるXYZ座標系における座標値として予め規定されている。コンピュータ200は、仮想空間11に展開可能なパノラマ画像13(静止画、動画等)を構成する各部分画像を、仮想空間11において対応する各メッシュにそれぞれ対応付ける。
ある局面において、仮想空間11では、中心12を原点とするXYZ座標系が規定される。XYZ座標系は、例えば、実座標系に平行である。XYZ座標系における水平方向、鉛直方向(上下方向)、および前後方向は、それぞれX軸、Y軸、Z軸として規定される。したがって、XYZ座標系のX軸(水平方向)が実座標系のx軸と平行であり、XYZ座標系のY軸(鉛直方向)が実座標系のy軸と平行であり、XYZ座標系のZ軸(前後方向)が実座標系のz軸と平行である。
HMD120の起動時、すなわちHMD120の初期状態において、仮想カメラ14が、仮想空間11の中心12に配置される。ある局面において、プロセッサ210は、仮想カメラ14が撮影する画像をHMD120のモニタ130に表示する。仮想カメラ14は、現実空間におけるHMD120の動きに連動して、仮想空間11を同様に移動する。これにより、現実空間におけるHMD120の位置および傾きの変化が、仮想空間11において同様に再現され得る。
仮想カメラ14には、HMD120の場合と同様に、uvw視野座標系が規定される。仮想空間11における仮想カメラ14のuvw視野座標系は、現実空間(実座標系)におけるHMD120のuvw視野座標系に連動するように規定されている。したがって、HMD120の傾きが変化すると、それに応じて、仮想カメラ14の傾きも変化する。仮想カメラ14は、HMD120を装着したユーザ5の現実空間における移動に連動して、仮想空間11において移動することもできる。
コンピュータ200のプロセッサ210は、仮想カメラ14の位置と傾き(基準視線16)とに基づいて、仮想空間11における視界領域15を規定する。視界領域15は、仮想空間11のうち、HMD120を装着したユーザ5が視認する領域に対応する。つまり、仮想カメラ14の位置は、仮想空間11におけるユーザ5の視点と言える。
注視センサ140によって検出されるユーザ5の視線は、ユーザ5が物体を視認する際の視点座標系における方向である。HMD120のuvw視野座標系は、ユーザ5がモニタ130を視認する際の視点座標系に等しい。仮想カメラ14のuvw視野座標系は、HMD120のuvw視野座標系に連動している。したがって、ある局面に従うHMDシステム100は、注視センサ140によって検出されたユーザ5の視線を、仮想カメラ14のuvw視野座標系におけるユーザ5の視線とみなすことができる。
[ユーザの視線]
図5を参照して、ユーザ5の視線の決定について説明する。図5は、ある実施の形態に従うHMD120を装着するユーザ5の頭部を上から表した図である。
図5を参照して、ユーザ5の視線の決定について説明する。図5は、ある実施の形態に従うHMD120を装着するユーザ5の頭部を上から表した図である。
ある局面において、注視センサ140は、ユーザ5の右目および左目の各視線を検出する。ある局面において、ユーザ5が近くを見ている場合、注視センサ140は、視線R1およびL1を検出する。別の局面において、ユーザ5が遠くを見ている場合、注視センサ140は、視線R2およびL2を検出する。この場合、ロール軸wに対して視線R2およびL2が成す角度は、ロール軸wに対して視線R1およびL1が成す角度よりも小さい。注視センサ140は、検出結果をコンピュータ200に送信する。
コンピュータ200が、視線の検出結果として、視線R1およびL1の検出値を注視センサ140から受信した場合には、その検出値に基づいて、視線R1およびL1の交点である注視点N1を特定する。一方、コンピュータ200は、視線R2およびL2の検出値を注視センサ140から受信した場合には、視線R2およびL2の交点を注視点として特定する。コンピュータ200は、特定した注視点N1の位置に基づき、ユーザ5の視線N0を特定する。コンピュータ200は、例えば、ユーザ5の右目Rと左目Lとを結ぶ直線の中点と、注視点N1とを通る直線の延びる方向を、視線N0として検出する。視線N0は、ユーザ5が両目により実際に視線を向けている方向である。視線N0は、視界領域15に対してユーザ5が実際に視線を向けている方向に相当する。
別の局面において、HMDシステム100は、テレビジョン放送受信チューナを備えてもよい。このような構成によれば、HMDシステム100は、仮想空間11においてテレビ番組を表示することができる。
さらに別の局面において、HMDシステム100は、インターネットに接続するための通信回路、あるいは、電話回線に接続するための通話機能を備えていてもよい。
[視界領域]
図6および図7を参照して、視界領域15について説明する。図6は、仮想空間11において視界領域15をX方向から見たYZ断面を表す図である。図7は、仮想空間11において視界領域15をY方向から見たXZ断面を表す図である。
図6および図7を参照して、視界領域15について説明する。図6は、仮想空間11において視界領域15をX方向から見たYZ断面を表す図である。図7は、仮想空間11において視界領域15をY方向から見たXZ断面を表す図である。
図6に示されるように、YZ断面における視界領域15は、領域18を含む。領域18は、仮想カメラ14の位置と基準視線16と仮想空間11のYZ断面とによって定義される。プロセッサ210は、仮想空間における基準視線16を中心として極角αを含む範囲を、領域18として規定する。
図7に示されるように、XZ断面における視界領域15は、領域19を含む。領域19は、仮想カメラ14の位置と基準視線16と仮想空間11のXZ断面とによって定義される。プロセッサ210は、仮想空間11における基準視線16を中心とした方位角βを含む範囲を、領域19として規定する。極角αおよびβは、仮想カメラ14の位置と仮想カメラ14の傾き(向き)とに応じて定まる。
ある局面において、HMDシステム100は、コンピュータ200からの信号に基づいて、視界画像17をモニタ130に表示させることにより、ユーザ5に仮想空間11における視界を提供する。視界画像17は、パノラマ画像13のうち視界領域15に対応する部分に相当する画像である。ユーザ5が、頭に装着したHMD120を動かすと、その動きに連動して仮想カメラ14も動く。その結果、仮想空間11における視界領域15の位置が変化する。これにより、モニタ130に表示される視界画像17は、パノラマ画像13のうち、仮想空間11においてユーザ5が向いた方向の視界領域15に重畳する画像に更新される。ユーザ5は、仮想空間11における所望の方向を視認することができる。
このように、仮想カメラ14の傾きは仮想空間11におけるユーザ5の視線(基準視線16)に相当し、仮想カメラ14が配置される位置は、仮想空間11におけるユーザ5の視点に相当する。したがって、仮想カメラ14の位置または傾きを変更することにより、モニタ130に表示される画像が更新され、ユーザ5の視界が移動される。
ユーザ5は、HMD120を装着している間、現実世界を視認することなく、仮想空間11に展開されるパノラマ画像13のみを視認できる。そのため、HMDシステム100は、仮想空間11への高い没入感覚をユーザ5に与えることができる。
ある局面において、プロセッサ210は、HMD120を装着したユーザ5の現実空間における移動に連動して、仮想空間11において仮想カメラ14を移動し得る。この場合、プロセッサ210は、仮想空間11における仮想カメラ14の位置および傾きに基づいて、HMD120のモニタ130に投影される画像領域(視界領域15)を特定す る。
ある局面において、仮想カメラ14は、2つの仮想カメラ、すなわち、右目用の画像を提供するための仮想カメラと、左目用の画像を提供するための仮想カメラとを含み得る。ユーザ5が3次元の仮想空間11を認識できるように、適切な視差が、2つの仮想カメラに設定される。別の局面において、仮想カメラ14を1つの仮想カメラにより実現してもよい。この場合、1つの仮想カメラにより得られた画像から、右目用の画像と左目用の画像とを生成するようにしてもよい。本実施の形態においては、仮想カメラ14が2つの仮想カメラを含み、2つの仮想カメラのロール軸が合成されることによって生成されるロール軸(w)がHMD120のロール軸(w)に適合されるように構成されているものとして、本開示に係る技術思想を例示する。
[コントローラ]
図8を参照して、コントローラ300の一例について説明する。図8は、ある実施の形態に従うコントローラ300の概略構成を表す図である。
図8を参照して、コントローラ300の一例について説明する。図8は、ある実施の形態に従うコントローラ300の概略構成を表す図である。
図8に示されるように、ある局面において、コントローラ300は、右コントローラ300Rと図示せぬ左コントローラとを含み得る。右コントローラ300Rは、ユーザ5の右手で操作される。左コントローラは、ユーザ5の左手で操作される。ある局面において、右コントローラ300Rと左コントローラとは、別個の装置として対称に構成される。したがって、ユーザ5は、右コントローラ300Rを把持した右手と、左コントローラを把持した左手とをそれぞれ自由に動かすことができる。別の局面において、コントローラ300は両手の操作を受け付ける一体型のコントローラであってもよい。以下、右コントローラ300Rについて説明する。
右コントローラ300Rは、グリップ310と、フレーム320と、天面330とを備える。グリップ310は、ユーザ5の右手によって把持されるように構成されている。たとえば、グリップ310は、ユーザ5の右手の掌と3本の指(中指、薬指、小指)とによって保持され得る。
グリップ310は、ボタン340,350と、モーションセンサ420とを含む。ボタン340は、グリップ310の側面に配置され、右手の中指による操作を受け付ける。ボタン350は、グリップ310の前面に配置され、右手の人差し指による操作を受け付ける。ある局面において、ボタン340,350は、トリガー式のボタンとして構成される。モーションセンサ420は、グリップ310の筐体に内蔵されている。ユーザ5の動作がカメラその他の装置によってユーザ5の周りから検出可能である場合には、グリップ310は、モーションセンサ420を備えなくてもよい。
フレーム320は、その円周方向に沿って配置された複数の赤外線LED360を含む。赤外線LED360は、コントローラ300を使用するプログラムの実行中に、当該プログラムの進行に合わせて赤外線を発光する。赤外線LED360から発せられた赤外線は、右コントローラ300Rと左コントローラとの各位置や姿勢(傾き、向き)を検出するために使用され得る。図8に示される例では、二列に配置された赤外線LED360が示されているが、配列の数は図8に示されるものに限られない。一列あるいは3列以上の配列が使用されてもよい。
天面330は、ボタン370,380と、アナログスティック390とを備える。ボタン370,380は、プッシュ式ボタンとして構成される。ボタン370,380は、ユーザ5の右手の親指による操作を受け付ける。アナログスティック390は、ある局面において、初期位置(ニュートラルの位置)から360度任意の方向への操作を受け付ける。当該操作は、たとえば、仮想空間11に配置されるオブジェクトを移動するための操作を含む。
ある局面において、右コントローラ300Rおよび左コントローラは、赤外線LED360その他の部材を駆動するための電池を含む。電池は、充電式、ボタン型、乾電池型などを含むが、これらに限定されない。別の局面において、右コントローラ300Rと左コントローラは、たとえば、コンピュータ200のUSBインターフェースに接続され得る。この場合、右コントローラ300Rおよび左コントローラは、電池を必要としない。
図8の状態(A)および状態(B)に示されるように、例えば、ユーザ5の右手に対して、ヨー、ロール、ピッチの各方向が規定される。ユーザ5が親指と人差し指とを伸ばした場合に、親指の伸びる方向がヨー方向、人差し指の伸びる方向がロール方向、ヨー方向の軸およびロール方向の軸によって規定される平面に垂直な方向がピッチ方向として規定される。
[サーバのハードウェア構成]
図9を参照して、本実施の形態に係るサーバ600について説明する。図9は、ある実施の形態に従うサーバ600のハードウェア構成の一例を表すブロック図である。サーバ600は、主たる構成要素として、プロセッサ610と、メモリ620と、ストレージ630と、入出力インターフェイス640と、通信インターフェイス650とを備える。各構成要素は、それぞれ、バス660に接続されている。
図9を参照して、本実施の形態に係るサーバ600について説明する。図9は、ある実施の形態に従うサーバ600のハードウェア構成の一例を表すブロック図である。サーバ600は、主たる構成要素として、プロセッサ610と、メモリ620と、ストレージ630と、入出力インターフェイス640と、通信インターフェイス650とを備える。各構成要素は、それぞれ、バス660に接続されている。
プロセッサ610は、サーバ600に与えられる信号に基づいて、あるいは、予め定められた条件が成立したことに基づいて、メモリ620またはストレージ630に格納されているプログラムに含まれる一連の命令を実行する。ある局面において、プロセッサ610は、CPU、GPU、MPU、FPGAその他のデバイスとして実現される。
メモリ620は、プログラムおよびデータを一時的に保存する。プログラムは、例えば、ストレージ630からロードされる。データは、サーバ600に入力されたデータと、プロセッサ610によって生成されたデータとを含む。ある局面において、メモリ620は、RAMその他の揮発メモリとして実現される。
ストレージ630は、プログラムおよびデータを永続的に保持する。ストレージ630は、例えば、ROM、ハードディスク装置、フラッシュメモリ、その他の不揮発記憶装置として実現される。ストレージ630に格納されるプログラムは、HMDシステム100において仮想空間を提供するためのプログラム、シミュレーションプログラム、ゲームプログラム、ユーザ認証プログラム、コンピュータ200との通信を実現するためのプログラムを含んでもよい。ストレージ630に格納されるデータは、仮想空間を規定するためのデータおよびオブジェクト等を含んでもよい。
別の局面において、ストレージ630は、メモリカードのように着脱可能な記憶装置として実現されてもよい。さらに別の局面において、サーバ600に内蔵されたストレージ630の代わりに、外部の記憶装置に保存されているプログラムおよびデータを使用する構成が使用されてもよい。このような構成によれば、例えば、アミューズメント施設のように複数のHMDシステム100が使用される場面において、プログラムやデータの更新を一括して行なうことが可能になる。
入出力インターフェイス640は、入出力機器との間で信号を通信する。ある局面において、入出力インターフェイス640は、USB、DVI、HDMIその他の端子を用いて実現される。入出力インターフェイス640は上述のものに限られない。
通信インターフェイス650は、ネットワーク2に接続されて、ネットワーク2に接続されているコンピュータ200と通信する。ある局面において、通信インターフェイス650は、例えば、LANその他の有線通信インターフェイス、あるいは、WiFi、Bluetooth、NFCその他の無線通信インターフェイスとして実現される。通信インターフェイス650は上述のものに限られない。
ある局面において、プロセッサ610は、ストレージ630にアクセスし、ストレージ630に格納されている1つ以上のプログラムをメモリ620にロードし、当該プログラムに含まれる一連の命令を実行する。当該1つ以上のプログラムは、サーバ600のオペレーティングシステム、仮想空間を提供するためのアプリケーションプログラム、仮想空間で実行可能なゲームソフトウェア等を含み得る。プロセッサ610は、入出力インターフェイス640を介して、仮想空間を提供するための信号をコンピュータ200に送ってもよい。
[HMDの制御装置]
図10を参照して、HMD120の制御装置について説明する。ある実施の形態において、制御装置は周知の構成を有するコンピュータ200によって実現される。図10は、ある実施の形態に従うコンピュータ200をモジュール構成として表わすブロック図である。
図10を参照して、HMD120の制御装置について説明する。ある実施の形態において、制御装置は周知の構成を有するコンピュータ200によって実現される。図10は、ある実施の形態に従うコンピュータ200をモジュール構成として表わすブロック図である。
図10に示されるように、コンピュータ200は、コントロールモジュール510と、レンダリングモジュール520と、メモリモジュール530と、通信制御モジュール540とを備える。ある局面において、コントロールモジュール510とレンダリングモジュール520とは、プロセッサ210によって実現される。別の局面において、複数のプロセッサ210がコントロールモジュール510とレンダリングモジュール520として作動してもよい。メモリモジュール530は、メモリ220またはストレージ230によって実現される。通信制御モジュール540は、通信インターフェイス250によって実現される。
コントロールモジュール510は、ユーザ5に提供される仮想空間11を制御する。コントロールモジュール510は、仮想空間11を表す仮想空間データを用いて、HMDシステム100における仮想空間11を規定する。仮想空間データは、例えば、メモリモジュール530に記憶されている。コントロールモジュール510が、仮想空間データを生成したり、サーバ600などから仮想空間データを取得するようにしたりしてもよい。
コントロールモジュール510は、オブジェクトを表すオブジェクトデータを用いて、仮想空間11にオブジェクトを配置する。オブジェクトデータは、例えば、メモリモジュール530に記憶されている。コントロールモジュール510が、オブジェクトデータを生成したり、サーバ600などからオブジェクトデータを取得するようにしたりしてもよい。オブジェクトは、例えば、ユーザ5の分身であるアバターオブジェクト、キャラクタオブジェクト、コントローラ300によって操作される仮想手などの操作オブジェクト、ゲームのストーリーの進行に従って配置される森、山その他を含む風景、街並み、動物等を含み得る。
コントロールモジュール510は、ネットワーク2を介して接続される他のコンピュータ200のユーザ5のアバターオブジェクトを仮想空間11に配置する。ある局面において、コントロールモジュール510は、ユーザ5のアバターオブジェクトを仮想空間11に配置する。ある局面において、コントロールモジュール510は、ユーザ5を含む画像に基づいて、ユーザ5を模したアバターオブジェクトを仮想空間11に配置する。別の局面において、コントロールモジュール510は、複数種類のアバターオブジェクト(例えば、動物を模したオブジェクトや、デフォルメされた人のオブジェクト)の中からユーザ5による選択を受け付けたアバターオブジェクトを仮想空間11に配置する。
コントロールモジュール510は、HMDセンサ410の出力に基づいてHMD120の傾きを特定する。別の局面において、コントロールモジュール510は、モーションセンサとして機能するセンサ190の出力に基づいてHMD120の傾きを特定する。コントロールモジュール510は、第1カメラ150および第2カメラ160が生成するユーザ5の顔の画像から、ユーザ5の顔を構成する器官(例えば、口,目,眉)を検出する。コントロールモジュール510は、検出した各器官の動き(形状)を検出する。
コントロールモジュール510は、注視センサ140からの信号に基づいて、ユーザ5の仮想空間11における視線を検出する。コントロールモジュール510は、検出したユーザ5の視線と仮想空間11の天球とが交わる視点位置(XYZ座標系における座標値)を検出する。より具体的には、コントロールモジュール510は、uvw座標系で規定されるユーザ5の視線と、仮想カメラ14の位置および傾きとに基づいて、視点位置を検出する。コントロールモジュール510は、検出した視点位置をサーバ600に送信する。別の局面において、コントロールモジュール510は、ユーザ5の視線を表す視線情報をサーバ600に送信するように構成されてもよい。係る場合、サーバ600が受信した視線情報に基づいて視点位置を算出し得る。
コントロールモジュール510は、HMDセンサ410が検出するHMD120の動きをアバターオブジェクトに反映する。例えば、コントロールモジュール510は、HMD120が傾いたことを検知して、アバターオブジェクトを傾けて配置する。コントロールモジュール510は、検出した顔器官の動作を、仮想空間11に配置されるアバターオブジェクトの顔に反映させる。コントロールモジュール510は、サーバ600から他のユーザ5の視線情報を受信し、当該他のユーザ5のアバターオブジェクトの視線に反映させる。ある局面において、コントロールモジュール510は、コントローラ300の動きをアバターオブジェクトや操作オブジェクトに反映する。この場合、コントローラ300は、コントローラ300の動きを検知するためのモーションセンサ、加速度センサ、または複数の発光素子(例えば、赤外線LED)などを備える。
コントロールモジュール510は、仮想空間11においてユーザ5の操作を受け付けるための操作オブジェクトを仮想空間11に配置する。ユーザ5は、操作オブジェクトを操作することにより、例えば、仮想空間11に配置されるオブジェクトを操作する。ある局面において、操作オブジェクトは、例えば、ユーザ5の手に相当する仮想手である手オブジェクト等を含み得る。ある局面において、コントロールモジュール510は、モーションセンサ420の出力に基づいて現実空間におけるユーザ5の手の動きに連動するように仮想空間11において手オブジェクトを動かす。ある局面において、操作オブジェクトは、アバターオブジェクトの手の部分に相当し得る。
コントロールモジュール510は、仮想空間11に配置されるオブジェクトのそれぞれが、他のオブジェクトと衝突した場合に、当該衝突を検出する。コントロールモジュール510は、例えば、あるオブジェクトのコリジョンエリアと、別のオブジェクトのコリジョンエリアとが触れたタイミングを検出することができ、当該検出がされたときに、予め定められた処理を行なう。コントロールモジュール510は、オブジェクトとオブジェクトとが触れている状態から離れたタイミングを検出することができ、当該検出がされたときに、予め定められた処理を行なう。コントロールモジュール510は、オブジェクトとオブジェクトとが触れている状態であることを検出することができる。例えば、コントロールモジュール510は、操作オブジェクトと、他のオブジェクトとが触れたときに、これら操作オブジェクトと他のオブジェクトとが触れたことを検出して、予め定められた処理を行なう。
ある局面において、コントロールモジュール510は、HMD120のモニタ130における画像表示を制御する。例えば、コントロールモジュール510は、仮想空間11に仮想カメラ14を配置する。コントロールモジュール510は、仮想空間11における仮想カメラ14の位置と、仮想カメラ14の傾き(向き)を制御する。コントロールモジュール510は、HMD120を装着したユーザ5の頭の傾きと、仮想カメラ14の位置に応じて、視界領域15を規定する。レンダリングモジュール520は、決定された視界領域15に基づいて、モニタ130に表示される視界画像17を生成する。レンダリングモジュール520により生成された視界画像17は、通信制御モジュール540によってHMD120に出力される。
コントロールモジュール510は、HMD120から、ユーザ5のマイク170を用いた発話を検出すると、当該発話に対応する音声データの送信対象のコンピュータ200を特定する。音声データは、コントロールモジュール510によって特定されたコンピュータ200に送信される。コントロールモジュール510は、ネットワーク2を介して他のユーザのコンピュータ200から音声データを受信すると、当該音声データに対応する音声(発話)をスピーカ180から出力する。
メモリモジュール530は、コンピュータ200が仮想空間11をユーザ5に提供するために使用されるデータを保持している。ある局面において、メモリモジュール530は、空間情報と、オブジェクト情報と、ユーザ情報とを保持している。
空間情報は、仮想空間11を提供するために規定された1つ以上のテンプレートを保持している。
オブジェクト情報は、仮想空間11を構成する複数のパノラマ画像13、仮想空間11にオブジェクトを配置するためのオブジェクトデータを含む。パノラマ画像13は、静止画像および動画像を含み得る。パノラマ画像13は、非現実空間の画像と現実空間の画像とを含み得る。非現実空間の画像としては、例えば、コンピュータグラフィックスで生成された画像が挙げられる。
ユーザ情報は、ユーザ5を識別するユーザIDを保持する。ユーザIDは、例えば、ユーザが使用するコンピュータ200に設定されるIP(Internet Protocol)アドレスまたはMAC(Media Access Control)アドレスであり得る。別の局面において、ユーザIDはユーザによって設定され得る。ユーザ情報は、HMDシステム100の制御装置としてコンピュータ200を機能させるためのプログラム等を含む。
メモリモジュール530に格納されているデータおよびプログラムは、HMD120のユーザ5によって入力される。あるいは、プロセッサ210が、当該コンテンツを提供する事業者が運営するコンピュータ(例えば、サーバ600)からプログラムあるいはデータをダウンロードして、ダウンロードされたプログラムあるいはデータをメモリモジュール530に格納する。
通信制御モジュール540は、ネットワーク2を介して、サーバ600その他の情報通信装置と通信し得る。
ある局面において、コントロールモジュール510及びレンダリングモジュール520は、例えば、ユニティテクノロジーズ社によって提供されるUnity(登録商標)を用いて実現され得る。別の局面において、コントロールモジュール510及びレンダリングモジュール520は、各処理を実現する回路素子の組み合わせとしても実現され得る。
コンピュータ200における処理は、ハードウェアと、プロセッサ210により実行されるソフトウェアとによって実現される。このようなソフトウェアは、ハードディスクその他のメモリモジュール530に予め格納されている場合がある。ソフトウェアは、CD−ROMその他のコンピュータ読み取り可能な不揮発性のデータ記録媒体に格納されて、プログラム製品として流通している場合もある。あるいは、当該ソフトウェアは、インターネットその他のネットワークに接続されている情報提供事業者によってダウンロード可能なプログラム製品として提供される場合もある。このようなソフトウェアは、光ディスク駆動装置その他のデータ読取装置によってデータ記録媒体から読み取られて、あるいは、通信制御モジュール540を介してサーバ600その他のコンピュータからダウンロードされた後、記憶モジュールに一旦格納される。そのソフトウェアは、プロセッサ210によって記憶モジュールから読み出され、実行可能なプログラムの形式でRAMに格納される。プロセッサ210は、そのプログラムを実行する。
[HMDシステムの制御構造]
図11を参照して、HMDセット110の制御構造について説明する。図11は、ある実施の形態に従うHMDセット110において実行される処理の一部を表すシーケンスチャートである。
図11を参照して、HMDセット110の制御構造について説明する。図11は、ある実施の形態に従うHMDセット110において実行される処理の一部を表すシーケンスチャートである。
図11に示されるように、ステップS1110にて、コンピュータ200のプロセッサ210は、コントロールモジュール510として、仮想空間データを特定し、仮想空間11を定義する。
ステップS1120にて、プロセッサ210は、仮想カメラ14を初期化する。たとえば、プロセッサ210は、メモリのワーク領域において、仮想カメラ14を仮想空間11において予め規定された中心12に配置し、仮想カメラ14の視線をユーザ5が向いている方向に向ける。
ステップS1130にて、プロセッサ210は、レンダリングモジュール520として、初期の視界画像を表示するための視界画像データを生成する。生成された視界画像データは、通信制御モジュール540によってHMD120に出力される。
ステップS1132にて、HMD120のモニタ130は、コンピュータ200から受信した視界画像データに基づいて、視界画像を表示する。HMD120を装着したユーザ5は、視界画像を視認すると仮想空間11を認識し得る。
ステップS1134にて、HMDセンサ410は、HMD120から発信される複数の赤外線光に基づいて、HMD120の位置と傾きを検知する。検知結果は、動き検知データとして、コンピュータ200に出力される。
ステップS1140にて、プロセッサ210は、HMD120の動き検知データに含まれる位置と傾きとに基づいて、HMD120を装着したユーザ5の視界方向を特定する。
ステップS1150にて、プロセッサ210は、アプリケーションプログラムを実行し、アプリケーションプログラムに含まれる命令に基づいて、仮想空間11にオブジェクトを配置する。
ステップS1160にて、コントローラ300は、モーションセンサ420から出力される信号に基づいて、ユーザ5の操作を検出し、その検出された操作を表す検出データをコンピュータ200に出力する。別の局面において、ユーザ5によるコントローラ300の操作は、ユーザ5の周囲に配置されたカメラからの画像に基づいて検出されてもよい。
ステップS1170にて、プロセッサ210は、コントローラ300から取得した検出データに基づいて、ユーザ5によるコントローラ300の操作を検出する。
ステップS1180にて、プロセッサ210は、ユーザ5によるコントローラ300の操作に基づく視界画像データを生成する。生成された視界画像データは、通信制御モジュール540によってHMD120に出力される。
ステップS1190にて、HMD120は、受信した視界画像データに基づいて視界画像を更新し、更新後の視界画像をモニタ130に表示する。
[アバターオブジェクト]
図12(A)、(B)を参照して、本実施の形態に従うアバターオブジェクトについて説明する。以下、HMDセット110A,110Bの各ユーザ5のアバターオブジェクトを説明する図である。以下、HMDセット110Aのユーザをユーザ5A、HMDセット110Bのユーザをユーザ5B、HMDセット110Cのユーザをユーザ5C、HMDセット110Dのユーザをユーザ5Dと表す。HMDセット110Aに関する各構成要素の参照符号にAが付され、HMDセット110Bに関する各構成要素の参照符号にBが付され、HMDセット110Cに関する各構成要素の参照符号にCが付され、HMDセット110Dに関する各構成要素の参照符号にDが付される。例えば、HMD120Aは、HMDセット110Aに含まれる。
図12(A)、(B)を参照して、本実施の形態に従うアバターオブジェクトについて説明する。以下、HMDセット110A,110Bの各ユーザ5のアバターオブジェクトを説明する図である。以下、HMDセット110Aのユーザをユーザ5A、HMDセット110Bのユーザをユーザ5B、HMDセット110Cのユーザをユーザ5C、HMDセット110Dのユーザをユーザ5Dと表す。HMDセット110Aに関する各構成要素の参照符号にAが付され、HMDセット110Bに関する各構成要素の参照符号にBが付され、HMDセット110Cに関する各構成要素の参照符号にCが付され、HMDセット110Dに関する各構成要素の参照符号にDが付される。例えば、HMD120Aは、HMDセット110Aに含まれる。
図12(A)は、ネットワーク2において、各HMD120がユーザ5に仮想空間11を提供する状況を表す模式図である。コンピュータ200A〜200Dは、HMD120A〜120Dを介して、ユーザ5A〜5Dに、仮想空間11A〜11Dをそれぞれ提供する。図12(A)に示される例において、仮想空間11Aおよび仮想空間11Bは同じデータによって構成されている。換言すれば、コンピュータ200Aとコンピュータ200Bとは同じ仮想空間を共有していることになる。仮想空間11Aおよび仮想空間11Bには、ユーザ5Aのアバターオブジェクト6Aと、ユーザ5Bのアバターオブジェクト6Bとが存在する。仮想空間11Aにおけるアバターオブジェクト6Aおよび仮想空間11Bにおけるアバターオブジェクト6BがそれぞれHMD120を装着しているが、これは説明を分かりやすくするためのものであって、実際にはこれらのオブジェクトはHMD120を装着していない。
ある局面において、プロセッサ210Aは、ユーザ5Aの視界画像17Aを撮影する仮想カメラ14Aを、アバターオブジェクト6Aの目の位置に配置し得る。
図12(B)は、図12(A)におけるユーザ5Aの視界画像17Aを示す図である。視界画像17Aは、HMD120Aのモニタ130Aに表示される画像である。この視界画像17Aは、仮想カメラ14Aにより生成された画像である。視界画像17Aには、ユーザ5Bのアバターオブジェクト6Bが表示されている。特に図示はしていないが、ユーザ5Bの視界画像にも同様に、ユーザ5Aのアバターオブジェクト6Aが表示されている。
図12(B)の状態において、ユーザ5Aは仮想空間11Aを介してユーザ5Bと対話による通信(コミュニケーション)を図ることができる。より具体的には、マイク170Aにより取得されたユーザ5Aの音声は、サーバ600を介してユーザ5BのHMD120Bに送信され、HMD120Bに設けられたスピーカ180Bから出力される。ユーザ5Bの音声は、サーバ600を介してユーザ5AのHMD120Aに送信され、HMD120Aに設けられたスピーカ180Aから出力される。
ユーザ5Bの動作(HMD120Bの動作およびコントローラ300Bの動作)は、プロセッサ210Aにより仮想空間11Aに配置されるアバターオブジェクト6Bに反映される。これにより、ユーザ5Aは、ユーザ5Bの動作を、アバターオブジェクト6Bを通じて認識できる。
図13は、本実施の形態に従うHMDシステム100において実行される処理の一部を表すシーケンスチャートである。図13においては、HMDセット110Dを図示していないが、HMDセット110Dについても、HMDセット110A、110B、110Cと同様に動作する。以下の説明でも、HMDセット110Aに関する各構成要素の参照符号にAが付され、HMDセット110Bに関する各構成要素の参照符号にBが付され、HMDセット110Cに関する各構成要素の参照符号にCが付され、HMDセット110Dに関する各構成要素の参照符号にDが付されるものとする。
ステップS1310Aにおいて、HMDセット110Aにおけるプロセッサ210Aは、仮想空間11Aにおけるアバターオブジェクト6Aの動作を決定するためのアバター情報を取得する。このアバター情報は、例えば、動き情報、フェイストラッキングデータ、および音声データ等のアバターに関する情報を含む。動き情報は、HMD120Aの位置および傾きの時間的変化を示す情報や、モーションセンサ420A等により検出されたユーザ5Aの手の動きを示す情報などを含む。フェイストラッキングデータは、ユーザ5Aの顔の各パーツの位置および大きさを特定するデータが挙げられる。フェイストラッキングデータは、ユーザ5Aの顔を構成する各器官の動きを示すデータや視線データが挙げられる。音声データは、HMD120Aのマイク170Aによって取得されたユーザ5Aの音声を示すデータが挙げられる。アバター情報には、アバターオブジェクト6A、あるいはアバターオブジェクト6Aに関連付けられるユーザ5Aを特定する情報や、アバターオブジェクト6Aが存在する仮想空間11Aを特定する情報等が含まれてもよい。アバターオブジェクト6Aやユーザ5Aを特定する情報としては、ユーザIDが挙げられる。アバターオブジェクト6Aが存在する仮想空間11Aを特定する情報としては、ルームIDが挙げられる。プロセッサ210Aは、上述のように取得されたアバター情報を、ネットワーク2を介してサーバ600に送信する。
ステップS1310Bにおいて、HMDセット110Bにおけるプロセッサ210Bは、ステップS1310Aにおける処理と同様に、仮想空間11Bにおけるアバターオブジェクト6Bの動作を決定するためのアバター情報を取得し、サーバ600に送信する。同様に、ステップS1310Cにおいて、HMDセット110Cにおけるプロセッサ210Cは、仮想空間11Cにおけるアバターオブジェクト6Cの動作を決定するためのアバター情報を取得し、サーバ600に送信する。
ステップS1320において、サーバ600は、HMDセット110A、HMDセット110B、およびHMDセット110Cのそれぞれから受信したプレイヤ情報を一旦記憶する。サーバ600は、各アバター情報に含まれるユーザIDおよびルームID等に基づいて、共通の仮想空間11に関連付けられた全ユーザ(この例では、ユーザ5A〜5C)のアバター情報を統合する。そして、サーバ600は、予め定められたタイミングで、統合したアバター情報を当該仮想空間11に関連付けられた全ユーザに送信する。これにより、同期処理が実行される。このような同期処理により、HMDセット110A、HMDセット110B、およびHMD110Cは、互いのアバター情報をほぼ同じタイミングで共有することができる。
続いて、サーバ600から各HMDセット110A〜110Cに送信されたアバター情報に基づいて、各HMDセット110A〜110Cは、ステップS1330A〜S1330Cの処理を実行する。ステップS1330Aの処理は、図11におけるステップS1180の処理に相当する。
ステップS1330Aにおいて、HMDセット110Aにおけるプロセッサ210Aは、仮想空間11Aにおける他のユーザ5B,5Cのアバターオブジェクト6B、アバターオブジェクト6Cの情報を更新する。具体的には、プロセッサ210Aは、HMDセット110Bから送信されたアバター情報に含まれる動き情報に基づいて、仮想空間11におけるアバターオブジェクト6Bの位置および向き等を更新する。例えば、プロセッサ210Aは、メモリモジュール530に格納されたオブジェクト情報に含まれるアバターオブジェクト6Bの情報(位置および向き等)を更新する。同様に、プロセッサ210Aは、HMDセット110Cから送信されたアバター情報に含まれる動き情報に基づいて、仮想空間11におけるアバターオブジェクト6Cの情報(位置および向き等)を更新する。
ステップS1330Bにおいて、HMDセット110Bにおけるプロセッサ210Bは、ステップS1330Aにおける処理と同様に、仮想空間11Bにおけるユーザ5A,5Cのアバターオブジェクト6A,6Cの情報を更新する。同様に、ステップS1330Cにおいて、HMDセット110Cにおけるプロセッサ210Cは、仮想空間11Cにおけるユーザ5A,5Bのアバターオブジェクト6A,6Bの情報を更新する。
[他のHMDの構成]
上記の実施形態では、HMDシステム100として、HMD120とコンピュータ200とが別体の例を説明したが、ここでは、HMDシステムの他の構成例として、HMD120とコンピュータ200とが一体となっている形態について更に説明する。
上記の実施形態では、HMDシステム100として、HMD120とコンピュータ200とが別体の例を説明したが、ここでは、HMDシステムの他の構成例として、HMD120とコンピュータ200とが一体となっている形態について更に説明する。
図14は、HMDシステム1431の構成を表す。HMDシステム1431は、HMD1432と、携帯型の情報処理端末(情報処理装置)1441とを有する。HMD1432は、筐体にスマートフォン等の移動体端末を装着可能な形式の所謂モバイル型のHMDである。情報処理端末(情報処理装置)1441は、コントローラ300と無線または有線で通信可能である。情報処理端末1441は例えばスマートフォン等の移動体端末であり、上記実施形態のコンピュータ200に対応する。
HMD1432は、筐体1433と、ベルト1434と、調節部材1435と、前カバー1436と、突起1438とを有する。ユーザ5は、ベルト1434を自身の頭部にかけた後に、調節部材1435でベルト1434の長さを調節することにより、HMD1432を自身の頭部に固定する。
前カバー1436は、筐体1433の前方下部に取り付けられており、取り付け箇所を軸として回動可能に構成される。前カバー1436にはフック1437が設けられている。ユーザ5は、前カバー1436に情報処理端末1441を載せた状態で、前カバー1436を閉じる。ユーザ5はさらに、前カバー1436が閉じられた状態でフック1437を突起1438にかけることにより、情報処理端末1441をHMD1432に固定する。
筐体1433はさらに、レンズ1439を有する。レンズ1439は、左目用のレンズと右目用のレンズとを含む。筐体1433のレンズ1439から前方部分は開口されている。ユーザ5は、HMD1432を頭部に装着した状態において、レンズ1439を介して情報処理端末1441のモニタ1442を視認する。なお、HMD1432はさらに、レンズ1439の位置を調節するための調節機構を有していてもよい。
情報処理端末1441はさらに、上述のプロセッサ210,メモリ220,ストレージ230,通信インターフェイス250,スピーカ180,マイク170の各々に相当する構成要素を含む(図示しない)。HMDシステム1431において、上述の各種処理(視界画像を生成する処理など)は、情報処理端末1441に設けられたプロセッサ210が各種の構成要素と連携することにより実現される。また、情報処理端末1441は、HMD1432の動きを検出するモーションセンサおよびHMD1432の向いている方向(向き)を検出する方向センサなど、各種のセンサを備えている。これらのセンサは、情報処理端末1441(スマートフォン等)に備え付けのものを利用できる。
図14のHMDシステムでは、HMD1432の筐体に対して情報処理端末1441を脱着可能であったが、HMDと情報処理端末(情報処理装置)とが一体型のHMDシステムとしてもよい。
以下に示す実施形態においては、ユーザ5が図14のHMD1432を装着して、コンテンツを実行(例えばゲームをプレイ)する状況を想定する。HMD1432を装着したユーザ5には、HMD1432によって提供される仮想空間11における視界領域15内の画像が視認されている。ユーザ5は、頭を左右に動かすまたは体を回転させるなどして、仮想カメラ14および視界領域15を移動させることで、HMD1432の向きに応じた画像を見ることができる。このようにHMD1432の向きに合わせて適切な画像を提供するためには、ユーザ5の動きに応じて、HMD1432の向き(ユーザ5の向き、あるいは、情報処理端末1441の向き)を推定し、推定した向きに仮想カメラ14の向きを合わせる必要がある。本実施形態に係るプログラムでは、ユーザ5の動きに応じて、HMD1432の向きを高精度に推定し、推定した向きに仮想カメラ14の向きを一致させる。これにより、ユーザ5の向きに応じた適切な画像を提供し、ユーザ5の仮想体験の質を向上させる。
HMD1432の向きを推定する方法として、HMD1432の動きを検出するモーションセンサを用いる方法がある。すなわち、HMD1432にモーションセンサを設け、モーションセンサにより検出したHMD1432の動きに基づき、HMD1432の向きを推定する。しかしながら、この方法では、ユーザ5が急に動いた場合などに、モーションセンサが、この動き(速度の変化)に追従できずに、モーションセンサの検出性能が低下する問題がある。この場合、HMD1432の向きの推定精度が低下し、HMD1432の向きと仮想カメラ14の向きがずれる問題が発生する。以下、このことについて図15を用いて説明する。
図15(A)において、現実空間においてHMD1432を装着したユーザ5が正面方向(ここではZ軸正方向)を向いている。仮想空間における仮想カメラ14も、ユーザ5と同じ方向を向いている。視界領域15内には、オブジェクト1541(例えば建物)が配置されており、ユーザ5のほぼ正面方向にオブジェクト1541が見えている。
図15(B)に示すように、ユーザ5の頭が図15(A)の状態から、XZ平面に平行に、Y軸周りに90度左にゆっくりした動作で回転する。ユーザ5に装着されたHMD1432も同じ方向に同じ回転量(回転角)だけ回転し、HMD1432はX軸の負方向を向く。この際、モーションセンサを用いて、HMD1432の向きを推定し、推定したHMD1432の向きに合わせて、仮想カメラ14の向きを調整する。この例では、推定したHMD1432の向きが、ユーザ5の頭の向きと一致し、仮想カメラ14の向きが、実際のHMD1432の向きに一致する。調整後の仮想カメラ14の向きに応じて視界領域15を再設定し、視界領域15に対応する視界画像をモニタ1442に表示すると、オブジェクト1541が視界領域15外になり、ユーザ5からは、オブジェクト1541が見えなくなる。
一方、図15(C)に示すように、ユーザ5の頭が図15(A)の状態から、XZ平面に平行に、Y軸周りに90度左に急な動作で回転する。図15(B)と同様に、モーションセンサを用いて、HMD1432の向きを推定し、推定したHMD1432の向きに合わせて、仮想カメラ14の向きを調整する。この例では、モーションセンサがユーザ5の動きに追従できず、ユーザ5の頭の回転量が、実際よりも少ない量として検出されている。つまり、90度よりも小さい角度で、ユーザ5の頭が回転したと計算されている。この結果、推定されたHMD1432の向きが、実際のHMD1432の向き(ユーザ5の頭の向き)よりもZ軸正方向側にずれている。この状態で、仮想カメラ14の向きを、推定したHMD1432に合わせると、図示のように、図15(B)では視界領域15外となっていたオブジェクト1541が、図15(C)では、視界領域15内に存在し、ユーザ5から見て右方にオブジェクト1541が視認される。つまり、推定したHMD1432の向きが正しければ、本来見えるはずのないオブジェクトが、図15(C)では見えてしまっている。
図15(C)のようなHMDの向きと仮想カメラの向きとにずれは、一般的に、時間の経過とともに大きくなる。このずれを解消する方法として、コントローラ操作で、仮想カメラの正面方向を再設定する方法があるが、ゲーム中に、再設定操作を行うのは煩雑である。また、別の方法として、仮想カメラの向きが正面方向となるように、ユーザ5が自分(HMD)の体の向きを、仮想カメラの向きに合わせて調整する方法がある。この方法は、ユーザが立っている場合や、回転椅子に座っている場合には容易に実行できるが、非回転椅子やソファーに座っている場合は困難である。したがって、HMDの向きと仮想カメラの向きとにずれは、ユーザの仮想体験の質の低下を招く。HMDの向きと仮想カメラの向きとにずれが生じない、もしくはずれの発生の頻度または大きさを低減することが望まれる。
そこで、本実施形態ではモーションセンサに加えて、HMD1432の向きを検出する方向センサを用いることで、HMDの向きの推定精度を高める。具体的には、モーションセンサから計算される回転量(第1回転量)を、方向センサから検出される回転量(第2回転量)で補正する。そして、補正後の第1回転量に応じて、仮想カメラ14の向きを制御する。つまり、補正後の第1回転量だけ回転した方向をHMD1432の向きと推定し、推定した向きに合わせて仮想カメラ14の向きを調整する。このように方向センサを補助的に利用することによって、モーションセンサの検出性能が低下する場合の問題を解決する。
以下、図16〜図33を用いて、本実施形態に係るプログラムの処理について、詳細に説明する。
[モジュールの詳細構成]
図16を参照して、図14のHMDシステム1431における情報処理端末1441のモジュール構成について説明する。図16は、情報処理端末1441(コンピュータ200)のモジュール構成を表わすブロック図である。情報処理端末1441(コンピュータ200)は、コントロールモジュール510と、レンダリングモジュール520と、メモリモジュール530と、センサモジュール1626とを含む。センサモジュール1626は、センサ(モーションセンサ)190、複数の方向センサ1627A、1627Bを備える。他の構成例として、モーションセンサ190、複数の方向センサ1627A、1627Bを、HMD1432内の情報処理端末1441以外の箇所に設け、これらのセンサの検出信号を情報処理端末1441に出力する構成も可能である。また、図16の情報処理端末1441と同等の機能を、図2のHMDシステム100で実現することも可能である。この場合、センサモジュール1626(モーションセンサ190、方向センサ1627A、1627B)をHMD120に搭載し、これらのセンサの検出信号を無線または有線でコンピュータ200に出力すればよい。
[モジュールの詳細構成]
図16を参照して、図14のHMDシステム1431における情報処理端末1441のモジュール構成について説明する。図16は、情報処理端末1441(コンピュータ200)のモジュール構成を表わすブロック図である。情報処理端末1441(コンピュータ200)は、コントロールモジュール510と、レンダリングモジュール520と、メモリモジュール530と、センサモジュール1626とを含む。センサモジュール1626は、センサ(モーションセンサ)190、複数の方向センサ1627A、1627Bを備える。他の構成例として、モーションセンサ190、複数の方向センサ1627A、1627Bを、HMD1432内の情報処理端末1441以外の箇所に設け、これらのセンサの検出信号を情報処理端末1441に出力する構成も可能である。また、図16の情報処理端末1441と同等の機能を、図2のHMDシステム100で実現することも可能である。この場合、センサモジュール1626(モーションセンサ190、方向センサ1627A、1627B)をHMD120に搭載し、これらのセンサの検出信号を無線または有線でコンピュータ200に出力すればよい。
複数の方向センサ1627A、1627Bのうちの任意の方向センサを方向センサ1627と表す。図の例では方向センサは2つだが、1つでもよいし、3つ以上でもよい。また、図の例ではモーションセンサは1つだが、2つ以上でもよい。また、センサモジュール1626は、これらモーションセンサおよび方向センサ以外の種類のセンサを備えていてもよい。
モーションセンサ190は、HMD1432の動きを検出するセンサ(第1センサ)である。モーションセンサとして、例えば、3軸の加速度センサと3軸の角速度センサ(ジャイロセンサ)とを含む6軸センサを用いることができる。この場合、一例として、XYZ座標系において、X軸、Y軸およびZ軸の加速度と、X軸、Y軸およびZ軸の角速度を検出できる。モーションセンサ190は、6軸センサに限定されず、他のセンサ、例えばジャイロセンサであってもよい。
方向センサ1627は、HMD120の向いている方向(HMD120の向き)を検出する。方向センサ1627として、例えば、電子コンパス(地磁気センサ)またはGPS(Global Positioning System)コンパス等の方位センサを用いることができる。電子コンパスは、複数の磁気センサを用いて、直交する複数の方向の地磁気を測定し、測定結果に基づき方向(方位)を特定する。GPSコンパスは、複数のアンテナでGPS信号を受信し、各アンテナで受信したGPS信号と、アンテナの位置関係とに基づき、方向(方位)を特定する。これらのセンサは一例に過ぎず、例えばジャイロコンパスなど、他の種類のセンサを用いてもよい。方位センサの場合、検出する方向(方位)は、例えば、真北方向を0度とし、東回りに359.99までの範囲で表すことができる。出力形式はセンサに依存し、特定のフォーマットに限定されない。方向として、方位に加え、傾き(傾斜角)を検出する場合には、傾斜センサ(例えばX軸周りの傾きの傾斜センサ、Z軸周りの傾きの傾斜センサ)を追加で用いればよい。この場合、方位センサと傾斜センサとを用いて、方向センサを構成する。方向センサ1627が検出する座標系が、XYZ座標系に一致しない場合は、方向センサ1627で検出した方向を、XYZ座標系に変換すればよい。一例として、真北がZ軸正方向、真東がX軸正方向にそれぞれ対応するようにする。このような変換処理は、一例として、コントロールモジュール510または仮想カメラ制御モジュール1621で行う。あるいは、変換処理の機能を方向センサ1627に組み込んでも良い。
コントロールモジュール510は、仮想カメラ制御モジュール1621と、視界領域決定モジュール1622と、仮想空間定義モジュール1623と、仮想オブジェクト生成モジュール1624と、操作オブジェクト制御モジュール1625と、センサ情報取得モジュール1628と、を備えている。レンダリングモジュール520は、視界画像生成モジュール1638を備えている。コントロールモジュール510は、レンダリングモジュール520、メモリモジュール530およびセンサモジュール1626に接続されている。
センサ情報取得モジュール1628は、モーションセンサ190、方向センサ1627Aおよび方向センサ1627Bで検出された情報(検出情報)を取得する。センサ情報取得モジュール1628は、ある局面では、これらの各センサから、一定時間間隔で検出情報を取得する。各センサから検出情報を取得する周期は同じでもよいし、異なってもよい。別の局面では、センサ情報取得モジュール1628は、これらの各センサに取得要求を出力し、その応答として、各センサから検出情報を取得する。センサ情報取得モジュール1628は、各センサから直接、検出情報を取得する形態以外に、メモリモジュール530を介して、検出情報を各センサから取得する形態も可能である。この場合、各センサは、検出情報をメモリモジュール530における各センサ用の所定の記憶領域(図示せず)に書き込む。センサ情報取得モジュール1628は、各センサ用の記憶領域にアクセスし、各センサの検出情報を読み出す。
仮想カメラ制御モジュール1621は、仮想空間11に仮想カメラ14を配置する。仮想カメラ制御モジュール1621は、仮想空間11における仮想カメラ14の配置位置と、仮想カメラ14の向き(傾き)を制御する。
仮想カメラ制御モジュール1621は、モーションセンサ190と、1つまたは複数の方向センサ1627とを用いて、HMD1432の向きを推定する。HMD1432の向きを推定する処理については後に詳しく述べる。
仮想カメラ制御モジュール1621は、推定したHMD1432の向きに、仮想カメラ14の向きを合わせる。すなわち、現実空間におけるHMD1432の向き(ユーザの頭の向き)に連動するように、仮想空間における仮想カメラ14の向き(視界)を制御する。
視界領域決定モジュール1622は、仮想カメラ14の向き(推定したHMD1432の向き)と、仮想カメラ14の配置位置に応じて、視界領域15を規定する。
レンダリングモジュール520の視界画像生成モジュール1638は、決定された視界領域15に基づいて、情報処理端末1441のモニタ1442に表示される視界画像17を生成する。
仮想空間定義モジュール1623は、仮想空間11を表わす仮想空間データを生成することにより、HMDシステム1431における仮想空間11を規定する。
仮想オブジェクト生成モジュール1624は、仮想空間11に配置されるオブジェクトを生成する。オブジェクトは、例えば、ゲームのストーリーの進行に従って配置される森、山その他を含む風景、動物等を含み得る。
操作オブジェクト制御モジュール1625は、仮想空間11に配置された、ユーザの操作を受け付けるための操作オブジェクトを制御する。操作オブジェクトは、例えば、HMD1432を装着したユーザの手、コントローラ300、またはこれらの両方により操作可能である。
メモリモジュール530は、情報処理端末1441が仮想空間11をユーザ5に提供するために使用されるデータを保持している。ある局面において、メモリモジュール530は、空間情報1631と、オブジェクト情報1632と、ユーザ情報1633と、を保持している。
空間情報1631は、仮想空間11を提供するために規定された1つ以上のテンプレートを保持している。
オブジェクト情報1632は、仮想空間11において再生されるコンテンツ、当該コンテンツで使用されるオブジェクト、およびオブジェクトを仮想空間11に配置するための情報(たとえば、位置情報)を保持している。当該コンテンツは、例えば、ゲームコンテンツ、実社会と同様の風景を表したコンテンツ、または映像コンテンツ等を含み得る。
ユーザ情報1633は、HMDシステム1431の制御装置として情報処理端末1441を機能させるためのプログラム、およびオブジェクト情報1632に保持される各コンテンツを使用するアプリケーションプログラム等を保持している。
図17は、仮想カメラ制御モジュール1621がHMD1432の向きを推定し、推定した向きに仮想カメラ14の向きを制御する処理の第1の例のフローチャートである。本処理では、モーションセンサ190と1つの方向センサ1627とを用いて、所定時間毎に、HMD1432の向きの推定を行い、推定した向きに基づき仮想カメラ14の向きを制御する。以下、本処理の詳細を説明する。
ステップS1751において、仮想カメラ制御モジュール1621は、仮想カメラ14の向きを初期設定または再設定する。仮想カメラ制御モジュール1621は、ユーザ5により入力される初期設定または再設定の操作を受け付ける。初期設定または再設定の操作は、一例として、ユーザ5がコントローラ300から入力する。仮想カメラ制御モジュール1621は、当該操作を受け付けた時点のHMD1432の向く方位(例えば方向センサ1627が示す向きの方位)が正面方向となるように、仮想カメラ14の向きを設定する。正面方向は一例としてZ軸正方向であるが、これに限定されるものではない。設定後の仮想カメラ14の向きに基づき、視界画像生成モジュール1638により視界画像17を生成し、生成した視界画像17をモニタ1442に表示する。初期設定の操作は、一例として、コンテンツ(ゲーム)の起動時または開始時に行う。再設定の操作は、一例として、ゲームの途中等で、ユーザ5の判断に基づき行う。例えば、HMD1432の向きと仮想カメラ14の向き(推定したHMDの向き)とのずれをユーザ5が認識した場合などである。
図18に、仮想カメラ14の向きの初期設定または再設定操作を行う例を示す。ここでは、図15(C)に示したHMD1432の向きと仮想カメラ14の向きとがずれた状態で初期設定または再設定操作を行う例を示す。上図は、図15(C)と同じである。ユーザ5が初期設定または再設定操作を行うと、下図に示すように、HMD1432の向きままたは方位(方向センサが示す向きまたは方位)が正面方向となるように、仮想カメラ14の向きを設定する。この結果、仮想カメラ14は図15(B)と同じ方向を向き、図15(B)と同じ画像が見えるようになる。なお、方向センサの検出性能が低い環境の場合、初期設定または再設定後も、HMD1432の向きと仮想カメラ14の向きとがずれる可能性がある。しかしながら、その場合も、複数回、設定の操作を繰り返すことで改善が期待される。別の局面においては、初期設定または再設定操作時の仮想カメラ14の向きが正面方向となるように、視界画像の生成(更新)を行うことも可能である。
ステップS1752において、所定時間が経過したかを判断する。所定時間の長さは、画像表示のフレーム単位で設定してもよいし、それ以外の方法で定めた時間長を設定してもよい。所定時間が経過していない場合は(NO)待機し、所定時間が経過した場合は(YES)、ステップS1753に進む。なお、情報処理端末は時刻をカウントする時計を内部に備えている。
ステップS1753において、仮想カメラ制御モジュール1621は、モーションセンサ190の検出情報に基づき、HMD1432の回転した量(第1回転量)を計算する。計算する回転量(回転角)は、ある局面では、Y軸周りの回転量である。別の局面では、3つの軸(Y軸、Z軸、X軸)周りの回転量である。さらに別の局面では、2つの軸(Y軸、Z軸、X軸のうちの任意の2つ)周りの回転量である。回転量は、一例として、該当する軸(例えばY軸)周りの角速度を時間積分することで計算できる。以下では、説明の簡単のため、ユーザ5の頭がXZ平面に平行にZ軸正面方向を向いている状態で、XZ平面に平行でY軸周りに回転した場合を想定する。X軸周りの回転およびZ軸周りの回転も考慮する場合は、各軸で個別に処理を行えばよい。これは方向センサ1627についても同様である。
図19に第1回転量を計算する例を示す。回転量の計算は、基準方向からどれだけの角度を所定の軸周りにHMD1432が回転したかを計算することで行う。図の例では、Y軸周りに、ZX平面に平行に、第1回転量を計算する例を示す。モーションセンサ190に基づき計算された第1回転量がrq1によって表されている。方向d1は、HMD1432が基準方向から第1回転量rq1だけ回転した場合に向く方向(すなわちHMD1432が第1回転量rq1だけ回転した場合の向き)を示している。基準方向は、第1の局面では、前回(所定時間前に)推定したHMD1432の向きである。第2の局面では、基準方向は、予め定めた特定の方向、例えば正面方向である。前者の場合、計算するごと基準方向が変わるもしくはその可能性があるのに対して、後者では基準方向は固定されている。以下の説明では、基準方向は、前回推定したHMD1432の向きである場合を想定する。
ステップS1754において、仮想カメラ制御モジュール1621は、方向センサ1627の検出情報に基づき、方向センサ1627が示す向きを特定する。仮想カメラ制御モジュール1621は、方向センサ1627が示す向きと、基準方向との差分から第2回転量を計算する。第2回転量は、基準方向からHMD1432がどれだけ回転したかを表す回転量(回転角)である。図19において、方向センサ1627が示す向きd2と基準方向との差分から第2回転量rq2が計算されている。図の例では、第2回転量rq2は、第1回転量rq1よりも小さい。
ステップS1755において、仮想カメラ制御モジュール1621は、第1回転量rq1と第2回転量rq2とに基づき、HMD1432の向きを推定する。この具体的な処理は後述する。
ステップS1756において、仮想カメラ制御モジュール1621は、推定したHMD1432の向きに基づき、仮想カメラ14の向きを制御する。すなわち、仮想カメラ14の向きを、推定したHMD1432の向きに合わせる。この後、仮想カメラ14の向きに応じて、視界領域15が設定され、視界領域15に対応する視界画像がモニタ1442に表示される。
ステップS1757において、仮想カメラ制御モジュール1621は、本処理を終了するかを判断する。終了しないと判断した場合は(NO)、ステップS1766に進む。
ステップS1766において、ユーザから仮想カメラ14の向きの再設定操作があったかを判断する。再設定操作がなければ(NO)、ステップS1752に戻る。この場合、ステップS1752で所定時間が経過したか判断する際の所定時間の起点は、一例として、直前にHMD1432の向きの推定を行った時点である。再設定操作があった場合は(YES)、ステップS1751に戻る。この場合、ステップS1751に続くステップS1752での所定時間の起点は、一例として、ステップS1751で再設定が行われた時点である。ただし、所定時間の起点はここで述べた以外にも任意の基準で決めた時点を用いることができる。
ステップS1757で本処理を終了すると判断した場合は(YES)、本処理を終了する。例えば、ユーザ5がゲームを終了するためにコントローラ300に終了操作を行うと、コントローラ300が終了指示信号を出力する。この終了指示信号を仮想カメラ制御モジュール1621が受信、もしくはコントロールモジュール510を介して受信すると、本処理を終了する。
図20は、図17のステップS1755の詳細な処理の一例のフローチャートである。
ステップS2058において、第2回転量に基づき、第1回転量を補正(キャリブレーション)する。補正された第1回転量を、HMD1432が実際に回転した量の推定値(推定回転量)とする。
第1回転量の補正は、一例として、以下の関数で表現できる。rq1は、第1回転量、rq2は第2回転量、ERは、補正後の第1回転量(推定回転量)である。f0は、rq1、rq2を引数とする関数である。
ER=f0(rq1、rq2) 式(1)
ER=f0(rq1、rq2) 式(1)
関数の形は任意に定めることができる。関数は、ある局面において、第2回転量に一定の係数(例えば絶対値が1より小さい正または負の値)を乗じ、得られた乗算値を第1回転量に加算、または第1回転量から減算するものがある。
別の局面において、第1回転量と第2回転量との差分に基づき、当該係数の値を変更してもよい。一例として、差分が大きいほど、係数の値を大きくまたは小さくする。
また、さらに別の局面において、第1回転量を第2回転量によって置換し、置換後の値を、補正後の第1回転量としてもよい。例えば第1回転量と第2回転量との差分の絶対値が閾値以上の場合に、第1回転量を第2回転量によって置換してもよい。差分の絶対値が大きくなることは、モーションセンサ190の検出性能が大きく低下している可能性があるためである。また、この方法は、方向センサ1627の検出性能が高いと想定される環境(例えば周辺磁場の大きさが低い場合、またはGPS信号の受信品質が高い場合など)で有効である。例えば、ある局面では、方向センサ1627が地磁気センサを含む場合に、地磁気センサで計測される磁場の大きさが閾値未満の場合に、第1回転量を第2回転量によって置換する。なお、磁気の大きさの測定は、磁気センサをセンサモジュール1626内に別途設け、当該磁気センサの検出信号に基づき行ってもよい。別の局面において、方向センサ1627がGPSコンパスの場合に、GPSコンパスで受信されるGPS信号の受信品質が閾値以上の場合に、第1回転量を第2回転量によって置換してもよい。受信品質としては、例えば、受信強度またはSNR(Signal to Noise Ratio)を用いることができる。
また、さらに別の局面において、第1回転量を補正せず、第1回転量の値をそのまま、推定回転量としてもよい。例えば第1回転量と第2回転量との差分の絶対値が閾値未満の場合に、このようにしてもよい。差分の絶対値が小さいことは、モーションセンサ190の検出性能が良いと考えられるためである。この場合に第2回転量による補正の演算を省くことで、処理負荷を軽減できる。また、この方法は、方向センサ1627の検出性能が低いと想定される環境(例えば周辺磁場の大きさが高い場合、またはGPS信号の受信品質が低い場合など)で有効である。例えば、ある局面において、方向センサ1627または別途設けた地磁気センサで計測される磁場の大きさが閾値以上の場合に、第1回転量の値を推定回転量とする。別の局面において、方向センサ1627(GPSコンパス)で受信されるGPS信号の受信品質が閾値未満の場合に、第1回転量の値をそのまま推定回転量とする。
第1回転量の補正は、第1回転量と、第2回転量と、補正後の第1回転量とを対応づけたテーブルを用いて行ってもよい。テーブルの例を図21に示す。図の値は、理解を容易にするための一例である。第1回転量rq1および第2回転量rq2の組に基づきテーブルにアクセスすることで、組に対応する補正後の第1回転量ERを求める。テーブルは、例えばメモリモジュール530またはユーザ情報1633に格納しておく。
ステップS2059において、HMD1432が上述の基準方向から推定回転量だけ回転した場合のHMD1432の向きを推定する。具体的には、基準方向を示す値に推定回転量を加算した方向を求め、この方向をHMD1432の向きとする。
図22に、第1回転量および第2回転量から推定回転量ERを計算し、計算した推定回転量ERからHMD1432の向きを特定する例を示す。第2回転量rq2に応じて第1回転量rq1を補正する。補正後の第1回転量を、推定回転量ERとして得る。そして、基準方向から推定回転量ERだけ回転した向きを、HMD1432の向きとして推定する。
図23は、図17のステップS1755の処理の他の例のフローチャートである。図20のフローチャートに対して、ステップS2360、S2361、S2362が追加されている。
ステップS2360において、第1回転量と第2回転量の差分を計算する。
図24に、第1回転量と第2回転量との差分を計算する例を示す。第1回転量rq1から第2回転量rq2を引くことで、これらの差分dqが計算される。
ステップS2361において、第1回転量と第2回転量の差分の絶対値が閾値以上かを判断する。
差分の絶対値が閾値未満の場合(NO)、ステップS2362に進む。
ステップS2362において、第1回転量を、HMD1432の推定回転量とする。すなわち、第1回転量を補正せず、第1回転量をそのまま、HMD1432の推定回転量とする。これは、差分の絶対値が閾値未満の場合は、モーションセンサ190の検出性能が高いと判断できるためである。この場合、第1回転量を補正する演算は不要になるため、コンピュータ200の処理負荷を軽減できる。ステップS2362の後、ステップS2059に進む。
一方、差分の絶対値が閾値以上である場合(YES)、ステップS2058に進む。ステップS2058は、図20と同じである。すなわち、第2回転量に応じて、第1回転量を補正し、補正後の第1回転量を、HMD1432の推定回転量とする。このようにするのは、差分の絶対値が閾値以上の場合、モーションセンサ190の検出性能に問題がある可能性があると考えられるためである。ステップS2058の後、ステップS2059に進む。
ステップS2059の処理は、図20と同じである。
図25は、図17のステップS1755の処理の他の例のフローチャートである。
ステップS2566において、仮想カメラ制御モジュール1621は、第1回転量と第2回転量とに重みを設定する。第1回転量に設定する重みは第1重み、第2回転量に設定する重みは第2重みに対応する。第1重みおよび第2重みの設定方法として、HMD1432の回転速度(角速度)を用いる方法がある。HMD1432の回転速度が大きいほど、第1重みを小さく、および第2重みを大きくすることの少なくとも一方を行う。これは、ユーザ5の頭の回転の速度が急に大きくなった場合に、モーションセンサ190の検出性能(モーションセンサ190の信頼性)が低下する可能性を想定したものである。ユーザ5の頭の回転の速度が急に大きくなる場合の例として、ユーザ5の頭が急に動き出した場合がある。
ある局面において、HMD1432の回転速度rsを、第1重みをw1、第2重みをw2とすると、第1重みw1、および第2重みw2の計算式は、以下の式(2)および式(3)で表すことができる。
w1=f1(rs) 式(2)
w2=f2(rs) 式(3)
f1は、rsを引数とする単調減少関数である。f2は、rsを引数とする単調増加関数である。
w1=f1(rs) 式(2)
w2=f2(rs) 式(3)
f1は、rsを引数とする単調減少関数である。f2は、rsを引数とする単調増加関数である。
別の局面において、関数の代わりに、テーブルを用いてもよい。この場合、rsと、w1およびw2の少なくとも一方と、を対応づけたテーブルを用意する。関数またはテーブルは、rsと、w1およびw2の少なくとも一方と、を互いに対応づけた情報の一例である。このような情報を用いる限り、関数またはテーブル以外の手段を用いてもよい。
HMD1432の回転速度の代わりに、HMD1432の回転加速度を用いてもよい。回転加速度が大きいほど、第1重みを小さくする、および第2重みを大きくすることの少なくとも一方を行う。回転加速度の場合も、回転速度と同様に、回転加速度と、w1およびw2の少なくとも一方と、を対応づけた情報(関数またはテーブル等)を用いて、第1重みおよび第2重みを決定できる。
第1重みおよび第2重みの設定方法には、様々なバリエーションがあり、その他の例は後述する。
ステップS2567において、仮想カメラ制御モジュール1621は、ステップS2566で設定した第1重みおよび第2重みに基づき、第1回転量および第2回転量の重み付け平均を計算する。計算した重み付け平均を、補正された第1回転量とする。そして、補正された第1回転量を、HMD1432の推定回転量とする。第1回転量をrq1、第2回転量をrq2、第1重みをw1、第2重みをw2とすると、推定回転量ERは以下の式(4)で表される。
ER=(rq1×w1+rq2×w2)/(w1+w2) 式(4)
上述のステップS2566で第1重みおよび第2重みを計算する際、第1重みおよび第2重みの合計が1になるように正規化してもよい。この場合、重み付け平均を計算することは、第1重みおよび第2重みによる、第1回転量および第2回転量の重み付け合計を計算することと同じである。
ステップS2059において、HMD1432が上述の基準方向から推定回転量だけ回転した場合のHMD1432の向きを推定する。基準方向を示す値に推定回転量(推定回転角度)を加算した方向を求め、この方向をHMD1432の向きとする。
図26は、仮想カメラ制御モジュール1621がHMD1432の向きを推定し、推定した向きに仮想カメラ14の向きを制御する処理の第2の例のフローチャートである。本処理において、第2回転量は、HMD1432の回転速度(角速度)が閾値以上の場合のみ計算する。
ステップS1751〜S1753は図17と同じである。
ステップS2663において、仮想カメラ制御モジュール1621が、モーションセンサ190の検出情報に基づき、HMD1432の回転速度を計算する。
回転速度は、ある局面では、直前の所定時間(図17のS1752参照)の間の平均速度である。別の局面では、所定時間内の任意の時点の速度(例えば所定時間の開始時または終了時の速度)である。
ステップS2664において、計算した回転速度が所定値以上か否かを判断する。計算した回転速度が所定値未満の場合(NO)、ステップS2665に進む。
ステップS2665において、第1回転量に基づきHMD1432の向きを推定する。つまり第1回転量を補正せず、第1回転量の値をそのままHMD1432の推定回転量として、HMD1432の向きを計算する。これにより、方向センサ1627を用いないで、つまり、第2回転量を計算することなく、HMD1432の向きを推定する。回転速度が小さい場合は、モーションセンサ190の検出性能が高いことが想定されるため、第2回転量の計算を無くして、演算量を低減させる。ステップS2665の後、ステップS1756に進む。ステップS1756では、ステップS2665で推定されたHMD1432の向きに基づき、仮想カメラ14の向きを制御する。
一方、回転速度が所定値以上の場合(YES)、ステップS1754に進む。以降の処理は図17のフローチャートと同じである。すなわち、第2回転量の計算(S1754)、第1回転量および第2回転量に基づくHMD1432の向きの推定(S1755)、および仮想カメラの向きの制御(S1756)を行う。よって、回転速度が所定値以上の場合のみ、第2回転量の計算、および差分の絶対値が閾値以上かの判断(図23のS2361)が行われることになる。
図26のステップS2663では回転速度を計算したが、HMD1432の回転の加速度(回転加速度または角加速度)を計算する構成も可能である。この場合、ステップS2664では、回転加速度が所定値以上かを判断する。回転加速度が所定値以上の場合にステップS1754に進み、所定値未満の場合に、ステップS2665に進む。
回転加速度は、一例として、角加速度の微分により求めることができる。ある局面において、回転加速度は、直前の所定時間(図17のS1752参照)の間の平均加速度である。別の局面において、回転加速度は、所定時間内の任意の時点の加速度(例えば所定時間の開始時または終了時の加速度)である。
これまで説明した処理では、方向センサ1627を1つのみ用いたが、複数の方向センサ1627を用いてもよい。例えば電子コンパスおよびGPSコンパスといった複数種類の方向センサ1627を用いる。使用する方向センサ1627の個数が増えても、これまで記載した処理を拡張して、HMD1432の向きを推定できる。例えば、図17のステップS1754において、n−1個の方向センサ1627について回転量(第2回転量〜第n回転量)を計算する。nは3以上の整数である。第2回転量は1番目の方向センサ1627から計算される回転量、第n回転量はn−1番目の方向センサ1627から計算される回転量である。
そして、第1回転量〜第n回転量に基づき、HMD1432の向きを推定する。例えば、第2回転量〜第n回転量に基づき、第1回転量を補正し、補正後の第1回転量をHMD1432の推定回転量とする(図20のステップS2058参照)。また、別の例として、第1回転量〜第n回転量に重み(第1重み〜第n重み)を設定し、第1回転量〜第n回転量の重み付け平均を計算する(図25のS2566、S2567参照)。計算した重み付け平均の値を、補正後の第1回転量とする。そして、補正後の第1回転量を、HMD1432の推定回転量とみなす。
図27は、仮想カメラ制御モジュール1621がHMD1432の向きを推定し、推定した向きに応じて仮想カメラ14の向きを制御する処理の第3の例のフローチャートである。
本処理では、複数の方向センサ1627を用いる場合に、複数の方向センサ1627から計算された複数の回転量のうち、検出性能が低い方向センサから得られた回転量(外れ値)を除外する。除外後に残った回転量と、モーションセンサから計算された回転量とを用いて、HMD1432の向きを推定する。これにより、HMD1432の向きをより高精度に推定できる。
ステップS1751〜S1753は図17と同じである。
ステップS2768において、複数の方向センサ1627を用いて、複数の回転量を計算する。ここでは、2番目の方向センサ〜n番目の方向センサのn−1個の方向センサ1627があるとし、2番目の方向センサ〜n番目の方向センサからそれぞれ第2回転量〜第n回転量を計算する。
ステップS2769において、第2回転量〜第n回転量の中から外れ値を除外する。外れ値は、1つまたは複数存在し得る。また、外れ値が存在しない場合もあり得る。
ある局面において、第2回転量〜第n回転量の内、第1回転量と最も距離が近い所定個数の回転量を選択し、残りを外れ値とする。一例として、モーションセンサ190の回転量が31.10であり、2つの方向センサ(1番目の方向センサ、2番目の方向センサ)1627の回転量が30.13と25.40であるとする。所定個数は1とする。31.10に最も距離が近い値は30.13であるため、25.40(2番目の方向センサの回転量)を除外する。
別の局面において、統計分布を利用する方法や、クラスタリングを用いる方法などもある。前者の例として、正規分布を利用する方法がある。例えば、回転量の分布が正規分布に従うと仮定して、第2回転量〜第n回転量の分布を近似する正規分布を求める。求めた正規分布の上位の所定パーセント以上または下位の所定パーセント以下の範囲に属する回転量を、外れ値とする。後者の例として、k-means方などのアルゴリズムを用いる方法がある。この場合、複数の回転量を複数のクラスタに分割し、属する要素数(回転量数)の最も多いクラスタを選択する。選択されなかったクラスタに属する回転量(要素)を外れ値とする。ここで列挙した以外の方法で外れ値を検出してもよい。
ステップS2770において、第1回転量と、第2回転量〜第n回転量のうち外れ値を除外した後の回転量とに基づいて、HMD1432の向きを推定する。例えば、第2回転量〜第n回転量のうち外れ値を除外した後の回転量に基づき、第1回転量を補正し(図20のステップS2058参照)、補正後の第1回転量をHMD1432の推定回転量とする。また、別の例として、第1回転量と、除外後の回転量とにそれぞれ重みを設定し、重み付け平均を計算する(図25のS2566、S2567参照)。第1回転量を、計算した重み付け平均の値に置き換え、これを補正後の第1回転量とする。補正後の第1回転量を、HMD1432の推定回転量とする。
図27のステップS2769の処理の変形例として、モーションセンサ190から計算される第1回転量も含めた第1回転量〜第n回転量の中から外れ値を除外してもよい。ある局面では、第1回転量〜第n回転量のうち最も距離が近い所定個数の回転量を選択し、残りを外れ値とする。例えば、モーションセンサ190の回転量が31.10であり、2つの方向センサ1627の回転量が25.13と25.40であるとする。所定個数は2であるとする。このとき、最も距離が近い値は、2つの方向センサ1627の回転量である25.13と25.40であるため、モーションセンサ190の回転量である31.10を除外する。除外後に残った回転量の重み付け平均を計算し、第1回転量を、重み付け平均の値に置換し、これを補正後の第1回転量とする。そして、補正後の第1回転量を、HMD1432の推定回転量とする。
また、方向センサが複数存在し、かつモーションセンサが複数存在する場合も同様の処理が可能である。例えば、複数の方向センサから計算される1つまたは複数の回転量と、複数のモーションセンサから計算される複数の回転量との中から、外れ値を除外する。
以上、本発明の実施形態によれば、モーションセンサ190により計算した回転量(第1回転量)を、方向センサにより計算した回転量(第2回転量)で補正し、補正した第1回転量を用いて、HMD1432の向きを推定することで、HMD1432の向きを高精度に推定できる。これにより、仮想カメラ14の向きを、実際のHMD1432の向きに高精度に一致させることができる。モーションセンサ190のみを用いてHMD1432の向きを推定する場合、ユーザの頭が急に動いた場合など、推定精度が低下する問題がある。一方、方向センサのみを用いた場合、方向センサの機能が低下する環境では、正しく推定することができない。例えば電子コンパスでは周辺の磁場が大きい場合が、これに該当する。GPSコンパスではGPS信号の受信品質が悪い場合が、これに該当する。そこで、両センサを用いることで、モーションセンサ190および方向センサ1627のそれぞれの検出性能が低下するケースを互いに補完することで、HMD1432の向きをより正確に検出できる。
前述したように、HMDの向きと仮想カメラの向きとにずれが生じた場合に、ずれを解消する方法として、コントローラ操作で、仮想カメラの正面方向を再設定する方法がある。しかしながら、ゲーム中に、再設定操作を行うのは煩雑である。これに対して、本実施形態によれば、HMDの向きを高精度に推定できるため、再設定操作を行う機会を無くすまたは低減できる。また、上記のずれを解消する別の方法として、仮想カメラの向きが正面方向となるように、ユーザ5が自分(HMD)の体の向きを、仮想カメラの向きに合わせて調整する方法がある。この方法は、前述したように、ユーザが立っている場合や、回転椅子に座っている場合には容易に実行できるが、非回転椅子やソファーに座っている場合は困難である。これに対して、本実施形態によれば、HMDの向きを高精度に推定できるため、このような動作の必要はなくなる、もしくは動きの量を最小限に抑えることができる。よって、ユーザは快適にゲームをプレイできる。これにより、ユーザの仮想体験の質を向上させることができる。
(変形例1)
以下、図25のフローチャートのステップS2566における第1重みおよび第2重みの設定方法のバリエーションについて説明する。
以下、図25のフローチャートのステップS2566における第1重みおよび第2重みの設定方法のバリエーションについて説明する。
[バリエーション1]
第1重みおよび第2重みを、予め定めた値に設定する。この場合において、第1重みおよび第2重みは同じ値でも、異なる値でもよい。異なる値にする場合、第1重みが第2重みより大きくても、第2重みが第1重みより大きくてもよい。例えば、第1重みを第2重みより大きくする場合、第1重みを0.7、第2重みを0.3とする。これらの数値は例示であり、第1重みおよび第2重みの値は、これらに限定されるものではない。
第1重みおよび第2重みを、予め定めた値に設定する。この場合において、第1重みおよび第2重みは同じ値でも、異なる値でもよい。異なる値にする場合、第1重みが第2重みより大きくても、第2重みが第1重みより大きくてもよい。例えば、第1重みを第2重みより大きくする場合、第1重みを0.7、第2重みを0.3とする。これらの数値は例示であり、第1重みおよび第2重みの値は、これらに限定されるものではない。
[バリエーション2]
第1回転量と第2回転量との差分を計算し、差分の絶対値に基づき、第1重みおよび第2重みを設定する。ある局面において、差分の絶対値が大きいほど、第1重みを小さく、第2重みを大きくすることの少なくとも一方を行う。これを実現する方法として、差分の絶対値と、第1重みの値と、第2重みの値とを対応づけたテーブルを、図28に示すように、用意しておく。差分の絶対値をAS、第1重みをw1、第2重みをw2と表している。AS_k、AS_k+1、AS_k+2は、ASの値の例である。テーブルの下側に行くほど、ASの値が大きい。第1重みおよび第2重みの値は理解を容易にするための一例である。ASに基づきテーブルにアクセスし、ASに対応するw1およびw2を求める。ある局面において、差分の絶対値を閾値と比較し、差分の絶対値が以上のときに、第1重みをゼロとしてもよい。
第1回転量と第2回転量との差分を計算し、差分の絶対値に基づき、第1重みおよび第2重みを設定する。ある局面において、差分の絶対値が大きいほど、第1重みを小さく、第2重みを大きくすることの少なくとも一方を行う。これを実現する方法として、差分の絶対値と、第1重みの値と、第2重みの値とを対応づけたテーブルを、図28に示すように、用意しておく。差分の絶対値をAS、第1重みをw1、第2重みをw2と表している。AS_k、AS_k+1、AS_k+2は、ASの値の例である。テーブルの下側に行くほど、ASの値が大きい。第1重みおよび第2重みの値は理解を容易にするための一例である。ASに基づきテーブルにアクセスし、ASに対応するw1およびw2を求める。ある局面において、差分の絶対値を閾値と比較し、差分の絶対値が以上のときに、第1重みをゼロとしてもよい。
本バリエーション2は、方向センサ1627の検出性能が高いと想定される環境(例えば周辺磁場の大きさが低い場合、またはGPS信号の受信品質が高い場合など)で有効である。このような環境において、第1回転量および第2回転量の差分の絶対値が大きくなることは、モーションセンサ190の検出性能が大きく低下している可能性があるためである。ある局面では、方向センサ1627または別途設けた地磁気センサで計測される磁場の大きさが閾値未満の場合に、本バリエーション2による重み設定を行う。また、別の局面では、方向センサ1627がGPSコンパスであり、GPSコンパスで受信されるGPS信号の受信品質が閾値以上の場合に、本バリエーション2による重み設定を行う。受信品質として、例えば受信強度またはSNR(Signal to Noise Ratio)を用いることができる。
[バリエーション3]
バリエーション2とは逆に、差分の絶対値が大きいほど、第1重みを大きく、および第2重みを小さくすることの少なくとも一方を行う。ある局面において、差分の絶対値を閾値と比較し、差分の絶対値が閾値以上のときに、第2重みをゼロとしてもよい。この場合、方向センサ1627を用いないで、HMD1432の向きを推定することになる。
バリエーション2とは逆に、差分の絶対値が大きいほど、第1重みを大きく、および第2重みを小さくすることの少なくとも一方を行う。ある局面において、差分の絶対値を閾値と比較し、差分の絶対値が閾値以上のときに、第2重みをゼロとしてもよい。この場合、方向センサ1627を用いないで、HMD1432の向きを推定することになる。
本バリエーション3は、方向センサ1627の検出性能が低い可能性がある環境(例えば周辺磁場の大きさが高い場合、またはGPS信号の受信品質が低い場合など)において有効である。このような環境において差分の絶対値が大きくなることは、方向センサ1627の検出性能が大きく低下している可能性があるためである。仮想カメラ制御モジュール1621は、例えば、磁場の大きさが閾値以上の場合、またはGPS信号の受信品質が閾値未満の場合に、本バリエーション3による重み設定を行ってもよい。
[バリエーション4]
HMD1432の回転速度が第1の所定値未満の場合に、第2重みをゼロにしてもよい。第1の重みは、予め定めた値(例えば1)に設定する。これは、回転速度が小さい場合、モーションセンサ190の検出性能が高いと想定されるためである。第2重みをゼロにすることは、方向センサを用いないで、HMD1432の向きを推定することを意味する。また、別の局面において、回転速度が第2の所定値以上の場合に、第1重みをゼロにしてもよい。第2の重みは、予め定めた値(例えば1)に設定する。これは、回転速度が大きい場合、モーションセンサ190の検出性能が低い可能性があるためである。第1重みをゼロにすることは、モーションセンサを用いずに、HMD1432の向きを推定することを意味する。
HMD1432の回転速度が第1の所定値未満の場合に、第2重みをゼロにしてもよい。第1の重みは、予め定めた値(例えば1)に設定する。これは、回転速度が小さい場合、モーションセンサ190の検出性能が高いと想定されるためである。第2重みをゼロにすることは、方向センサを用いないで、HMD1432の向きを推定することを意味する。また、別の局面において、回転速度が第2の所定値以上の場合に、第1重みをゼロにしてもよい。第2の重みは、予め定めた値(例えば1)に設定する。これは、回転速度が大きい場合、モーションセンサ190の検出性能が低い可能性があるためである。第1重みをゼロにすることは、モーションセンサを用いずに、HMD1432の向きを推定することを意味する。
同様に、HMD1432の加速度が第3の所定値未満の場合に、第2重みをゼロにしてもよい。第1の重みは、予め定めた値(例えば1)に設定する。これは、加速度が小さい場合(加速度がゼロの場合も含む)、モーションセンサ190の検出性能が高と想定されるためである。また、別の局面において、加速度が第4の所定値以上の場合に、第1重みをゼロにしてもよい。第2の重みは、予め定めた値(例えば1)に設定する。これは、加速度が大きい場合は、モーションセンサ190の検出性能が低い可能性があるためである。
バリエーション1〜4以外の方法で第1重みおよび第2重みを決定することも排除されない。また、バリエーション1〜4の方法、および図25のステップS2566で説明した方法を任意に組み合わせ、条件分岐によって実行する方法を切り換えてもよい。例えば周辺磁場の大きさが低い場合には、バリエーション2の方法を実行し、周辺磁場の大きさが高い場合には、バリエーション1の方法を実行する。その他にも任意の組み合わせおよび条件分岐が可能である。
(変形例2)
図20のステップS2058では第2回転量に応じて第1回転量を補正したが、第1回転量に応じて、第2回転量を補正してもよい。この場合、補正された第2回転量を、HMD1432の推定回転量とする。第2回転量の補正は、第1回転量の補正と同様の方法で行うことができる。
図20のステップS2058では第2回転量に応じて第1回転量を補正したが、第1回転量に応じて、第2回転量を補正してもよい。この場合、補正された第2回転量を、HMD1432の推定回転量とする。第2回転量の補正は、第1回転量の補正と同様の方法で行うことができる。
(変形例3)
図29は、仮想カメラ制御モジュール1621がHMD1432の向きを推定し、推定した向きに応じて仮想カメラ14の向きを制御する処理の第4の例のフローチャートである。
図29は、仮想カメラ制御モジュール1621がHMD1432の向きを推定し、推定した向きに応じて仮想カメラ14の向きを制御する処理の第4の例のフローチャートである。
ステップS1751〜S1753、S1756、S1757、S1766は図17と同じである。
ステップS2971において、方向センサ1627の検出情報に基づき、方向センサ1627が示す向き(第2向き)を特定する。この向きは、ステップS1752で所定時間が経過したと判断された時点の方向センサ1627が示す向きである。この向きは、図19の方向d2に対応する。
ステップS2972において、HMD1432が基準方向から第1回転量だけ回転した場合の向き(第1向き)を計算する。この向きは、例えば、基準方向を示す値に、第1回転量(回転角)を加算することで計算される。この向きは、図19の方向d1に対応する。
ステップS2973において、第1向きと、第2向きとに基づき、HMD1432の向きを推定する。推定した向きは、図22の方向EDに対応する。
図30は、図29のステップS2973の処理の例のフローチャートを示す。
ステップS3074において、第2向きに基づき、第1向きを補正(キャリブレーション)する。ある局面において、第2向きに一定の係数(例えば絶対値が1より小さい正または負の値)を乗じ、得られた乗算値を第1向きに加算、または第1向きから減算する。これにより、第1向きを補正する。第1向きと第2向きとの差分に基づき、当該係数の値を変更してもよい。一例として、差分が大きいほど、係数の値を大きくまたは小さくする。具体的な構成として、差分と係数の値とを対応づけた情報(テーブルまたは関数等)を用いてもよい。
ステップS3075において、補正された第1向きを、HMD1432の向きと決定する。
図30のステップS3074の処理の変形例として、第1向きに基づき、第2向きを補正してもよい。ある局面において、第1向きに一定の係数(例えば絶対値が1より小さい正または負の値)を乗じ、得られた乗算値を第2向きに加算、または第2向きから減算する。これにより、第2向きを補正する。ステップS3075において、補正された第2向きを、HMD1432の向きとする。別の局面において、第1向きと第2向きとの差分に基づき、係数の値を変更してもよい。一例として、差分が大きいほど、係数の値を大きくまたは小さくする。具体的な構成として、差分と係数の値とを対応づけた情報(テーブルまたは関数等)を用いてもよい。
図31に、図29のステップS2973の処理の他の例のフローチャートを示す。本処理では第1向きおよび第2向きの重み付け平均を計算することで、HMD1432の向きを推定する。
ステップS3176において、第1向きと第2向きとにそれぞれ重みを設定する。第1向きに設定する重みは第1重み、第2向きに設定する重みは第2重みに対応する。前述した図25のステップS2566の説明およびその各バリエーションの説明において、第1回転量を第1向き、第2回転量を第2向きに読み変えることで、同様の設定方法が実施可能である。
ステップS3177において、ステップS3176で設定された第1重みおよび第2重みに基づき、第1向きおよび第2向きの重み付け平均を計算する。計算された重み付け平均の値を、補正後の第1向きとする。補正後の第1向きCd1は、第1向きをd1、第2向きをd2、第1重みをw1、第2重みをw2とすると、以下の式5で表される。
Cd1=(d1×w1+d2×w2)/(w1+w2) 式(5)
ステップS3176で第1重みおよび第2重みを計算する際、第1重みおよび第2重みの合計が1になるように、第1重みおよび第2重みを正規化してもよい。
ステップS3075において、補正後の第1向きを、HMD1432の向き(ED)と推定する。
(変形例4)
図29のフローチャートの処理では、図17のフローチャートの処理における第1回転量および第2回転量の代わりに、第1向きおよび第2向きを用いた。同様の変更が、図26のフローチャート(回転速度が閾値以上の場合は第1回転量のみからHMDの向きを推定)、および図27のフローチャート(外れ値を除外してHMDの向きを推定)の処理に対しても適用可能である。以下、それぞれの場合の処理を説明する。
図29のフローチャートの処理では、図17のフローチャートの処理における第1回転量および第2回転量の代わりに、第1向きおよび第2向きを用いた。同様の変更が、図26のフローチャート(回転速度が閾値以上の場合は第1回転量のみからHMDの向きを推定)、および図27のフローチャート(外れ値を除外してHMDの向きを推定)の処理に対しても適用可能である。以下、それぞれの場合の処理を説明する。
図32は、仮想カメラ制御モジュール1621がHMD1432の向きを推定し、推定した向きに応じて仮想カメラ14の向きを制御する処理の第5の例のフローチャートである。
ステップS1751〜S1753、S2663〜S2665、およびステップS2664がNOの場合の処理は、図26と同じである。ステップS2664がYESの場合(回転速度が閾値以上の場合)、ステップS2971に進む。ステップS2971において、方向センサ1627によりHMD1432の向き(第2向き)を特定する。
ステップS2972において、第1回転量に基づきHMDの向き(第1向き)を計算する。
ステップS2973において、第1向きおよび第2向きに基づき、HMDの向きを推定する(この処理の詳細は図30または図31参照)。ステップS1756において、推定したHMD1432の向きに基づき、仮想カメラ14の向きを制御する。
図33は、仮想カメラ制御モジュール1621がHMD1432の向きを推定し、推定した向きに応じて仮想カメラ14の向きを制御する処理のする処理の第6の例のフローチャートである。
ステップS1751〜S1753、S1766は図27と同じである。
ステップS2972において、HMD1432が基準方向から第1回転量だけ回転した場合の向き(第1向き)を計算する。
ステップS3378において、複数の方向センサ1627の検出情報に基づき、これらの方向センサ1627が示す向きを特定する。ここでは、n−1個の方向センサ1627があるとし、2番目の方向センサ〜n番目の方向センサが示す向き(第2向き〜第n向き)を特定する。
ステップS3379において、第2向き〜第n向きの中から外れ値を除外する。外れ値の検出は、図27で説明したのと同様の方法を用いることができる。
ステップS3380において、第1向きと、第2向き〜第n向きのうち外れ値を除外後の向きとに基づいて、HMD1432の向きを推定する。例えば、第2向き〜第n向きのうち外れ値を除外した後の向きに基づき、第1向きを補正し、補正後の第1向きをHMD1432の向きとする。また、別の例として、第1向きと、除外後の向きとにそれぞれ重みを設定し、設定した重みに基づき、重み付け平均を計算する。計算した重み付け平均の値を、補正後の第1向きとする。そして、補正後の第1向きを、HMD1432の向きと推定する。ステップS1756において、推定したHMD1432の向きに基づき、仮想カメラ14の向きを制御する。
(変形例5)
上述した図14〜図33の実施形態の説明では、HMD432の向きを推定するためにモーションセンサ190を用いることを前提としていた。本変形例では、モーションセンサ190を用いずに、複数の方向センサ1627を用いて、HMD432の向きを推定する。ある局面において、複数の方向センサ1627からそれぞれHMD1432の回転量を計算する。計算した回転量のうちの1つを、他の回転量によって補正する。または、これらの回転量に重みを設定し、重み付け平均を計算する。補正後の回転量または重み付け平均を、HMD1432の推定回転量とする。補正の方法および重み付け平均の方法は、前述した方法と同様である。
上述した図14〜図33の実施形態の説明では、HMD432の向きを推定するためにモーションセンサ190を用いることを前提としていた。本変形例では、モーションセンサ190を用いずに、複数の方向センサ1627を用いて、HMD432の向きを推定する。ある局面において、複数の方向センサ1627からそれぞれHMD1432の回転量を計算する。計算した回転量のうちの1つを、他の回転量によって補正する。または、これらの回転量に重みを設定し、重み付け平均を計算する。補正後の回転量または重み付け平均を、HMD1432の推定回転量とする。補正の方法および重み付け平均の方法は、前述した方法と同様である。
別の局面において、複数の方向センサ1627からそれぞれHMD1432の向きを特定する。計算した向きのうちの1つを、他の向きによって補正する。または、これらの向きに重みを設定し、重み付け平均を計算する。補正後の向きまたは重み付け平均を、HMD1432の向きとする。
上記実施形態においては、HMDによってユーザが没入する仮想空間(VR空間)を例示して説明したが、HMDとして、透過型のHMDを採用してもよい。この場合、透過型のHMDを介してユーザが視認する現実空間に仮想空間を構成する画像の一部を合成した視界画像を出力することにより、拡張現実(AR:Augmented Reality)空間または複合現実(MR:Mixed Reality)空間における仮想体験をユーザに提供してもよい。この場合、操作オブジェクトに代えて、ユーザの手の動きに基づいて、仮想空間内における対象オブジェクトへの作用を生じさせてもよい。具体的には、プロセッサは、現実空間におけるユーザの手の位置の座標情報を特定するとともに、仮想空間内における対象オブジェクトの位置を現実空間における座標情報との関係で定義してもよい。これにより、プロセッサは、現実空間におけるユーザの手と仮想空間における対象オブジェクトとの位置関係を把握し、ユーザの手と対象オブジェクトとの間で上述したコリジョン制御等に対応する処理を実行可能となる。その結果、ユーザの手の動きに基づいて対象オブジェクトに作用を与えることが可能となる。
本発明は、上述した実施形態に限定されるものではなく、本発明の構成要素を種々に具体化できる。また、上記実施形態における各構成要素を適宜、拡張し、変更し、削除し、または組み合わせて、本発明を形成することも可能である。また、別の構成要素を新たに追加して、本発明を形成することも可能である。
以下に、本願明細書に開示された主題を付記する。
[項目1]
ヘッドマウントデバイスを装着したユーザに仮想体験を提供するためにコンピュータに実行させるためのコンピュータプログラムであって、
前記仮想体験を提供するための仮想空間を規定するステップと、
前記仮想空間に仮想カメラを設定するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの動きを検出する第1センサを用いて、前記ヘッドマウントデバイスが回転した量である第1回転量を計算するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第2センサを用いて、前記ヘッドマウントデバイスが回転した量である第2回転量を計算するステップと、
前記第2回転量に応じて、前記第1回転量を補正するステップと、
前記補正された第1回転量に基づいて、前記仮想カメラの向きを制御するステップと
をコンピュータに実行させるためのコンピュータプログラム。
第1センサのみならず、第2センサを用いてヘッドマウントデバイスの向きを推定することで、第1センサのみを用いた推定に比べて、ヘッドマウントデバイスの向きを高精度に推定できる。これにより、仮想カメラの向きをヘッドマウントデバイスの向きに高精度に合わせることができるため、ユーザに提供される仮想体験の質を向上できる。
ヘッドマウントデバイスを装着したユーザに仮想体験を提供するためにコンピュータに実行させるためのコンピュータプログラムであって、
前記仮想体験を提供するための仮想空間を規定するステップと、
前記仮想空間に仮想カメラを設定するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの動きを検出する第1センサを用いて、前記ヘッドマウントデバイスが回転した量である第1回転量を計算するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第2センサを用いて、前記ヘッドマウントデバイスが回転した量である第2回転量を計算するステップと、
前記第2回転量に応じて、前記第1回転量を補正するステップと、
前記補正された第1回転量に基づいて、前記仮想カメラの向きを制御するステップと
をコンピュータに実行させるためのコンピュータプログラム。
第1センサのみならず、第2センサを用いてヘッドマウントデバイスの向きを推定することで、第1センサのみを用いた推定に比べて、ヘッドマウントデバイスの向きを高精度に推定できる。これにより、仮想カメラの向きをヘッドマウントデバイスの向きに高精度に合わせることができるため、ユーザに提供される仮想体験の質を向上できる。
[項目2]
前記第1回転量を補正するステップにおいて、前記第1回転量と前記第2回転量との差分に基づき、前記第1回転量を補正する
項目1に記載のコンピュータプログラム。
前記第1回転量を補正するステップにおいて、前記第1回転量と前記第2回転量との差分に基づき、前記第1回転量を補正する
項目1に記載のコンピュータプログラム。
[項目3]
前記第1回転量を補正するステップにおいて、前記差分が閾値以上の場合に、前記第1回転量を補正し、前記差分が閾値未満の場合に、前記第1回転量を補正せず、
前記仮想カメラの向きを制御するステップにおいて、前記第1回転量を補正しない場合に、前記第1回転量に基づき、前記仮想カメラの向きを推定する
項目2に記載のコンピュータプログラム。
前記差分が閾値未満の場合、第1センサの検出性能が高いと考えられる。この場合に第1回転量の補正を行わず、第1回転量に基づき仮想カメラの向きを推定することで、高い推定精度を維持しつつ、演算量を低減できる。
前記第1回転量を補正するステップにおいて、前記差分が閾値以上の場合に、前記第1回転量を補正し、前記差分が閾値未満の場合に、前記第1回転量を補正せず、
前記仮想カメラの向きを制御するステップにおいて、前記第1回転量を補正しない場合に、前記第1回転量に基づき、前記仮想カメラの向きを推定する
項目2に記載のコンピュータプログラム。
前記差分が閾値未満の場合、第1センサの検出性能が高いと考えられる。この場合に第1回転量の補正を行わず、第1回転量に基づき仮想カメラの向きを推定することで、高い推定精度を維持しつつ、演算量を低減できる。
[項目4]
前記第1センサを用いて、前記ヘッドマウントデバイスの回転速度または回転加速度を計算するステップを、前記コンピュータに実行させ、
前記第1回転量を補正するステップにおいて、前記回転速度または前記回転加速度が所定値以上の場合に、前記差分が前記閾値以上かを判断し、前記回転速度または前記回転加速度が前記所定値未満の場合に、前記第1回転量を補正しない、
項目3に記載のコンピュータプログラム。
回転速度または回転加速度が所定値未満の場合、第1センサの検出性能が高いと考えられる。第1回転量の補正を行わず、第1回転量に基づき仮想カメラの向きを推定することで、高い推定精度を維持しつつ、演算量を低減できる。
前記第1センサを用いて、前記ヘッドマウントデバイスの回転速度または回転加速度を計算するステップを、前記コンピュータに実行させ、
前記第1回転量を補正するステップにおいて、前記回転速度または前記回転加速度が所定値以上の場合に、前記差分が前記閾値以上かを判断し、前記回転速度または前記回転加速度が前記所定値未満の場合に、前記第1回転量を補正しない、
項目3に記載のコンピュータプログラム。
回転速度または回転加速度が所定値未満の場合、第1センサの検出性能が高いと考えられる。第1回転量の補正を行わず、第1回転量に基づき仮想カメラの向きを推定することで、高い推定精度を維持しつつ、演算量を低減できる。
[項目5]
前記第1回転量を補正するステップにおいて、前記第1回転量を前記第2回転量に置き換えることによって、前記第1回転量を補正する
項目2ないし4のいずれか一項に記載のコンピュータプログラム。
第2センサの検出性能が高いと想定される状況で、第1回転量を第2回転量に置換することで、高精度な推定が可能となる。
前記第1回転量を補正するステップにおいて、前記第1回転量を前記第2回転量に置き換えることによって、前記第1回転量を補正する
項目2ないし4のいずれか一項に記載のコンピュータプログラム。
第2センサの検出性能が高いと想定される状況で、第1回転量を第2回転量に置換することで、高精度な推定が可能となる。
[項目6]
前記第1回転量を補正するステップにおいて、前記第1回転量と前記第2回転量との重み付け平均を計算し、前記第1回転量を前記計算した重み付け平均に置き換えることによって、前記第1回転量を補正する
項目2ないし4のいずれか一項に記載のコンピュータプログラム。
第1回転量と第2回転量との重み付け平均を用いることで、より高精度な推定が可能となる。
前記第1回転量を補正するステップにおいて、前記第1回転量と前記第2回転量との重み付け平均を計算し、前記第1回転量を前記計算した重み付け平均に置き換えることによって、前記第1回転量を補正する
項目2ないし4のいずれか一項に記載のコンピュータプログラム。
第1回転量と第2回転量との重み付け平均を用いることで、より高精度な推定が可能となる。
[項目7]
前記第1センサを用いて、前記ヘッドマウントデバイスの回転速度または回転加速度を計算するステップを、前記コンピュータに実行させ、
前記回転速度または回転加速度が大きいほど、前記第1回転量の重みを小さく、および前記第2回転量の重みを大きくすることの少なくとも一方を行う
項目6に記載のコンピュータプログラム。
回転速度または回転加速度が大きくなるほど、第1センサの検出性能が低くなる傾向がある場合に、第1回転量の重みを小さく、または第2回転量の重みを大きくすることで、より高精度なヘッドマウントデバイスの向きの推定が可能となる。
前記第1センサを用いて、前記ヘッドマウントデバイスの回転速度または回転加速度を計算するステップを、前記コンピュータに実行させ、
前記回転速度または回転加速度が大きいほど、前記第1回転量の重みを小さく、および前記第2回転量の重みを大きくすることの少なくとも一方を行う
項目6に記載のコンピュータプログラム。
回転速度または回転加速度が大きくなるほど、第1センサの検出性能が低くなる傾向がある場合に、第1回転量の重みを小さく、または第2回転量の重みを大きくすることで、より高精度なヘッドマウントデバイスの向きの推定が可能となる。
[項目8]
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第3センサ〜第nセンサを用いて、前記ヘッドマウントデバイスが回転した量である第3回転量〜第n回転量を計算するステップを、前記コンピュータに実行させ、nは3以上の整数であり、
前記第1回転量を補正するステップにおいて、前記第2回転量〜第n回転量の中から外れ値を除外し、前記第1回転量と、前記第2回転量〜第n回転量のうち前記外れ値を除外した後の回転量に基づいて、前記第1回転量を補正する
項目1に記載のコンピュータプログラム。
外れ値を除外することで、より高精度な推定が可能となる。
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第3センサ〜第nセンサを用いて、前記ヘッドマウントデバイスが回転した量である第3回転量〜第n回転量を計算するステップを、前記コンピュータに実行させ、nは3以上の整数であり、
前記第1回転量を補正するステップにおいて、前記第2回転量〜第n回転量の中から外れ値を除外し、前記第1回転量と、前記第2回転量〜第n回転量のうち前記外れ値を除外した後の回転量に基づいて、前記第1回転量を補正する
項目1に記載のコンピュータプログラム。
外れ値を除外することで、より高精度な推定が可能となる。
[項目9]
前記ユーザにより設定操作を受け付け、前記設定操作を受け付けたきの前記第2センサが示す向きが正面方向となるように、前記仮想カメラの向きを制御するステップを、前記コンピュータに実行させる
項目1ないし8のいずれか一項に記載のコンピュータプログラム。
仮想カメラの向きが、ヘッドマウントデバイスの向きとずれた場合でも、適正な表示画像に戻すことができる。
前記ユーザにより設定操作を受け付け、前記設定操作を受け付けたきの前記第2センサが示す向きが正面方向となるように、前記仮想カメラの向きを制御するステップを、前記コンピュータに実行させる
項目1ないし8のいずれか一項に記載のコンピュータプログラム。
仮想カメラの向きが、ヘッドマウントデバイスの向きとずれた場合でも、適正な表示画像に戻すことができる。
[項目10]
ヘッドマウントデバイスを装着したユーザに仮想体験を提供するための、プロセッサを備えた情報処理装置であって、
前記仮想体験を提供するための仮想空間を規定するステップと、
前記仮想空間に仮想カメラを設定するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの動きを検出する第1センサを用いて、前記ヘッドマウントデバイスが回転した量である第1回転量を計算するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第2センサを用いて、前記ヘッドマウントデバイスが回転した量である第2回転量を計算するステップと、
前記第2回転量に応じて、前記第1回転量を補正するステップと、
前記補正された第1回転量に基づいて、前記仮想カメラの向きを制御するステップと
が前記プロセッサの制御により実行される情報処理装置。
ヘッドマウントデバイスを装着したユーザに仮想体験を提供するための、プロセッサを備えた情報処理装置であって、
前記仮想体験を提供するための仮想空間を規定するステップと、
前記仮想空間に仮想カメラを設定するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの動きを検出する第1センサを用いて、前記ヘッドマウントデバイスが回転した量である第1回転量を計算するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第2センサを用いて、前記ヘッドマウントデバイスが回転した量である第2回転量を計算するステップと、
前記第2回転量に応じて、前記第1回転量を補正するステップと、
前記補正された第1回転量に基づいて、前記仮想カメラの向きを制御するステップと
が前記プロセッサの制御により実行される情報処理装置。
[項目11]
ヘッドマウントデバイスを装着したユーザに仮想体験を提供するための情報処理方法であって、
前記仮想体験を提供するための仮想空間を規定するステップと、
前記仮想空間に仮想カメラを設定するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの動きを検出する第1センサを用いて、前記ヘッドマウントデバイスが回転した量である第1回転量を計算するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第2センサを用いて、前記ヘッドマウントデバイスが回転した量である第2回転量を計算するステップと、
前記第2回転量に応じて、前記第1回転量を補正するステップと、
前記補正された第1回転量に基づいて、前記仮想カメラの向きを制御するステップと
を備えた情報処理方法。
ヘッドマウントデバイスを装着したユーザに仮想体験を提供するための情報処理方法であって、
前記仮想体験を提供するための仮想空間を規定するステップと、
前記仮想空間に仮想カメラを設定するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの動きを検出する第1センサを用いて、前記ヘッドマウントデバイスが回転した量である第1回転量を計算するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第2センサを用いて、前記ヘッドマウントデバイスが回転した量である第2回転量を計算するステップと、
前記第2回転量に応じて、前記第1回転量を補正するステップと、
前記補正された第1回転量に基づいて、前記仮想カメラの向きを制御するステップと
を備えた情報処理方法。
2:ネットワーク
11:仮想空間
13:パノラマ画像
14:仮想カメラ
15:視界領域
17:視界画像
100:HMDシステム
110:HMDセット
120:HMD
130:モニタ
140:注視センサ
150:第1カメラ
160:第2カメラ
170:マイク
180:スピーカ
190:センサ(モーションセンサ)
200:コンピュータ
210:プロセッサ
220:メモリ
230:ストレージ
240:入出力インターフェイス
250:通信インターフェイス
300:コントローラ
310:グリップ
320:フレーム
330:天面
340、350、370、380:ボタン
360:赤外線LED
390:アナログスティック
410:HMDセンサ
420:モーションセンサ
430:ディスプレイ
510:コントロールモジュール
520:レンダリングモジュール
530:メモリモジュール
540:通信制御モジュール
600:サーバ
700:外部機器
1621:仮想カメラ制御モジュール
1622:視界領域決定モジュール
1623:仮想空間定義モジュール
1624:仮想オブジェクト生成モジュール
1625:操作オブジェクト制御モジュール
1626:センサモジュール
1627:方向センサ
1628:センサ情報取得モジュール
1631:空間情報
1632:オブジェクト情報
1633:ユーザ情報
11:仮想空間
13:パノラマ画像
14:仮想カメラ
15:視界領域
17:視界画像
100:HMDシステム
110:HMDセット
120:HMD
130:モニタ
140:注視センサ
150:第1カメラ
160:第2カメラ
170:マイク
180:スピーカ
190:センサ(モーションセンサ)
200:コンピュータ
210:プロセッサ
220:メモリ
230:ストレージ
240:入出力インターフェイス
250:通信インターフェイス
300:コントローラ
310:グリップ
320:フレーム
330:天面
340、350、370、380:ボタン
360:赤外線LED
390:アナログスティック
410:HMDセンサ
420:モーションセンサ
430:ディスプレイ
510:コントロールモジュール
520:レンダリングモジュール
530:メモリモジュール
540:通信制御モジュール
600:サーバ
700:外部機器
1621:仮想カメラ制御モジュール
1622:視界領域決定モジュール
1623:仮想空間定義モジュール
1624:仮想オブジェクト生成モジュール
1625:操作オブジェクト制御モジュール
1626:センサモジュール
1627:方向センサ
1628:センサ情報取得モジュール
1631:空間情報
1632:オブジェクト情報
1633:ユーザ情報
Claims (11)
- ヘッドマウントデバイスを装着したユーザに仮想体験を提供するためにコンピュータに実行させるためのコンピュータプログラムであって、
前記仮想体験を提供するための仮想空間を規定するステップと、
前記仮想空間に仮想カメラを設定するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの動きを検出する第1センサを用いて、前記ヘッドマウントデバイスが回転した量である第1回転量を計算するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第2センサを用いて、前記ヘッドマウントデバイスが回転した量である第2回転量を計算するステップと、
前記第2回転量に応じて、前記第1回転量を補正するステップと、
前記補正された第1回転量に基づいて、前記仮想カメラの向きを制御するステップと
を備えたコンピュータプログラム。 - 前記第1回転量を補正するステップにおいて、前記第1回転量と前記第2回転量との差分に基づき、前記第1回転量を補正する
請求項1に記載のコンピュータプログラム。 - 前記第1回転量を補正するステップにおいて、前記差分が閾値以上の場合に、前記第1回転量を補正し、前記差分が閾値未満の場合に、前記第1回転量を補正せず、
前記仮想カメラの向きを制御するステップにおいて、前記第1回転量を補正しない場合に、前記第1回転量に基づき、前記仮想カメラの向きを推定する
請求項2に記載のコンピュータプログラム。 - 前記第1センサを用いて、前記ヘッドマウントデバイスの回転速度または回転加速度を計算するステップを、前記コンピュータに実行させ、
前記第1回転量を補正するステップにおいて、前記回転速度または前記回転加速度が所定値以上の場合に、前記差分が前記閾値以上かを判断し、前記回転速度または前記回転加速度が前記所定値未満の場合に、前記第1回転量を補正しない、
請求項3に記載のコンピュータプログラム。 - 前記第1回転量を補正するステップにおいて、前記第1回転量を前記第2回転量に置き換えることによって、前記第1回転量を補正する
請求項1ないし4のいずれか一項に記載のコンピュータプログラム。 - 前記第1回転量を補正するステップにおいて、前記第1回転量と前記第2回転量との重み付け平均を計算し、前記第1回転量を前記計算した重み付け平均に置き換えることによって、前記第1回転量を補正する
請求項1ないし4のいずれか一項に記載のコンピュータプログラム。 - 前記第1センサを用いて、前記ヘッドマウントデバイスの回転速度または回転加速度を計算するステップを、前記コンピュータに実行させ、
前記回転速度または回転加速度が大きいほど、前記第1回転量の重みを小さく、および前記第2回転量の重みを大きくすることの少なくとも一方を行う
請求項6に記載のコンピュータプログラム。 - 前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第3センサ〜第nセンサを用いて、前記ヘッドマウントデバイスが回転した量である第3回転量〜第n回転量を計算するステップを、前記コンピュータに実行させ、nは3以上の整数であり、
前記第1回転量を補正するステップにおいて、前記第2回転量〜第n回転量の中から外れ値を除外し、前記第1回転量と、前記第2回転量〜第n回転量のうち前記外れ値を除外した後の回転量に基づいて、前記第1回転量を補正する
請求項1に記載のコンピュータプログラム。 - 前記ユーザにより設定操作を受け付け、前記設定操作を受け付けたきの前記第2センサが示す向きが正面方向となるように、前記仮想カメラの向きを制御するステップを、前記コンピュータに実行させる
請求項1ないし8のいずれか一項に記載のコンピュータプログラム。 - ヘッドマウントデバイスを装着したユーザに仮想体験を提供するための、プロセッサを備えた情報処理装置であって、
前記仮想体験を提供するための仮想空間を規定するステップと、
前記仮想空間に仮想カメラを設定するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの動きを検出する第1センサを用いて、前記ヘッドマウントデバイスが回転した量である第1回転量を計算するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第2センサを用いて、前記ヘッドマウントデバイスが回転した量である第2回転量を計算するステップと、
前記第2回転量に応じて、前記第1回転量を補正するステップと、
前記補正された第1回転量に基づいて、前記仮想カメラの向きを制御するステップと
が前記プロセッサの制御により実行される情報処理装置。 - ヘッドマウントデバイスを装着したユーザに仮想体験を提供するための情報処理方法であって、
前記仮想体験を提供するための仮想空間を規定するステップと、
前記仮想空間に仮想カメラを設定するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの動きを検出する第1センサを用いて、前記ヘッドマウントデバイスが回転した量である第1回転量を計算するステップと、
前記ヘッドマウントデバイスに設けられ、前記ヘッドマウントデバイスの向きを検出する第2センサを用いて、前記ヘッドマウントデバイスが回転した量である第2回転量を計算するステップと、
前記第2回転量に応じて、前記第1回転量を補正するステップと、
前記補正された第1回転量に基づいて、前記仮想カメラの向きを制御するステップと
を備えた情報処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018105367A JP2019211864A (ja) | 2018-05-31 | 2018-05-31 | コンピュータプログラム、情報処理装置および情報処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018105367A JP2019211864A (ja) | 2018-05-31 | 2018-05-31 | コンピュータプログラム、情報処理装置および情報処理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2019211864A true JP2019211864A (ja) | 2019-12-12 |
Family
ID=68845256
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018105367A Pending JP2019211864A (ja) | 2018-05-31 | 2018-05-31 | コンピュータプログラム、情報処理装置および情報処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2019211864A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021002256A1 (ja) * | 2019-07-02 | 2021-01-07 | ソニー株式会社 | 情報処理システム、情報処理方法及びプログラム |
WO2021131938A1 (ja) * | 2019-12-26 | 2021-07-01 | 株式会社コロプラ | プログラム、方法および情報処理装置 |
WO2022215313A1 (ja) * | 2021-04-08 | 2022-10-13 | ソニーグループ株式会社 | 情報処理方法、情報処理装置およびプログラム |
WO2024043546A1 (ko) * | 2022-08-26 | 2024-02-29 | 삼성전자주식회사 | 사용자의 움직임을 트래킹 하기 위한 전자 장치 및 방법 |
-
2018
- 2018-05-31 JP JP2018105367A patent/JP2019211864A/ja active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021002256A1 (ja) * | 2019-07-02 | 2021-01-07 | ソニー株式会社 | 情報処理システム、情報処理方法及びプログラム |
WO2021131938A1 (ja) * | 2019-12-26 | 2021-07-01 | 株式会社コロプラ | プログラム、方法および情報処理装置 |
JP7458779B2 (ja) | 2019-12-26 | 2024-04-01 | 株式会社コロプラ | プログラム、方法および情報処理装置 |
WO2022215313A1 (ja) * | 2021-04-08 | 2022-10-13 | ソニーグループ株式会社 | 情報処理方法、情報処理装置およびプログラム |
WO2024043546A1 (ko) * | 2022-08-26 | 2024-02-29 | 삼성전자주식회사 | 사용자의 움직임을 트래킹 하기 위한 전자 장치 및 방법 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10313481B2 (en) | Information processing method and system for executing the information method | |
US10546407B2 (en) | Information processing method and system for executing the information processing method | |
US20190018479A1 (en) | Program for providing virtual space, information processing apparatus for executing the program, and method for providing virtual space | |
US10223064B2 (en) | Method for providing virtual space, program and apparatus therefor | |
US20180357817A1 (en) | Information processing method, program, and computer | |
US10410395B2 (en) | Method for communicating via virtual space and system for executing the method | |
US20180247453A1 (en) | Information processing method and apparatus, and program for executing the information processing method on computer | |
JP2019211864A (ja) | コンピュータプログラム、情報処理装置および情報処理方法 | |
US10515481B2 (en) | Method for assisting movement in virtual space and system executing the method | |
US20190146579A1 (en) | Method of suppressing vr sickness, system for executing the method, and information processing device | |
US10564801B2 (en) | Method for communicating via virtual space and information processing apparatus for executing the method | |
JP2019128721A (ja) | ユーザの動きをアバタに反映するためのプログラム、当該プログラムを実行するための情報処理装置、およびアバタを含む映像を配信するための方法 | |
JP6368404B1 (ja) | 情報処理方法、プログラム及びコンピュータ | |
JP2019133309A (ja) | プログラム、情報処理装置、及び情報処理方法 | |
JP2019032844A (ja) | 情報処理方法、装置、および当該情報処理方法をコンピュータに実行させるためのプログラム | |
JP2019046248A (ja) | 仮想空間を提供するための方法、プログラム、および当該プログラムを実行するための情報処理装置 | |
JP7005406B2 (ja) | プログラム、情報処理装置、及び情報処理方法 | |
JP7192151B2 (ja) | プログラム、情報処理装置、及び情報処理方法 | |
JP6382928B2 (ja) | 仮想空間における画像の表示を制御するためにコンピュータによって実行される方法、当該方法をコンピュータに実現させるためのプログラム、および、コンピュータ装置 | |
JP2018170013A (ja) | 仮想空間における画像の表示を制御するためにコンピュータによって実行される方法、当該方法をコンピュータに実現させるためのプログラム、および、コンピュータ装置 | |
US11882172B2 (en) | Non-transitory computer-readable medium, information processing method and information processing apparatus | |
JP2020004060A (ja) | プログラム、情報処理装置および方法 | |
JP2018092592A (ja) | 情報処理方法、装置、および当該情報処理方法をコンピュータに実行させるためのプログラム | |
JP6703578B2 (ja) | プログラム、方法及び情報処理装置 | |
JP6441517B1 (ja) | プログラム、情報処理装置、および方法 |