図1を参照して、本発明の実施形態における情報処理システムの構成の一例について説明する。
図1に示すように、本発明における情報処理システムの各種装置はネットワーク150を介して通信可能に接続されている(各機器は接続可能な状態にある)。例えばPC100は、HMD101(HMD101A~HMD101Cの総称)と通信可能に接続されている。
PC100には、HMD101により撮像される現実画像に重畳する3次元モデル(CGモデル/仮想オブジェクト)が記憶されている。
また、PC100は、自機の管理するHMD101(図1におけるHMD101A~101C)より現実画像を取得して、記憶部に記憶する。また、PC100はHMD101の位置姿勢を特定し、記憶する。HMD101の位置姿勢の特定方法は、特許文献1に記載されている、HMD101の撮像した現実画像中の二次元マーカを用いて特定可能である。
また、特許文献2に記載されている、センサ(例えば図1における光学式センサ104(赤外線センサ))がHMD101に設置された光マーカ103(赤外線マーカ)の位置姿勢をHMD101の位置姿勢として検出し、それをPC100が取得することで特定可能である。光マーカ103は、例えば図1に示すようにHMD101に3つ設置されている。これら3つの光マーカ103の位置を光学式センサ104で特定し、PC100が、予め自機に記憶されている、HMD101のどの位置に(HMD101の位置から見てどの位置に)これら3つの光マーカ103が設置されているかを示す情報と、光学式センサ104で特定された3つの光マーカ103の位置を用いて、HMDの位置姿勢を特定する。
PC100では、HMD101の位置姿勢と、記憶部に記憶されている3次元モデル及び3次元モデルの位置姿勢の情報を用いて、現実画像に3次元モデルを重畳した複合現実画像を生成する。そして、当該複合現実画像をHMD101のディスプレイに表示させるべく、HMD101に送信する。HMD101は受信した複合現実画像をディスプレイに表示する。以上が図1の説明である。
次に図2を参照して、本発明の実施形態における、各種装置のハードウェア構成の一例について説明する。
CPU201は、システムバス204に接続される各デバイスやコントローラを統括的に制御する。
また、ROM202には、CPU201の制御プログラムであるBIOS(Basic Input / OutputSystem)やオペレーティングシステム(OS)、その他各種装置の実行する機能を実現するために必要な各種プログラムが記憶されている。
RAM203は、CPU201の主メモリ、ワークエリア等として機能する。CPU201は、処理の実行に際して必要なプログラム等をRAM203にロードして、プログラムを実行することで各種動作を実現するものである。
本発明のPC100が後述する各種処理を実行するために用いられる各種プログラム等は外部メモリ211に記録されており、必要に応じてRAM203にロードされることによりCPU201によって実行されるものである。さらに、本発明に係わるプログラムが用いる定義ファイルや各種情報テーブルは外部メモリ211に格納されている。
入力コントローラ(入力C)205は、キーボードやマウス等のポインティングデバイス(入力デバイス209)からの入力を制御する。
ビデオコントローラ(VC)206は、HMD101が備える右目・左目ディスプレイ222等の表示器への表示を制御する。右目・左目ディスプレイ222に対しては、例えば外部出力端子(例えば、Digital Visual Interface)を用いて出力される。また、右目・左目ディスプレイ222は、右目用のディスプレイと左目用のディスプレイとから構成されている。また、入力コントローラ(入力C)205は、PC100の備えるディスプレイ210(CRTディスプレイ等)の表示器への表示を制御する。なお、図2では、表示器はCRTディスプレイだけでなく、液晶ディスプレイ等の他の表示器であってもよい。
メモリコントローラ(MC)207は、ブートプログラム、ブラウザソフトウエア、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル、各種データ等を記憶するハードディスク(HD)やフレキシブルディスク(FD)或いはPCMCIAカードスロットにアダプタを介して接続されるカード型メモリ等の外部メモリ211へのアクセスを制御する。
通信I/Fコントローラ(通信I/FC)208は、ネットワークを介して、外部機器と接続・通信するものであり、ネットワークでの通信制御処理を実行する。例えば、TCP/IPを用いたインターネット通信等が可能である。また、通信I/Fコントローラ208は、ギガビットイーサネット(登録商標)等を通じて光学式センサ104との通信も制御する。
汎用バス212は、HMD101の右目・左目ビデオカメラ221からの映像を取り込むために使用される。右目・左目ビデオカメラ221からは、外部入力端子(例えば、IEEE1394端子)を用いて入力される。右目・左目ビデオカメラ221は、右目用のビデオカメラと左目用のビデオカメラとから構成されている。
尚、CPU201は、例えばRAM203内の表示情報用領域へアウトラインフォントの展開(ラスタライズ)処理を実行することにより、ディスプレイ上での表示を可能としている。また、CPU201は、ディスプレイ上の不図示のマウスカーソル等でのユーザ指示を可能とする。以上が図2の説明である。
次に図3を参照して、本発明の実施形態における各種装置の機能構成の一例について説明する。
現実画像送信部301は、HMD101の備えるカメラ装置を用いて撮像した現実画像をPC100に送信する送信部である。
現実画像受信・記憶部311は、HMD101より現実画像を受信して記憶する記憶部である。現実画像受信・記憶部311が記憶する現実画像の一例を図6の630に示す。HMD位置姿勢特定部312は、HMD101の位置姿勢を特定して記憶する。
3Dモデル記憶部313は、仮想のオブジェクト(仮想オブジェクト)である3Dモデルを、当該3Dモデルの位置姿勢と対応付けて記憶する記憶部である。当該3Dモデル記憶部313が記憶する3Dモデルの情報の一例を図6の620に示す。
干渉モデル特定部314は、3Dモデル記憶部313が記憶する複数の3Dモデルの形状と位置姿勢から、他の仮想モデルと干渉(接触・衝突)している3Dモデル(干渉モデル/干渉オブジェクトともいう)を特定する特定部である。干渉点特定部315は、干渉中の3Dモデルの最外面上の点であり、他の3Dモデルの最外面と干渉・接触している干渉点を特定する。
透明化対象モデル特定部316は、干渉中のモデルがHMD101を装着したユーザによく見えるように、例えば干渉中のモデル周囲のモデルを透明化すべく、透明化の対象とする3Dモデルを特定する。透明化画像生成制御部317は、透明化対象モデル特定部316で特定した3Dモデルを、透明化した画像を生成する生成部である。例えば、複合現実の生成に際して現実画像との重畳に用いる、HMD101の位置姿勢から見た3Dモデルの画像であって、透明化した画像(図6の描画データ640)を生成する。また、当該透明化した画像をHMD101から取得した現実画像に重畳した複合現実画像を生成する。当該透明化する際の透明度は、不図示の設定画面において任意に設定可能である。
透明化画像送信部318は、透明化画像(例:干渉中のモデルの周囲の3Dモデルを透明化した複合現実画像)をHMD101に送信する送信部である。
透明化画像受信部302は、透明化画像を受信し、透明化画像表示部303は、受信した透明化画像を表示する。以上が図3の説明である。
なお、本実施形態においては、311~318の処理部(その機能)をPC100が備えているが、例えばこれらの構成をHMD101自身が単体で備えるよう構成してもよいものとする。
次に図4を参照して、本発明の実施形態における、各種装置のモジュール構成の一例について説明する。
PC100は、オペレーティングシステム401(OS)、グラフィックエンジン402、複合現実感プラットフォーム403(MRプラットフォームともいう)、複合現実感アプリケーション404(MRアプリケーションやビューアアプリケーションともいう)で構成され、CPU201により制御されている。
オペレーティングシステム401は、HMD101の入出力を制御しカメラ221から入力インターフェースを介して得られた現実画像を複合現実感プラットフォーム403へ受け渡す。またグラフィックエンジン402で描画された複合現実画像を、出力インターフェースを介して、ディスプレイ222へ出力する。
グラフィックエンジン402は、外部メモリ211に記憶されている3次元モデルから描画する画像を生成し、現実画像に重畳し、合成する。描画に利用するエンジンは、例えば、OpenGLやDirectXなどの広く利用されているグラフィックエンジンでも、独自に開発したグラフィックエンジンでもよい。なお、本実施形態ではグラフィックライブラリとしてOpenGLを利用するものとする。
複合現実感プラットフォーム403は、光学式センサ104から光マーカ103の位置を取得することでHMD101の位置姿勢を特定し、現実空間と仮想空間の位置合わせを行う。なお、位置姿勢や位置合わせの技術は、既知の技術として開示されている、特開2002-32784、特開2006-072903、特開2007-166427等を用いて実現することが可能である。
なお、二次元マーカを使用せずに、HMD101に位置センサを備え、この位置センサを用いて三角測量により計測された位置をもとに、HMD101の位置や姿勢を特定して実現することも可能である。
複合現実感アプリケーション404は、複合現実感プラットフォーム403からHMD101の位置姿勢、3次元モデルの形状の情報、位置姿勢の情報を受け付け、グラフィックエンジン402に対して、3次元モデルの描画命令を発行する。この時、OpenGLのAPIを用いて、描画する3次元モデルの識別情報、位置姿勢の情報を設定した命令を発行する。以上が図4の説明である。
<第1の実施形態>
次に図5を参照して、本発明の第1の実施形態における複合現実画像の生成及び表示処理について説明する。
PC100のCPU201は、複合現実感アプリケーション404の起動操作を受け付ける。図5のステップS504以降の処理は、複合現実感アプリケーション404が起動されることで、複合現実感アプリケーション404、複合現実感プラットフォーム403、グラフィックエンジン402、OS401によって開始・実行される。また、複合現実感アプリケーション404の終了操作を受け付け、複合現実感アプリケーション404が終了する場合に終了される。
HMD101は、ステップS501で起動後、カメラ221の機能を用いて現実画像の撮像を開始する(ステップS502)。そして、撮像処理によって取得した現実画像をPC100に送信する(ステップS503)。
PC100のCPU201はHMD101より現実画像を受信し(ステップS504/現実画像取得手段に該当)、受信した現実画像を外部メモリ211に記憶する(ステップS505)。例えば、図6の現実画像テーブル630に示すように、現実画像の送信元のHMD101の識別情報であるHMD ID631と、現実画像632とを対応付けて記憶する。
PC100のCPU201は、HMD101の位置姿勢を取得して(ステップS506)、外部メモリ211に記憶する(ステップS507)。例えば、図6のHMD情報610に示すように、HMD101の識別情報であるHMD ID611と、当該HMDの位置612(X,Y,Z座標)、姿勢613(X,Y,Z座標の値により表現されるHMD101の向いている方向)を記憶する。
PC100のCPU201は、外部メモリ211から3Dモデルの情報を取得し、HMD101から受信した現実画像に重畳して複合現実画像を生成して(ステップS508)、HMD101に送信する(ステップS509)。ステップS508の詳細は図7の説明で後述する。
3Dモデルの情報は、例えば図6のモデル情報620に示す情報である。モデル情報620は、予めPC100の外部メモリ211に記憶されている情報である。モデルID621は3Dモデルの識別情報である。モデル名622は、3Dモデルのファイル名である。ファイルパス623は、ファイルが記憶されている場所を示す。位置624、姿勢625は3Dモデルの位置姿勢を示す。
PC100のCPU201は、HMDの位置612・姿勢613から、HMD101と同じ画角を持つカメラが、位置624・姿勢625の3Dモデルを撮像した場合の、当該3Dモデルの画像を描画データ640として生成する。そして、当該描画データを現実画像と合成することで、図6のMR画像テーブル650に示す複合現実画像(MR画像)を生成する。また、MR画像テーブル650の、複合現実画像を生成するために用いた現実画像の送信元のHMD(HMD ID651)と対応付けて記憶する。その後、HMD ID651の示すHMD101に、複合現実画像652を送信する。
HMD101は、PC100から複合現実画像を受信し(ステップS510)、表示画面に表示する(ステップS511)。以上が図5の説明である。
次に図7を参照して、本発明の実施形態における、複合現実画像の生成処理の詳細について説明する。
第1の実施形態では、他の3Dモデルと干渉中の3Dモデル(干渉モデル)の周辺にある他の3Dモデルを透明化することで、ユーザに干渉モデルを見え易くする。
PC100のCPU201は、自機の外部メモリに記憶されているモデル情報620(図6)をメモリ上に読み出して、HMD101の画角に含まれる3Dモデル、つまり、HMD101から取得した現実画像上に重畳して表示すべき3Dモデルのモデル情報を特定してメモリ上にリスト(干渉情報1010)として保持する(ステップS701)。例えば、図10の干渉情報1010のテーブルを生成し、モデルID1011に当該特定したモデルのIDを記憶する。なお、干渉先モデル1012、干渉点1013の値は消去する。
PC100のCPU201は、自機の外部メモリに記憶されている図10の干渉表示モード1050の値を参照し、干渉表示モードが設定されているか判定する(ステップS702)。干渉表示モードとは、干渉モデルが見え易くなるように、干渉モデルを除く他の3Dモデルの表示を変化させる(例:透明にする等)モードである(モード設定手段に該当)。干渉表示モード1050の値がONである場合に干渉表示モードが設定されていると判定する。干渉表示モード1050の値がOFFである場合には干渉表示モードが設定されていないと判定する。
干渉表示モードが設定されている場合(ステップS702でYES)、PC100のCPU201は、リスト内の全ての3Dモデルに対してステップS703~S705の処理を実行する。干渉表示モードが設定されている場合は(ステップS702でNO)、後述するステップS709に処理を移行する。ステップS702からステップS709に移行した場合には、PC100のCPU201はステップS709で、HMD101の画角内に入る全ての3Dモデルを透明度0%で表示すべく、透明度0%の3Dモデルの描画データを生成して、メモリ上に記憶する。そして、ステップS710で、当該描画データと現実画像とを合成して複合現実画像を生成する。例えば図12の1200に現実画像1103とモデル1101を合成した複合現実画像の一例を示す。実際には図11の1100に示すように、1200で表示されているモデル1101の中に別のモデル1102が位置しているものとする。
PC100のCPU201は、ステップS702で生成・記憶したリスト内から未処理のモデル情報を1つ取得し(ステップS703)、当該モデル情報の示す3Dモデルが他のモデルと干渉しているか判定する(ステップS704/干渉オブジェクト特定手段に該当)。3Dモデル同士の干渉は、ファイルパス623に保存されているモデル名622のモデルを読み出して特定するモデルの3D形状と、当該モデル位置624、姿勢625(位置姿勢)を用いて特定・判定する。
3Dモデル同士が干渉するケースとして、例えば3Dモデルの位置624がユーザ操作によって変更された場合が想定される。また、図11の1110及び1120に示すように、モデル1111の形状が1121のように更新・変更されたことにより(図11においてはモデル1111にパイプ型の立体形状1122が追加されているため)、変更前の時点では接触・干渉していなかったモデル1112と干渉するようになってしまうことが考えられる。
他のモデルと干渉していると判定した場合には、干渉している当該他のモデルのモデルIDを取得して、ステップS703で取得して他のモデルと干渉していると判定された3DモデルのモデルIDに対応付けて記憶する。例えば、干渉情報1010の干渉先モデル1012に、当該他のモデルのモデルIDを挿入して記憶する。また、各干渉モデルの最外面上の位置であって、干渉モデル同士が干渉・接触している点を干渉点(3Dモデル同士が干渉している位置)として特定し、干渉点1013に記憶する(ステップS705)。
干渉情報1010のモデルID1011に示す3Dモデルの全てに対してステップS703~S705の処理を行った後、処理をステップS706に移行する。
PC100のCPU201は、干渉モデル(他のモデルと干渉中の3Dモデル)の色を、干渉中を示す色(干渉中であることが識別可能な色)に変更する。当該干渉中を示す色とは、例えば赤色であるものとする。具体的には、HMD101の画角及び位置姿勢と当該干渉モデルの位置姿勢に基づいて、HMD101の位置姿勢から当該干渉モデルを撮像した場合の赤色の干渉モデルの画像データを、図6に示す描画データ640としてメモリ上に生成・記憶する(ステップS706)。当該干渉モデルの色変更及び描画データの生成を、全ての干渉モデルに対して実行し、処理をステップS707に移行する。
PC100のCPU201は、各干渉モデルの干渉点から所定範囲に位置する、干渉モデル以外の3Dモデルを特定して記憶する(ステップS707)。例えば図10の範囲内モデル1030に示すように、モデルIDのリストをメモリ上に生成して記憶する。ここでいう所定範囲とは、PC100の外部メモリ上の、任意の範囲1020(図10)に予め記憶されている半径から特定する。
図10によれば、干渉点から半径20cmの範囲(領域)を当該所定範囲として特定する。任意の範囲1020は、不図示の設定画面を介してユーザ操作を受け付けることで、任意に設定・変更可能である。
PC100のCPU201は、干渉点から所定範囲内に位置する3Dモデルを外部メモリから取得して、当該3Dモデルの色を透明色に変更する。つまり、干渉モデルの周囲にある3Dモデルを透明化する(ステップS708)。例えば、図12の1210における1213に示すように、干渉点から距離1220(任意の範囲)以内にある3Dモデルを透明にする。つまり、干渉点1221の周囲にある3Dモデルを透明にすることで、干渉モデルであるモデル1111とモデル1112をユーザに見え易くした複合現実画像を生成して、表示画面に表示することが可能となる。
なお、どの程度透明にするかは、任意に設定・変更可能であるものとする。例えば、図10の透明度1040に示すように、ステップS708において3Dモデルをどの程度透明にするかを示す情報を外部メモリに記憶しておく。透明度1040に値が挿入されている場合は、ステップS708において、干渉点から所定範囲内に位置するモデルを、透明度1040に示す値の透明度に変更する。
具体的には、HMD101の画角及び位置姿勢と範囲内モデル1030の3Dモデルの位置姿勢に基づいて、HMD101の位置姿勢から当該所定範囲内の3Dモデルを撮像した場合の、透明化した3Dモデルの画像データを、図6に示す描画データ640としてメモリ上に生成・記憶する。干渉点から所定範囲内に位置する、干渉モデル以外の全ての3Dモデル(範囲内モデル1030に記憶されている全てのモデル)に対して、当該透明化及び描画データの生成を実行し、処理をステップS709に移行する。
PC100のCPU201は、HMD101の画面上に表示すべき3Dモデルであって、干渉モデルでもなく、範囲内モデル1030に記憶されている3Dモデルでもない、通常の3Dモデルを特定する。具体的には、干渉情報1010の中で、干渉先モデルにモデルIDが挿入されていない3Dモデルであって、範囲内モデル1030に含まれていないモデルIDの3Dモデルを、通常のモデルとして特定する。PC100のCPU201は、HMD101の画角・位置姿勢と、特定した当該通常のモデルの位置姿勢とに基づいて、当該通常のモデルをHMD101の画角・位置姿勢で撮像した場合の当該通常のモデルの画像(描画データ640)を透明度=0%で生成してメモリ上に記憶する(ステップS709)。
PC100のCPU201は、干渉モデルの描画データ、範囲内モデルの描画データ、通常モデルの描画データを、HMD101から取得してメモリに記憶している現実画像に重畳してMR画像(複合現実画像)を生成する(ステップS710)。以上が図7の説明である。
以上説明したように、本発明の第1の実施形態によれば、複合現実において、物体同士の干渉をユーザに容易に確認させることができる仕組みを提供することができる。
例えば、他の3Dモデルと干渉中の3Dモデル(干渉モデル)の周辺にある他の3Dモデルを透明化することで、干渉モデルを見え易くした画像を生成し、表示画面においてユーザに確認させることができる。
<第2の実施形態>
次に図8を参照して、本発明の第2の実施形態における、複合現実画像の生成処理の詳細について説明する。
第2の実施形態では、他の3Dモデルと干渉中の3Dモデル(干渉モデル)と、HMDとの間にある他の3Dモデルを透明化することで、ユーザに干渉モデルを見え易くする。
例えば、干渉点とHMDとの間にある他の3Dモデルを透明化することで、ユーザに干渉モデルを見え易くする。
図8の処理は、第1の実施形態における図7のステップS706の処理の直後にPC100のCPU201が実行する。なお、第1の実施形態と共通する処理については説明を省略する。
PC100のCPU201は、干渉モデルを見え易くするために、干渉点から任意の範囲内(所定距離内)にある他の3Dモデルを透明化するモードと、干渉点とHMD101との間に位置する他の3Dモデルを透明化するモードのどちらが設定されているか判定する(ステップS801)。当該モードは、PC100の外部メモリに記憶されている図10の透明化モード1070に予め設定されているものとする。
干渉点から任意の範囲内にある他の3Dモデルを透明化するモードが設定されている場合は処理を図7のステップS707に移行する。干渉点とHMD101との間に位置する他の3Dモデルを透明化するモードが設定されている場合には、処理をステップS802に移行する。
PC100のCPU201は、全ての干渉点に対してステップS803~S805の処理を実行する。
PC100のCPU201は、干渉情報1010から未処理の干渉点1013を1つ取得し(ステップS803)、HMD101の位置と取得した干渉点1013の示す干渉点の位置との間に位置する、干渉モデル以外の3Dモデルを、透明化する対象のモデルとして特定し、メモリ上に記憶する(ステップS804)。例えば、図13の1311に示すようにHMD101の位置から干渉点までの直線を生成する。そして、位置624、姿勢625に配置した場合に当該直線との交点1312を持つ(直線と交わる)3Dモデルであって、干渉モデル以外の3Dモデルを全て特定し、特定された3DモデルのモデルIDを、図10のHMD・干渉点間モデル1060に示す形式でメモリ上に記憶する。図13においては、ボンネットの3Dモデル1301が、HMD101と干渉点との間にある3Dモデルとして特定される。
PC100のCPU201は、取得した干渉点とHMD101との間にある、干渉モデルを除く全ての他の3Dモデル(HMD・干渉点間モデル1060内の全てのモデル)を透明化する。具体的には、当該他の3Dモデルを、透明度1040の値で透明化した画像(描画データ)を生成し、メモリ上に記憶する。描画データとは、HMD101の画角で、HMD101の位置姿勢から位置624・姿勢625の3Dモデルを撮影した場合の、当該3Dモデルの画像である。そして当該描画データをステップS710で現実画像に合成して複合現実画像を生成する。例えば、図13の1310に示すように、1300において透明化されていなかったボンネットの3Dモデル1301を、HMD101と干渉点との間にあるモデルとして特定して透明化し、複合現実画像を生成する。1310においては、透明化したモデル1301を点線で記載している。
PC100のCPU201は、全ての干渉点1013と、その干渉点とHMD101の間にある全ての他の3Dモデルに対してステップS803~S805の処理を実行した後、処理を図7のステップS709に移行する。以上が図8の説明である。
以上説明したように、本発明の第2の実施形態によれば、複合現実において、物体同士の干渉をユーザに容易に確認させることができる仕組みを提供することができる。
例えば、他の3Dモデルと干渉中の3Dモデル(干渉モデル)と、HMDとの間にある他の3Dモデルを透明化することで、ユーザに干渉モデルを見え易くすることができる。
例えば、干渉点とHMDとの間にある他の3Dモデルを透明化することで、ユーザに干渉モデルを見え易くすることができる。
なお、上述した第2の実施形態の説明においては、干渉点とHMDとの間にある干渉モデル以外の他の3Dモデルを透明化するものとしたが、例えば各干渉モデルとHMDとの間に位置する、干渉モデル以外の他の3Dモデルを透明化するようにしてもよい。具体的には、図8のステップS803~S805の処理を全ての干渉モデルに対して実行する。ステップS803では、未処理の干渉モデルを干渉情報1010から1つ取得する。ステップS804において、ステップS803で取得した干渉モデルの位置624とHMD101の位置とを結ぶ直線と交わる(干渉モデルとHMDの間にある)干渉モデル以外の他の3Dモデルを特定し、特定した3DモデルをステップS805で透明化する。全ての干渉モデルに対してステップS803~S805の処理を適用することで、各干渉モデルとHMDとの間に位置する、干渉モデル以外の他の3Dモデルを透明化することができる。
<第3の実施形態>
次に図9を参照して、本発明の第3の実施形態における、複合現実画像の生成処理の詳細について説明する。
第3の実施形態では、干渉中の3Dモデル(干渉モデル)が、他の3Dモデルの内側、又は背面にある場合に、当該干渉モデル以外の他の3Dモデルを透明化することで、ユーザに干渉モデルを見え易くする。
図9の処理は、第1の実施形態における図7のステップS706の処理の直前にPC100のCPU201が実行する。なお、第1の実施形態及び第2の実施形態と共通する処理については説明を省略する。
PC100のCPU201は、干渉モデルの色を干渉中であることを示す色に変更する(ステップS901)。ステップS901の処理の詳細は図7のステップS706の処理と同じであるため、詳細な説明は省略する。PC100のCPU201は、干渉モデルのうち、未処理のモデルを1つ取得し(ステップ902)、処理をステップS903に移行する。
PC100のCPU201は、ステップS902で取得した干渉モデルが、当該干渉モデル以外の他の3Dモデルの内側に位置する、又は、HMD101の位置姿勢から見て当該干渉モデル以外の他の3Dモデルの背面に位置し、一部又はその全部が当該他の3Dモデルによって隠れている干渉モデルかを判定する(ステップS903)。
例えば、位置624に、姿勢625の方向で配置された、当該干渉モデル自体よりも大きい(縦横高さの全ての寸法が干渉モデルよりも大きい)他の3Dモデルの中に、干渉モデルが包含される場合に、当該干渉モデルが他の3Dモデルの内側に位置すると判定する。
また、例えば、描画データを作成して現実画像上に重畳する場合に、干渉モデルの上に重なって描画される他の3Dモデルがある場合に、当該干渉モデルが、当該他の3Dモデルの背面にあると判定する。
PC100のCPU201は、ステップS902で取得した干渉モデルが、当該干渉モデル以外の他の3Dモデルの内側に位置するモデルではない(最も外側のモデルである)、且つ、HMD101の位置姿勢から見て当該干渉モデル以外の他の3Dモデルの背面に位置し、一部又はその全部が当該他の3Dモデルによって隠れている干渉モデルでもないと判定された場合に、処理をステップS906に移行する。
PC100のCPU201は、ステップS902で取得した干渉モデルが、当該干渉モデル以外の他の3Dモデルの内側に位置する、又は、HMD101の位置姿勢から見て当該干渉モデル以外の他の3Dモデルの背面に位置し、一部又はその全部が当該他の3Dモデルによって隠れている干渉モデルであると判定された場合に、処理をステップS904に移行する。
ステップS904でPC100のCPU201は、ステップS902で取得した干渉モデルの干渉点から任意の範囲内にある全ての他の3Dモデルを特定し(ステップS904)、特定した全ての他の3Dモデルを透明化する(ステップS905)。ステップS904とステップS905の処理の詳細は、それぞれ図7のステップS707、ステップS708の処理と同じであるため、詳細な説明は省略する。
PC100のCPU201は、全ての干渉モデルに対して、ステップS903~S905の処理を適用したか判定し(ステップS906)、未適用の干渉モデルが存在する場合は処理をステップS902に移行して、未処理の干渉モデルを1つ取得し、ステップS903以降の処理を適用する。全ての干渉モデルに対して、ステップS903~S905の処理を適用済みの場合は処理を図7のステップS709に移行する。以上が図9の説明である。
図14の1400に、干渉モデルであるモデル1111とモデル1112がモデル1101に内包されている様子を示す(干渉点の周囲のモデルを透明化した様子を示す)。また、1410に、干渉モデルであるモデル1411と、モデル1101が最外面のモデルである様子を示す(干渉モデルを識別表示するに留めた表示の様子を示す)。なお、図14の1410においては、干渉モデル1411と、干渉モデル1101のうち干渉モデル1411と接触した立体形状である1412のみを識別表示している。
以上説明したように、本発明の第3の実施形態によれば、複合現実において、物体同士の干渉をユーザに容易に確認させることができる仕組みを提供することができる。
例えば、干渉中の3Dモデル(干渉モデル)が、他の3Dモデルの内側、又は背面にある場合に、当該干渉モデル以外の他の3Dモデルを透明化することで、ユーザに干渉モデルを見え易くする。
干渉モデルが他の3Dモデルによって隠れていない場合、他の3Dモデルの表示形態を変更しなくてもユーザが干渉モデルを確認可能である場合がある。第3の実施形態においては、他の3Dモデルの不要な表示形態・状態の変更を行うことなく、干渉モデルが他の3Dモデルによって隠れて見え難くなっている場合に限り、当該干渉モデル以外の他の3Dモデルの表示形態・状態を変更することで、ユーザに干渉モデルを見え易くするものである。
<第4の実施形態>
本発明の第4の実施形態について説明する。第4の実施形態では、設計データ(設計物)である3Dモデルに設計変更があったことで、当該3Dモデルが他の3Dモデルと干渉するようになってしまった場合に、当該干渉するようになってしまった3Dモデル(干渉モデル)以外の他の3Dモデルを透明化し、干渉モデルをユーザに見え易くする。
PC100のCPU201は、複合現実感アプリケーション404の終了操作(複合現実画像の生成及び表示の終了を指示するユーザ操作)を受け付けた場合に、当該終了操作を受け付けた時点のモデル情報を外部メモリに記憶する。当該モデル情報とは、図6の620に示す情報に加え、図10の1080に示す、最終更新日時1082、設計履歴1083を含む。本実施形態においてモデル名622の示すファイルはCADファイルであり、3DモデルはCADデータである。最終更新日時1082、設計履歴1083は、各CADデータの中に記憶されている、ファイルの最終更新日時と、設計履歴の情報である。つまり、PC100のCPU201は、複合現実画像の生成及び表示の終了を指示するユーザ操作を受け付けた場合に、モデル情報620の示す全てのCADデータを外部メモリの所定の領域にコピーして記憶する。
PC100のCPU201は、図5の処理を再開すべく、複合現実感アプリケーション404の起動操作を受け付けた場合に、外部メモリに記憶された、前回終了時のモデル情報(図6の620及び図10の1080)をメモリ上に読み出して保持する。そして、ステップS701で、描画対象のモデルを特定するためにメモリ上に読み出した最新のモデル情報(図6の620及び図10の1090)を取得し、各モデルについて、前回終了時のモデル情報の最終更新日時1082と、最新のモデル情報の最終更新日時1092が同じか判定する。
PC100のCPU201は、最終更新日時が異なると判定されたモデルを特定し、それらのモデルの設計履歴が異なるか(変更されているか)判定する。例えば図10によれば、今回起動時のモデルに、前回終了時のモデルには無い「面押し01」の設計履歴が追加されている。よって、設計履歴が異なる(更新されている)と判定する(設計変更判定手段に該当)。
なお、設計履歴の数、識別情報が同じ場合であっても、設計履歴の中身のパラメータが更新されている場合がある。ここでは設計履歴の数、識別情報が異なるか否かを判定するに留めるが、各設計履歴のパラメータを参照して、パラメータの変更があった場合に前回終了時と今回起動時の設計履歴が異なると判定してもよい。
PC100のCPU201は、設計履歴の変更があったか否かの情報(図10の設計変更情報1000における設計変更1002)をモデルID1001ごとにメモリ上に記憶する。
PC100のCPU201は、図7のステップS703~S705の処理を、HMD101の画角内の3Dモデルのうち、設計変更1002が「設計変更あり」を示す、前回から設計変更がされた3Dモデルに限定して、当該前回から設計変更がされた3Dモデルに対して実行する。
設計変更がされた3Dモデルに限定して、干渉モデルの特定及び、当該干渉モデルを見え易くすべく、当該干渉モデル以外のモデルの表示形態・状態を変更することで、設計変更がされたことにより他のモデルと干渉するようになった可能性のあるモデルを、ユーザに容易に確認させることができる。以上が第4の実施形態の説明である。
なお、上述した第4の実施形態の説明においては、3Dモデルの設計履歴のデータを比較することで設計変更の有無を判定したが、例えば前回複合現実感アプリケーションが終了した時点での3Dモデルの外形形状と、今回起動時の3Dモデルの外形形状とを比較して、形状が異なる場合に設計変更があったと判定するようにしてもよい。
以上説明したように、本発明の第4の実施形態によれば、複合現実において、物体同士の干渉をユーザに容易に確認させることができる。
例えば、設計変更のあった3Dモデルが干渉モデルになった場合に、当該干渉モデルを除く他の干渉モデルの表示形態・状態を変更することで、当該干渉モデルをユーザに見え易く表示することができる。
以上説明したように、本発明の各実施形態によれば、複合現実において、物体同士の干渉をユーザに容易に確認させることができる。
なお、上述した実施形態においては、干渉モデル以外のモデルを透明化することで、干渉モデルを確認し易く表示するものとしたが、例えば、干渉モデル以外の他のモデルを、干渉モデルが見え易くなる位置に移動させることで、当該干渉モデルを確認し易く表示するようにしてもよい。
例えば、図15に示すように、干渉点から任意の範囲内にあるモデル又は干渉点とHMD101の間にあるモデル1301を1500に示す本来のモデル1301の位置から、1510に示す干渉点から所定距離離れた位置に移動(位置変更)する。具体的には、図7のステップS708において、干渉点を中心に球状の3Dモデルを配置し、当該球状の3Dモデルの法線ベクトルの示す方向に、モデル1301の位置を、予めPC100の外部メモリに記憶されている所定距離分離れた位置に変更する。そして、当該位置変更された3Dモデルの描画データを生成し、処理をステップS709に移行する。
つまり、干渉モデル以外のモデルを移動させることで、当該干渉モデルを確認し易く表示することができる。
また、上述した実施形態の説明においては、仮想オブジェクトは3Dモデルであるものとしたが、例えば奥行きを持たない平面(2D)のモデルも仮想オブジェクトとして扱ってもよい。
また、上述した実施形態の説明においては、現実画像に3Dモデルを重畳した複合現実画像を生成し、HMD101において表示させるものとしたが、例えば透過型ディスプレイを備えるHMDである場合は、現実空間の状態はディスプレイの向こうに透けて見えるため必ずしもディスプレイ上に現実画像を表示する必要はない。よって、透過型ディスプレイを備えるHMDを用いる場合は、例えば現実画像を透明度100%(全く見えない状態)とし、3Dモデル(仮想オブジェクト)の描画データを透明化した現実画像上に重畳した画像を複合現実画像として生成し、透過型ディスプレイを備えるHMD101に送信するようにしてもよい。
また、上述した第1の実施形態の説明においては、干渉点から任意の範囲内にある他のモデルを特定して透明化するものとしたが、例えば、ステップS707のタイミングで、各干渉点を中心位置として、干渉点ごとに、任意の範囲を示す球状の3Dモデル(図10によれば半径20cmの球状の3Dモデル)を生成し、これら球状のモデルの内側には3Dモデルの描画データを描画・表示しないよう設定し、当該球状のモデルの前面のレイヤに干渉モデルを設定するようにしてもよい。こうすることで、干渉点を中心とした任意の範囲内の3Dモデルの画像は描画・表示されず、干渉モデルはユーザに視認可能に表示することのできる複合現実画像を生成できる。
また、上述した各実施形態は自由に組み合わせて実行可能であるものとする。
以上、本発明の各実施形態について示したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記録媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
例えば、図2に示すPC100の構成を全て備えるHMD101が、上述した実施形態においてPC100の実行するものとして説明した処理の全てを、実行するようにしてもよい。
また、本発明におけるプログラムは、図5、図7~図9に示すフローチャートの処理方法をコンピュータが実行可能なプログラムであり、本発明の記憶媒体は図5、図7~図9の処理方法をコンピュータが実行可能なプログラムが記憶されている。なお、本発明におけるプログラムは図1に示す各装置の処理方法ごとのプログラムであってもよい。
以上のように、前述した実施形態の機能を実現するプログラムを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムを読み出し実行することによっても、本発明の目的が達成されることは言うまでもない。
この場合、記録媒体から読み出されたプログラム自体が本発明の新規な機能を実現することになり、そのプログラムを記憶した記録媒体は本発明を構成することになる。
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD-ROM、CD-R、DVD-ROM、磁気テープ、不揮発性のメモリカード、ROM、EEPROM、シリコンディスク、ソリッドステートドライブ等を用いることができる。
また、コンピュータが読み出したプログラムを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
また、本発明は、複数の機器から構成されるシステムに適用しても、1つの機器からなる装置に適用してもよい。また、本発明は、システムあるいは装置にプログラムを供給することによって達成される場合にも適応できることは言うまでもない。この場合、本発明を達成するためのプログラムを格納した記録媒体を該システムあるいは装置に読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
さらに、本発明を達成するためのプログラムをネットワーク上のサーバ、データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
なお、上述した各実施形態およびその変形例を組み合わせた構成も全て本発明に含まれるものである。