(58)【調査した分野】(Int.Cl.,DB名)
現実空間を撮像した画像である現実空間画像に、仮想空間を撮像した画像である仮想空間画像を重畳した複合現実画像を、ユーザに対して提示するための情報処理装置であって、
前記現実空間画像の入力を受け付ける現実空間画像入力受付手段と、
前記複合現実画像を提示するユーザの位置及び姿勢の入力を受け付ける位置姿勢入力受付手段と、
ユーザからの第1の指示に応じて、仮想空間に配置された3次元モデルが、前記現実空間においてユーザが保持する物体の動きに追従するように設定する設定手段と、
前記設定手段で設定された3次元モデルを、前記物体の動きに追従するように移動させる3次元モデル移動手段と、
前記3次元モデル移動手段で移動された3次元モデルを含む仮想空間を、前記位置姿勢入力受付手段で入力を受け付けた位置及び姿勢の少なくとも一方に基づいて撮像することにより、前記仮想空間画像を生成する仮想空間画像生成手段と、
前記現実空間画像入力受付手段で入力を受け付けた現実空間画像に、前記仮想空間画像生成手段で生成された仮想空間画像を重畳し、前記複合現実画像を生成する複合現実画像生成手段と
を備え、
前記設定手段は、前記物体の動きに追従して移動させた3次元モデルが、当該3次元モデルとは異なる3次元モデルと接触した場合に、当該設定手段で設定された前記物体の動きに追従する設定を解除し、
前記3次元モデル移動手段は、前記設定手段で前記物体の動きに追従する設定が解除されたことに応じて、移動させた3次元モデルを、前記ユーザが保持する物体の動きに追従させず、当該3次元モデルとは異なる3次元モデルと接触した位置で停止することを特徴とする情報処理装置。
前記3次元モデル移動手段は、前記位置姿勢入力受付手段で入力を受け付けた前記入力デバイスの位置及び姿勢に基づいて仮想空間に3次元モデルを生成し、生成された3次元モデルと接触する3次元モデルを移動させることを特徴とする請求項3に記載の情報処理装置。
前記3次元モデル移動手段は、ユーザからの第1の指示によって移動された3次元モデルが、当該3次元モデルとは異なる3次元モデルと接触した場合には、接触した位置で当該3次元モデルの移動を停止させ、ユーザからの第2の指示によって移動された3次元モデルが、当該3次元モデルとは異なる3次元モデルと接触した場合には、当該3次元モデルの移動を停止させないことを特徴とする請求項1乃至4のいずれか1項に記載の情報処理装置。
前記位置姿勢入力受付手段は、前記情報処理装置と通信可能に接続されたセンサから送信される情報を受信することで、前記ユーザの位置及び姿勢の入力を受け付けることを特徴とする請求項1乃至5のいずれか1項に記載の情報処理装置。
現実空間を撮像した画像である現実空間画像に、仮想空間を撮像した画像である仮想空間画像を重畳した複合現実画像を、ユーザに対して提示するための情報処理装置の制御方法であって、
前記情報処理装置の現実空間画像入力受付手段が、前記現実空間画像の入力を受け付ける現実空間画像入力受付ステップと、
前記情報処理装置の位置姿勢入力受付手段が、前記複合現実画像を提示するユーザの位置及び姿勢の入力を受け付ける位置姿勢入力受付ステップと、
前記情報処理装置の設定手段が、ユーザからの指示に応じて、仮想空間に配置された3次元モデルが、前記現実空間においてユーザが保持する物体の動きに追従するように設定する設定ステップと、
前記情報処理装置の3次元モデル移動手段が、前記設定ステップで設定された3次元モデルを、前記物体の動きに追従するように移動させる3次元モデル移動ステップと、
前記情報処理装置の仮想空間画像生成手段が、前記3次元モデル移動ステップで移動された3次元モデルを含む仮想空間を、前記位置姿勢入力受付ステップで入力を受け付けた位置及び姿勢の少なくとも一方に基づいて撮像することにより、前記仮想空間画像を生成する仮想空間画像生成ステップと、
前記情報処理装置の複合現実画像生成手段が、前記現実空間画像入力受付ステップで入力を受け付けた現実空間画像に、前記仮想空間画像生成ステップで生成された仮想空間画像を重畳し、前記複合現実画像を生成する複合現実画像生成ステップと
を備え、
前記設定ステップは、前記物体の動きに追従して移動させた3次元モデルが、当該3次元モデルとは異なる3次元モデルと接触した場合に、当該設定ステップで設定された前記物体の動きに追従する設定を解除し、
前記3次元モデル移動ステップは、前記設定ステップで前記物体の動きに追従する設定が解除されたことに応じて、移動させた3次元モデルを、前記ユーザが保持する物体の動きに追従させず、当該3次元モデルとは異なる3次元モデルと接触した位置で停止することを特徴とする情報処理装置の制御方法。
現実空間を撮像した画像である現実空間画像に、仮想空間を撮像した画像である仮想空間画像を重畳した複合現実画像を、ユーザに対して提示するための情報処理装置の制御方法を実行可能なプログラムであって、
前記情報処理装置を、
前記現実空間画像の入力を受け付ける現実空間画像入力受付手段と、
前記複合現実画像を提示するユーザの位置及び姿勢の入力を受け付ける位置姿勢入力受付手段と、
ユーザからの指示に応じて、仮想空間に配置された3次元モデルが、前記現実空間においてユーザが保持する物体の動きに追従するように設定する設定手段と、
前記設定手段で設定された3次元モデルを、前記物体の動きに追従するように移動させる3次元モデル移動手段と、
前記3次元モデル移動手段で移動された3次元モデルを含む仮想空間を、前記位置姿勢入力受付手段で入力を受け付けた位置及び姿勢の少なくとも一方に基づいて撮像することにより、前記仮想空間画像を生成する仮想空間画像生成手段と、
前記現実空間画像入力受付手段で入力を受け付けた現実空間画像に、前記仮想空間画像生成手段で生成された仮想空間画像を重畳し、前記複合現実画像を生成する複合現実画像生成手段
として機能させ、
前記設定手段は、前記物体の動きに追従して移動させた3次元モデルが、当該3次元モデルとは異なる3次元モデルと接触した場合に、当該設定手段で設定された前記物体の動きに追従する設定を解除し、
前記3次元モデル移動手段は、前記設定手段で前記物体の動きに追従する設定が解除されたことに応じて、移動させた3次元モデルを、前記ユーザが保持する物体の動きに追従させず、当該3次元モデルとは異なる3次元モデルと接触した位置で停止することを特徴とするプログラム。
【発明を実施するための形態】
【0013】
以下、図面を参照しながら、本発明の実施形態の一例について説明する。
【0014】
図1から
図3は、MRシステム100のシステム構成の一例を示す図である。
図1から
図3に示すMRシステム100は、情報処理装置101、HMD102が相互にデータ通信可能に接続されている。情報処理装置101とHMD102との接続は、有線接続であってもよいし、無線接続であってもよい。尚、
図1から
図3のシステム上に接続される各種端末の構成は一例であり、用途や目的に応じて様々な構成例がある。
【0015】
情報処理装置101は、パーソナルコンピュータやサーバのような装置である。情報処理装置101は、HMD102で撮影(撮像)された現実空間の画像(以下、現実空間画像)と、情報処理装置101で生成された仮想空間の画像(以下、仮想空間画像)とを重畳した画像(以下、複合現実画像)を生成し、HMD102に送信する。
【0016】
HMD102は、いわゆるヘッドマウントディスプレイである。HMD102は、ユーザの頭部に装着するディスプレイ装置であり、右目用と左目用のビデオカメラと、右目用と左目用のディスプレイを備えている。HMD102は、HMD102のビデオカメラで撮影された現実空間画像を情報処理装置101に送信する。そして、情報処理装置101から送信されてきた複合現実画像を受信し、ディスプレイに表示する。更に、右目用と左目用のビデオカメラとディスプレイを設けているので、視差によって立体感を得ることができる。尚、HMD102で撮影する現実空間画像、及び表示する複合現実画像は、動画形式が望ましいが、所定の間隔で撮影された画像であってもよい。
【0017】
まず、
図1のMRシステム100は、一意に識別可能なマーカー103が所定の場所に設置されており、HMD102から送信される現実空間画像に含まれるマーカー103を情報処理装置101が識別することで、HMD102の位置や姿勢を特定する形態のシステムである。より具体的には、仮想空間における所定の位置と、所定のマーカー103とを紐づけておき、現実空間画像から当該マーカー103が検出された場合には、そのマーカー103の大きさや傾きから、HMD102が仮想空間上のどの位置にいるのか、及びどの姿勢であるのかを特定する。尚、MRシステム100では、HMD102がどの方向を向いても、いずれかのマーカー103が検出できるように、マーカー103を配置しておくのがよい。
【0018】
次に、
図2のMRシステム100は、磁場を発生させるトランスミッター201を用いて、HMD102の位置や姿勢を特定する形態のシステムである。トランスミッター201は磁場を発生し、発生した磁場をHMD102に備えられたレシーバ202が受信する。受信した磁場に関する情報を情報処理装置101に送信すると、磁場の強さからHMD102の位置や姿勢を情報処理装置101が特定する。
【0019】
そして、
図3のMRシステム100は、赤外線カメラ301(センサ)を用いて、HMD102の位置や姿勢を特定する形態のシステムである。HMD102には、オプティカルマーカー302という光マーカーを備えており、赤外線カメラ301を用いて撮影し、撮影した結果を情報処理装置101に送信すると、オプティカルマーカー302を検出して、HMD102の位置姿勢を特定する。オプティカルマーカー302が撮影できるように、赤外線カメラ301を複数台設置することが望ましい。
【0020】
このように、HMD102の位置や姿勢を特定するためには、マーカーやセンサーを用いる必要がある。HMD102の位置や姿勢を特定できれば、どのような形態でも構わない。本実施形態では、
図3のシステム構成を例に説明を行う。
【0021】
図4は、本実施形態で用いるマウス401の一例である。マウス401は、ポインティングデバイスであり、情報処理装置101とデータ通信可能に接続されている。マウス401と情報処理装置101との接続は、有線接続であってもよいし、無線接続であってもよい。また、マウス401は第1のボタン402と第2のボタン403を備える。更に、マウス401にもHMD102と同様のオプティカルマーカー302を備える。このオプティカルマーカー302によって、HMD102だけでなく、マウス401の位置や姿勢も特定することができる。
【0022】
図5は、本発明の実施形態における情報処理装置101、HMD102のハードウェア構成を示す図である。尚、
図5の情報処理装置101とHMD102のハードウェアの構成は一例であり、用途や目的に応じて様々な構成例がある。
【0023】
まず、情報処理装置101は、CPU501、ROM502、RAM503、システムバス504、入力コントローラ505、ビデオコントローラ506、メモリコントローラ507、通信I/Fコントローラ508、入力デバイス509、ディスプレイ510、外部メモリ511等を備える。
【0024】
CPU501は、システムバス504に接続される各デバイスやコントローラを統括的に制御する。
【0025】
また、ROM502あるいは外部メモリ511には、CPU501の制御プログラムであるBIOS(Basic Input / OutputSystem)やオペレーティングシステムや、各種装置の実行する機能を実現するために必要な後述する各種プログラム等が記憶されている。RAM503は、CPU501の主メモリ、ワークエリア等として機能する。
【0026】
CPU501は、処理の実行に際して必要なプログラム等をRAM503にロードして、プログラムを実行することで各種動作を実現するものである。
【0027】
また、入力コントローラ(入力C)505は、キーボードやマウス401等のポインティングデバイスからの入力を制御する。
【0028】
ビデオコントローラ(VC)506は、ディスプレイ510等の表示器への表示を制御する。表示器は液晶ディスプレイでもCRTでも構わない。
【0029】
メモリコントローラ(MC)507は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶するハードディスク(HD)やフレキシブルディスク(FD)或いはPCMCIAカードスロットにアダプタを介して接続されるカード型メモリ等の外部メモリ511へのアクセスを制御する。
【0030】
通信I/Fコントローラ(通信I/FC)508は、ネットワークを介して、外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、TCP/IPを用いたインターネット通信等が可能である。通信I/Fコントローラ508は、トランスミッター201から磁場を受信したレシーバ202との通信と、赤外線カメラ301との通信も制御する。
【0031】
尚、CPU501は、例えばRAM503内の表示情報用領域へアウトラインフォントの展開(ラスタライズ)処理を実行することにより、ディスプレイ510上での表示を可能としている。また、CPU501は、ディスプレイ510上の不図示のマウスカーソル等でのユーザ指示を可能とする。
【0032】
本発明の情報処理装置101が後述する各種処理を実行するために用いられる各種プログラム等は外部メモリ511に記録されており、必要に応じてRAM503にロードされることによりCPU501によって実行されるものである。さらに、本発明に係わるプログラムが用いる定義ファイルや各種情報テーブルは外部メモリ511に格納されている。
【0033】
次に、HMD102は、右目ビデオカメラ521、左目ビデオカメラ522、右目ディスプレイ523、左目ディスプレイ524、コントローラ525等を備える。
【0034】
右目ビデオカメラ521と、左目ビデオカメラ522は、現実世界を撮影するビデオカメラである。右目ビデオカメラ521は、右目ディスプレイ523に表示するための画像を撮影し、左目ビデオカメラ522は、左目ディスプレイ524に表示するための画像を撮影する。撮影された画像(現実空間画像)は、コントローラ525が情報処理装置101に送信し、通信I/Fコントローラ508を通じて情報処理装置101が受信する。
【0035】
情報処理装置101から通信I/Fコントローラ508を通じて複合現実画像が送信されると、コントローラ525が受信し、受信した複合現実画像を右目ディスプレイ523と左目ディスプレイ524に表示させる。この時、右目ビデオカメラ521で撮影された現実空間画像に基づいて生成された複合現実画像は、右目ディスプレイ523に表示し、左目ビデオカメラ522で撮影された現実空間画像に基づいて生成された複合現実画像は、左目ディスプレイ524に表示する。
【0036】
尚、
図2のようなシステム構成の場合、レシーバ202がHMD102に設置されており、レシーバ202が受け取った磁場の情報をレシーバ202から情報処理装置101に送信する。
【0037】
図6は、情報処理装置101のモジュール構成を示す機能構成図である。尚、
図6の情報処理装置101のモジュール構成は一例であり、用途や目的に応じて様々な構成例がある。
【0038】
情報処理装置101は、オペレーティングシステム600、MRプラットフォーム610、MRアプリケーション620から構成される。
【0039】
オペレーティングシステム600は、通信モジュール601、入力デバイス制御モジュール602を備える。通信モジュール601は、HMD102やレシーバ202、赤外線カメラ301と通信するためのモジュールである。通信モジュール601は、通信I/Fコントローラ508を通じて、各種装置と情報の通信を行う。入力デバイス制御モジュール602は、マウス401等の入力デバイス509からの信号を受信し、情報処理装置101において各種制御を行うモジュールである。
【0040】
MRプラットフォーム610は、キャリブレーションモジュール611、画像処理モジュール612、マーカー検知モジュール613、磁場解析モジュール614、赤外線情報解析モジュール615、位置姿勢特定モジュール616、色検知モジュール617から構成される。
【0041】
キャリブレーションモジュール611は、現実空間と仮想空間の位置合わせを行うためのモジュールである。HMD102で撮影された現実空間画像や各種センサーからの情報により、現実空間と仮想空間の位置合わせを行う。
【0042】
画像処理モジュール612は、HMD102で撮影された現実空間画像からマーカー103等を抽出するために画像処理を実行するモジュールである。画像処理の内容は特に問わない。現実空間画像から必要な情報を抽出しやすくなる画像処理であれば、何でもよい。
【0043】
マーカー検知モジュール613は、HMD102で撮影され、画像処理モジュール612で画像処理された現実空間画像から、マーカー103を検知するためのモジュールである。現実空間画像からマーカー103の特徴点を抽出し、更にマーカー103の大きさや傾きを検出する。検知したマーカー103の情報は、後述する位置姿勢特定モジュール616に渡す。
【0044】
磁場解析モジュール614は、レシーバ202で送信された、トランスミッター201で発生する磁場を解析するためのモジュールである。磁場の強さや変化を解析し、後述する位置姿勢特定モジュール616に渡す。
【0045】
赤外線情報解析モジュール615は、赤外線カメラ301から送信された赤外線の電気信号(以下、赤外線情報)を解析するためのモジュールである。赤外線情報からオプティカルマーカー302を検出し、検出した情報を後述する位置姿勢特定モジュール616に渡す。
【0046】
位置姿勢特定モジュール616は、マーカー検知モジュール613、磁場解析モジュール614、赤外線情報解析モジュール615から渡された各種情報に基づいて、HMD102またはマウス401の位置と姿勢を特定するモジュールである。キャリブレーションモジュール611によって現実空間と仮想空間の位置合わせが行われているので、現実空間における位置から仮想空間における位置を特定できる。
【0047】
色検知モジュール617は、HMD102から送信された現実空間画像から所定の色を検知するためのモジュールである。特に、後述するマスク設定モジュール622において、3次元モデルによってユーザの手が隠れないようにするために、肌色の画素を検知する。RGB(Red−Green−Blue color model)で肌色に近い色の値を設定し、それと同じまたは同様の色を肌色と判定すればよい。
【0048】
MRアプリケーション620は、仮想カメラ制御モジュール621、マスク設定モジュール622、仮想オブジェクト管理モジュール623、重畳画像生成モジュール624から構成される。
【0049】
仮想カメラ制御モジュール621は、位置姿勢特定モジュール616で特定された仮想空間における位置と姿勢に基づいて、仮想空間におけるカメラの位置と姿勢を制御するモジュールである。仮想空間におけるカメラは、仮想空間を撮影するためのカメラである。つまり、仮想空間におけるユーザの視点である。このカメラで撮影された仮想空間画像と、HMD102から送信された現実空間画像とを重畳させることで、複合現実画像が生成される。
【0050】
マスク設定モジュール622は、仮想空間画像と現実空間画像を重畳させる際に、現実空間画像を構成する画素のうち、仮想空間画像を重畳させない画素に対してマスクを設定するモジュールである。マスクが設定された画素には、仮想空間画像が重畳されない。特に、色検知モジュール617で検知された色の画素にマスクを設定する。肌色が検知されているのであれば、肌色の画素の部分にマスクを設定し、ユーザの手はいつでも見えるようにできる。
【0051】
仮想オブジェクト管理モジュール623は、仮想空間に配置される3次元モデル(以下、仮想オブジェクト)を管理するためのモジュールである。仮想空間における仮想オブジェクトの配置位置の管理や、仮想オブジェクトの表示、移動、非表示、仮想オブジェクト同士の紐付け、仮想オブジェクト同士の接触判定等を行う。
【0052】
重畳画像生成モジュール624は、HMD102から送信された現実空間画像と、仮想カメラ制御モジュール621で制御された仮想空間のカメラで撮影された仮想空間画像とを重畳させ、複合現実画像を生成するためのモジュールである。この時、マスク設定モジュール622でマスクが設定された現実空間画像の画素には、仮想空間画像を重畳しない。また、重畳画像生成モジュール624では、右目ビデオカメラ521と左目ビデオカメラ522でそれぞれ撮影された現実空間画像に対応する複合現実画像を生成する。尚、情報処理装置101が備える各種モジュールが、右目ビデオカメラ521で撮影された現実空間画像と左目ビデオカメラ522で撮影された現実空間画像に対して実行する処理はどちらも同様である。
【0053】
次に、本発明の実施形態における情報処理装置101によって行われる一連の処理について、
図7に示すフローチャートを用いて説明する。
【0054】
ステップS701では、情報処理装置101のCPU501は、ユーザからの指示に応じて、外部メモリ511に記憶されたMRプラットフォーム610とMRアプリケーション620を起動し、HMD102と赤外線カメラ301からの情報の送信を受け付ける。
【0055】
ステップS702では、HMD102のコントローラ525は、右目ビデオカメラ521及び左目ビデオカメラ522で現実空間を撮影する。そして、ステップS703では、HMD102のコントローラ525は、撮影された現実世界の画像(現実空間画像)を情報処理装置101に送信する。尚、本実施形態では右目ビデオカメラ521及び左目ビデオカメラ522で撮影された画像は静止画でも動画でもよい。よりリアリティのある複合現実感を体感するためには、動画のほうがよい。
【0056】
ステップS704では、情報処理装置101のCPU501は、通信モジュール601を用いて、HMD102から送信された現実空間画像を受信し、RAM503に記憶する(現実空間画像入力受付手段)。
【0057】
一方、ステップS705では、赤外線カメラ301は、現実空間を撮影する。この時、赤外線カメラ301は、赤外光を撮影するので、前述したHMD102とマウス401に付されたオプティカルマーカー302を撮影することとなる。そして、ステップS706では、赤外線カメラ301は、撮影された赤外線の電気信号(赤外線情報)を情報処理装置101に送信する。
【0058】
ステップS707では、情報処理装置101のCPU501は、通信モジュール601を用いて、赤外線カメラ301から送信された赤外線情報を受信し、RAM503に記憶する(位置姿勢入力受付手段)。赤外線情報は、HMD102やマウス401に付されたオプティカルマーカー302の位置や姿勢を示す情報であるので、HMD102を装着するユーザやマウス401の位置や姿勢の入力を情報処理装置101が受け付けているのと同義である。
【0059】
ステップS708では、情報処理装置101のCPU501は、入力デバイス制御モジュール602を用いて、マウス401からの操作信号を受信する。より具体的には、マウス401が備えるボタンが押下(クリック)された場合に、押下されたボタンに関する操作信号がマウス401から情報処理装置101に対して送信され、情報処理装置101が入力デバイス制御モジュール602を通じてこれを受信する。尚、本実施形態では、マウス401の備える第1のボタン402と第2のボタン403を用いるが、これ以外のボタンを用いてもよい。
【0060】
ステップS709では、情報処理装置101のCPU501は、ユーザからMRプラットフォーム610やMRアプリケーション620に対する終了指示があったか否かを判定する。MRプラットフォーム610やMRアプリケーション620を終了するメニューがユーザから選択された場合に終了指示があったと判定してもよいし、それ以外でもよい。終了指示があったと判定された場合には、ステップS719に処理を進める。終了指示があったと判定されなかった場合には、ステップS710に処理を進める。
【0061】
ステップS710では、情報処理装置101のCPU501は、赤外線情報解析モジュール615を用いて、ステップS707で受信した赤外線情報からHMD102とマウス401に備えられたオプティカルマーカー302の位置や姿勢を検出する。尚、赤外線情報から検出する方法については、既存の技術を用いるため、詳細な説明は省略する。
【0062】
ステップS711では、情報処理装置101のCPU501は、位置姿勢特定モジュール616を用いて、ステップS710で検出したHMD102とマウス401のオプティカルマーカー302の位置や姿勢から、仮想空間上におけるHMD102とマウス401の位置や姿勢を特定する。つまり、HMD102を装着するユーザとそのユーザが操作するマウス401の現実空間における位置と姿勢を特定することになる。キャリブレーションモジュール611によって、現実空間における所定の位置と仮想空間における所定の位置とが一致するように、あらかじめ調整されている。そのため、現実空間における位置や姿勢が特定できれば、仮想空間における位置や姿勢も特定できる。
【0063】
ステップS712では、情報処理装置101のCPU501は、ステップS708で受信したマウスの操作信号と、ステップS711で特定したHMD102とマウス401の仮想空間上の位置や姿勢に基づいて、ステップS704で受信した現実空間画像に重畳する仮想空間を生成する処理を実行する。仮想空間生成処理の詳細は、
図8で後述する。
【0064】
ステップS713では、情報処理装置101のCPU501は、仮想カメラ制御モジュール621を用いて、仮想空間における仮想カメラの位置と向きを制御し、仮想空間を撮影する(仮想空間画像生成手段)。そして、撮影により生成された仮想空間画像をRAM503に記憶する。
【0065】
より具体的には、ステップS711で特定されたHMD102の位置や姿勢からHMD102が仮想空間のどの位置でどの方向を向いているのかを特定し、その特定された位置と方向に仮想カメラを設置する。仮想カメラは、仮想空間内に設置され、仮想空間を撮影する仮想的な撮影部である。仮想空間は仮想オブジェクトから形成される仮想的な3次元空間であるので、これをHMD102に表示させるために2次元の画像にしなければならない。そのため、3次元空間を仮想カメラから撮影することにより、2次元画像を取得する。尚、ここでいう撮影は仮想空間をキャプチャすることである。キャプチャする際には、仮想空間に存在する仮想オブジェクトのみをキャプチャする。そのため、背景は透過されている。
【0066】
また、仮想カメラから見て、仮想オブジェクトの手前にマスクオブジェクトが配置されている場合にも、当該マスクオブジェクトが重なっている部分の仮想オブジェクトは透過される。マスクオブジェクトは、ユーザによって仮想空間に設置される仮想オブジェクトの1つである。マスクオブジェクトを配置することにより、仮想オブジェクトが常に最前面に表示される問題を防ぐことができる。例えば、現実空間に配置された物体の向こう側に仮想オブジェクトを表示したい場合がある。このとき、マスクオブジェクトを配置しないと、後述するステップS715で現実空間画像の上に仮想空間画像を重畳することになるので、仮想オブジェクトが物体よりも手前に表示されてしまう。そこで、当該物体の位置に相当する仮想空間上の位置にマスクオブジェクトを設定する。こうすると、仮想カメラから見て当該マスクオブジェクトよりも奥にある仮想オブジェクトは、そのマスクオブジェクトと重なる部分が透過する。これにより、現実空間画像の上に仮想空間画像を重畳しても、物体よりも奥に仮想オブジェクトが表示されているように見える。
【0067】
ステップS714では、情報処理装置101のCPU501は、仮想カメラ制御モジュール621を用いて、ステップS713で撮影された仮想空間画像をRAM503から取得する。
【0068】
そして、ステップS715では、情報処理装置101のCPU501は、重畳画像生成モジュール624を用いて、ステップS704で受信した現実空間画像に、ステップS714で取得した仮想空間画像を重畳し、複合現実画像を生成する(複合現実画像生成手段)。この時、情報処理装置101のCPU501は、色検知モジュール617を用いて、現実空間画像から所定の色を含む画素を検知し、更にマスク設定モジュール622を用いて、検知した画素には仮想空間画像が重畳されないように制御する。例えば、ユーザの手の肌色を検知し、その検知した部分には仮想空間画像が重畳されないようにする。こうすれば、ユーザの手が仮想オブジェクトよりも手前に表示されるように見える。
【0069】
ステップS716では、情報処理装置101のCPU501は、通信モジュール601を用いて、ステップS715で生成された複合現実画像をHMD102に送信する(複合現実画像送信手段)。そして、ステップS704に処理を戻し、ステップS709で終了指示があるまでステップS702乃至ステップS718の処理を繰り返す。
【0070】
ステップS717では、HMD102のコントローラ525は、ステップS716で送信された複合現実画像を受信する。そして、ステップS718では、HMD102のコントローラ525は、ステップS717で受信した複合現実画像を、右目ディスプレイ523と左目ディスプレイ524に表示し、ユーザに複合現実画像を提示する(表示手段)。前述した処理においては説明を省略したが、複合現実画像は右目ディスプレイ523に表示するものと、左目ディスプレイ524に表示するものの2つが生成されている。右目ディスプレイ523に表示するものは、右目ビデオカメラ521から取得した現実空間画像を用いて生成された複合現実画像を表示する。一方、左目ディスプレイ524に表示するものは、左目ビデオカメラ522から取得した現実空間画像を用いて生成された複合現実画像を表示する。
【0071】
このように、ステップS702乃至ステップS718を繰り返し実行することで、リアルタイムに複合現実感をユーザに体感させることができる。また、前述したステップS709で終了指示があったと判定された場合には、ステップS719に処理を進め、ステップS719では、情報処理装置101のCPU501は、MRプラットフォーム610とMRアプリケーション620を終了させる。
【0072】
次に、本発明の実施形態における情報処理装置101によって行われる仮想空間生成処理について、
図8に示すフローチャートを用いて説明する。
【0073】
本発明における仮想空間生成処理は、仮想オブジェクトから成る仮想空間を生成する処理であって、マウス401を通じてユーザから指示された内容に応じて、仮想空間における仮想オブジェクトの位置や動作を制御する処理である。
【0074】
図8の処理の概要について、
図10、
図11を用いて説明する。まず、
図10の1000について説明する。1000は、仮想空間に仮想オブジェクトが配置された初期状態である。ユーザ1001は、HMD102を装着し、複合現実画像を閲覧しているユーザである。仮想オブジェクト1002と仮想オブジェクト1003は、仮想空間に配置された仮想オブジェクトである。カーソルオブジェクト901は、後述するステップS802で配置されるカーソルオブジェクトである。カーソルオブジェクトとは、仮想オブジェクトとの接触を検知するための3次元モデルである。カーソルオブジェクトは、
図9のカーソルオブジェクト901に示すように、マウス401に重畳するように表示される。後述する処理において、このカーソルオブジェクト901と接触している仮想オブジェクトを操作することができる。ユーザ1001は、HMD102の右目ディスプレイ523と左目ディスプレイ524を通じて、現実空間画像に重畳されたカーソルオブジェクト901、仮想オブジェクト1002、仮想オブジェクト1003を閲覧している状態である。
【0075】
まず、ユーザ1001が移動してマウス401を仮想オブジェクトに近づけて、カーソルオブジェクト901と仮想オブジェクトとを接触させる。そして、接触している状態でマウス401の第1のボタン402をユーザ1001が押下する。すると、押下されたことを情報処理装置101のCPU501が検知し、接触している仮想オブジェクトをカーソルオブジェクト901に追従するように制御する。
図10の1010は、カーソルオブジェクト901を仮想オブジェクト1002に接触させた状態で第1のボタン402を押下し、仮想オブジェクト1002を持ち上げた図である。このように第1のボタン402の押下を情報処理装置101のCPU501が検知し続けている間は、仮想オブジェクト1002をカーソルオブジェクト901に追従するように移動させることができる。
【0076】
次に、ユーザ1001がマウス401で第1のボタン402を押下したまま移動し、仮想オブジェクト1003を通り抜けた場合、本実施形態では、
図11の1100に示すように、マウス401のカーソルオブジェクト901に追従していた仮想オブジェクト1002が仮想オブジェクト1003に接触した状態で追従を停止する。これは、たとえ仮想オブジェクトであっても、より現実空間に近い動作をさせることで、リアリティのある仮想空間を提示するためである。
【0077】
従来の複合現実感技術では、仮想オブジェクトはあくまでデータであるので、仮想オブジェクト同士が重なり合うことができていた。これは、情報処理装置101のCPU501が、仮想オブジェクトごとに指定された座標値の位置に当該仮想オブジェクトを配置していたからである。つまり、仮想オブジェクト同士の干渉は考慮せずに、指定された位置に表示していたということである。しかしながら、自動車等の設計を複合現実感技術で行う場合には、仮想オブジェクトである部品同士の干渉をチェックしないと、本当に当該部品が組み込めるのかどうかわからない。また別のケースとして、モデルルームを複合現実感技術で提示した時に、仮想オブジェクトである家具を部屋の中に持ち運ぼうとした時に、部屋の扉を家具が通過できるかどうかをチェックしないと、現実味のないシミュレーションとなってしまう。
【0078】
そのため、ユーザ1001が移動させる仮想オブジェクト1002が、他の仮想オブジェクト1003に接触したときには、仮想オブジェクト1002を停止することにより、移動している仮想オブジェクト1002が他の仮想オブジェクト1003に接触してしまったことをユーザに通知している。
【0079】
また、
図11の1110に示すように、1100のように仮想オブジェクト同士が接触し、マウス401の第1のボタン402が押下されている状態で、更にマウス401の第2のボタン403が押下されると、仮想オブジェクト1002がカーソルオブジェクト901に対する追従を再開する。仮想オブジェクト1002の追従が停止してしまった場合に、ユーザ1001は、再度仮想オブジェクト1002を取りに行く手間が生じる。そのため、容易に仮想オブジェクト1002を移動させるために、第1のボタン402を押下したまま、第2のボタン403が押下されると、カーソルオブジェクト901に対する追従を再開する。
以下、この一連の処理について説明を行う。
【0080】
まず、ステップS801では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュールを用いて、仮想空間の所定の位置に仮想オブジェクトを配置する。仮想空間上のどの位置にどの仮想オブジェクトを配置するのかは、あらかじめユーザによって指定されている。そのため、その指定に応じた位置に所定の仮想オブジェクトを配置する。仮想オブジェクトは複数あってもよい。
【0081】
ステップS802では、情報処理装置101のCPU501は、前述したステップS711で特定されたマウス401の位置に対応する仮想空間の位置に、カーソルオブジェクト901を配置する。
【0082】
ステップS803では、情報処理装置101のCPU501は、入力デバイス制御モジュール602を用いて、マウス401に備える第1のボタン402(第1の指示)または第2のボタン403(第2の指示)が押下されているか否かを判定する。より具体的には、第1のボタン402または第2のボタン403が押下されていることを示す信号を検知したか否かによって判定する。第1のボタン402または第2のボタン403が押下されていると判定された場合には、ステップS403に処理を進める。第1のボタン402および第2のボタン403のどちらも押下されていないと判定された場合には、ステップS819に処理を進める。
【0083】
ステップS804では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、カーソルオブジェクト901に子要素があるか否かを判定する。子要素とは、前述した仮想オブジェクト1002のように、カーソルオブジェクト901に追従する仮想オブジェクトのことである。つまり、ユーザからの指示に応じてカーソルオブジェクト901で移動させている仮想オブジェクトがあるか否かを判定する。子要素があると判定された場合には、ステップS805に処理を進める。子要素がないと判定された場合には、ステップS807に処理を進める。
【0084】
ステップS805では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、カーソルオブジェクト901が当該カーソルオブジェクト901に追従させる仮想オブジェクト(以下、ObjX)と接触しているか否かを判定する。つまり、第1のボタン402または第2のボタン403がユーザから押下されて、ObjXを移動させようとしているか否かを判定することになる。カーソルオブジェクト901がObjXと接触していると判定された場合には、ステップS806に処理を進める。カーソルオブジェクト901がObjXと接触していないと判定された場合には、ステップS814に処理を進める。
【0085】
ステップS806では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、接触しているObjXをカーソルオブジェクト901の子要素に設定する。つまり、ObjXをカーソルオブジェクト901に追従(移動)するように制御する(3次元モデル移動手段)。子要素となったObjXは、カーソルオブジェクト901に追従するので、ユーザが自由にObjXの位置を移動させることができる。
【0086】
ステップS807では、情報処理装置101のCPU501は、入力デバイス制御モジュール602を用いて、マウス401の第1のボタン402が押下されているか否かを判定する。第1のボタン402が押下されていると判定された場合には、ステップS808に処理を進める。第1のボタン402が押下されておらず、第2のボタン403が押下されていると判定された場合には、仮想空間生成処理を終了し、ステップS713に処理を進める。
【0087】
ステップS808では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、前述したステップS806でカーソルオブジェクト901の子要素となったObjXの仮想空間上の座標値を取得する。ここで取得する座標値は、後述するステップS812で使用する。
【0088】
ステップS809では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、カーソルオブジェクト901の子要素であるObjXと、当該ObjXとは異なる仮想オブジェクト(以下、ObjY)とが接触しているかどうかを判定する。ステップS806でカーソルオブジェクト901の子要素となったObjXは、前述した通り、カーソルオブジェクト901に追従している。つまり、ユーザがカーソルオブジェクト901でObjXを移動させた結果、ObjXが他の仮想オブジェクトであるObjYと接触してしまう可能性がある。前述した
図11の1100に示すように、本実施形態では、カーソルオブジェクト901で移動させている仮想オブジェクト1002(ObjX)が他の仮想オブジェクト1003(ObjY)に接触した場合には、仮想オブジェクト1002(ObjX)を接触した位置で停止し、カーソルオブジェクト901に対する追従を終了する必要がある。そのため、ステップS809では、カーソルオブジェクト901の子要素であるObjXと、ObjYとが接触しているかどうかを判定している。また、接触の判定をする際には、更にObjXの移動方向にObjYがあるかどうかも判定する。つまり、ObjYの方にObjXが向かっているのであれば、接触した際に停止する必要があるが、そうでない場合(ObjYのある面に対して平行にObjXを移動する場合)には接触していたとしても停止する必要はない。そのため、ObjXの移動方向も考慮して、接触判定を行う。ObjXとObjYとが接触していると判定された場合には、ステップS810に処理を進める。ObjXとObjYとが接触していないと判定された場合には、仮想空間生成処理を終了し、ステップS713に処理を進める。
【0089】
ステップS810では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、ObjXとObjYとが接触している箇所を識別表示する。
【0090】
ユーザは、仮想オブジェクト同士の接触を気にせずにObjXを移動させていることが想定される。そのため、ObjXが急に追従してこなくなった場合、ユーザに不安感を与えてしまう。そこで、ObjXとObjYとが接触していることをユーザに通知することで、このような問題点を解決している。
【0091】
また、ユーザにとっては、どの部分が接触しているのかを知りたいことがある。例えば、製品設計において、部品が他の部品と接触していないかどうか確認しないと、故障につながってしまう可能性がある。そこで、ObjXのどの部分がObjYと接触しているのかをユーザに対して識別表示することで、このような問題点を解決している。
図11の1100では、この識別表示の一例を示している。
図11の1100では、仮想オブジェクト1002(ObjX)の左面と、仮想オブジェクト1003(ObjY)の右面とが接触しているので、接触している部分を示すように吹き出しを表示させている。この他にも、接触している部分の色を変えてもよいし、不図示のスピーカーから音を出して通知してもよい。通知の方法はどのような方法でもよい。
【0092】
ステップS811では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、カーソルオブジェクト901から子要素であるObjXを当該カーソルオブジェクト901から切り離す。つまり、子要素でなくす。そして、ステップS812では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、ステップS808で取得した座標値をObjXに代入する。つまり、ObjXはカーソルオブジェクト901の子要素ではなくなったので、追従を終了して、接触した位置で停止する必要がある。そこで、ステップS808で取得した座標値をObjXの表示位置として使用する。
【0093】
ステップS813では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、第1ボタン押下中フラグを「0」から「1」に変更する。第1のボタン押下中フラグは、マウス401の第1のボタン402が押下中であることを示すフラグである。第1のボタン押下中フラグは、後述するステップS814で使用する。ステップS813の処理が終了すると、仮想空間生成処理を終了し、ステップS713に処理を進める。
【0094】
このように、ユーザはカーソルオブジェクト901をObjXに接触させた状態で第1のボタン402または第2のボタン403を押下することで、ObjXを移動させることができ、第1のボタン402でObjXを移動させている場合に、ObjXが他の仮想オブジェクトであるObjYと接触した場合には、ObjXを接触した位置で停止させることができる。そのため、より現実空間に近い動作をユーザに提示することができる。また、第2のボタン403でObjXを移動させている場合には、ステップS808乃至ステップS813を実行しないため、従来通り、ObjXがObjYと接触した位置で停止させずに、ObjXがObjYを貫通して移動させることができる。つまり、ユーザは状況に応じて、所望の移動方法を選択することができる。
【0095】
一方、ステップS805でObjXとカーソルオブジェクト901が接触しないと判定された場合には、ステップS814では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、第1のボタン押下中フラグが「1」であるか否かを判定する。つまり、ステップS808乃至ステップS813の処理が実行された後も第1のボタン402が押下中であるか否かを判定する。第1のボタン押下中フラグが「1」であると判定された場合には、ステップS815に処理を進める。第1のボタン押下中フラグが「0」であると判定された場合には、仮想空間生成処理を終了し、ステップS713に処理を進める。
【0096】
ステップS815では、情報処理装置101のCPU501は、入力デバイス制御モジュール602を用いて、更に第2のボタン403も押下されたか否かを判定する。第2のボタン403も押下されたと判定された場合には、ステップS816に処理を進める。第2のボタン403が押下されなかった場合には、仮想空間生成処理を終了し、ステップS713に処理を進める。
【0097】
ステップS816では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、カーソルオブジェクト901の仮想空間上の座標値を取得する。そして、ステップS817では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、ステップS816で取得した座標値をObjXの座標値として代入する。つまり、前述したステップS812で接触した位置で停止したObjXをカーソルオブジェクト901の位置に呼び戻す。
【0098】
ステップS818では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、前述したステップS806と同様に、ObjXをカーソルオブジェクト901の子要素とする。このように、ObjXがObjYに接触することによりカーソルオブジェクト901から切り離され、停止した場合であっても、第1のボタン402の押下を継続したまま、更に第2のボタン403を押下することで、ObjXを呼び戻すことができる。すなわち、ObjXの追従動作を再開することができる。これにより、わざわざユーザがObjXを取りに行く手間を軽減することができる。
【0099】
ステップS803で第1のボタン402または第2のボタン403が第1のボタン402および第2のボタン403のどちらも押下されていないと判定された場合には、ステップS819では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、カーソルオブジェクト901に子要素のObjXがあるか否かを判定する。つまり、第1のボタン402の押下が終了したため、ObjXをカーソルオブジェクト901から切り離さなければならない。そこで、ステップS819においてこのような判定を行っている。カーソルオブジェクト901に子要素があると判定された場合には、ステップS820に処理を進める。カーソルオブジェクト901に子要素がないと判定された場合には、ステップS823に処理を進める。
【0100】
ステップS820では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、前述したステップS808と同様に、カーソルオブジェクト901に追従しているObjXの仮想空間上の座標値を取得する。そして、ステップS821では、情報処理装置101のCPU501は、前述したステップS811と同様に、仮想オブジェクト管理モジュール623を用いて、カーソルオブジェクト901からObjXを切り離す。そして、ステップS822では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、前述したステップS812と同様に、ステップS820で取得した座標値をObjXの座標値に代入する。こうすることで、ObjXの追従動作を終了する。
【0101】
ステップS823では、情報処理装置101のCPU501は、仮想オブジェクト管理モジュール623を用いて、第1のボタン押下中フラグを「0」にする。つまり、第1のボタン押下中フラグを初期化する。
【0102】
以上のようにすることで、ユーザからマウス401を通じて操作された仮想オブジェクトで仮想空間を生成し、前述したステップS713以降の処理に備える。
【0103】
このように、ユーザから操作された仮想空間上の3次元モデルが当該3次元モデルとは異なる3次元モデルと接触した場合に、ユーザから操作された3次元モデルを停止することが可能となるので、よりリアルな動作を提示できる効果を奏する。
【0104】
本発明は、例えば、システム、装置、方法、プログラム若しくは記憶媒体等としての実施形態も可能であり、具体的には、複数の機器から構成されるシステムに適用してもよいし、また、1つの機器からなる装置に適用してもよい。
【0105】
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システム或いは装置に直接、或いは遠隔から供給するものを含む。そして、そのシステム或いは装置のコンピュータが前記供給されたプログラムコードを読み出して実行することによっても達成される場合も本発明に含まれる。
【0106】
したがって、本発明の機能処理をコンピュータで実現するために、前記コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
【0107】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であってもよい。
【0108】
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RWなどがある。また、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などもある。
【0109】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続する。そして、前記ホームページから本発明のコンピュータプログラムそのもの、若しくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。
【0110】
また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
【0111】
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせる。そして、ダウンロードした鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
【0112】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。その他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【0113】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部又は全部を行い、その処理によっても前述した実施形態の機能が実現される。
【0114】
なお、前述した実施形態は、本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。即ち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。