以下、添付図面を参照し、本発明の好適な実施形態について説明する。ただし、この実施形態に記載されている構成要素はあくまでも例示であり、本発明の範囲をそれらのみに限定する趣旨のものではない。
[第1の実施形態]
本実施形態では、現実物体や仮想物体の影や写り込みを表現すべく、周知の光線追跡法を用いて仮想空間の画像(仮想空間画像)を生成する。そして、生成した仮想空間画像を現実空間画像の上に重畳させた合成画像を生成し、生成した合成画像を観察者に提示する。
しかし、現実空間と仮想空間とを融合したMR空間を観察する人間が、視覚情報から物体間の位置関係を正しく把握するためには、仮想物体だけでなく、現実物体の影や映り込みを正しく表現しなければならない。
そこで本実施形態では、仮想空間画像において現実物体の影や映り込みを正しく表現すべく、現実物体の形状を近似すべく組み合わせた複数の仮想要素で構成される近似仮想物体に光線が連続して交差した場合に、それ以降の光線の発生を制御する。
図1は、光線追跡法に基づいて光線をとばす場合に生じうる問題について説明する図である。図1では、現実物体としての手101が、あたかも仮想物体102に影を落としているかのように見せるために、手101の形状を近似すべく組み合わせた複数の仮想要素103を利用し、仮想物体102に影を落している情景を示している。
ここで、仮想要素103とは、手101の形状を複数の仮想物体で表現するために用いるもので、図1では、手101を仮想の球の集合として表している。即ち、図1では、1つの球が1つの仮想要素103に対応する。なお、図1では、全ての仮想要素103を示しているわけではなく、手101の一部を構成する仮想要素103のみを示しているが、実際にはサイズの異なる複数の仮想要素103でもって手101を構成している。
ここで、本実施形態に従って仮想空間画像を生成する際、仮想物体同士、現実物体同士、仮想物体と現実物体との間、のそれぞれで発生しうる影や写り込みの表現については以下のように対処する。
・仮想物体から仮想物体に対する影や写り込みは、一般的なレイトレーシングによる描画方法で表現する
・仮想物体から現実物体に対する影や写り込みは、仮想物体が近似仮想物体に影や映り込みの影響を及ぼすことで表現する。
・現実物体から仮想物体に対する影や写り込みは、近似仮想物体が仮想物体に影や映り込みの影響を及ぼすことで表現する
・現実物体から現実物体に対する影や写り込みは、近似仮想物体を利用せず、現実空間の画像をそのまま利用する
図1において104は、観察者の視点の位置姿勢で仮想空間中に配置された視点(仮想視点)である。そして光線追跡法によれば、生成する仮想空間画像の各画素に対応する光線を、係る仮想視点104から発生させる。発生させたうちの1本は、交点106で、仮想要素103と交差している。そして、交点106で反射した光線の経路を順次追跡することで、交点106に影響を及ぼす仮想光源105を探索する。そして係る光源探索の結果、反射光線は仮想光源105に到達する。ここで、交点106と仮想光源105との間には遮蔽物が存在しない。つまり、交点106に影響を及ぼす影や映り込みは存在しない。従って、仮想空間画像上における交点106に対応する画素については、仮想空間画像と同じ視点から撮影された現実空間の画像において位置的に対応する画素をそのまま使うことができる。
また、仮想視点104から発生させた光線のうちの1本は、交点107で、仮想要素103と交差している。そして、交点108は、交点107で反射した光線が仮想光源105に到達する前に、仮想要素103と交差した点である。この場合、仮想光源105から照射される光線は、仮想要素103により遮られるため、交点107に対応する仮想空間画像上の画素の画素値を決定するためには、仮想要素103の影の影響を考慮しなければならない。その結果、交点107に対応する仮想空間画像上の画素の画素値は、現実物体101によって仮想光源105からの光を遮られた分だけ暗くなる。つまり、交点107に対応する仮想空間画像上の画素の画素値を求める為に先ず、仮想要素103の影響を受けない状態における画素値を計算する(仮想要素103が存在しない場合の、仮想物体102上における交点107の位置の画素値を求める)。そしてその後、仮想要素103の影の影響を計算し、交点107の位置における最終的な画素値を決定する。
また、仮想視点104から発生させた光線のうちの1本は、交点109で、仮想要素103と交差している。そして、交点199は、交点109で反射した光線が仮想光源105に到達する前に、仮想要素103と交差した点である。この場合、仮想光源105から照射される光線は、仮想要素103により遮られるため、交点109に対応する仮想空間画像上の画素の画素値を決定するためには、仮想要素103の影の影響を考慮しなければならない。さらに、交点109は、現実空間における小指と薬指の”指の重なり”という現実物体同士の影の影響も受けているため、現実に見える暗さよりも更に暗い画素値になってしまう。そのため、実際には仮想の影計算を行わなくてもよい仮想物体上の交点で影計算を行ってしまうため、その部分が隣接画素と比べて一段と暗くなって違和感が生じ、臨場感を損なってしまう結果になる。
交点109のように、現実物体101内部に生じる現実の影の影響と、仮想要素103の影の影響と、が及ぼし合う部分は必要以上に暗くなるため、光学的に正しくない影の描画になってしまう。
図2は、光線追跡法に基づいて光線をとばす場合に生じうる問題について説明する図である。図2では、仮想物体102があたかも、現実物体としての手101に影を落としているかのように見せるために、手101の形状を近似すべく組み合わせた複数の仮想要素103を利用し、手101に影を落している情景を示している。つまり、図2では、手101と仮想物体102との関係は、図1に示した手101と仮想物体102との関係と逆になっている。
仮想視点104から発生させた光線のうちの1本は、交点201で、仮想要素103と交差している。そして、交点201で反射した後の光線の経路を順次追跡することで、交点201に影響を及ぼす仮想光源105を探索する。そして係る光源探索の結果、反射光線は仮想光源105に到達する。ここで、交点201と仮想光源105との間には遮蔽物が存在しない。つまり、交点201に影響を及ぼす影や映り込みは存在しない。従って、仮想空間画像上における交点201に対応する画素については、仮想空間画像と同じ視点から撮影された現実空間画像において位置的に対応する画素をそのまま使うことができる。
また、仮想視点104から発生させた光線のうちの1本は、交点202で、仮想要素103と交差する。そして、交点202で反射した後の光線は仮想光源105に到達する前に、仮想物体102と交差している。この場合、交点202に対する仮想光源105からの光線は、仮想物体102により遮られているため、交点202に対応する仮想空間画像上の画素の画素値を決定するためには、仮想物体102の影の影響を考慮しなければならない。つまり、交点202の画素の画素値を決定するためには、仮想空間画像と同じ視点から撮影された現実空間画像において位置的に対応する画素の画素値に、仮想物体102による影の影響の計算結果を加えた画素値を用いる。
また、仮想視点104から発生させた光線のうちの1本は、交点203で、仮想要素103と交差する。そして、交点203で反射した光線は、仮想光源105に到達する前に、仮想要素103と交差する。交点203は、手101の上でもセルフシャドウが発生している部分であり、現実空間画像上でも現実の影の影響を受けている部分である。ここで、交点203で反射した光線は再度仮想要素103と交差しているので、上述の説明に従えば、交点203における画素値は、次のようにして決まるはずである。即ち、仮想空間画像と同じ視点から撮影された現実空間画像において位置的に対応する画素の画素値に、仮想要素103の影の影響を加えた画素値が、交点203における画素値となる。しかし、このようにして交点203における画素値を決定すると、係る最終的な画素値は現実の影の影響を受けた現実空間画像の画素値に対して更に仮想空間画像における影の影響も加算されることになる。これにより、交点109と同様、交点203における画素値は、光学的に正しくない画素値になってしまう。
図3は、光線追跡法に基づいて光線をとばす場合に生じうる問題について説明する図である。図3では、仮想要素103内で生じたセルフシャドウによって光学的不整合が生じた例を示している。
現在の3次元計測技術や光源推定技術では、現実の環境を忠実に再現することは不可能に近い。そのため、仮想要素103を用いて構成する近似仮想物体の形状が、現実物体101の形状と厳密に等しくなるとは限らない。つまり、仮想光源の配置方法や、近似仮想物体の近似精度によっては、現実には存在しない仮想の影が、背景となる現実空間画像上に重畳されて描画されることがある。交点301は、仮想視点104から発生させた光線が、仮想要素103上で複数回内部反射したため、結果としてセルフシャドウが生じ、光学的不整合を引き起こした点である。
以上、図1〜3を用いて、光線追跡法に基づいて光線をとばす場合に生じうる問題、即ち、仮想要素103を仮想空間中に配してから、光線追跡法に基づいて光線を仮想視点から発生させる場合に生じうる問題について説明した。上述のように、交点109、交点203では共に、仮想視点104から発生した光線が連続して仮想要素103と交差したことに起因して不具合が生じている。
本実施形態では、仮想視点104から発生させた光線が仮想要素103に対して連続して交差した場合に生ずる光学的不整合性を解決する。
図4は、本実施形態に係る画像処理装置の機能構成を示すブロック図である。
仮想空間データベース(DB)401は、仮想物体の形状情報、位置姿勢情報、材質情報等の仮想物体情報、仮想光源情報、仮想視点情報、を含む様々な情報を記憶保持する為のデータベースである。仮想空間DB401が記憶保持する情報はユーザからの操作入力や、処理の流れに応じて適宜変更することができる。例えば、ユーザからの操作により仮想物体の位置姿勢情報や材質情報を変更することができる。即ち、仮想空間DB401には常に、仮想物体、視点、光源について最新の情報が記憶保持されている。
現実物体計測・推定部402は、現実物体の形状情報、位置姿勢情報、材質情報等の現実物体情報、仮想光源情報、を計測または推定する。そして推定した現実物体情報、仮想光源情報を仮想空間DB401に出力する。本実施形態では、現実物体測定・推定部402は、実写画像入力部403が取得した現実空間画像を用いてステレオマッチングを行うことで、奥行き推定を行う。そして現実物体測定・推定部402は、奥行き推定で得られた結果を元に、3次元の形状推定を行う。現実物体測定・推定部402が行う現実物体の計測・推定方法には、公知の技術を用いるため、現実物体測定・推定部402の動作についてのより詳細な説明は省略する。現実物体測定・推定部402の動作例としては、複数台のカメラを利用したステレオマッチングによる3次元復元や、3次元レンジファインダなどの計測機器を利用した計測・推定方法などが挙げられる。
実写画像入力部403は、現実空間画像と仮想空間画像との合成画像を観察するユーザの頭部に装着されたHMD(ヘッドマウントディスプレイ)、に備え付けられたビデオカメラが撮像した現実空間の画像を、データとして取得する。係るビデオカメラは、現実空間の動画像を撮像するもので、撮像した各フレームの画像(現実空間画像)は順次、実写画像入力部403に入力される。実写画像入力部403は、係るビデオカメラから受けた現実空間画像を、現実物体計測・推定部402と、画素値演算部407とに供給する。
視点位置姿勢制御部404は、上記ビデオカメラの位置姿勢情報(視点の位置姿勢情報)を取得し、取得した位置姿勢情報を、仮想空間中に設定する視点(仮想視点)の位置姿勢情報として設定する。視点位置姿勢制御部404がビデオカメラの位置姿勢情報を取得する方法には様々な方法がある。例えば、上記ビデオカメラに6自由度センサを取り付け、係る6自由度センサによる計測値に基づいてセンサコントローラが求めた仮想視点の位置姿勢情報を取得しても良い。また、現実空間中に2次元マーカを配置し、係る現実物体の画像を上記ビデオカメラから取得し、取得した現実空間画像を用いて仮想視点の位置姿勢情報を求めても良い。なお、仮想視点の位置姿勢情報を取得する為の方法として例示したこれら何れの方法についても周知の技術であるので、これ以上の詳細な説明は省略する。
レイ制御部405は、周知の光線追跡法(レイトレーシング)に従って、仮想光源から仮想視点に集光する光線情報を計算するために、仮想視点から光線を発生させ、その後の光線の経路を制御する。光線追跡法とは、仮想視点から仮想スクリーン上の画素を通過する光線と、仮想物体との交点、係る交点から仮想光源までの経路探索、を計算することによって、係る画素の画素値を算出するアルゴリズムである。光線追跡法の詳細については後述する。
さらにレイ制御部405は、光線が仮想物体と交差した際、交差した交点を起点とし、仮想物体の材質情報により影・反射・屈折を計算するための光線を新たに発生させる。ここで、仮想視点から発生する光線は1次レイと呼び、反射、屈折の回数により光線の次元数は大きくなる。つまり、1回反射した光線を2次レイと呼び、2回反射した光線を3次レイ、と呼ぶ。レイ制御部405は、光線が無限遠に飛んだ場合、仮想光源に辿り着いた場合、交差判定部406から停止命令を受理した場合、に、新たな光線の発生を停止する。
交差判定部406は、レイ制御部405で発生させた光線が、仮想空間中に配した仮想物体(仮想空間DB401に記憶保持されている仮想物体情報に基づいて配置される仮想物体)のうち、どの仮想物体と交差し、反射したのか、を判定する。そして交差判定部406は、光線が近似仮想物体に対して連続して交差したと判定した場合には、レイ制御部405に対して上記停止命令を通知する。
画素値演算部407は、交差判定部406による判定結果に基づいて、光線追跡法のアルゴリズムに則り、仮想視点から発生させた光線が交差する仮想スクリーン上の画素位置における画素値を計算する(詳細は後述)。画素値演算部407は、光線が何れの仮想物体とも交差しない場合、若しくは光線が近似仮想物体と交差するものの影や映り込みの影響が無い場合には、係る光線が仮想スクリーン上で交差する画素位置における画素値を次のように決定する。即ち、係る光線が仮想スクリーン上で交差する画素位置における画素値として、実写画像入力部403が取得した現実空間画像上で、係る画素位置に対応する画素位置における画素値を用いる。また、光線が近似仮想物体と交差した結果、影や映り込みの影響がある場合は、先ず、実写画像入力部403が取得した現実空間画像上で、係る光線が仮想スクリーン上で交差する画素位置に対応する画素位置の画素値を取得する。そして、取得した画素値に対して、影や映り込みの影響を加味した画素値を加えることで、最終的な画素値を決定する。
また、光線が仮想物体と交差したと判定し、かつ仮想光源からの光を遮蔽する遮蔽物が存在しなかった場合、その仮想物体の材質情報に基づいて反射屈折の計算を行う。そして、その計算結果に影計算の結果を加えた画素値を、係る光線が仮想スクリーン上で交差する画素位置における画素値として求める。この場合の計算は、周知の光線追跡法のアルゴリズムに従ったものとなる。
また、光線が仮想物体と交差したと判定し、かつ仮想光源からの光を近似仮想物体が遮蔽している場合、仮想物体に対する光線の反射・屈折を計算した後、近似仮想物体の影の影響を計算する。これにより、係る光線が仮想スクリーン上で交差する画素位置における画素値を求める。
また、光線が無限遠に飛んだと判定された場合は、実写画像入力部403が取得した現実空間画像上で、係る光線が仮想スクリーン上で交差する画素位置に対応する画素位置の画素値を取得する。そして、取得した画素値を、係る光線が仮想スクリーン上で交差する画素位置における画素値とする。
また、光線が近似仮想物体と交差し、かつ光源探索の過程で他の仮想物体により仮想光源が遮蔽されている場合は、実写画像入力部403が取得した現実空間画像上で、係る光線が仮想スクリーン上で交差する画素位置に対応する画素位置の画素値を取得する。そして、取得した画素値に対して、影や映り込みの影響を加味した画素値を加えることで、最終的な画素値を決定する。
なお、画素値演算部407は、このような画素値の決定(演算)処理を、仮想空間画像を構成する各画素(仮想スクリーン上の各画素)について行う。これにより、画素値演算部407は、1フレーム分の仮想空間画像を生成することができる。生成した仮想空間画像は、後段の画面出力部408に対して出力する。
画面出力部408は、画素値演算部407から受けた仮想空間画像を、先の現実空間画像と合成してから、上記HMDが有する表示装置に対して送出する。
図5は、本実施形態に係る画像処理装置が、光線追跡法に基づいて仮想空間画像を生成するための処理のフローチャートである。なお、本実施形態の画像処理装置は、図5に示したフローチャートに従った処理と並行して、現実空間画像を取得している。従って、本実施形態に係る画像処理装置が行う処理は、図5に示したフローチャートに従った処理だけではない。また、以下では、図5のフローチャートに従って行う処理のうち、光線が近似仮想物体と交差した場合に行う処理を中心に説明する。従って、それ以外の状況についての説明は簡略化する、若しくは省略する。
先ず、ステップS500では、仮想空間DB401以外の各部は、初期化処理を行う。係る初期化処理は、各部毎に異なる。例えば、係る初期化処理では、以降の処理を実行するために必要な記憶領域の確保等を行う。
次にステップS501では、視点位置姿勢制御部404が、視点の位置姿勢情報を取得する。そして視点位置姿勢制御部404は、取得した視点の位置姿勢情報を、仮想空間DB401に送出する。
次にステップS502では、現実物体計測・推定部402が、実写画像入力部403が取得した現実空間画像を用いて、係る現実空間画像中に映っている現実物体の現実物体情報(形状情報、位置姿勢情報、材質情報等)や、仮想光源情報、を推定する。係る推定の技術については周知の技術であるので、これについての説明は省略する。
ここで、推定した仮想光源情報に基づく光源の影響により発生した影の向きや濃さが、現実の光源の影響により発生した影の向きや濃さとかけ離れていると、臨場感を損なう大きな要因となる。したがって、現実の光源の位置・向き・強さの情報を忠実に仮想空間内に反映することが望まれる。ここで、現実の光源環境を仮想空間内に再現する方法についても、様々な手法が提案されている。その一例としては、実写画像入力部403が取得した現実空間画像からハイライト成分を抽出し、主成分分析を行うことにより、現実の光源情報(位置・向き・強さ)を算出し、推定する、という技術がある。このように、3次元形状の取得方法、並びに、現実環境の光源推定方法については多岐に渡って提案されているため、構築したいシステムに応じて好適なものを選択すればよい。
そして、現実物体計測・推定部402は、推定したそれぞれの情報を仮想空間DB401に送出する。
ステップS503では、仮想空間DB401は、ステップS501,S502で送出された情報を、それまでに保持していた情報に上書き保存することで、仮想空間DB401が記憶保持している情報を更新する。
そして仮想空間DB401は、ステップS501で視点位置姿勢制御部404から取得した視点の位置姿勢情報を、仮想視点の位置姿勢情報として設定する。そして設定した位置姿勢情報を記憶保持する。
また仮想空間DB401は、ステップS502で現実物体計測・推定部402から取得した現実物体情報に基づいて近似仮想物体を構成し(仮想要素を組み合わせることで近似仮想物体を生成し)、現実物体情報中の位置姿勢情報が示す位置姿勢で配置する。ここで、仮想要素は、3次元位置情報のみを有する点であっても良いし、係る点の集合から生成される三角形パッチであっても良い。即ち、近似仮想物体は、点群で構成しても良いし、ポリゴン群で構成しても良い。しかし、光線追跡法に基づく画像生成方法では、必ずしも仮想物体をポリゴンで構成する必要はない。
ここで、一般に、光線と球との交差判定処理は非常に高速で、かつ計算コストがあまりかからないので、本実施形態では、仮想要素は、任意の半径パラメータを有する球であるとする。従って、本実施形態では、近似仮想物体は、任意の半径パラメータを有する複数の球で現実物体の形状を近似した仮想物体、とする。しかし、近似仮想物体をポリゴンで構成したり、メタボール表現に基づいて構成しても良い。
また、ステップS503では、ステップS502で取得した仮想光源情報に基づいて、仮想空間中に仮想光源を設定する。即ち、現実空間中における光源を仮想空間中に模倣する。ここで、画像処理装置の計算能力やメモリ能力に起因して、ステップS502で取得した全ての仮想光源情報に対応する光源を仮想空間中に設定できない場合もある。このような場合には、現実空間における寄与率(輝度値)が最も高い光源を優先的に仮想空間中に配置すれば良い。もちろん、係る方法に限定するものではない。
また、ステップS503では、仮想空間DB401は、近似仮想物体以外の仮想物体(例えば図1の仮想物体102)についても仮想空間中に配置する。
次に、ステップS504では、レイ制御部405は、光線追跡法に従い、現在起点として設定されている位置から光線を発生させる。ステップS504の処理を最初に行う場合、ステップS503で設定した仮想視点から、仮想スクリーン上で画素値を決める画素位置を通る光線を発生させる。
ここで、光線追跡法とは、仮想視点に向かってくる光線を計算するために、仮想視点を起点として仮想スクリーンを通過する光線を計算することによって、仮想スクリーン上の各画素における画素値を計算する為のアルゴリズムである。
ここで、光線追跡法についてより詳細に説明する。
図6は、光線追跡法に基づいて画像を生成する仕組みを説明する図である。
図6において601は仮想スクリーンである。仮想視点104から仮想スクリーン601上の各画素位置を通過する光線について以降の処理を行うことで、各画素位置における画素値を求めることができ、その結果、仮想スクリーン601上に、1枚の画像を生成することができる。以降の説明では、仮想視点104から仮想スクリーン601上の1点(画素位置699)を通過する光線について説明する。従って、以降の説明を、仮想スクリーン601上の各画素位置について適用すれば、仮想スクリーン601上に1枚の画像を生成することができる。
光線追跡法では先ず、仮想視点104から仮想スクリーン601上の1点(画素位置699)に向けて光線602を飛ばし、飛ばした先を探索し、仮想物体が存在するか否かを判断する。図6では、光線602を飛ばした先には、仮想物体603が存在する。従って、この場合、仮想物体603の材質情報、表面状態などから、仮想スクリーン601上の画素位置699における画素値(輝度)を計算する。なお、光線602が仮想物体603と交差すると、透過光線605や反射光線604が計算されるので、今度はこれらの光線(透過光線605や反射光線604)についても同様に、その先に仮想物体が存在するか否かを判断する。
光線追跡法の原理については上記の通りであるが、その手順を簡単にまとめると次のようになる。
(1) 仮想視点、仮想スクリーンを設定する
(2) 仮想スクリーン上で画素値(輝度)を決定する画素位置を決める
(3) 仮想視点から、(2)で決定した画素位置を通る光線を飛ばす
(4) 飛ばした光線と交差する仮想物体を探索する(交差判定)
(5) 探索の結果、光線と交差する仮想物体が見つかった場合、交差した交点における照明効果や仮想物体の材質等を考慮して、上記画素位置における画素の画素値(輝度)を決定する
(6) 仮想物体の反射率、透過率に応じて、最初に見つけた交点から更に光線を飛ばし、(4)以降の処理を行う
これら(1)〜(6)の処理の中で大半を占めるのは、(4)の交差判定の処理である。以降では、従来から行なわれている交差判定処理について、具体例を用いて詳述する。
まず、仮想視点の座標位置Vを(Vx,Vy,Vz)とし、仮想スクリーン上で輝度を決定する画素位置Sを(x1,y1,z1)とする。
この場合、仮想視点の座標位置Vから画素位置Sを通る光線を示す式は、媒介変数tを用いて次のように表すことができる。
X=Ax・t+Vx
Y=Ay・t+Vy (式1)
Z=Az・t+Vz
ここで、A=(Ax,Ay,Az)は、光線の方向ベクトルであり、次の式に基づいて求まるものである。
(Ax,Ay,Az)=(x1−Vx,y1−Vy,z1−Vz) (式2)
次に、球体としての仮想要素が、半径r、中心座標位置(x0,y0,z0)の球であるとすると、係る球は次の式で表すことができる。
(x−x0)2+(y−y0)2+(z−z0)2=r2 (式3)
そして、仮想要素を表す(式3)に、光線を表す(式1)を代入すると、次のような式となる。
(Ax・t+Vx−x0)2+(Ay・t+Vy−y0)2+(Az・t+Vz−z0)2=r2 (式4)
この(式4)を整理すると、次のような、tについての2次方程式となる。
at2+bt+c=0 (式5)
ただし、a、b、cは、以下の通りである。
a=Ax2+Ay2+Az2
b=2{Ax(Vx−x0)+Ay(Vy−y0)+Az(Vz−z0)}
c=(Vx−x0)2+(Vy−y0)2+(Vz−z0)2
従って、係る2次方程式(式5)に対して判別式を計算すれば、係る2次方程式(式5)が実数解を有するのか否かを判定することができる。そして、実数解の個数が1以上(判別式の結果が0以上)であれば、光線と球体とが交差したと判別でき、実数解の個数が0(判別式の結果が0未満)であれば、光線と球体とは交差していないと判別することができる。そして交差していると判別した場合には、交点の座標値を求める必要があるが、交点の座標値は、(式5)をtについて解くことでtの値を求め、求めたtの値を(式1)に代入すれば、左辺のX、Y、Zはそれぞれ、交点のx座標値、y座標値、z座標値となる。
なお、交点が2つの場合には、より視点に近い方の交点を、以降の処理で採用する。換言すれば、(式5)をtについて解くことでtの値が2つ求まった場合には、より値の小さいtを用いて交点の座標値を求める。
ここで、求めたtは、仮想視点から球までの距離を表わしている。この球が仮想視点に最も近い位置にある仮想物体である場合、この球が、求めたtに基づいて決まる交点について表示する仮想物体となる。しかし、他の仮想物体であって、仮想視点により近く位置する仮想物体が存在する可能性があるので、他の仮想物体についても同様に交差判定を行う。そして、交差すると判定した場合には、仮想視点からの距離を求め、遠近を比較する。
このように、仮想スクリーン上における画素位置毎に、何れの仮想物体を表示するのかを決定することができる。これにより、仮想スクリーン上における各画素位置について画素値を求めることができる。
なお、以上説明した光線追跡法は上述の通り、周知の技術である。
図5に戻って、次に、ステップS505では、交差判定部406は、ステップS504で発生させた光線と仮想物体との交差判定を、上述した各式を用いて行う。なお、交差判定部406は、係る交差判定で求めた様々な情報(光線と交差した仮想物体が近似仮想物体であるか否かを示す情報、交点の座標値等)をメモリに記録する。そして、光線が交差した対象が近似仮想物体である場合には、交差判定フラグをオンにする(例えば交差判定フラグの値を1に設定する)。一方、光線が交差した対象が近似仮想物体ではない(例えば図1の仮想物体102)場合には、交差判定フラグをオフにする(例えば交差判定フラグの値を0にする)。
次にステップS506では、交差判定部406は、再度光線を発生させるか否かを判定する。再度光線を発生させるかどうかの判定条件は、光線が連続して近似仮想物体に交差したかどうかである。従って、ステップS506の処理開始時における交差判定フラグがオンであり、その後ステップS506における処理を行った結果、光線が交差した対象が近似仮想物体である場合、光線が連続して近似仮想物体に交差したと判定することができる。もちろん、光線が連続して近似仮想物体に交差したかどうかを判定するための方法は、係る方法に限定するものではない。
そして、光線が近似仮想物体に連続して交差した場合は、2回目に交差した近似仮想物体の影の影響を生じさせないために、レイ制御部405に光線の発生処理を打ち切るように通知する。即ち、1回目の交差(予め定められた交差状態)までの光線に基づいて係る光線に対応する画素値を画素値演算部407に求めさせるべく、レイ制御部405を制御する。そして係る通知後、画素値の計算を行うためにステップS507へ移行する。
このとき、交差判定部406では、2度目の交差について求めた情報は破棄し、画素値演算部407には1回目の近似仮想物体との交差について求めた情報(係る交差による交点に対応する画素値を求めるための情報)を通知する。係る情報については上述の通りであり、且つ周知のものである。このようにすることで、2回目に交差した近似仮想物体からの影を抑制することができるため、セルフシャドウによる光学的不整合が生じなくなる。
一方、光線が連続して近似仮想物体と交差しなかった場合、2次光線による影計算と反射屈折計算を行うために、交差判定部406は、レイ制御部405に光線を発生させる旨の通知を行う。通知後はステップS504に処理が戻され、レイ制御部405は再度、光線を発生させる。
尚、上述のように、光線を発生させる処理は、光線が以下の条件を満たすまで再帰的に繰り返される。即ち、交差判定部406が、以下に示す3つの条件の何れかが満たされたと判定した場合には、レイ制御部405に対して、光線の発生を停止するよう通知する。 (1) 光線が仮想光源に到達した
(2) 光線が連続して近似仮想物体と交差した
(3) 光線が無限遠に到達した
そして、一連の光線の追跡処理が終了すると、画素値を計算するために、処理をステップS507に移行し、画素値演算部407において計算が行われる。
ステップS507では、画素値演算部407は、交差判定部406による光線の追跡結果に基づいて画素値の計算を行う。光線の追跡結果には、ステップS505で交差判定部406が求めた「光線と交差した仮想物体の材質情報」、「光線と仮想物体とが交差した交点の情報」、が含まれている。これらの情報から、画素値演算部407は、光線と仮想物体とが交差した点における画素値を計算する。画素値の算出方法を簡単に述べると、仮想物体の材質情報には拡散反射成分、鏡面反射成分、環境光、自己発光成分などの情報が含まれている。従って、それらの材質情報と、仮想視点と交点における仮想物体の法線の向き、仮想光源の情報(種類・位置姿勢・輝度情報)を計算することによって、画素値を算出することができる。このような交点における画素値の算出方法は、コンピュータグラフィックスにおける一般的な手法であるため、その詳細な画素値の算出方法についての説明は省略する。
次に、仮想スクリーン上の全ての画素について画素値を求めた場合には処理をステップS508を介してステップS509に進める。一方、まだ画素値を求めていない画素が存在する場合には処理をステップS508を介してステップS504に戻し、仮想視点からまだ画素値を求めていない画素位置を通る光線に基づいて以降の処理を行う。
ステップS509では、画素値演算部407は、全画素について画素値を求めることで生成した1枚の仮想空間画像を画面出力部408に送出する。画面出力部408は、係る仮想空間画像を、現実空間画像と合成し、係る合成で得られる合成画像(MR画像)を、HMDが有する表示装置に対して送出する。
次に、ユーザから、本処理を終了させるための操作入力が成されたり、本処理を終了する条件が満たされた場合にはステップS510を介して本処理は終了する。一方、ユーザから、本処理を終了させるための操作入力は成されていないし、本処理を終了する条件も満たされていない場合にはステップS510を介してステップS501に処理を戻し、以降の処理を繰り返す。
以上の説明により、本実施形態によれば、光線が近似仮想物体と連続して交差した際に生じる光学的不整合を解決することができる。より詳しくは、係る解決のために、光線が近似仮想物体と連続して交差した後、光線の発生を制御することにより、近似仮想物体に不要な影の影響を及ぼさないようにしている。
なお、本実施形態では、近似仮想物体を球の集合として表したが、ポリゴンの集合で近似仮想物体を表しても良い。
また、本実施形態では、手の形状を近似すべく組み合わせた複数の仮想要素を近似仮想物体として用いたが、近似する対象は手以外でも良い。
[第2の実施形態]
第1の実施形態では、光線が近似仮想物体に連続して交差した際に生じる光学的不整合を解決するために、連続して交差した後の光線の発生を抑制していた。しかし、光線が連続して近似仮想物体に交差したからといって、必ずしも光学的不整合が生じるとは限らない場合がある。
図7は、光線が近似仮想物体に連続して交差した場合に係る光線の発生を抑制することで光学的不整合が生じるケースを説明する図である。
図7では、仮想視点104から発生させた光線は、交点701で仮想要素103と交差しており、且つ係る光線は更に連続して仮想要素103と交差している。ここで、第1の実施形態では、交点701からの光線の発生を抑制するのであるが、係る抑制を行ってしまうと、実際には影で暗くなるはずの領域について影計算を行わなくなるため、周辺画素と比べて明るくなってしまう。本来であれば一様な影が生じるべきところに、部分的に明るい画素値が出現してしまう。これにより体験者の臨場感は非常に損ねられてしまう。
第2の実施形態では、光線が仮想要素103に連続して交差したとしても、光線の発生は抑制せずに、再帰的に光線の発生と交差判定を繰り返す。そして、一般的なレイトレーシング法におけるアルゴリズムの終了条件を満たしたときに、交差判定履歴を遡って最終的な画素値の計算を行う。
なお、本実施形態でも、図4に示した、第1の実施形態と同様の画像処理装置を用いるものとする。
図8は、本実施形態に係る画像処理装置が、光線追跡法に基づいて仮想空間画像を生成するための処理のフローチャートである。なお、図8において図5と同じ部分については同じ参照番号を付けており、その説明は省略する。
また、本実施形態の画像処理装置も、図8に示したフローチャートに従った処理と並行して、現実空間画像を取得している。従って、本実施形態に係る画像処理装置が行う処理は、図8に示したフローチャートに従った処理だけではない。また、以下では、図8のフローチャートに従って行う処理のうち、光線が近似仮想物体と交差した場合に行う処理を中心に説明する。従って、それ以外の状況についての説明は簡略化する、若しくは省略する。
本実施形態では、光線が連続して近似仮想物体に交差した場合に生じる光学的不整合を解決するために、光線が連続して近似仮想物体に交差しても、光線の発生を抑制しない。即ち、「光線が仮想光源に到達した」、「光線が無限遠に到達した」の何れかの条件を満たした場合にのみ、交差判定部406はレイ制御部405に対して、光線の発生停止通知を行う。
図8においてステップS801では、交差判定部406は、ステップS505において行った数回の影・反射・屈折計算による、光線の交差判定結果の解析を行う。
具体的には、「光線がどの仮想物体と交差したか」、「光線が連続して近似仮想物体に交差したか」、「光線が連続して近似仮想物体に交差した後に、他の仮想物体に交差したか」等の解析を行う。
ステップS802では、交差判定部406は、ステップS801における解析結果を受け、数回に渡って計算された光線の交差結果の修正を行うか否かを判定する。交差結果を修正する為の条件は、光線が連続して近似仮想物体に交差し、且つその後に他の仮想物体と交差していない場合である。この場合は、現実物体による影があり、かつ他の仮想物体によって光源からの光が遮蔽されていないため、影計算をしなくてもよい。従って、上記の条件を満たす場合は、交差結果を修正するためにステップS803へ移行する。一方、上記の条件を満たさない場合は、ステップS507以降の処理を行う。
ステップS803では、交差判定部406は、ステップS505において求めた光線の交差判定の結果を修正する。具体的には、光線が連続して近似仮想物体と交差した後の交差結果を修正(無効または削除)する。そして、ステップS507以降の処理を行う。
以上の説明により、本実施形態によれば、光線の発生を抑制することで生じる光学的不整合を解決することができる。
[第3の実施形態]
第2の実施形態では、光線の発生を抑制せずレイトレーシング法における終了条件を満たすまで光線の発生を再帰的に繰り返していた。そして、終了条件を満たしたとき、交差判定部406によって交差判定履歴を見直し、不必要な交差結果を破棄し、最終的な画素値を決定していた。
本実施形態では、上記終了条件を満たした場合に、交差判定部406による判定結果に基づいて、画素値演算部407が必要な画素値計算を行うことで、最終的な画素値を計算する。即ち、光線が連続して近似仮想物体と交差していたとしても、それ以降の光線が仮想物体と交差していた場合は、仮想物体による影計算を行って最終的な画素値を計算する。そして、光線が連続して近似仮想物体に交差した後、他の仮想物体と交差しなかった場合は、影計算を行わずに最終的な画素値計算を行う。
なお、本実施形態でも、図4に示した、第1の実施形態と同様の画像処理装置を用いるものとする。
図9は、本実施形態に係る画像処理装置が、光線追跡法に基づいて仮想空間画像を生成するための処理のフローチャートである。なお、図9において図5、8と同じ部分については同じ参照番号を付けており、その説明は省略する。
ステップS901では、画素値演算部407は、ステップS801における解析の結果に基づいて、画素値を決定する。第2の実施形態では、交差判定結果を修正したものを用いて画素値を計算していた。本実施形態では、光線が連続して近似仮想物体と交差していたとしても、それ以降の光線が仮想物体と交差していた場合は、仮想物体による影計算を行って最終的な画素値を計算する。そして、光線が連続して近似仮想物体に交差した後、他の仮想物体と交差しなかった場合は、影計算を行わずに最終的な画素値計算を行う。
以上の説明により、本実施形態によれば、第2の実施形態における処理結果と同様に、光線の発生を抑制することで生じる光学的不整合を解決することが実現できる。
[第4の実施形態]
第2,3の実施形態では、交差判定部406による交差判定の履歴情報を用いて画素値を決定していた。本実施形態では、光線が連続して仮想要素と交差した場合に、交点間距離と仮想要素の大きさとの関係から、影を描画するべきか否かを判定する。
図10は、交点間距離の情報を利用して、影を描画すべきか否かを判定するための処理を説明する図である。
光線1001は、仮想視点104から発生した光線が交点1003で仮想要素103に反射し、再度、交点1004で仮想要素103に交差した後、仮想光源105に到達した光線である。このとき、交点1003では、交点1004で光線が交差する仮想要素103の影響を受け、キャストシャドウが生じる。
そして、交点1003で反射した光線は交点1005において仮想要素103に反射した後、仮想光源105に到達する。このとき、交点1003では、交点1005で交差した仮想要素103の影響を受け、セルフシャドウが生じる。
ここで、現実と仮想とで光源が一致しているという前提で、現実物体101が人間の人差し指と中指であるとすると、現実空間では、人差し指から中指へのキャストシャドウが生じる。つまり、図10に示すように交点1004の影響によるキャストシャドウによる影は、現実の世界でも存在する。従って、その影が描画されても違和感が生じない。
しかし、交点1005のように隣接した仮想要素103の影響によるセルフシャドウは、現実空間には存在することのない影である。従って、その影が描画されると体験者は非常に違和感を受けてしまう。
本実施形態は上記問題を鑑みて成されたものであり、光線が連続して仮想要素と交差した場合に、交点間の距離情報から必要な影か不必要な影かを判断し、光学的不整合を解決する。
本実施形態においても、第1の実施形態と同様、図4に示した画像処理装置を用いる。
また、本実施形態に係る画像処理装置が、光線追跡法に基づいて仮想空間画像を生成するための処理については、図8のフローチャートにおいて、ステップS505における処理と、ステップS801における処理とを以下のように変更した処理となる。
ステップS505では、第1の実施形態で説明した処理に加え、交差判定部406は、交点間の距離を求める。
ステップS801では、交差判定部406は、ステップS505において行った数回の影・反射・屈折計算による光線の交差判定結果に加え、ステップS505で求めた交点間の距離についても解析を行う。
ここで、交点間距離の情報は、光線と交差した仮想要素の大きさ(球であれば半径、ポリゴンであれば面と面の距離情報)の比較に利用される。つまり、交点間距離が、光線と交差した仮想要素よりも大きければ、キャストシャドウを生じさせる物体と交差したと判定する。逆に交点間距離の方が小さければ、セルフシャドウを生じさせる物体と交差したと判定し、その物体による影の影響は無効にする。
このように交点間距離の情報を加味することにより、光学的不整合を解決することが実現できる。
[第5の実施形態]
上記各実施形態では、図4に示した各部は何れもハードウェアで構成されているものとして説明した。しかし、仮想空間DB401を除く他の各部についてはコンピュータプログラムで実装しても良い。この場合、各部に対応するコンピュータプログラムを、仮想空間DB401を有する一般のPC(パーソナルコンピュータ)により実行させることで、上記各実施形態と同様の処理を実現することができる。
図11は、仮想空間DB401を除く他の各部に対応するコンピュータプログラムを実行可能なコンピュータのハードウェア構成例を示すブロック図である。
CPU1101は、RAM1102やROM1103に格納されているプログラムやデータを用いて本コンピュータ全体の制御を行うと共に、図4に示した構成を有する画像処理装置が行うものとして上述した各処理を実行する。係る処理には、図5,8,9に示したフローチャートに従った処理も含まれている。
RAM1102は、外部記憶装置1106からロードされたプログラムやデータ、I/F(インターフェース)1107を介して外部から受信したデータ等を一時的に記憶するためのエリアを有する。更に、RAM1102は、CPU1101が各種の処理を実行する際に用いるワークエリアも有する。即ち、RAM1102は、各種のエリアを適宜提供することができる。
ROM1103には、ブートプログラムや設定データなどが保存されている。
操作部1104は、キーボードやマウスなどにより構成されており、本コンピュータの操作者が操作することで、各種の指示をCPU1101に対して入力することができる。操作部1104を用いた入力には、例えば、処理を終了させるための操作入力などがある。
表示部1105は、CRTや液晶画面などにより構成されており、CPU1101による処理結果を画像や文字等でもって表示することができる。
外部記憶装置1106は、ハードディスクドライブ装置に代表される大容量情報記憶装置である。外部記憶装置1106には、OS(オペレーティングシステム)や、画像処理装置が行うものとして上述した各処理をCPU1101に実行させるためのプログラムやデータが保存されている。係るプログラムには、図4に示した各部のうち、仮想空間DB401を除く(厳密には仮想空間DB401による情報保持機能を除く)各部の動作をCPU1101に実行させるためのプログラムが含まれている。また、外部記憶装置1106に保存されているデータには、仮想空間DB401が記憶保持しているものとして上述したものが含まれている。
外部記憶装置1106に保存されているプログラムやデータは、CPU1101による制御に従って適宜RAM1102にロードされる。そして、CPU1101がこのロードされたプログラムやデータを用いて処理を実行することで、本コンピュータは、画像処理装置が行うものとして上述した各処理を実行することになる。
I/F1107には、HMDや位置姿勢センサなどを接続することができる。
1108は上述の各部を繋ぐバスである。
[第6の実施形態]
第1から第5の実施形態では、近似仮想物体を構成する仮想要素が複数であるとしている。しかし、複数である必然性はなく、近似仮想物体が1つの仮想要素から構成されても良い。以下の実施形態においても近似仮想物体は少なくとも1つの仮想要素から構成されるとする。
[第7の実施形態]
本実施形態では、現実空間画像中に写っている現実物体から現実物体へと落ちる影の像に対して、光学的に矛盾がないように仮想物体の影を描画する方法を述べる。より具体的には、現実物体から現実物体へと影が落ちている領域を除外して、仮想物体の影を描画する。
図12は、本実施形態に係るメインの処理を説明する図である。図12では、現実物体および仮想物体を含む複合現実空間を表している。図12において、1201は、観察者の視点である現実のカメラ、に対応する仮想視点である。1202は球形状の現実物体であり、係る現実物体1202が占める領域には、球形状の現実物体1202の形状を模擬する(同等の形状,同等のサイズ)近似仮想物体1202’(不図示)が配置されている。1203は立方体形状の仮想物体、1204は平面形状の現実物体であり、係る現実物体1204が占める領域には平面形状の現実物体1204の形状を模擬する近似仮想物体1204’(不図示)が配置されている。1205は現実の光源であり、係る光源1205の位置姿勢には現実の光源1205を模擬する仮想光源1205’(不図示)が配置されている。1206は光源1205が現実物体1202によって遮られることで現実物体1204の上に生じる現実の影の像である。なお、以下の説明で仮想物体または近似仮想物体と区別せずに単に「物体」と言い表したときは、仮想物体および近似仮想物体の全体を指しているものとする。
ここで、仮想物体1203が現実物体1204にあたかも影を落とすかのような状態における画像を描画することを考える。光源1205’に関して、(現実の)影1206の領域はすでに現実物体1202によって遮蔽されている。影1206の領域が遮蔽されているか否かは、光源1205’を遮蔽する仮想物体が追加されても変化しない。したがって、光源1205’に関して仮想物体1203が形成する仮想の影の領域1211の内部であっても、現実の影1206の領域と重なる部分に関しては現実空間画像上の対応する画素の画素値をそのまま(仮想の影の影響を反映させないで)使う。
このような影の描画制御を行うために、本実施形態では、1次レイと物体との交点から各光源に向かってシャドウレイと呼ばれるレイを発生させ、シャドウレイと物体との交差をチェックする。すると、光源が仮想物体に遮蔽されていても仮想の影を描画しない条件は、「近似仮想物体から発するシャドウレイが近似仮想物体と交差する」ことになる。
例えば、1次レイ1207が最初に交差する近似仮想物体1204’上の点(交点)1208から発生するシャドウレイ1209は、近似仮想物体1202’と点1210で交差しているので、上記の条件を満たす。したがって、交点1208については仮想の影を描画しない。
なお、上記の条件は、シャドウレイが連続して近似仮想物体に交差しなくても妥当である。なぜなら、シャドウレイが物体と交差する順番は光源が遮蔽されるか否かに無関係だからである。
以下、本実施形態に係るメインの処理について、より詳細に説明する。
なお、ここでは、1次レイと1次レイの交点から光源に向かって発生させるシャドウレイのみを考慮する。すなわち、物体の表面で反射または屈折するレイは考えない。また、光源の数を1つとし、近似仮想物体は現実物体の形状だけではなくマテリアル属性も模擬しているとする。また、以下説明する本実施形態に係るメインの処理は、図11に示すハードウェア構成例を有するコンピュータ(画像処理装置)を用いて実行するものとする。
ここで、以下の説明では、1次レイが通過する生成画像上の画素を「描画対象の画素」、1次レイが最初に交差する物体(仮想物体もしくは近似仮想物体)上の点を「描画対象の点」と呼ぶことにする。
図13は、本実施形態に係る画像処理装置が、光線追跡法に基づいて複合現実感画像を生成するための処理のフローチャートである。
ステップS1300〜ステップS1303の各ステップにおける処理はそれぞれ、図9に示したステップS500〜ステップS503と同じであるので、説明は省略する。
続いて、ステップS1304では、仮想視点から描画対象の画素を通る1次レイを発生させる。
次いで、ステップS1305では、1次レイと仮想物体もしくは近似仮想物体とが最初に交差する点、すなわち描画対象の点を探索し、探索結果をRAM1102に格納する。
そして、ステップS1306では、ステップS1305における探索結果を参照して交差の有無を判定する。係る判定の結果、交差がない場合、描画対象の画素は背景に相当するので、処理をステップS1312に進め、ステップS1312では、実写画像の画素値を取得する。そして処理をステップS1315に進める。ここで、「実写画像の画素値を取得する」とは、実写画像上の画素値のうち描画対象の画素に対応する画素の画素値を取得して、生成する画像上の描画対象の画素の画素値に設定することを意味する(以下の説明でも同様)。なお、生成する画像のデータはRAM1102に格納する。
一方、ステップS1306において交差があると判定した場合は、ステップS1307に処理を進める。
ステップS1307では、ステップS1305の探索結果を参照して、1次レイが最初に交差する物体が近似仮想物体か否か判定する。ステップS1307において近似仮想物体であると判定された場合は、描画対象の点が現実物体上にあるので、処理をステップS1308に進める。ステップS1308では、実写画像の画素値を取得する。
一方、ステップS1307で1次レイが仮想物体と交差すると判定した場合は、処理をステップS1309に進める。
ステップS1309では、1次レイと物体との交点から光源にむけてシャドウレイを発生する。
つづいてステップS1310では、シャドウレイと物体との交差を判定する。なお、この判定処理では、シャドウレイが最初に交差する物体を探索するのではなく、光源に至るまでに交差するすべての物体を探索する。探索結果は、RAM1102に格納する。
ステップS1311では、ステップS1310での探索結果を参照して描画対象の画素の画素値を算出し、ステップS1313へ進む。なお、ステップS1311における処理の詳細については後述する。
ステップS1313では、生成する画像(複合現実感画像)のすべての画素について処理が完了したか否か判定する。係る判定の結果、処理が完了していれば処理をステップS1314に進め、完了していなければ処理をステップS1304に戻す。
ステップS1314では、生成した画像のデータをRAM1102から読み出し、表示部1105に表示する。
次に、ユーザから、本処理を終了させるための操作入力(例えば操作部1104に対する操作)が成されたり、本処理を終了する条件が満たされた場合にはステップS1315を介して本処理は終了する。一方、ユーザから、本処理を終了させるための操作入力は成されていないし、本処理を終了する条件も満たされていない場合にはステップS1315を介してステップS1301に処理を戻し、以降の処理を繰り返す。
次に、ステップS1311における画素値算出処理について、より詳細に説明する。図14は、ステップS1311における処理、即ち、画素値算出処理の詳細を示すフローチャートである。
ステップS1401では、ステップS1305における処理結果を参照し、1次レイが交差した物体が近似仮想物体か否かを判定する。係る判定の結果、近似仮想物体であると判定した場合は、処理をステップS1402に進める。
ステップS1402では、ステップS1310における探索結果を参照し、シャドウレイと物体との交差が存在するか否か判定する。交差が存在しない場合は、描画対象の画素に対して影の影響を反映させる必要がないので、そのまま処理を終了する。
一方、ステップS1402において交差が存在すると判定する場合は、処理をステップS1403に進める。
ステップS1403では、ステップS1310の処理結果を参照し、シャドウレイが交差する物体のうちいずれかが近似仮想物体であるか、あるいは全ての交差する物体が仮想物体であるかを判定する。前者の場合、描画対象の点はすでに現実物体から落ちる影の中にあるので、画素値を変更せずに処理を終了する。
一方、後者の場合は描画対象の点が現実の影の領域外にあり、かつ仮想物体によって光源が遮蔽されているので、処理をステップS1404に進める。ステップS1404では、描画対象画素の画素値に影の効果を加える。具体的には、描画対象の点における近似仮想物体のマテリアル属性および光源の属性から、その点が光源に照らされていると仮定した場合に描画対象の画素に追加されたであろう画素値を計算し、描画対象の画素の画素値から差し引く。
ところで、ステップS1401において1次レイが近似仮想物体に交差していないと判定した場合は、処理をステップS1405に進める。
ステップS1405ではステップS1310における処理結果を参照し、シャドウレイが仮想物体あるいは近似仮想物体のいずれかに交差したか否か判定する。交差がある場合、描画対象の点(仮想物体上の点)はこの光源によって照らされていないので、この光源による陰影付け処理を行わない。すなわち、描画対象の画素の画素値を変更せずに処理を終了する。
一方、ステップS1405でシャドウレイがいずれの物体とも交差していないと判定した場合は、描画対象の点がこの光源によって照らされているので、処理をステップS1406に進める。
ステップS1406では、描画対象の点を含む仮想物体のマテリアル属性と光源の属性から、その点が光源に照らされて生ずる画素値の変化を計算値、描画対象画素の画素値に加える。
以上説明した処理を行うことにより、現実物体から現実物体に影が落ちている領域については、仮想物体による影の影響を反映させないようにすることができる。この結果、現実物体と仮想物体の両方から影が投射される領域が不必要に暗く描画されてしまう問題を防止し、現実世界と仮想世界で光学的に整合性のとれた影を描画することが可能となる。
なお、以上の説明では光源の数を1つとしたが、これに限るものではなく、光源の数が2つ以上であっても良い。光源の数が2以上である場合は、ステップS1309からステップS1311までの処理を各光源に対して繰り返せばよい。
また、以上の説明は1次レイに関するものであるが、これに限るものではなく、2次以上のレイに関しても以上説明した方法は適用可能である。N次(Nは2以上の整数)レイについては前述の説明における「1次レイ」を「N次レイ」と読み替えればよい。
[第8の実施形態]
第7の実施形態におけるシャドウレイの交差判定処理(ステップS1310における処理)では、仮想物体と近似仮想物体とを区別せずに処理対象としている。しかしながら、現実物体に対して現実物体から影が投射されていることを検知する為には、シャドウレイと近似仮想物体との交差を検査すれば十分である。したがって、シャドウレイの交差判定処理において、仮想物体よりも先に近似仮想物体との交差をチェックすると、より早く処理を打ち切ることができる。すなわち、処理の高速化が可能である。レイトレーシング法ではレイと物体との交差判定処理の負荷が高いので、この処理回数の低減は効果的である。
そこで本実施形態では、仮想物体よりも先に近似仮想物体をシャドウレイとの交差判定対象とする。なお、本実施形態に適用する画像処理装置には、図11に示したハードウェア構成を有するコンピュータを用いる。そして、本実施形態に係る画像処理装置が、光線追跡法に基づいて複合現実感画像を生成するための処理については、図13に示したフローチャートと同様であるので、係る処理の説明は省略する。
図15は、本実施形態においてステップS1310で行う処理の詳細を示すフローチャートである。なお、「交差の探索」とは必ずしもレイと処理対象の物体すべてとの交差の有無を調べることではなく、レイと交差する対象が1つでも見つかれば処理を完了する。
ステップS1501では、ステップS1305における処理結果を参照し、1次レイが近似仮想物体と交差したか否かを判定する。係る判定の結果、1次レイが近似仮想物体と交差したと判定した場合は、処理をステップS1502に進める。ステップS1502では、シャドウレイと近似仮想物体との交差を探索する。なお、ステップS1502における判定結果はRAM1102に格納する。
次に、ステップS1503では、ステップS1502における処理結果を参照してシャドウレイと近似仮想物体との交差の有無を判定する。係る判定の結果、交差が存在すると判定した場合は、処理をステップS1504に進める。ステップS1504では、仮想物体との交差は検査せず、判定結果をRAM1102に記憶し、処理を終了する。なお、ステップS1504でRAM1102に格納する情報は、少なくともシャドウレイと物体との交差の有無と、交差が存在する場合は交差する物体の種類(仮想物体もしくは近似仮想物体)を含む。
一方、ステップS1503でシャドウレイと近似仮想物体との交差が無いと判定した場合は、処理をステップS1505に進める。ステップS1505では、シャドウレイと仮想物体との交差を探索し、その後、処理をステップS1504に進める。
なお、ステップS1501において1次レイが仮想近似物体と交差しない(仮想物体と交差する)と判定した場合は、処理をステップS1506に進める。ステップS1506では、シャドウレイと仮想物体もしくは近似仮想物体との交差を探索し、その後、処理をステップS1504に進める。
ステップS1504における処理が終われば、シャドウレイの交差判定処理全体を終了する。
以上の説明により、本実施形態によれば、現実物体が現実物体に対して影を投射する領域を描画する場合、シャドウレイと仮想物体との交差判定を省略することができるので、処理を高速化することができる。
なお、第7の実施形態と同様に、光源の数は複数個あってもよいし、1次レイだけではなく2次以上のレイの場合も、本実施形態で述べた技術は同様に適用することができる。
[第9の実施形態]
本実施形態では、実写画像中に写っている現実物体から現実物体への写り込みの像に対して、光学的に矛盾がないように仮想物体の写り込みを描画する方法を述べる。より具体的には、現実物体が現実物体に写り込んでいる領域を除外して、仮想物体の写り込みを描画する。
図16は、本実施形態に係るメインの処理を説明する図である。図16では、現実物体と仮想物体とを含む複合現実空間を表している。
図16において、1601は、観察者の視点である現実のカメラ、に対応する仮想視点、1602は複合現実感画像を生成すべく複合現実空間を投影させるための投影面(画像面)である。1603は球形状の現実物体であり、係る現実物体1603が占める領域には、球形状の現実物体1603の形状を模擬する(同等の形状,同等のサイズ)近似仮想物体1603’(不図示)が配置されている。1604は球形状の現実物体であり、係る現実物体1604が占める領域には、球形状の現実物体1604の形状を模擬する(同等の形状,同等のサイズ)近似仮想物体1604’(不図示)が配置されている。1605は立方体形状の仮想物体である。
ここで、仮想視点1601から画素1606を通して1次レイ1607を発生したときを考える。そして更に、1次レイ1607が点1608で近似仮想物体1603’と最初に交差し、点1608において1次レイ1607が反射する方向へ発生させた反射レイ1609が近似仮想物体1604’に最初に交差するとする。
このとき、点1608における現実物体1604から現実物体1603への写り込みは、画素1606に対応する実写画像中の画素に現れている。したがって、画素1606に近似仮想物体1604’から近似仮想物体1603’への写り込みの影響を加えると、写り込みが二重になってしまうことになる。したがって、近似仮想物体から発する反射レイが最初に近似仮想物体に交差する場合は、写り込みの描画をしない。
一方、同じく近似仮想物体から発する反射レイが最初に仮想物体に交差する場合は次のようになる。即ち、例えば、仮想視点1601から画素1610を通って近似仮想物体1603’に点1612で交差する1次レイ1611が反射した反射レイ1613が仮想物体1605と交差する場合、実写画像には仮想物体1605の写り込みは現れていない。そこで、その影響を計算して画素1610に加算する。
以下、本実施形態に係るメインの処理について説明する。なお、ここでは反射レイを2次レイで打ち切るとする。なお、本実施形態に適用する画像処理装置には、図11に示したハードウェア構成を有するコンピュータを用いる。
図17は、本実施形態に係る画像処理装置が、光線追跡法に基づいて仮想空間画像を生成するための処理のフローチャートである。
ステップS1700〜ステップS1703の各ステップにおける処理はそれぞれ、図9に示したステップS500〜ステップS503と同じであるので、説明は省略する。
続いて、ステップS1704では、仮想視点から描画対象の画素を通る1次レイを発生させる。
次いで、ステップS1705では、1次レイと仮想物体もしくは近似仮想物体とが最初に交差する点、すなわち描画対象の点を探索し、探索結果をRAM1102に格納する。ここで、ステップS1705で格納する情報は、少なくとも1次レイと物体との交差の有無と、交差が存在する場合は交差する物体の種類(仮想物体もしくは近似仮想物体)を含む。
次に、ステップS1706では、ステップS1705における探索結果を参照して、1次レイと物体との交差の有無を判定する。係る判定の結果、交差がないと判定した場合、描画対象の画素は背景に相当するので、処理をステップS1711に進める。ステップS1711では、実写画像の画素値を取得し、ステップS1712に進む。
一方、ステップS1706において交差があると判定した場合は、処理をステップS1707に進める。
ステップS1707では、光源によって描画対象の点に生ずる陰影と、光源がいずれかの物体に遮蔽されて生ずる影の影響を算出し、描画対象の画素の画素値を設定する。ステップS1707における処理の内容は、第7の実施形態において説明済みであるのでここではその説明は省略する。
次に、ステップS1708では、1次レイと物体との交点から反射レイを発生させる。
そして、ステップS1709では、反射レイと最初に交差する物体を探索する。ステップS1709における探索結果はRAM1102に格納する。
次に、ステップS1710では、ステップS1705における処理結果と、ステップS1709における処理結果に基づいて、反射光による陰影付けを行う。ステップS1710における処理の詳細については後述する。
次に、ステップS1712では、生成する画像のすべての画素について処理が完了したか否かを判定する。係る判定の結果、処理が完了していればステップS1713に進み、完了していなければステップS1704に戻る。
ステップS1713では、生成した画像のデータをRAM1102から読み出し、表示部1105に表示する。
次に、ユーザから、本処理を終了させるための操作入力(例えば操作部1104に対する操作)が成されたり、本処理を終了する条件が満たされた場合にはステップS1714を介して本処理は終了する。一方、ユーザから、本処理を終了させるための操作入力は成されていないし、本処理を終了する条件も満たされていない場合にはステップS1714を介してステップS1701に処理を戻し、以降の処理を繰り返す。
次に、上記ステップS1710における処理の詳細について説明する。
図18は、ステップS1710における処理、即ち、反射光による陰影付け処理、の詳細を示すフローチャートである。
先ず、ステップS1800では、ステップS1709における処理結果を参照して、反射レイといずれかの物体との交差の有無を判定する。係る判定の結果、交差が存在すると判定した場合は、処理をステップS1801に進める。一方、交差が無いと判定した場合は、描画対象の点への写り込みはないので処理を終了する。
ステップS1801では、ステップS1705における処理結果を参照して、1次レイが最初に交差した物体が近似仮想物体であるか否かを判定する。係る判定の結果、近似仮想物体であると判定した場合には、処理をステップS1802に進める。
ステップS1802では、ステップS1709における処理結果を参照して、反射レイと最初に交差する物体が近似仮想物体であるか否かを判定する。係る判定の結果、ステップS1802で近似仮想物体であると判定した場合には、実画像中に現実物体から現実物体への写り込みがすでに含まれているので、写り込みの影響を画素に追加する処理を行わず処理を終了する。
一方、ステップS1802において、反射レイが最初に交差する物体が仮想物体であると判定した場合には、処理をステップS1803に進める。
ステップS1803では、反射レイと物体とが交差する点における陰影を算出する。係る処理は、ステップS1707における処理と同様である。
次に、ステップS1804では、ステップS1803で算出した交差点の陰影が反射して画素値に与える影響を算出し、描画対象の画素の画素値に加算する。ここで言う「画素値に与える影響」とは、ステップS1803で算出した陰影に、描画対象の点における反射レイ方向から1次レイ方向への反射率を掛け合わせることによって求める。
一方、ステップS1805では、ステップS1709における処理結果を参照して、反射レイがいずれかの物体と交差するか否かを判定する。係る判定の結果、交差が存在する場合は、処理をステップS1803に進める。そしてステップS1803における処理が完了すると、ステップS1804に処理を進め、反射レイが交差する物体からの写り込みの影響を描画対象の画素の画素値に加算する。
一方、ステップS1805において交差が存在しないと判定した場合は、写り込みが存在しないので描画対象の画素の画素値を変更せず処理を終了する。
以上の説明により、本実施形態によれば、現実物体から現実物体へと写り込みが生じている領域については仮想物体による写り込みの影響を反映させないようにすることができる。この結果、写り込みの影響が二重に画素値に反映されてしまう問題を防止し、現実世界と仮想世界とで光学的に整合性のとれた写り込みを描画することが可能となる。
なお、上記の説明では反射光に関する処理について説明したが、反射光を屈折光に置き換えても処理の内容は同じである。すなわち、本実施形態は屈折光にも適用可能である。 [第10の実施形態]
第9の実施形態では、反射レイを2次までに限定していた。本実施形態では任意の次数の反射レイまでを考慮に入れて、現実物体から現実物体への写り込みと矛盾が生じないように仮想物体の写り込みを描画する方法を示す。
高次のレイが交差する物体からの写り込みの影響は、レイを逆にたどる形で伝播し、画素値に反映される。したがって、いずれかの反射レイについて、下記の条件のいずれかが成り立つとき、仮想物体の影響を画素値に加えなければならなくなる。すなわち、実写画像中に現れている写り込みの像の画素値を変更せずに、生成する画像に用いることはできない。
・ 反射レイが仮想物体に交差する
・ 反射レイが交差する点に仮想物体からの反射光あるいは屈折光が入射する
・ 反射レイが交差する点に仮想物体から影が落ちる
逆に言えば、ある描画対象の画素を通して光線を追跡していく過程でレイが交差するすべての点について仮想物体からの影響を受けていなければ、その画素の画素値は実写画像の対応する画素の画素値と同じになる。
そこで、本実施形態での描画方法では、追跡したすべてのレイが近似仮想物体と交差するという条件を満たす場合は、実写画像の画素の画素値を描画対象の画素の画素値とする。その条件が満たされない場合は、仮想物体の影響を算出する。
以下に、本実施形態における描画処理の流れを説明する。
ここで、以下の説明では、反射レイを第n次まで発生させるとする。また、光源が物体に遮蔽されることによる影の影響は考えないこととする。
なお、本実施形態に適用する画像処理装置には、図11に示したハードウェア構成を有するコンピュータを用いる。図19は、本実施形態に係る画像処理装置が生成する画像の各画素に関して係る画像処理装置が行う処理のフローチャートである。1枚の画像を生成する場合は、各画素に対して図19の処理を施せばよい。
ステップS1901でレイの次数を示す変数iを1に初期化する。
次にステップS1902では、第i次のレイを発生させる。
そしてステップS1903では、発生させたレイと物体との交差を探索し、探索結果をRAM1102に格納する。ここで処理結果のデータには少なくとも、レイの次数・第i次のレイと物体との交差の有無・第i次のレイと最初に交差する物体の種類(仮想物体もしくは近似仮想物体)を含む。
次にステップS1904では、陰影の計算に必要な第i次のレイをすべて処理したか否かを判定する。ここで、陰影の計算に必要なレイの種類はレイトレーシングの計算手法によって異なり、例えば鏡面反射光に対応するレイだけを用いる場合もあれば、さらに拡散反射光に対応するレイを用いる場合もある。いずれにしろ、ステップS1904では各計算手法で用いるすべてのレイについて判定する。そして、係る判定の結果、すべてのレイを処理したと判断した場合は、処理をステップS1905に進める。一方、未処理のレイがあると判断した場合は、処理をステップS1902に戻し、未処理のレイを選択して処理を進める。
ステップS1905では、レイ発生の終了条件を判定する。すなわち、各次数について発生したすべてのレイがいずれの物体とも交差しないか否かを判定し、交差しない場合には、処理をステップS1910に進める。一方、いずれかのレイがいずれかの物体と交差した場合、処理をステップS1906に進める。
ステップS1906では変数iの値が1であるか否かを判定する。係る判定の結果、変数iの値が1である場合(第1次レイの場合)には処理をステップS1907に進め、1ではない場合には処理を1909に進める。
ステップS1909では、次数を上げるべく、変数iの値を1つインクリメントし、その後、処理をステップS1902に進める。
一方、ステップS1907では、レイが交差した物体が近似仮想物体であるか否かを判定する。係る判定の結果、レイが交差した物体が近似仮想物体である場合には処理をステップS1908に進める。ステップS1908では、描画対象画素について画素値を実写画像から取得する。一方、レイが交差した物体が近似仮想物体ではない場合には、処理をステップS1909に進める。
一方、ステップS1910では、変数iの値が1であるか否か、即ち、レイの次数が1であるか否かを判定する。係る判定の結果、レイの次数が1であると判定した場合には、描画対象の画素は背景の領域に属するので、処理をステップS1911に進める。
そしてステップS1911では、実写画像から画素値を取得する。
一方、レイの次数が1ではないと判定した場合には、処理をステップS1912に進める。
ステップS1912では、ステップS1903における処理結果を参照し、ここまでの処理で発生したすべてのレイが近似仮想物体と交差し、かつ第1次レイが交差する物体が近似仮想物体であるか否かを判定する。この条件が満たされない場合は、現実物体に仮想物体の陰影が影響しているので、処理をステップS1913に進める。
ステップS1913では、発生したすべてのレイに関して陰影付けの計算を行い、描画対象の画素値に追加する。
一方、ステップS1912において上記条件が満たされたと判定した場合は、描画対象の点に仮想物体の陰影の影響が及んでいないので、そのまま処理を終了する。
即ち本実施形態によれば、現実物体が現実物体にしか写り込まない場合のみ、実写画像に含まれる現実の写り込みの像を用い、それ以外の場合は仮想物体からの写り込みの影響を画素値に加える。これにより、光学的に整合性を保った写り込みの像を描画することができる。
なお、上記の説明では、写り込みに関する方法を示したが、反射レイの替わりに透過レイを処理対象にすることによって、屈折の像に対しても本実施形態の方法を適用することが出来る。さらには、反射レイおよび透過レイの両方を処理すれば、写り込み・屈折の両方を含む画像に関しても本実施形態の方法を適用することが出来る。
さらに、上記の説明では、影については無視している。しかし例えば、何れかのシャドウレイが仮想物体のみに交差する場合には仮想物体による影響を画素値に加味し、それ以外の場合には実写画像の画素値を変更せずに用いる、という場合分けを行うことで、影が存在する場合についても本実施形態を適用できる。
[第11の実施形態]
第7の実施形態から第10の実施形態は、図11に示したハードウェア構成を有するコンピュータでもって実現されるものとして説明した。しかし、第7の実施形態から第10の実施形態は、係る構成有する装置で実現されることに限定されるものではなく、その他の構成を有する装置でもって実現させても良い。例えば、図4に示したハードウェア構成を有する装置でもって実現させても良い。
[その他の実施形態]
また、本発明の目的は、以下のようにすることによって達成されることはいうまでもない。即ち、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体(または記憶媒体)を、システムあるいは装置に供給する。係る記憶媒体は言うまでもなく、コンピュータ読み取り可能な記憶媒体である。そして、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムコードを読み出し実行する。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成することになる。
また、コンピュータが読み出したプログラムコードを実行することにより、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム(OS)などが実際の処理の一部または全部を行う。その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれたとする。その後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
本発明を上記記録媒体に適用する場合、その記録媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。