(57)【特許請求の範囲】
【請求項１】
観察者の視点の位置姿勢に基づいて仮想空間の画像を生成する生成手段を有する画像処理装置であって、
前記観察者の特定部位の位置姿勢情報を取得する取得手段と、
１以上の仮想物体を配した仮想空間中に前記特定部位を模した特定部位仮想物体を前記位置姿勢情報に基づいて配置した後の仮想空間の画像を生成した場合に、当該画像上で、前記特定部位仮想物体の領域と、前記特定部位仮想物体以外の他仮想物体の領域とに重なりが生じるか否かを判断する判断手段と、
前記重なりが生じると判断された場合には、前記他仮想物体と前記特定部位仮想物体とを配置した仮想空間の画像を生成するよう前記生成手段を制御し、
前記重なりが生じないと判断された場合には、前記他仮想物体のみを配置した仮想空間の画像を生成するよう前記生成手段を制御する制御手段と
を備えることを特徴とする画像処理装置。
【請求項２】
前記判断手段は、
前記特定部位仮想物体のみを配置した仮想空間の画像を生成すると共に、当該画像を構成する各画素の奥行き値を２次元データ配列として第１のメモリに記録する第１の手段と、
前記他仮想物体のみを配置した仮想空間の画像を生成すると共に、当該画像を構成する各画素の奥行き値を２次元データ配列として第２のメモリに記録する第２の手段と、
前記他仮想物体と前記特定部位仮想物体とを配置した仮想空間の画像上で、前記特定部位仮想物体の領域と、前記他仮想物体の領域とに重なりが生じるか否かを、前記第１のメモリに記録した２次元データ配列と前記第２のメモリに記録した２次元データ配列とを用いて判断する第３の手段と
を備えることを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記第１の手段は、前記特定部位仮想物体のみを配置した仮想空間の画像において、前記特定部位仮想物体の領域以外の領域を構成する各画素の奥行き値として０を記録することを特徴とする請求項２に記載の画像処理装置。
【請求項４】
前記第２の手段は、前記他仮想物体のみを配置した仮想空間の画像において、前記他仮想物体の領域以外の領域を構成する各画素の奥行き値として０を記録することを特徴とする請求項２又は３に記載の画像処理装置。
【請求項５】
前記第３の手段は、前記第１のメモリに記録されている２次元データ配列において非０の配列要素が記録されている位置に対応する、前記第２のメモリに記録されている２次元データ配列における位置に非０の配列要素が記録されている場合、
前記他仮想物体と前記特定部位仮想物体とを配置した仮想空間の画像上で、前記特定部位仮想物体の領域と、前記他仮想物体の領域とに重なりが生じると判断することを特徴とする請求項２乃至４の何れか１項に記載の画像処理装置。
【請求項６】
前記第３の手段は、前記第１のメモリに記録されている２次元データ配列における非０の配列要素の値が、前記第２のメモリに記録されている２次元データ配列において当該配列要素と同じ位置に記録されている配列要素の値以下である場合、
前記他仮想物体と前記特定部位仮想物体とを配置した仮想空間の画像上で、前記特定部位仮想物体の領域と、前記他仮想物体の領域とに重なりが生じると判断することを特徴とする請求項２乃至４の何れか１項に記載の画像処理装置。
【請求項７】
観察者の視点の位置姿勢に基づいて仮想空間の画像を生成する生成手段を有する画像処理装置が行う画像処理方法であって、
前記画像処理装置の取得手段が、前記観察者の特定部位の位置姿勢情報を取得する取得工程と、
前記画像処理装置の判断手段が、１以上の仮想物体を配した仮想空間中に前記特定部位を模した特定部位仮想物体を前記位置姿勢情報に基づいて配置した後の仮想空間の画像を生成した場合に、当該画像上で、前記特定部位仮想物体の領域と、前記特定部位仮想物体以外の他仮想物体の領域とに重なりが生じるか否かを判断する判断工程と、
前記画像処理装置の制御手段が、前記重なりが生じると判断された場合には、前記他仮想物体と前記特定部位仮想物体とを配置した仮想空間の画像を生成するよう前記生成手段を制御し、
前記重なりが生じないと判断された場合には、前記他仮想物体のみを配置した仮想空間の画像を生成するよう前記生成手段を制御する制御工程と
を備えることを特徴とする画像処理方法。
【請求項８】
コンピュータを請求項１乃至６の何れか１項に記載の画像処理装置が有する各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、現実空間と仮想空間とを合成した複合現実空間を提供するための技術に関するものである。
【背景技術】
【０００２】
従来より、現実世界の映像と三次元モデリングされたCGによる映像とを重畳して表示し、あたかも現実世界にCGで描かれた物体（仮想物体）が存在しているかのように見せる複合現実感(MR : Mixed Reality)提示システムが存在する。
【０００３】
係るシステムは、現実世界の映像を撮影するための現実映像撮影部と、現実映像撮影部の位置姿勢から見たCG映像を作り出すCG映像生成部と、それぞれの映像を合成して表示する映像表示部とからなる。更に係るシステムは、現実映像撮影部の視点の位置姿勢が変わった場合でもCG映像と現実世界の映像との位置関係を正しく表示する為に、現実映像撮影部の視点の位置姿勢を検出する為の視点位置姿勢検出部（例えば位置姿勢センサ）を備える。
【０００４】
現実空間の映像を撮影する現実映像撮影部は、たとえばビデオカメラであり、自身の視線方向における現実世界の映像を撮影し、撮影した現実世界の映像をメモリ中にキャプチャする。
【０００５】
CG映像生成部は、三次元モデリングされたCGを、現実世界と同じスケールの仮想空間に配置し、視点位置姿勢検出部によって検出された視点の位置姿勢から観察されたものとして仮想シーンをレンダリングする。
【０００６】
このようにして生成されたCG映像と現実映像撮影部によって撮影された現実世界の映像とを合成すると、結果として、どのような位置姿勢の視点から観察した場合でも、現実世界の中にＣＧが配置されているような映像を表示することができる。ＣＧのデータの読み込み、ＣＧの配置の変更、アニメーション等は、一般的なＣＧ表示システムと同様の手法を用いて行うことができる。
【０００７】
また、ＣＧの配置位置を指定するためにさらなる位置姿勢センサを用い、位置姿勢センサによる計測値が示す位置姿勢にＣＧを描画することも可能である。係る構成では、位置姿勢センサを手に持ち、位置姿勢センサによって指定された位置姿勢にＣＧを表示して観察することも従来から行われている。
【０００８】
現実世界の映像とCG映像とを合成して表示する映像表示装置には、例えばＨＭＤ（ヘッドマウントディスプレイ）が用いられる。通常のモニタでなくＨＭＤを用い、さらに上記ビデオカメラをＨＭＤの視線方向に装着することで、観察者が向いている方向の映像をＨＭＤに映し出すことができ、且つその方向を向いたときのCG映像の描画も行えるため、観察者の没入感を高めることができる。
【０００９】
複合現実感提示システムにおける映像表示装置とは、上記のような映像表示装置に、現実世界の映像とＣＧ映像とを合成した画像（ＭＲ画像）を表示するものである。なお、映像表示装置は、前面の様子をそのままシースルーで観察できるような、光学シースルー式と呼ばれるＨＭＤであってもよい。この場合は先に説明した現実映像撮影部は、ビデオ撮影によるものではなく光学的にＨＭＤ前面を表示装置にそのまま映し出すものとなる。このようなタイプのＨＭＤでは、観察者の前面の風景はディジタル処理なしでそのままシースルーで観察でき、さらにその画面上にＣＧを表示することができる。
【００１０】
視点位置姿勢検出部としては、例えば磁気方式の位置姿勢センサ等が用いられる。そのような位置姿勢センサを上記現実映像撮影部であるところのビデオカメラ（またはビデオカメラが取り付けられているＨＭＤ）に取り付けることで、視点の位置姿勢を検出することができる。磁気方式の位置姿勢センサとは、磁気発生装置（発信機）と磁気センサ（受信機）との間の相対位置姿勢を検出するものでり、受信機の３次元位置(X,Y,Z)と姿勢(Roll, Pitch, Yaw)をリアルタイムに検出する装置である。
【００１１】
上記の構成により、観察者はＨＭＤ等の映像表示装置を通じて、現実世界の映像とCG映像とが合成されたＭＲ画像を観察することができる。観察者が周囲を見回すと、ＨＭＤに備え付けられた現実映像撮影部（ビデオカメラ）が現実世界の映像を撮影し、ＨＭＤに備え付けられた視点位置姿勢検出部（位置姿勢センサ）がビデオカメラの位置や視線方向を検出する。そして、CG映像生成部がビデオカメラから見たCG映像をレンダリングし、これを現実世界の映像に合成して表示することが可能である。
【００１２】
複合現実感提示システムでは、現実の物体にＣＧを重畳することが可能である。例えば、特許文献１に開示されているゲームでは、ユーザの持つ対話操作入力装置に剣や武器などの三次元ＣＧを重畳表示することで、ユーザが自由に仮想の物体（この場合は剣や武器）を操ることを可能にしている。
【００１３】
従来の一般的な複合現実感提示方法では、現実世界の映像上にＣＧ映像を重ねて合成するだけであり、現実に存在する物体とＣＧとの奥行き関係は考慮されていないことがある。そのため、観察者がＣＧの手前に自分の手をかざしても、自分の手は見えずに、手の奥にあるＣＧが手前にあるかのように表示されてしまうといった問題がある。
【００１４】
図２Ａは、ＨＭＤを頭部に装着した観察者と、この観察者が観察している仮想物体とを示す図である。図２Ａにおいて観察者２００は自身の頭部にＨＭＤ２０１を装着しており、自身の手２０３を自身の視界に入れながら仮想物体２０２を観察している。
【００１５】
図２Ｂは、観察者２００が自身の手２０３を自身の視界に入れながら仮想物体２０２を観察している場合に、ＨＭＤ２０１に表示される画像の一例を示す図である。図２Ｂに示す如く、２０４はＨＭＤ２０１に表示される画像であり、係る画像２０４中には、手２０３が写っており、係る手２０３は、仮想物体２０２によって隠されている。図２Ｂでは、隠されている手２０３を点線で示している。
【００１６】
仮想物体２０２と手２０３との奥行き関係からすれば、手２０３は仮想物体２０２の手前に描画されるべきである。しかし、ＣＧ映像は現実空間の映像上に重ねて合成するため、本来手２０３が描画されるべき領域には仮想物体２０２が描画されてしまう。仮想物体２０２に隠れていない手首の部分はそのまま現実の映像が見えるが、仮想物体２０２に隠れている指先部分は観察できない。
【００１７】
ここで、現実物体の奥行き情報をリアルタイムで計測すれば、仮想物体と現実物体との奥行き関係を正しく表示することは可能である。しかし、現実物体の奥行き情報をリアルタイムで計測するために用いる装置は大掛かり且つ高価であり、更に、奥行き情報の解像度が足りずに仮想物体と現実物体との重なりの輪郭が正しく見えなかったりする。
【００１８】
また、現実物体の色が特定の色であることが期待できる場合は、画像上で係る特定の色を判定することでマスク画像を作り、係るマスク画像を用いてＣＧ映像にマスクをかけ、現実物体が表示されるべき場所にはＣＧ映像を描画しない方法も取られることがある。例えば、手の重なりが問題となる場合は、現実世界の映像中の肌色のエリアを判定することでマスク画像を作ることができる。しかしこの場合は逆に、仮想物体の奥に現実物体があったとしても現実物体が手前に見えてしまったり、同じ色の現実物体はすべて仮想物体の手前に見えてしまう、という難点がある。
【００１９】
そこで、このような仮想物体と現実物体との重なり表示の問題を簡便な方法で解決する方法のひとつとして、次ようなものがある。即ち、現実物体(例えば自分の手)に位置姿勢センサを取り付け、係る位置姿勢センサが計測した位置姿勢にあわせて現実物体の形状を模した仮想物体を配置し、現実物体と仮想物体とを重ねる。それぞれの仮想物体の奥行き関係はどちらもＣＧなので正しく表示される。現実物体と仮想物体の形状や位置関係は完全に一致するわけではないため、現実物体と仮想物体とが完全に重なって表示されるわけではない（ずれて見える）という問題はあるが、おおむね現実物体の位置に正しい前後関係で仮想物体が表示されることになる。
【００２０】
このような構成を用いて、図２Ａに示したように、仮想物体２０２の手前に自身の手２０３を配置した場合、ＨＭＤ２０１に表示される画像は、図２Ｃに示したように、手２０３の位置に手２０３を模した仮想物体２０６を配置した画像となる。係る仮想物体２０６は、仮想物体２０２の手前に位置している。仮想物体２０６の位置姿勢は、観察者２００の手に取り付けられた位置姿勢センサによる計測値に基づいて変化する。図２Ｃは、手２０３の位置に手２０３を模した仮想物体２０６を配置した画像の一例を示す図である。
【特許文献１】特開２０００−３５３２４８号公報
【発明の開示】
【発明が解決しようとする課題】
【００２１】
従来のような現実物体に仮想物体を重ねるシステムでは、次のような問題があった。即ち、現実物体を模した仮想物体（図２Ｃでは仮想物体２０６）と、その他の仮想物体（図２Ｃでは仮想物体２０２）とが、観察者から見て重なっていない場合に、現実物体と、現実物体を模した仮想物体と、で位置や形状のズレが目立ってしまう。これにより、見た目上の違和感が生じるといった問題が生じる。
【００２２】
図３は、図２Ｃに示した画像の状態から、観察者が手２０３を右に移動させた場合にＨＭＤに表示される画像の例を示す図である。手２０３の位置姿勢の計測誤差が原因で、図３に示す如く、観察者の手２０３と、この手２０３を模した仮想物体２０６とは、ずれてＨＭＤに表示されている。２０７はＨＭＤに表示される画像で、係る画像２０７内には、観察者の手２０３と仮想物体２０２とが映っていると共に、手２０３を模した仮想物体２０６が手２０３とはずれて映っている。
【００２３】
また、現実の手２０３の形状と手の仮想物体２０６の形状との違いが原因となり、手の仮想物体２０６から現実の手２０３がはみ出して見えることがあり、違和感が生じるという場合もある。
【００２４】
本発明は以上の問題に鑑みてなされたものであり、現実物体上に、この現実物体を模した仮想物体を重畳表示させる場合に、好適な重畳表示を実施する為の技術を提供することを目的とする。
【課題を解決するための手段】
【００２５】
本発明の目的を達成するために、例えば、本発明の画像処理装置は以下の構成を備える。
【００２６】
即ち、観察者の視点の位置姿勢に基づいて仮想空間の画像を生成する生成手段を有する画像処理装置であって、
前記観察者の特定部位の位置姿勢情報を取得する取得手段と、
１以上の仮想物体を配した仮想空間中に前記特定部位を模した特定部位仮想物体を前記位置姿勢情報に基づいて配置した後の仮想空間の画像を生成した場合に、当該画像上で、前記特定部位仮想物体の領域と、前記特定部位仮想物体以外の他仮想物体の領域とに重なりが生じるか否かを判断する判断手段と、
前記重なりが生じると判断された場合には、前記他仮想物体と前記特定部位仮想物体とを配置した仮想空間の画像を生成するよう前記生成手段を制御し、
前記重なりが生じないと判断された場合には、前記他仮想物体のみを配置した仮想空間の画像を生成するよう前記生成手段を制御する制御手段と
を備えることを特徴とする。
【００２７】
本発明の目的を達成するために、例えば、本発明の画像処理方法は以下の構成を備える。
【００２８】
即ち、観察者の視点の位置姿勢に基づいて仮想空間の画像を生成する生成手段を有する画像処理装置が行う画像処理方法であって、
前記画像処理装置の取得手段が、前記観察者の特定部位の位置姿勢情報を取得する取得工程と、
前記画像処理装置の判断手段が、１以上の仮想物体を配した仮想空間中に前記特定部位を模した特定部位仮想物体を前記位置姿勢情報に基づいて配置した後の仮想空間の画像を生成した場合に、当該画像上で、前記特定部位仮想物体の領域と、前記特定部位仮想物体以外の他仮想物体の領域とに重なりが生じるか否かを判断する判断工程と、
前記画像処理装置の制御手段が、前記重なりが生じると判断された場合には、前記他仮想物体と前記特定部位仮想物体とを配置した仮想空間の画像を生成するよう前記生成手段を制御し、
前記重なりが生じないと判断された場合には、前記他仮想物体のみを配置した仮想空間の画像を生成するよう前記生成手段を制御する制御工程と
を備えることを特徴とする。
【発明の効果】
【００２９】
本発明の構成によれば、現実物体上に、この現実物体を模した仮想物体を重畳表示させる場合に、好適な重畳表示を実施することができる。
【発明を実施するための最良の形態】
【００３０】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載の構成の具体的な実施例の１つである。
【００３１】
図１は、本実施形態に係るシステムのハードウェア構成例を示すブロック図である。図１に示す如く、本実施形態に係るシステムは、ＨＭＤ１０４、位置姿勢センサ１０９、センサコントローラ１０３、コンピュータ（画像処理装置）１９０、により構成されている。
【００３２】
先ず、ＨＭＤ１０４について説明する。
【００３３】
ＨＭＤ１０４には、ビデオカメラ１０５、位置姿勢センサ１０８が取り付けてある。
【００３４】
ビデオカメラ１０５は、現実空間の動画像を撮像するもので、撮像した各フレームの画像（現実空間画像）は、後段のコンピュータ１９０に対して送出される。
【００３５】
位置姿勢センサ１０８は、自身の位置姿勢を計測するもので、計測した結果は、センサコントローラ１０３に送出される。センサコントローラ１０３は、位置姿勢センサ１０８による計測結果に基づいて位置姿勢センサ１０８の位置姿勢情報を生成し、後段のコンピュータ１９０に送出する。ここで、位置姿勢センサ１０８、センサコントローラ１０３には様々なセンサシステムを用いることができるが、例えば、磁気センサシステムを用いる場合、位置姿勢センサ１０８、センサコントローラ１０３は次のように動作する。
【００３６】
現実空間の所定の位置には、センサコントローラ１０３により駆動制御されるトランスミッタが配置される。トランスミッタは、センサコントローラ１０３による駆動制御により、周囲に磁界を発生させる。位置姿勢センサ１０８は、自身の位置姿勢に応じて磁界の変化を検知し、検知した結果をセンサコントローラ１０３に送出する。センサコントローラ１０３は、位置姿勢センサ１０８から送出された検知結果に基づいて、センサ座標系における位置姿勢センサ１０８の位置姿勢情報を求める。ここで、センサ座標系とは、トランスミッタの位置を原点とし、係る原点で互いに直交する３軸をそれぞれｘ軸、ｙ軸、ｚ軸とする座標系のことである。そしてセンサコントローラ１０３は、求めた位置姿勢情報をコンピュータ１９０に対して送出する。
【００３７】
このように、位置姿勢センサ１０８の位置姿勢情報を求めることができるのであれば、如何なる方法を用いても良い。また最終的にはビデオカメラ１０５の位置姿勢情報を求めるので、ビデオカメラ１０５の位置姿勢情報を直接求めることができるでのあれば、位置姿勢センサ１０８を用いなくても良い。例えばビデオカメラ１０５による撮像画像を用いてビデオカメラ１０５の位置姿勢情報を求める公知の方法等を用いても良い。
【００３８】
次に、位置姿勢センサ１０９について説明する。
【００３９】
位置姿勢センサ１０９は、観察者の特定部位（本実施形態では手）に装着し、係る特定部位の位置姿勢を計測するためのもので、位置姿勢センサ１０８と同様に動作する。即ち、位置姿勢センサ１０９は、自身の位置姿勢（手の位置姿勢）を計測し、その計測結果はセンサコントローラ１０３に送出する。センサコントローラ１０３は、係る計測結果に基づいて、位置姿勢センサ１０９の位置姿勢情報を生成し、生成した位置姿勢情報をコンピュータ１９０に送出する。従って、位置姿勢センサ１０９についても位置姿勢センサ１０８と同様、磁気センサやその他のセンサを適用することができる。なお、本実施形態では位置姿勢センサ１０８と位置姿勢センサ１０９とは同じセンサシステムで、それぞれセンサコントローラ１０３に接続されているものとして説明するが、それぞれ異なるセンサシステムであっても良い。
【００４０】
また本実施形態では、１つの特定部位の位置姿勢を計測するので、１つの位置姿勢センサ１０９のみをセンサコントローラ１０３に接続している。しかし、複数の部位の位置姿勢を計測するのであれば、位置姿勢を計測するそれぞれの部位に位置姿勢センサを取り付け、そしてそれぞれの位置姿勢センサをセンサコントローラ１０３に接続すればよい。この場合、センサコントローラ１０３はそれぞれの位置姿勢センサの位置姿勢情報を生成し、コンピュータ１９０に送出することになる。もちろん、複数の部位のそれぞれの位置姿勢情報の取得方法については特に限定するものではない。
【００４１】
次に、コンピュータ１９０について説明する。コンピュータ１９０は、ＣＰＵ１０１、メモリ１０６，１０７、Ｉ／Ｆ（インターフェース）１９１，１９２を有し、それぞれはバス１０２に接続されている。なお、図１には、コンピュータ１９０の主要な構成のみを示しており、コンピュータ１９０全体の構成を示しているわけではない。
【００４２】
ＣＰＵ１０１は、メモリ１０７に格納されている様々なデータ、メモリ１０６に格納されている様々なプログラムを用いて、コンピュータ１９０が行うものとして後述する各処理を実行する。また、ＣＰＵ１０１は、処理を行う過程で、適宜メモリ１０７に対してデータを出力する。
【００４３】
メモリ１０６には、後述する各プログラム１１０〜１１４が格納されている。なお、各プログラム１１０〜１１４以外にも、コンピュータ１９０が行うものとして後述する処理でコンピュータ１９０が用いる様々なプログラムに関してもメモリ１０６に格納されているものとする。
【００４４】
メモリ１０７には、ＨＭＤ１０４を頭部に装着する観察者の視点の位置姿勢情報である視点位置姿勢データ１２１、観察者の手の位置姿勢情報である手の位置姿勢データ１２２、仮想空間を構成するためのデータである仮想シーンデータ１２６が格納されている。仮想シーンデータ１２６について詳しくは後述する。更に、メモリ１０７には、現実画像メモリ１２０、ＣＧ画像メモリ１２３、Ｚ１バッファ１２４（第１のメモリ）、Ｚ２バッファ１２５（第２のメモリ）、という４つの記憶領域が設けられている。なお、各データ１２１，１２２，１２６以外に、コンピュータ１９０が行うものとして後述する処理でコンピュータ１９０が用いる様々なデータに関してもメモリ１０７に格納されているものとする。
【００４５】
なお、メモリ１０６，１０７が保持しているものとして説明した上記の各情報は、図１に示したようにそれぞれのメモリ１０６，１０７内に保持されていなくても良い。即ち、それぞれの情報がどのようにしてメモリ１０６，１０７の何れに保持されるのかについては特に限定するものではない。また、それぞれのメモリ１０６、１０７内には、適宜新たな記憶領域が設定されることもある。また、メモリ１０６，１０７を１つのメモリに統合しても良い。
【００４６】
Ｉ／Ｆ１９１は、ＨＭＤ１０４が有する表示部、ビデオカメラ１０５をコンピュータ１９０に接続する為のものである。コンピュータ１９０が後述の処理で生成する合成画像は、このＩ／Ｆ１９１を介してＨＭＤ１０４の表示部に送出される。また、ビデオカメラ１０５が撮像した各フレームの現実空間画像は、このＩ／Ｆ１９１を介してコンピュータ１９０内に入力される。
【００４７】
Ｉ／Ｆ１９２は、センサコントローラ１０３をコンピュータ１９０に接続する為のもので、センサコントローラ１０３が求めた位置姿勢情報は、このＩ／Ｆ１９２を介してコンピュータ１９０内に入力される。
【００４８】
次に、メモリ１０７内に格納されている仮想シーンデータ１２６について説明する。仮想シーンデータ１２６は上述の通り、仮想空間を構成する様々な要素についてのデータであり、例えば、仮想物体についてのデータ、光源についてのデータ、を含む。
【００４９】
本実施形態では、観察者の手を模した仮想物体（手仮想物体）のデータと、それ以外の１以上の仮想物体（観察対象仮想物体、他仮想物体）のデータと、仮想空間中に配する光源のデータが、仮想シーンデータ１２６に含まれているものとする。仮想物体のデータは、例えば仮想物体がポリゴンで構成されている場合には、ポリゴンの法線ベクトルデータ、ポリゴンの色データ、ポリゴンを構成する各頂点の座標値データ、またテクスチャマッピングを行う場合にはテクスチャマップデータを含む。光源のデータは、光源の位置姿勢データ、光源の種類データ、光源の色データなどが含まれる。
【００５０】
また、本実施形態では、仮想空間（仮想シーン）を、周知のシーングラフでもって管理している。係るシーングラフのデータもまた、仮想シーンデータ１２６に含まれている。図５は、シーングラフの一部の構成例を示す図である。図５では、手仮想物体と観察対象仮想物体についての管理構成を示している。即ち、シーングラフには、図５に示した構成の他にも、例えば光源のノードなどが含まれるのが一般的である。図５には、以下の説明で必要なもののみを示しており、その他の構成については省略している。
【００５１】
図５において５０１はルート（ｒｏｏｔ）ノードで、係るノード５０１の下に手仮想物体、観察対象仮想物体を管理している。図５において、５０２，５０４，５０６が手仮想物体についてのノードであり、５０３，５０５，５０７が観察対象仮想物体についてのノードである。
【００５２】
５０２は、手仮想物体の位置姿勢を示すノードである。５０３は、観察対象仮想物体の位置姿勢を示すノードである。５０４は、手仮想物体を表示対象とするか否か（仮想空間中に配置するか否か）を示すノードである。５０５は、観察対象仮想物体を表示対象とするか否か（仮想空間中に配置するか否か）を示すノードである。５０６は、手仮想物体のジオメトリ情報やマテリアル情報（手仮想物体のデータ）に対するノードである。５０７は、観察対象仮想物体のジオメトリ情報やマテリアル情報（観察対象仮想物体のデータ）に対するノードである。
【００５３】
このように、手仮想物体、観察対象仮想物体はシーングラフによって管理されている。
【００５４】
次に、コンピュータ１９０が、仮想空間画像と現実空間画像との合成画像を生成してＨＭＤ１０４に送出するために行う一連の処理について、同処理のフローチャートを示す図４を用いて説明する。なお、図４のフローチャートに従った処理をＣＰＵ１０１に実行させるためのプログラムやデータは、メモリ１０６やメモリ１０７に格納されている。従って、ＣＰＵ１０１が係るプログラムやデータを用いて処理を実行することで、コンピュータ１９０は、図４のフローチャートに従った処理を実行することになる。
【００５５】
先ず、ステップＳ４０１では、ＣＰＵ１０１は、現実映像撮影プログラム１１０を実行する。現実映像撮影プログラム１１０を実行することで、ＣＰＵ１０１は、ビデオカメラ１０５からＩ／Ｆ１９１を介してコンピュータ１９０内に入力された現実空間画像のデータをメモリ１０７内の現実画像メモリ１２０に格納する。
【００５６】
次にステップＳ４０２では、ＣＰＵ１０１は、位置姿勢検出プログラム１１１を実行する。位置姿勢検出プログラム１１１を実行することで、ＣＰＵ１０１は、センサコントローラ１０３から送出される、位置姿勢センサ１０８の位置姿勢情報を取得する。そして、係る位置姿勢情報に、ビデオカメラ１０５と位置姿勢センサ１０８との位置姿勢関係を示す位置姿勢関係情報を加えることで、ビデオカメラ１０５（視点）の位置姿勢情報を求める。係る位置姿勢関係情報は予め求めておき、メモリ１０７に格納しておく。そして、このようにして求めた視点の位置姿勢情報を、視点位置姿勢データ１２１としてメモリ１０７に格納する。
【００５７】
次にステップＳ４０３では、ＣＰＵ１０１は、位置姿勢検出プログラム１１１を実行する。位置姿勢検出プログラム１１１を実行することで、ＣＰＵ１０１は、センサコントローラ１０３から送出される、位置姿勢センサ１０９の位置姿勢情報を取得し、これを手の位置姿勢データ１２２としてメモリ１０７に格納する。
【００５８】
次にステップＳ４０４では、ステップＳ４０３で取得した位置姿勢センサ１０９の位置姿勢情報を、手の位置姿勢情報として、シーングラフに設定する。図５の場合、ステップＳ４０３で取得した位置姿勢情報を、ノード５０２に設定する。
【００５９】
次にステップＳ４０５では、ＣＰＵ１０１は、重なり判定プログラム１１２を実行する。これにより、視点位置姿勢データ１２１が示す位置姿勢を有する視点から見た、手仮想物体と観察対象仮想物体とを配した仮想空間の画像を生成した場合に、この画像上で、手仮想物体の領域と観察対象仮想物体の領域とに重なりが生じているか否かを判断する。ステップＳ４０５における処理の詳細については図６を用いて後述する。
【００６０】
そしてステップＳ４０５における判断処理の結果、重なりが生じていると判断された場合には処理をステップＳ４０７に進め、重なりは生じていないと判断された場合には、処理をステップＳ４０６に進める。
【００６１】
ステップＳ４０７では、ＣＰＵ１０１は、手仮想物体を仮想空間中に配置させると判断する。図５では、手仮想物体に対するノード５０４に対してＯＮを設定する。
【００６２】
一方、ステップＳ４０６では、ＣＰＵ１０１は、手仮想物体を仮想空間中に配置させないと判断する。図５では、手仮想物体に対するノード５０４に対してＯＦＦを設定する。
【００６３】
次に、ステップＳ４０８では、ＣＰＵ１０１は、観察対象仮想物体を仮想空間中に配置させると判断する。図５では、観察対象仮想物体に対するノード５０５に対してＯＮを設定する。なお、観察対象仮想物体については配置／非配置の判断は行わずに、常に配置すると判断しても良い。
【００６４】
次にステップＳ４０９では、ＣＰＵ１０１は、ＣＧ映像生成プログラム１１３を実行する。ＣＧ映像生成プログラム１１３を実行することで、ＣＰＵ１０１は、ステップＳ４０２で取得した視点位置姿勢データ１２１が示す位置姿勢を有する視点から見える仮想空間の画像（仮想空間画像）を生成する。係る仮想空間には、１以上の観察対象仮想物体が配されている。更に、手仮想物体に対するノード５０４がＯＮに設定されている場合には、係る仮想空間中には手仮想物体が配されている。一方、手仮想物体に対するノード５０４がＯＦＦに設定されている場合には、係る仮想空間中には手仮想物体は配されていない。このように、仮想空間は、仮想シーンデータ１２６に基づいて構築されたものである。
【００６５】
そして、生成した仮想空間画像をメモリ１０７におけるＣＧ画像メモリ１２３に一旦格納する。そしてその後、現実画像メモリ１２０に格納されている現実空間画像と、ＣＧ画像メモリ１２３に格納されている仮想空間画像との合成画像を生成する。なお、現実空間画像と仮想空間画像との合成画像を生成するための技術については従来から様々な技術が提案されており、本実施形態では何れの技術を用いても良い。もちろん、用いる技術に応じて、コンピュータ１９０の構成は適宜変更しても良い。
【００６６】
次にステップＳ４１０では、ＣＰＵ１０１は、映像表示プログラム１１４を実行する。映像表示プログラム１１４を実行することで、ＣＰＵ１０１は、ステップＳ４０９で生成した合成画像のデータに基づいた映像信号を生成し、係る映像信号をＩ／Ｆ１９１を介してＨＭＤ１０４が有する表示部に対して送出する。これにより、ＨＭＤ１０４を頭部に装着した観察者の眼前には、係る合成画像が表示されることになる。
【００６７】
次に、コンピュータ１９０が有する不図示の操作入力装置を介して本処理の終了指示が入力されたことを検知した、若しくは、本処理の終了条件が満たされたことを検知した場合には、本処理はステップＳ４１１を介して終了する。一方、何れも検知されなかった場合には、本処理はステップＳ４１１を介してステップＳ４０１に戻り、以降の処理が繰り返される。
【００６８】
次に、上記ステップＳ４０５における処理の詳細について、図６のフローチャートを用いて説明する。図６は、ステップＳ４０５における重なり判定処理の詳細を示すフローチャートである。
【００６９】
先ず、ステップＳ６０１では、メモリ１０７内に設けているＺバッファを初期化する。係る初期化では、Ｚバッファ内を０で埋める処理を行う。ここで、Ｚバッファとは周知の通り、ＣＧのレンダリング時に奥行き情報を保持する為の作業用バッファである。なお、Ｚバッファは何れのメモリ１０６，１０７に設けても良い。
【００７０】
次にステップＳ６０２では、シーングラフを操作し、手仮想物体は配置しないと設定し、観察対象仮想物体は配置すると設定する。即ち、図５では、手仮想物体に対するノード５０４にＯＦＦを設定し、観察対象仮想物体に対するノード５０５にはＯＮを設定する。
【００７１】
次に、ステップＳ６０３では、ＣＰＵ１０１は、ＣＧ映像生成プログラム１１３を実行する。これにより、ＣＰＵ１０１は、仮想シーンデータ１２６に基づいて、ステップＳ４０９で行った仮想空間画像生成処理と同様にして、仮想空間画像を生成する。なお、ステップＳ６０３で仮想空間画像を生成する場合、ステップＳ６０２にて設定したように、仮想空間中には観察対象仮想物体は配置するが、手仮想物体は配置していない。ここで、本ステップにおいて仮想空間画像を生成すると、生成した仮想空間画像上における観察対象仮想物体を構成する各画素の奥行き値が、Ｚバッファ内の対応する画素位置に記録される。即ち、Ｚバッファには、仮想空間画像において、観察対象仮想物体の領域以外の領域を構成する画素については０、観察対象仮想物体の領域を構成する各画素についてはその奥行き値を割り当てた２次元データ配列が記録されることになる。
【００７２】
次に、ステップＳ６０４では、この時点でのＺバッファが保持しているデータ（２次元データ配列）をそのまま、メモリ１０７内のＺ１バッファ１２４にコピーする（第１の手段）。
【００７３】
次に、ステップＳ６０５では、ステップＳ６０１と同様に、Ｚバッファを初期化する。
【００７４】
次に、ステップＳ６０６では、シーングラフを操作し、手仮想物体は配置すると設定し、観察対象仮想物体は配置しないと設定する。即ち、図５では、手仮想物体に対するノード５０４にＯＮを設定し、観察対象仮想物体に対するノード５０５にはＯＦＦを設定する。
【００７５】
次に、ステップＳ６０７では、ＣＰＵ１０１は、ＣＧ映像生成プログラム１１３を実行する。これにより、ＣＰＵ１０１は、仮想シーンデータ１２６に基づいて、ステップＳ４０９で行った仮想空間画像生成処理と同様にして、仮想空間画像を生成する。なお、ステップＳ６０７で仮想空間画像を生成する場合、ステップＳ６０６にて設定したように、仮想空間中には手仮想物体は配置するが、観察対象仮想物体は配置していない。ここで、本ステップにおいて仮想空間画像を生成すると、生成した仮想空間画像上における手仮想物体を構成する各画素の奥行き値が、Ｚバッファ内の対応する画素位置に記録される。即ち、Ｚバッファには、仮想空間画像において、手仮想物体の領域以外の領域を構成する画素については０、手仮想物体の領域を構成する各画素についてはその奥行き値を割り当てた２次元データ配列が記録されることになる。
【００７６】
次に、ステップＳ６０８では、この時点でのＺバッファが保持しているデータ（２次元データ配列）をそのまま、メモリ１０７内のＺ２バッファ１２５にコピーする（第２の手段）。
【００７７】
そして、ステップＳ６０９〜ステップＳ６１６では、Ｚ１バッファ１２４にコピーした２次元データ配列と、Ｚ２バッファ１２５にコピーした２次元データ配列と、を用いて、手仮想物体と観察対象仮想物体とが重なっているか否かを判断する（第３の手段）。
【００７８】
ステップＳ６０９では先ず、以下の処理で用いる変数Ｉ、Ｊを共に０に初期化する。
【００７９】
次にステップＳ６１０では、Ｚ１バッファ１２４内の２次元データ配列Ｚ１において位置（Ｉ，Ｊ）における配列要素Ｚ１（Ｉ，Ｊ）の値が０であるか否かを判断する。係る判断の結果、０ではない（非０）、即ち、配列要素Ｚ１（Ｉ，Ｊ）に奥行き値が記録されている場合には、処理をステップＳ６１１に進める。一方、ステップＳ６１０における判断の結果、０である、即ち、配列要素Ｚ１（Ｉ，Ｊ）に奥行き値が記録されていない場合には、処理をステップＳ６１２に進める。
【００８０】
次にステップＳ６１１では、Ｚ２バッファ１２５内の２次元データ配列Ｚ２において位置（Ｉ，Ｊ）における配列要素Ｚ２（Ｉ，Ｊ）の値が０であるか否かを判断する。係る判断の結果、０ではない、即ち、配列要素Ｚ２（Ｉ，Ｊ）に奥行き値が記録されている場合、仮想空間画像において位置（Ｉ，Ｊ）には、手仮想物体と観察対象仮想物体とが重なっていると判断することができる。従って、処理をステップＳ６２０に進め、重なりが生じていると判断（ＹＥＳ）し、処理を図４のステップＳ４０７に進める。一方、ステップＳ６１１における判断の結果、０である、即ち、配列要素Ｚ２（Ｉ，Ｊ）に奥行き値が記録されていない場合には、処理をステップＳ６１２に進める。
【００８１】
ステップＳ６１２では、変数Ｊの値を１つインクリメントする。
【００８２】
そしてステップＳ６１３では、ステップＳ６１２でインクリメント後の変数Ｊの値が、２次元データ配列の高さ方向の配列要素数Ｈ以上となったか否かを判断する。係る判断の結果、ステップＳ６１２でインクリメント後の変数Ｊの値が、２次元データ配列の高さ方向の配列要素数Ｈ未満である場合には処理をステップＳ６１０に進める。一方、ステップＳ６１２でインクリメント後の変数Ｊの値が、２次元データ配列の高さ方向の配列要素数Ｈ以上となった場合には、処理をステップＳ６１４に進める。
【００８３】
ステップＳ６１４では、変数Ｊの値を０に初期化する。
【００８４】
そしてステップＳ６１５では、現在の変数Ｉの値が、２次元データ配列の幅方向の配列要素Ｗ以上となったか否かを判断する。係る判断の結果、現在の変数Ｉの値が、２次元データ配列の幅方向の配列要素数Ｗ未満である場合には処理をステップＳ６１６に進める。
【００８５】
ステップＳ６１６では、変数Ｉの値を１つインクリメントし、その後、処理をステップＳ６１０に戻す。
【００８６】
一方、ステップＳ６１５における判断処理の結果、現在の変数Ｉの値が、２次元データ配列の幅方向の配列要素数Ｗ以上となった場合、仮想空間画像中の各画素位置で、手仮想物体と観察対象仮想物体とは重なっていないと判断することができる。従って、処理をステップＳ６３０に進め、重なりは生じていないと判断（ＮＯ）し、処理を図４のステップＳ４０６に進める。
【００８７】
なお、図６のフローチャートでは、仮想空間画像上で手仮想物体と観察対象仮想物体とが重なっているか否かを判断していた。しかし、ステップＳ６１１を削除し、ステップＳ６１０にて、配列要素Ｚ２（Ｉ，Ｊ）、Ｚ１（Ｉ，Ｊ）が、Ｚ２（Ｉ，Ｊ）＞Ｚ１（Ｉ，Ｊ）を満たすか否かを判断するようにしても良い。
【００８８】
そして、ステップＳ６１０においてＺ２（Ｉ，Ｊ）＞Ｚ１（Ｉ，Ｊ）であれば、処理をステップＳ６１２に進め、Ｚ２（Ｉ，Ｊ）≦Ｚ１（Ｉ，Ｊ）であれば（Ｚ２（Ｉ，Ｊ）の値がＺ１（Ｉ，Ｊ）の値以下であれば）、処理をステップＳ６２０に進める。
【００８９】
係る判断処理により、手仮想物体と観察対象仮想物体とが重なって見える位置関係にあっても、手仮想物体が観察対象仮想物体の奥にある場合には、重なりはないと判断し、手仮想物体が観察対象仮想物体の手前にある場合にのみ重なりはあると判断する。
【００９０】
このように、仮想空間画像上における手仮想物体と観察対象仮想物体との隠蔽関係に基づいて手仮想物体の描画の有無を制御する処理には様々な方法が考えられる。係る方法の趣旨は要は、次のようなものとなる。
【００９１】
即ち、１以上の仮想物体を配した仮想空間中に特定部位を模した特定部位仮想物体を配置した後の仮想空間の画像を生成した場合に、この画像上で特定部位仮想物体の領域と、特定部位仮想物体以外の仮想物体の領域とに重なりが生じるか否かを判断する。そして、重なりが生じると判断された場合には、１以上の仮想物体を配した仮想空間中に特定部位仮想物体を配置した後の仮想空間の画像を生成するよう、仮想空間画像の生成処理を制御する。一方、重なりが生じないと判断された場合には、１以上の仮想物体を配した仮想空間中に特定部位仮想物体を配置しない仮想空間の画像を生成するよう、仮想空間画像の生成処理を制御する。
【００９２】
以上の説明により、本実施形態によれば、観察者の手が観察対象仮想物体と重なっているか否かを、観察者の手の位置姿勢に配置した手仮想物体と観察対象仮想物体とが、観察者の視点から見て重なって見えるか否かで近似して判断している。観察者の手と観察対象仮想物体とが重なって見える場合には、図２Ｃに示す如く、観察者の手の位置姿勢で手仮想物体を配置することで、観察者の手と観察対象仮想物体との奥行きの不整合の問題を解決する。また、観察者の手と観察対象仮想物体とが重なって見えない場合には、図３を用いて上述したような違和感を生じさせないために、手仮想物体は配置しない。
【００９３】
また、本実施形態では、観察者の視点から見て、手仮想物体と観察対象仮想物体とに重なりが生じていない場合には、手仮想物体ははじめから表示しないものとした。しかし、重なりが生じてる／生じていないに関係なく、仮想物体を表示しても良い。しかし、重なりが生じていない場合には、手仮想物体の透明度を上げて、手仮想物体を見えにくくする、所謂仮想物体の透明度制御処理を行う。仮想物体の透明度を制御する技術については周知である。
【００９４】
また、ある時点では重なりが生じているために手仮想物体を表示しているものの、次の時点で重なりがなくなった場合、本実施形態ではいきなり手仮想物体が消えることになり、画面を観察している観察者には視覚的な変化が大きすぎることになる。そこで、重なりが生じなくなった時点でいきなり手仮想物体を非表示とするのではなく、手仮想物体の透明度を徐々に上げていくようにしても良い。これは、再度、重なりが生じた場合でも同様で、この場合には、徐々に透明度を下げていく。
【００９５】
これにより、画面を観察している観察者に与える視覚的な変化を小さくすることができる。
【００９６】
［その他の実施形態］
また、本発明の目的は、以下のようにすることによって達成されることはいうまでもない。即ち、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体（または記憶媒体）を、システムあるいは装置に供給する。係る記憶媒体は言うまでもなく、コンピュータ読み取り可能な記憶媒体である。そして、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記録媒体に格納されたプログラムコードを読み出し実行する。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成することになる。
【００９７】
また、コンピュータが読み出したプログラムコードを実行することにより、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行う。その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００９８】
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれたとする。その後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【００９９】
本発明を上記記録媒体に適用する場合、その記録媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。
【図面の簡単な説明】
【０１００】
【図１】本発明の第１の実施形態に係るシステムのハードウェア構成例を示すブロック図である。
【図２Ａ】ＨＭＤを頭部に装着した観察者と、この観察者が観察している仮想物体とを示す図である。
【図２Ｂ】観察者２００が自身の手２０３を自身の視界に入れながら仮想物体２０２を観察している場合に、ＨＭＤ２０１に表示される画像の一例を示す図である。
【図２Ｃ】手２０３の位置に手２０３を模した仮想物体２０６を配置した画像の一例を示す図である。
【図３】図２Ｃに示した画像の状態から、観察者が手２０３を右に移動させた場合にＨＭＤに表示される画像の例を示す図である。
【図４】コンピュータ１９０が、仮想空間画像と現実空間画像との合成画像を生成してＨＭＤ１０４に送出するために行う一連の処理のフローチャートである。
【図５】シーングラフの一部の構成例を示す図である。
【図６】ステップＳ４０５における重なり判定処理の詳細を示すフローチャートである。
【図１】
0004933406.tif 000002
【図２Ａ】
0004933406.tif 000003
【図２Ｂ】
0004933406.tif 000004
【図２Ｃ】
0004933406.tif 000005
【図３】
0004933406.tif 000006
【図４】
0004933406.tif 000007
【図５】
0004933406.tif 000008
【図６】
0004933406.tif 000009