JP2010501100A - 準モンテカルロ法を使用するマルコフ連鎖の同時シミュレーション - Google Patents

準モンテカルロ法を使用するマルコフ連鎖の同時シミュレーション Download PDF

Info

Publication number
JP2010501100A
JP2010501100A JP2009524776A JP2009524776A JP2010501100A JP 2010501100 A JP2010501100 A JP 2010501100A JP 2009524776 A JP2009524776 A JP 2009524776A JP 2009524776 A JP2009524776 A JP 2009524776A JP 2010501100 A JP2010501100 A JP 2010501100A
Authority
JP
Japan
Prior art keywords
graphics system
computer graphics
simulating
ray
sorting
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009524776A
Other languages
English (en)
Other versions
JP4947394B2 (ja
Inventor
アレクサンドリア ケラー,
カーステン ヴェヒター,
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia ARC GmbH
Original Assignee
Mental Images GmbH
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mental Images GmbH filed Critical Mental Images GmbH
Publication of JP2010501100A publication Critical patent/JP2010501100A/ja
Application granted granted Critical
Publication of JP4947394B2 publication Critical patent/JP4947394B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)
  • Image Analysis (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

コンピュータグラフィックスシステムがマルコフ連鎖(したがって光子の軌道など)をより効率的にシミュレートすることを可能にするように動作可能な、方法、システム、装置、及びコンピュータソフトウェア/コンピュータコード製品は、準モンテカルロ法を使用してマルコフ連鎖をシミュレートするステップ、及び/又はシミュレートするための手段を含み、マルコフ連鎖をシミュレートするステップは、状態をソートするステップを含み、ソートするステップは、近接性ソーティングを含む。
【選択図】 図9

Description

関連出願の相互参照
本特許出願(整理番号MENT−101−B)は、2006年8月15日に出願された米国仮特許出願第60/822,417号の優先権の利益を主張する。本出願は、2006年6月23日に出願された米国特許出願第11/474,517号(整理番号MENT−101−US)の一部継続出願でもあり、同出願は、2005年6月23日に出願された米国仮特許出願第60/693,231号(整理番号MENT−101−PR)の利益を主張し、また2002年11月19日に出願された米国特許出願第10/299,574号(整理番号MENT−075)の一部継続出願でもある。
米国特許出願第10/299,574号(整理番号MENT−075)は、2001年6月19日に出願された米国特許出願第09/884,861号(整理番号MENT−061)の一部継続出願であり、同出願は、2001年2月1日に出願された米国仮特許出願第60/265,934号、及び2000年6月19日に出願された米国仮特許出願第60/212,286号の優先権の利益を主張する。
整理番号MENT−061、MENT−075、MENT−101−PR、及びMENT−101−USを含むが、それらに限定されない、上に列挙された特許出願、並びにそれらの仮特許出願の各々は、その全体が本明細書に記載されているかのように、その全体が参照により本明細書に組み込まれる。
コンピュータプログラムリストの参照
本出願には、以下にソースコードリストが添付される。そのソースコードリストは、本明細書では「コンピュータプログラムリスト」と呼ばれ、「1.1.1」の形式の3桁の参照番号によって識別されるセクションに構成される。
発明の分野
本発明は、一般に、動画及び他の応用例のためなどの、デジタルコンピューティングシステムにおける、またデジタルコンピューティングシステムによる、画像レンダリングのための方法及びシステムに関し、詳細には、リアルタイム高精度レイトレーシングのための方法、システム、デバイス、及びコンピュータソフトウェアに関する。
発明の背景
「レイトレーシング」という用語は、光源をカメラと結びつけるすべての光路を識別し、これらの寄与を総計することによって、フォトリアリスティックな画像を合成するための技法を指すものである。シミュレーションは、可視性を決定するために視線に沿って光線をトレースし、照度を決定するために光源から光線をトレースする。
レイトレーシングは、動画及び他の応用例における主流になっている。しかし、現在のレイトレーシング技法は、数値的問題、動的シーンを処理する能力の限界、アクセラレーションデータ構造(acceleration data structure)の設定の遅さ、及び大きなメモリフットプリントを含む、多くの知られた限界及び弱点により影響をこうむる。したがって、現在のレイトレーシング技法は、風になびく森や人の髪の毛など、全体的に動きのあるシーンを効率的に処理するための能力を欠いている。現在のレイトレーシングシステムの限界の克服は、例えば、映画制作におけるより高品質なモーションブラー(motion blur)のレンダリングも可能にする。
レイトレーシングシステムの性能を改善するための現在の試みは、多くの理由で不十分である。例えば、現在のリアルタイムレイトレーシングシステムは一般に、そのアクセラレーション構造として、軸平行バイナリ空間分割(axis−aligned binary space partition)に基づいた3Dツリーを使用する。これらのシステムの主な重点は、静的シーンをレンダリングすることにあるので、これらのシステムは一般に、全体的に動きのあるシーンに関して必要なデータ構造を構築するのに必要とされる、かなり長い設定時間に対処することができない。この線に沿って、ある製造業者は、効率的な3Dツリーを構築し、ツリーを横断するのに必要とされる時間を短縮できる技法を開発することによって、リアルタイムレイトレーシングを改良した。しかし、レイトレーシングされる物体の数が増加するにつれて、システムの予想メモリ要件が2次的に増大することが示され得る。
別の製造業者は、システム性能を改善するために境界ボリューム階層(bounding volume hierarchy)を使用する、レイトレーシング集積回路を設計した。しかし、そのアーキテクチャの性能は、あまりに多くのインコヒーレントな2次光線がトレースされる場合、損なわれることが判明した。
加えて、フィールドプログラマブルゲートアレイ(FPGA)を使用して3Dツリー横断技法を実施することによって、システム性能を改善する試みも行われた。これらのシステムの処理速度の主な増加は、コヒーレントな光線の束をトレースし、高速ハードワイヤード計算を実行するFPGAの能力を活用することによって獲得される。
アクセラレーション構造の構築は、いまだハードウェアでは実施されていない。FPGA実装は一般に、精度を抑えた浮動小数点法(floating point technique)を使用する。
多くの異なる技法が、マルコフ連鎖(Markov chain)を含む光子軌道をシミュレートするために使用できる。マルコフ連鎖をシミュレートする際の準モンテカルロ法(quasi−Monte Carlo technique)の使用が、例えば、L’Ecuyer他、Randomized Quasi−Monte Carlo Simulation of Markov Chains with an Ordered State Space(2004)(「L’Ecuyer」)において説明されており、同文献は、その全体があたかも説明されているかのように、参照により本明細書に組み込まれる。
L’Ecuyerは、全順序(離散又は連続)状態空間を有するマルコフ連鎖の各ステップにおける状態分布を推定するための、ランダム化準モンテカルロ法(randomized quasi−Monte Carlo method)の使用について説明している。連鎖内のステップの数は、ランダムで無制限とすることができる。この方法は、特に、各ステップにおいて状態依存コストが支払われる場合の、何らかのランダムな停止時間までの予想トータルコストの、低分散不偏推定器(low−variance unbiased estimator)を取得するために使用することができる。当該論文は、数値的な説明を提供しており、その説明では、標準モンテカルロと比べて、分散低減が大きい。
L’Ecuyerは、全順序状態空間を有する離散時間及び離散状態マルコフ連鎖について、固定数のステップにわたって過渡的な量(transient measure)を推定するための決定論的準モンテカルロ法(deterministic quasi−Monte Carlo method)が、以下の論文において提案され、研究されたことを述べており、以下の論文も、その全体が参照により本明細書に組み込まれる。
Lecot他、「Quasi−Random Walk Methods」、Monte Carlo and Quasi−Monte Carlo Methods 2000、pp.63〜85、Springer−Verlag(Berlin、2002)
Lecot他、「Quasi−Monte Carlo Methods for Estimating Transient Measures of Discrete Time Markov Chains」、Monte Carlo and Quasi−Monte Carlo Methods 2002、pp.329〜43、Springer−Verlag(Berlin、2004)(「Lecot 2004」)
L’Ecuyerは、基数2の(0,2)−列を使用して、連鎖のn=2個のコピーを同数のステップにわたって並列にシミュレートする技法について説明している。連鎖のステップjにおいて、当該技法は、n個のコピーをそれらの状態に従って再度順序づけ、シミュレーションを行うために一様乱数の代わりに(0,2)−列のnjからnj+n−1までの要素を利用することによって、n個のコピーについて遷移(即ち次の状態)をシミュレートする。当該技法は、連鎖の各遷移のシミュレーションが単一の一様確率変数(uniform random variate)を必要とすることを仮定する。Lecot 2004において、マルコフ連鎖の遷移行列の構造についてのある条件下で、正しい値への収束が証明された。
L’Ecuyerは、上記の技法を、ランダムで無制限な数のステップを有し、連続状態空間を有するマルコフ連鎖に一般化することを試みており(そのような技法は特に再生シミュレーションを扱うことを可能にすると主張されている)、それに対しては、マルコフ連鎖の1つのステップにおいて次の状態を生成するのに必要とされる一様確率変数の数dは、1より大きくなり得る。
しかし、光子軌道などをシミュレートするために、様々な研究者がマルコフ連鎖の使用を前提としているが、マルコフ連鎖、例えば光子軌道をシミュレートするために、準モンテカルロ法を使用するこれまでの技法は、ランダムサンプリングよりわずかに良い程度の改善を提供したにすぎなかった。しかし、以下に説明される本発明によるQMC法は、解演算子(solution operator)の本質的な低次元構造を活用することができ、はるかに効率的な技法をもたらす。
したがって、本発明以前には、マルコフ連鎖を同時にシミュレートするための、より効率的な方法、システム、装置、デバイス、及びソフトウェアプログラム/コード製品に対する必要がまだ存在していた。
したがって、準モンテカルロ法及びソーティング戦略(sorting strategy)を使用する、マルコフ連鎖をシミュレートするための、改良されたより効率的な方法、システム、装置、デバイス、及びソフトウェアプログラム/コード製品を提供するのが望ましい。
本発明は、画像内のピクセルのピクセル値を生成するためのコンピュータグラフィックスシステムにおける使用に適した、方法、システム、装置、及びコンピュータソフトウェア/コンピュータコード製品を提供し、ピクセル値は、シーン内の点を、シミュレートされるカメラの画像平面上に記録されるように表し、コンピュータグラフィックスシステムは、選択された方向に沿ってピクセルからシーンに向かって放たれた少なくとも1つの光線をシミュレートするステップを含む、選択されたレイトレーシング法を使用して、画像のピクセル値を生成するように構成され、レイトレーシング法は、光線とシーン内の物体の表面との交わりを計算するステップと、シーン内の物体を照明する光線の軌道をシミュレートするステップとをさらに含み、軌道をシミュレートするステップは、マルコフ連鎖を使用する。
本発明の一態様では、本発明による方法、システム、装置、及びコンピュータソフトウェア/コンピュータコード製品は、準モンテカルロ法を使用してマルコフ連鎖をシミュレートするステップ(及び/又はシミュレートするための手段)を含み、マルコフ連鎖をシミュレートするステップは、状態をソートするステップを含み、ソートするステップは、近接性ソーティング(proximity sorting)を含む。
本発明のさらなる態様は、複数のマルコフ連鎖を同時にシミュレートするステップを含み、複数のマルコフ連鎖を同時にシミュレートするステップは、Halton列、Halton列の変形、格子列、又は(t,s)−列のいずれかを使用して選択され得る、準モンテカルロ点を利用するステップを含む。複数のマルコフ連鎖を同時にシミュレートするステップは、任意の数の連鎖を利用することができる。
本発明のさらなる態様では、複数のマルコフ連鎖を同時にシミュレートするステップは、軌道分割(trajectory splitting)などによって、追加的な軌道をオンザフライで追加するステップを含む。シミュレートするステップは、粒子吸収をシミュレートする技法を利用するステップも含むことができ、ロシアンルーレット法(Russian Roulette technique)を使用するステップを含むことができる。
本発明の一態様では、s次元問題について、複数のマルコフ連鎖を同時にシミュレートするステップは、以下の技法を含む。
n:=0
準モンテカルロ点xを使用して、X0,lを初期化する。
ループ:
− 適切な順序を使用して、状態ベクトルをソートする。
− n:=n+1
− 後続の準モンテカルロ点xを使用して、Xn,lを計算することによって、連鎖を継続させる。
本発明は、状態空間における近接性によって状態を順序づけるステップ、及びランダム化の技法も含むことができる。任意の選択されたランダム化を施された任意の選択された点集合又は点列が、本発明の方法と併せて利用できる。
別の態様では、本発明は、以下の技法をさらに含む。
n:=0、点列xを選択する。
ランダム化をインスタンス化する。
rand(x)を使用して、X0,lを初期化する。
ループ
・ 何らかの順序を使用して、状態ベクトルをソートする。
・ n:=n+1
・ ランダム化をインスタンス化する。
・ rand(x)を使用して、Xn,lを計算することによって、連鎖を継続させる。
ランダム化技法は、各時間ステップnにおいて準モンテカルロ点をランダム化するステップを含むことができ、ランダム化するステップは、より詳細には、後続のサンプルがそこから取り出される、基数b=2の(t,s)−列を選択するステップと、サンプルにs次元ランダムベクトルによるXOR演算を施すステップであって、ランダムベクトルが、各遷移ステップの後に生成される、ステップを含む。
本発明の別の態様は、明るさ、又は状態のノルムによってソートするステップと、空間階層を使用してソートするステップと、少なくとも1つの空間充填曲線(space filling curve)によって列挙されたバケットを使用してソートするステップとを含む。空間階層を使用してソートするステップは、バイナリ階層を利用するステップを含むことができ、空間階層は、BSPツリー、kDツリー、若しくはBSPツリー構造の他の軸平行サブセットのいずれか、又は境界ボリューム階層、又は規則的ボクセル(voxel)を含むことができる。バイナリ階層は、選択された発見的手法によって選択された平面を使用して再帰的に細分を行い、その後、階層のリーフを近接性の順序で列挙するために、階層を順序正しく横断することによって、構築することができる。より効率的な横断は、ツリーを左平衡化(left−balance)させ、ツリーを配列データ構造に保存することによって提供することができる。空間階層を使用してソートするステップは、バケットソーティング及び選択された空間充填曲線を利用するステップと、本発明の一態様では、規則的ボクセルを使用するステップとを含むこともできる。
本発明の別の態様では、シミュレーション及び/又はソーティング処理は、
軸平行境界ボックス(axis−aligned bounding box)によって、レンダリングされる物体の境界を定めるステップと、
物体の選択された点を通過する分割平面を適用することによって、境界ボックスを、各々がリーフで終了する、連続的な左ブランチ及び右ブランチに再帰的又は反復的に分割し、それによって、複数のリーフを生成するステップと、
リーフをそれぞれの明るさに従って階層的に順序づけるステップと、
選択された数のバケットに分割された、選択されたサイズの行列上で、バケットソートを実行するステップと、
行列内をたどるために選択された空間充填曲線を使用するステップであって、個々のバケット内において、より小さな空間充填曲線が、行列内の個々のセル内をたどるために使用される、ステップと
を含む。
本発明のシミュレーションプロセスは、積分方程式を解くための構成用に適合することができる。シミュレーションは、リアルに見える画像を合成するための光輸送(light transport)シミュレーションを可能にするように動作可能である。本発明のこの態様によれば、光輸送シミュレーションの基礎をなす積分方程式は、経路空間をサンプリングすることがマルコフ連鎖をシミュレートすることに対応するように、経路積分として定式化し直すことができ、その際、経路は、レイトレーシング及び散乱事象によって確立され、初期分布は、光源又はセンサの放出特性によって決定され、遷移確率は、画像内の表面についての双方向反射分布関数(bi−directional reflectance distribution function)及び双方向表面下散乱分布関数(bi−directional subsurface scattering distribution function)によって決定される。透過効果は、経路積分、初期分布、及び遷移確率を利用することによって、処理することができる。本発明の関連態様では、経路積分は、高次元準モンテカルロ点を利用することによって、又は低次元準モンテカルロ点をパディングすることによって、解くことができ、光輸送シミュレーションの基礎をなす積分方程式は、Fredholm積分方程式又はVolterra積分方程式と見なされる。
さらなる詳細、実施形態、実践、及び例が、添付の図面と併せて読まれる以下の詳細な説明において説明され、又は図面と併せて詳細な説明を読むことから、当業者に容易に明らかとなるであろう。
本発明が配備され得る、従来のデジタル処理システムの概略図である。 本発明が配備され得る、従来のパーソナルコンピュータ又は同様のコンピューティング装置の概略図である。 本発明の第1の態様による、全体的な方法を示す図である。 自己交差の問題を図説する、レイトレーシング手順の図である。 本発明のさらなる態様による、アクセラレーションデータ構造として使用される分割された軸平行境界ボックスの立面図による図である。 L平面及びR平面を用いた境界ボックスの分割を示す、図5に示された軸平行境界ボックスの等角図による図である。 L平面及びR平面を用いた境界ボックスの分割を示す、図5に示された軸平行境界ボックスの等角図による図である。 L平面及びR平面を用いた境界ボックスの分割を示す、図5に示された軸平行境界ボックスの等角図による図である。 本発明のさらなる態様による、レイトレーシング法のフローチャートである。 本発明のさらなる態様による、レイトレーシング法のフローチャートである。 シフトΦ(n)を図説する図である。 例示的なHalton列をその階層構造特性とともに示す図である。 双方向経路トレーシングによってサンプリング輸送経路空間を示す図である。 モンテカルロ法を使用するシミュレーションと配列ランダム化準モンテカルロ法を使用するシミュレーションの間の差を示した、レンダリングされた画像の図である。 モンテカルロ法を使用するシミュレーションと配列ランダム化準モンテカルロ法を使用するシミュレーションの間の差を示した、レンダリングされた画像の図である。 モンテカルロ法を使用するシミュレーションと配列ランダム化準モンテカルロ法を使用するシミュレーションの間の差を示した、レンダリングされた画像の図である。 モンテカルロ法を使用するシミュレーションと配列ランダム化準モンテカルロ法を使用するシミュレーションの間の差を示した、レンダリングされた画像の図である。 光源上の開始点からの光子軌道を示す図である。 光源上の開始点からの光子軌道を示す図である。 光源上の開始点からの光子軌道を示す図である。 光源上の開始点からの光子軌道を示す図である。 状態を空間階層のリーフに分類し、それによって、階層を順序正しく横断することによって、近接性の順序を定義するステップを示す図である。 状態を空間階層のリーフに分類し、それによって、階層を順序正しく横断することによって、近接性の順序を定義するステップを示す図である。 状態を空間階層のリーフに分類し、それによって、階層を順序正しく横断することによって、近接性の順序を定義するステップを示す図である。 状態を空間階層のリーフに分類し、それによって、階層を順序正しく横断することによって、近接性の順序を定義するステップを示す図である。 状態を空間階層のリーフに分類し、それによって、階層を順序正しく横断することによって、近接性の順序を定義するステップを示す図である。 状態を空間階層のリーフに分類し、それによって、階層を順序正しく横断することによって、近接性の順序を定義するステップを示す図である。 状態を空間階層のリーフに分類し、それによって、階層を順序正しく横断することによって、近接性の順序を定義するステップを示す図である。 状態を空間階層のリーフに分類し、それによって、階層を順序正しく横断することによって、近接性の順序を定義するステップを示す図である。 状態を空間階層のリーフに分類し、それによって、階層を順序正しく横断することによって、近接性の順序を定義するステップを示す図である。 状態を空間階層のリーフに分類し、それによって、階層を順序正しく横断することによって、近接性の順序を定義するステップを示す図である。 状態を空間階層のリーフに分類し、それによって、階層を順序正しく横断することによって、近接性の順序を定義するステップを示す図である。 状態を空間階層のリーフに分類し、それによって、階層を順序正しく横断することによって、近接性の順序を定義するステップを示す図である。 テストシーン「Shirley 6」の図である。 マスタ解に対する平均RMS誤差を示すグラフである。 大域的分散を示すグラフである。 ピクセルベースの分散を示すグラフである。 テストシーン「Invisible Date」の図である。 マスタ解に対する平均RMS誤差を示すグラフである。 大域的分散を示すグラフである。 ピクセルベースの分散を示すグラフである。 モンテカルロを使用してレンダリングされたテストシーン「Invisible Date」の視覚的比較の図である。 ランダム化準モンテカルロを使用してレンダリングされたテストシーン「Invisible Date」の視覚的比較の図である。 ソーティングを伴うランダム化準モンテカルロを使用してレンダリングされたテストシーン「Invisible Date」の視覚的比較の図である。 迷宮テストシーンの概略図である。 各技法を使用した際のカメラによって受け取られた総放射の平均量を示すグラフである。 グラフの拡大部分の図である。 マスタ解からの偏差を表示する表である。 本発明の説明された態様による、技法及び副技法のフローチャートである。 本発明の説明された態様による、技法及び副技法のフローチャートである。 本発明の説明された態様による、技法及び副技法のフローチャートである。 本発明の説明された態様による、技法及び副技法のフローチャートである。 本発明の説明された態様による、技法及び副技法のフローチャートである。 本発明の説明された態様による、技法及び副技法のフローチャートである。 本発明の説明された態様による、技法及び副技法のフローチャートである。
本発明は、レイトレーシングのため、及び高速レイトレーシング用に必要とされるアクセラレーションデータ構造の効率的な構築のための、改良された技法を提供する。以下の説明は、これらの技法による方法、構造、及びシステムについて説明する。
説明される方法及びシステムが、Microsoft Windows、Linux、又はUnixなどの従来のオペレーティングシステムに従って動作する、又は従来のオペレーティングシステムをエミュレートする、スタンドアロン構成の、又はネットワーク上に分散する、パーソナルコンピュータ(PC)又は等価なデバイスなどの従来のコンピュータ装置を使用して、ソフトウェア、ハードウェア、又はソフトウェアとハードウェアの組合せで実施され得ることは、当業者であれば理解されよう。以下に説明され、特許請求の範囲で列挙される、様々な処理手段及び計算手段は、したがって、適切に構成されたデジタル処理デバイス又はデバイスのネットワークの、ソフトウェア及び/又はハードウェア要素で実施されてよい。処理は、順次又は並列に実行されてよく、専用又は再構成可能なハードウェアを使用して実施されてよい。
本発明による方法、デバイス、又はソフトウェア製品は、スタンドアロンであるか、ネットワーク接続されているか、ポータブルであるか、又は固定式であるかを問わない、図1(例えばネットワークシステム100)に例として示されたような、広範な従来のコンピューティングデバイス及びシステムのいずれかにおいて動作することができ、従来のコンピューティングデバイス及びシステムは、従来のPC102、ラップトップ104、ハンドヘルド若しくはモバイルコンピュータ106を含み、又はインターネット若しくは他のネットワーク108を介して接続され、インターネット若しくは他のネットワーク108は、同様にサーバ110及びストレージ112を含むことができる
従来のコンピュータソフトウェア及びハードウェア実施に沿って、本発明に従って構成されたソフトウェアアプリケーションは、例えば、図2に示されるようなPC102内で動作することができ、PC102において、プログラム命令は、CD−ROM116、磁気ディスク、又は他のストレージ120から読み出され、CPU118による実行のためにRAM114にロードされることができる。データは、従来のキーボード、スキャナ、マウス、又は他の要素103を含む、任意の知られたデバイス又は手段を介して、システムに入力することができる。
本発明の本説明は、2つの大きなセクションに分割される。
I.リアルタイム高精度レイトレーシング
II.マルコフ連鎖及び準モンテカルロ法を使用してシミュレートされる光線のためのソーティング戦略
I.リアルタイム高精度レイトレーシング
図3は、本発明の一態様による全体的な方法200を示す図である。この方法は、コンピュータグラフィックスシステムに関連して実施され、システムでは、画像内の各ピクセルについて、ピクセル値が生成される。生成された各ピクセル値は、シーン内の点を、シミュレートされるカメラの画像平面上に記録されるように表す。コンピュータグラフィックスシステムは、選択されたレイトレーシング法を使用して、画像のピクセル値を生成するように構成される。選択されたレイトレーシング法は、選択された方向に沿ってピクセルからシーンに向かって放たれた少なくとも1つの光線を含む光線ツリー(ray tree)の使用を含み、光線とシーン内の物体(及び/又は物体の表面)との交わりの計算をさらに含む。
図3の方法200において、光線とシーン内の表面との交わりを計算するために、境界ボリューム階層が使用される。ステップ201において、シーンの境界ボックスが計算される。ステップ202において、所定の終了基準が満たされているかどうかが判定される。満たされていない場合、ステップ203において、軸平行境界ボックスが精緻化される。プロセスは、終了基準が満たされるまで、再帰的に継続される。本発明の一態様によれば、終了基準は、境界ボックス座標が光線/表面の交点の浮動小数点表現から解像度(resolution)の1単位分だけ異なるという条件として定義される。しかし、本発明の範囲は、他の終了基準にまで及んでいる。
アクセラレーション構造としての境界ボリューム階層の使用は、多くの理由で有利である。境界ボリューム階層のためのメモリ要件は、レイトレーシングされる物体の数に線形に制限され得る。また、以下に説明されるように、境界ボリューム階層は、3Dツリーよりもはるかに効率的に構築することができ、このことが、全体的に動きのあるシーンに必要とされる償却解析(amortized analysis)にとって、境界ボリューム階層を非常に適したものにする。
以下の説明は、レイトレーシング法におけるある種の問題と、それらの問題に対処する本発明の特定の態様について詳細に説明する。図4は、「自己交差(self−intersection)」問題を図説する図である。図4は、画像表面302と、観測点304と、光源306とを含む、レイトレーシング手順300を示している。表面の画像を合成するため、一連の計算が、観測点304と表面302の間に延在する光線を見出すために実行される。図4は、1つのそのような光線308を示している。理想的には、その場合、光線308と表面302との正確な交点310が計算される。
しかし、コンピュータにおける浮動小数点算術計算のせいで、計算された光線/表面の交点312が実際の交点310とは異なることが時にあり得る。さらに、図4に図説されるように、計算された点312が表面302の「誤った」側に見出されることがあり得る。その場合、計算された光線/表面の交点312から光源306まで延在する第2の光線314を見出すために計算が実行されたとき、これらの計算は、第2の光線314が、光源306まで直接的に延在する代わりに、第2の交点316において表面302に打ち当たることを示し、したがって、画像誤差をもたらす。
自己交差問題に対する1つの知られた解決策は、表面302から安全な距離のところから各光線308を出発させることである。この安全な距離は一般に、グローバル浮動小数点(global floating point)εとして表現される。しかし、グローバル浮動小数点εの決定は、画像が合成される、シーン及びシーン自体の中の特定の位置に大きく依存する。
本発明の一態様は、より高精度の代替案を提供する。計算された光線/表面の交点312に到達した後、実際の交点310により近い交点を再計算するために、計算された点312及び光線308の方向が使用される。交点のこの再計算は、精度を高める反復として、レイトレーシング法に組み込まれる。反復的に計算される交点が表面302の「誤った」側に存在すると判明した場合、その交点は、表面302の「正しい」側に移動される。反復的に計算される交点は、表面の法線に沿って、又は法線の最長成分によって決定される軸に沿って移動することができる。グローバル浮動小数点εを使用する代わりに、小数点は浮動小数点の仮数の最終ビットの方へ整数εだけ移動される。
説明された手順は、倍精度の計算を回避し、浮動小数点数の指数によって決定される浮動小数点数の位取り(scale)に暗黙に適応するという利点を有する。したがって、この実施では、すべての2次光線は、εオフセットを不要にするこれらの修正された点から直接出発する。したがって、交わり計算の最中、有効な光線区間は、何らかのオフセットの代わりに、0から開始すると仮定することができる。
仮数の整数表現の修正は、どの点がどの側に存在するかを決定するために三角形と平面とを交わらせる場合、数値問題も回避する。
凸結合の凸閉包性を活用して、光線と自由曲面との交わりは、光線の源に最も近い交点を含む軸平行境界ボックスを精緻化することによって見出すことができる。この精緻化は、浮動小数点数の解像度に達するまで、即ち、境界ボックス座標が浮動小数点表現から解像度の1単位分だけ異なるまで、継続することができる。その場合、自己交差問題は、境界ボックスの中心で表面法線に最も近い境界ボックスの角を選択することによって回避される。この角点は、その後、第2の光線を出発させるために使用される。この「光線物体交わりテスト」は、非常に効率的であり、自己交差問題の回避から利益を得る。
アクセラレーションデータ構造を構築した後、三角形が面内で変形される。新しい表現は、特別な苦労なしに交わりテストが縮退三角形(degenerate triangle)を扱えるように、縮退三角形を符号化する。新しい表現は、もちろん、縮退三角形がグラフィックスパイプラインに入ることを単に防止することも可能である。コンピュータプログラムリストのセクション2.2.1及び2.2.2は、本発明の本態様によるソースコードのリストを示している。
テストは最初に、光線と三角形の平面との交わりを決定し、その後、光線上の有効区間]0,result.tfar]の外部の交わりを除外する。これは、ただ1回の整数テストによって達成される。+0が有効区間から除外されることに留意されたい。これは、非正規化浮動小数点数がサポートされない場合に重要である。この最初の決定が成功した場合、交わりの重心座標を計算することによって、テストは先に進む。完全包含テストを実行するために、やはり整数テストだけが、即ち、より詳細には2つのビットのテストだけが必要とされることに留意されたい。したがって、ブランチの数は最小である。この効率的なテストを可能にするため、三角形の辺及び法線は、変形ステップにおいて、適切にスケーリングされる。
テストの精度は、誤った又は失われた光線交わりを回避するのに十分である。しかし、横断の最中、堅牢な交わりテストのために、三角形を拡大するのが適切である状況が生じることがある。これは、三角形を変形する前に行うことができる。三角形はその法線の最長成分によって識別される軸に沿って射影されるので、この射影ケースは、保存されなければならない。これは、アクセラレーションデータ構造のリーフノードにおいて、カウンタによって達成される。三角形参照(triangle reference)は、射影ケースによってソートされ、リーフは、各クラス内の三角形の数のためのバイトを含む。
本発明のさらなる態様は、レイトレーシング用のアクセラレーションデータ構造を構築するための改良された手法を提供する。多くの異なる最適化に従った従来のソフトウェア実施と比較して、本明細書で説明される手法は、優れたレイトレーシング性能をもたらす著しく平たいツリーを生みだす。
分割平面の候補は、分割される軸平行境界ボックスの内部の三角形頂点の座標によって与えられる。これは、実際には境界ボックスの外部にあるが、境界ボックスによって定義される3つの区間の1つに含まれる座標を少なくとも1つ有する、頂点を含むことに留意されたい。これらの候補から、現在の軸平行境界ボックスの最長辺の中央に最も近い平面が選択される。さらなる最適化は、表面法線の最長成分が潜在的な分割平面の法線と一致する三角形の候補のみを選択する。分割平面を三角形頂点を通るように置くことは、分割平面によって分割される三角形の数を暗黙的に減少させるので、この手順は、はるかに平たいツリーを生みだす。加えて、表面が緊密に近似され、空の空間が最大化される。三角形の数が指定された閾値よりも多くなり、分割平面の候補がもはや存在しない場合、ボックスは、その最長辺に沿って中央で分割される。これは、例えば、長対角線物体の使用を含む、他の手法の非効率性を回避する。
どの三角形が階層内のノードの左側及び右側チャイルドに属するかを決定する再帰的手順は一般に、広範囲のブックキーピングと、メモリ割り当てとを必要とした。例外ケースにだけうまくいかない、はるかに簡略な手法が存在する。レイトレーシングされる物体への参照の配列が、2つだけ割り当てられる。第1の配列は、物体参照(object reference)を用いて初期化される。再帰的な空間分割の最中、左側の要素のスタックは、配列の先頭から成長し、一方、右側に分類される要素は、配列の末尾から中央に向かって成長するスタック上に維持される。分割平面と交わっている要素、即ち、左側でも右側でもある要素を速やかに回復できるように、第2の配列が、それらのスタックを維持する。したがって、バックトラッキングは、効率的で簡単である。
表面積ヒューリスティック(surface area heuristic)を使用することによってツリーのブランチを刈り込む代わりに、ツリーの深さは、固定された深さから開始するバイナリ空間分割を近似的に左平衡化することによって刈り込まれる。網羅的な実験によって観測されたように、グローバルな固定深さパラメータが、非常に多様なシーンにわたって指定され得る。これは、ある回数のバイナリ空間分割の後、空間において相対的に平らな接続された要素が通常は残っていることを観測することによって理解できる。コンピュータプログラムリストのセクション2.3.1は、本発明のこの態様によるソースコードのリストを示している。
境界ボリューム階層を使用して、レイトレーシングされる各物体は、正確に1度だけ参照される。その結果、3Dツリーとは対照的に、階層の横断の最中に、物体と光線との複数の交わりを防止するために、メールボックスメカニズム(mailbox mechanism)は必要とされない。これは、システム性能の観点から見て大きな利点であり、共用メモリシステム上での実施をはるかに簡単にする。第2の重要な結果は、境界ボリューム階層のツリーでは、レイトレーシングされる物体の総数よりも多い内部ノードが存在できないことである。したがって、アクセラレーションデータ構造のメモリフットプリントは、構築前に物体の数に線形に制限され得る。そのような事前の制限は、3Dツリーの構築では利用可能でなく、3Dツリーでは、メモリ計算量は、レイトレーシングされる物体の数につれて2次的に増大することが予想される。
したがって、現在の3Dツリーレイトレーシング法よりも著しく高速であり、レイトレーシングされる物体の数につれて、メモリ要件が2次的に予想されるのではなく線形に増大する、境界ボリューム階層の新しい概念が、今から説明される。境界ボリューム階層が3Dツリーよりも性能的にまさることを可能にする中核概念は、境界ボリューム自体に焦点を絞る代わりに、空間がどのように分割され得るかに焦点を絞ることである。
3Dツリーにおいては、境界ボックスは、単一の平面によって分割される。本発明の本態様によれば、2つの軸平行境界ボックスを定義するために、2つの平行な平面が使用される。図5は、主要なデータ構造400を示す図である。
図5は、軸平行境界ボックス402を立面図で示している。軸平行であり、互いに平行である、L平面402及びR平面404は、境界ボックス402を左軸平行境界ボックスと右軸平行境界ボックスとに分割するために使用される。左境界ボックスは、元の境界ボックス402の左壁406からL平面402まで広がる。右境界ボックスは、R平面404から元の境界ボックス402の右壁408まで広がる。したがって、左境界ボックスと右境界ボックスとは、互いに重なり合うことがある。光線412の横断は、光線410の有効な区間[N,F]412に関するL平面402及びR平面404の交わりの位置によって決定される。
図5のデータ構造400では、L平面402及びR平面404は、境界ボックス402内に含まれる空間ではなく、元の境界ボックス402内に含まれる物体の集合を分割するように、互いに対して位置づけられる。3Dツリー分割とは対照的に、2つの平面をもつことが、2つの平面の間の空の空間を最大化する可能性を提供する。その結果、シーンの境界が、はるかに高速に近似され得る。
図6〜図8は、データ構造400をさらに説明する、一連の3次元図である。図6は、境界ボックス402の図を示している。説明の目的で、境界ボックス402内に仮想物体が、抽象的な円416として示されている。図7及び図8に示されるように、境界ボックス402を左境界ボックス402aと右境界ボックス402bとに分割するために、次にL平面404及びR平面406が使用される。L平面及びR平面は、それらの間の空の空間が最大化されるように選択される。各仮想物体416は、最終的には左境界ボックス402a又は右境界ボックス402b内に入る。図8の下図に示されるように、仮想物体416は、「左」物体416aと「右」物体416bとに分割される。結果の境界ボックス402a、402bの各々は、それ自体が分割され、それ以降も、終了基準が満たされるまで同様である。
図9は、説明される方法500のフローチャートである。ステップ501において、シーンの境界ボックスが計算される。ステップ502において、軸平行境界ボックスを、重なり合うことがある左軸平行境界ボックスと右軸平行境界ボックスとに分割するために、L平面及びR平面が使用される。ステップ503において、元の軸平行境界ボックスに含まれる仮想物体の集合を、左物体の集合と右物体の集合とに分割するために、左境界ボックス及び右境界ボックスが使用される。ステップ504において、左物体及び右物体が、終了基準が満たされるまで、再帰的に処理される。
以前の実施において使用された1つの分割パラメータの代わりに、2つの分割パラメータが、ノード内に保存される。ノードの数はレイトレーシングされる物体の数によって線形的に制限されるので、すべてのノードの配列は、1度だけ割り当てられ得る。したがって、構築中の3Dツリーの高コストのメモリ管理が不要になる。
構築技法は、3Dツリー構築用の類似物(analog)よりはるかに簡単であり、再帰的方法で、又は反復バージョン及びスタックを使用することによって、容易に実施される。物体のリスト及び軸平行境界ボックスを与えると、L平面及びR平面が決定され、物体の集合がしかるべく決定される。その後、左物体及び右物体が、何らかの終了基準が満たされるまで、再帰的に処理される。内部ノードの数は制限されているので、ただ1つの物体が残されているときに、終了を当てにしても安全である。
分割が、x軸、y軸、及びz軸に垂直な平面に沿って、物体を分類することだけに依存しており、それは非常に効率的で、数値的に絶対安定であることに留意されたい。3Dツリーとは対照的に、物体と分割平面との正確な交わりは計算される必要がなく、それは、数値的に堅牢な方法で達成するには、より大きなコストがかかり困難である。頂点及び辺沿いでの三角形の喪失など、3Dツリーの数値問題は、境界ボリューム階層の構築前に三角形を拡大することによって回避され得る。また、3Dツリーでは、重なり合う物体は、左軸平行境界ボックスと右軸平行境界ボックスの両方に分類されなければならず、それによって、ツリーの予想される2次成長を引き起こす。
L平面及びR平面を、したがって実際のツリーレイアウトを決定するために、様々な技法が使用されてよい。図6〜図8に戻ると、1つの技法は、上述の3Dツリー構築技法を使用して平面M418を決定し、新しい軸平行境界ボックスの結果のL平面及びR平面の重なりが、提案された分割平面M418と最も小さく重なり合うように、物体を分割することである。結果のツリーは、対応する3Dツリーと非常に類似しているが、空間の代わりに、物体集合が分割されるので、結果のツリーは、はるかに平たい。別の手法は、チャイルドボックスの重なりが最小になり、空の空間が可能な限り最大化されるような方法で、R平面及びL平面を選択することである。ある物体にとっては、軸平行境界ボックスが非効率的であることに留意されたい。そのような状況の一例は、軸平行境界ボックスの対角線上の、半径の小さい長い円柱である。
図10は、本発明のこの態様による、方法600のフローチャートである。ステップ601において、シーンの境界ボックスが計算される。ステップ602において、分割平面Mを決定するために、3Dツリー構築が実行される。ステップ603において、軸平行境界ボックスを、分割平面Mと最も小さく重なり合う左軸平行境界ボックスと右軸平行境界ボックスとに分割するために、平行なL平面及びR平面が使用される。ステップ604において、元の軸平行境界ボックスに含まれる仮想物体の集合を、左物体の集合と右物体の集合とに分割するために、左境界ボックス及び右境界ボックスが使用される。ステップ605において、左物体及び右物体が、終了基準が満たされるまで、再帰的に処理される。図10で説明される方法600は、図3で説明された方法200と同様に、3Dツリー構築、リアルタイム処理、バケットソーティング、自己交差などに関する技法を含む、本明細書で説明される他の技法と組み合わされてよいことに留意されたい。
3Dツリーの場合、空間細分は、物体周囲の空間の空の部分を切り取るように継続される。説明される境界ボリューム階層の場合、そのような物体をより小さな物体に分割することが、同様の挙動をもたらす。メモリ要件の予測可能性を維持するため、最大境界ボックスサイズが定義される。最大境界ボックスサイズを超える大きさをもつすべての物体は、要件を満たすように、より小さい部分に分割される。最大許容サイズは、すべての物体のうちの最小の大きさを求めてデータセットをスキャンすることによって見出すことができる。
本明細書で説明されるデータ構造は、高速3Dツリー横断の原理を境界ボリューム階層に移植することを可能にする。(1)左チャイルドのみ、(2)右チャイルドのみ、(3)左チャイルドの後、右チャイルド、(4)右チャイルドの後、左チャイルド、又は(5)光線が分割平面の間(即ち空の空間)にある、という、横断のケースは同様である。説明される技法における1つのノードは2つの平行な平面によって分割されるので、ボックスをどのような順序で横断するかは、光線の方向によって決定される。図6は、上述の技法を含むソースコードリストを説明している。
これまでの境界ボリューム階層技法は、チャイルドノード、又はヒープデータ構造の更新など必要とされる付加的な作業をどのような順序で横断するかを効率的に決定できなかった。加えて、全境界ボリュームが、ロードされ、光線に対してテストされなければならなかったが、本手法は、2つの平面距離を必要とするだけである。しかし、ソフトウェアで2つの平面に対して光線をチェックすることは、よりコスト高であるように思える。横断は、3Dツリーにおけるボトルネックであり、もう少し多くの計算をここで行うことが、メモリアクセスの待ち時間をより良く隠蔽する。加えて、境界ボリューム階層ツリーは、同じ性能の対応する3Dツリーよりもはるかに小さくなる傾向にある。
本明細書では新しい境界ボリューム階層が説明されるが、3Dツリーの横断と強い関連が存在する。L=Rと設定すると、従来のバイナリ空間分割が獲得され、横断技法は、3Dツリーの横断技法へと崩落する。
説明される境界ボリューム階層は、自由曲面を細分することによって、光線自由曲面交わりを効率的に見つけるためにも適用することができる。そのようにすることは、自由曲面と凸閉包性との交わり、及び実際の浮動小数点計算に応じて浮動小数点精度まで効率的に計算される細分技法を可能にする。細分ステップは、例えば、多項式曲面、有理曲面、及び近似細分化曲面(approximating subdivision surface)について実行される。空間内の各軸について、重なり合う可能性のある境界ボックスが、上で説明されたように決定される。バイナリ細分の場合、新しいメッシュの新しい境界ボックスについてのLボックスの交わり及びRLボックスの交わり。今は、ボックスの空間的順序が知られているので、上述の横断が効率的に実行できる。境界ボリュームの階層を事前計算する代わりに、それはオンザフライで計算することができる。この手順は、自由曲面について効率的であり、アクセラレーションデータ構造のためのメモリを節約することを可能にし、それは、バックトラッキングによって横断されなければならない境界ボリュームの小さなスタックによって置き換えられる。細分は、光線表面交わりが浮動小数点精度の点又は小さなサイズの区間へと崩落した境界ボリュームに入るまで、継続される。コンピュータプログラムリストのセクション2.1.1は、本発明のこの態様によるコードリストを示している。
レイトレーシングにおけるアクセラレーションデータ構造としての規則的グリッドの使用は簡単であるが、効率は、空間適応性の欠如、及び多くの空のグリッドセルのその後の横断により影響をこうむる。階層的な規則的グリッドは、状況を改善できるが、境界ボリューム階層及び3Dツリーと比較すると依然として劣っている。しかし、アクセラレーションデータ構造の構築速度を改善するために、規則的グリッドが使用できる。アクセラレーションデータ構造を構築するための技法は、クイックソーティングと類似しており、○(nlogn)で動作することが予想される。線形時間で動作するバケットソーティングを適用することによって、改善が獲得され得る。したがって、物体の軸平行境界ボックスは、n×n×n個の軸平行ボックスに分割される。その後、各物体は、1つの選択点によって、これらのボックスの1つに正確に分類され、例えば、重心又は各三角形の第1の頂点が使用できる。その後、各グリッドセル内の物体の実際の軸平行境界ボックスが決定される。これらの軸平行境界ボックスは、ボックスが分割平面の1つと交わらない限り、それらが含む物体の代わりに使用される。交わる場合は、ボックスが開けられ、代わりに、ボックス内の物体が直接使用される。この手順は、多くの比較及びメモリアクセスを省き、構築技法のオーダの定数を目覚しく改善し、再帰的に適用することもできる。上記の技法は、物体のストリームを処理することによって実現され得るので、特にハードウェア実装にとって魅力的である。
アクセラレーションデータ構造は、要求時に、即ち、物体を有する特定の軸平行境界ボックスを光線が横断したときに、構築することができる。その場合、一方では、アクセラレーションデータ構造は、光線の射さない空間の領域では、精緻になることはなく、キャッシュは、決して触れられることのないデータによって汚染されない。他方、精緻化の後、光線と交わる可能性のある物体は、すでにキャッシュ内に存在する。
上記の説明から、本発明が、レイトレーシングにおける長く知られていた問題に対処し、改善された精度、全体的速度、及びアクセラレーションデータ構造のメモリフットプリントを改善した、レイトレーシングのための技法を提供することが分かる。数値精度の改善は、他の数体系への転換ばかりでなく、例えば、ARTレイトレーシングチップのハードウェアで使用される対数体系への転換も行う。プロセッサ又は専用ハードウェアへのIEEE浮動小数点標準の具体的な実装は、性能に深刻な影響を及ぼし得ることに留意されたい。例えば、Pentium 4チップ上で、非正規化数は、100分の1以下に性能を低下させ得る。上で説明されたように、本発明の実施は、これらの例外を回避する。本明細書で説明される境界ボリューム階層の概念は、境界ボリューム階層をリアルタイムレイトレーシングにとって適したものにする。償却解析においては、説明された技法は、当技術分野のこれまでの状況よりも性能が優れており、したがって、制作セッティング(production setting)などにおいて、例えば、全体的に動きのあるシーンでモーションブラーを計算するための技法など、より正確な技法の使用を可能にする。説明された境界ボリューム階層が、3Dツリー及び他の技法と比較した場合、特にハードウェア実装において、また巨大シーンについて、著しい利点を有することは、上記の説明から明らかである。償却解析においては、説明された境界ボリューム階層は、現在の3Dツリーよりも少なくとも2倍、性能が優れている。加えて、メモリフットプリントは、事前に決定することができ、物体の数に対して線形である。
II.マルコフ連鎖及び準モンテカルロ法を使用してシミュレートされる光線のためのソーティング戦略
以下に説明される本発明の態様は、光線表面交わりを計算するためにレイトレーシング法を使用する、画像内のピクセルのピクセル値を計算するためにコンピュータ又は他のデジタルプロセッサが使用されるコンピュータグラフィックス及び他の応用例における使用に適した、光輸送の効率的なフォトリアリスティックシミュレーションのための方法、技法、及びシステムを提供する。
特に、本発明は、光子など光のパケット又はユニットによって照明されるシーン内の物体の高速処理を可能にするソーティング戦略を適用することによって、光線表面交わりテストをより効率的にするための方法を含む、従来のレイトレーシング法に対する改良を提供し、光のパケット又はユニットの軌道は、マルコフ連鎖を使用してシミュレートされ、マルコフ連鎖は、適切な準モンテカルロ(QMC)法を使用してシミュレートされる。ソーティング戦略は、近接性ソーティングを含み、本発明は、有利には、そのような近接性ソーティングを使用する低次元のQMC法を活用する。
説明される技法及びシステムは、従来のシステムでは非常な困難を提示した課題であった、リアルタイムに近い時間で積分方程式を解くことのために使用することができる。
これまでは、マルコフ連鎖、例えば光子の軌道をシミュレートするための準モンテカルロ法の使用は、ランダムサンプリングよりわずかに良い程度の改善を提供したにすぎなかった。しかし、本発明によるQMC法は、解演算子の本質的な低次元構造を活用することができ、はるかに効率的な技法をもたらす。
本発明のこの態様の説明は、以下のように構成される。
1.マルコフ連鎖及び準モンテカルロ法
2.マルコフ連鎖の同時シミュレーション
2.1 1次元での決定論的技法の分析
2.1.1 技法の簡略化
2.1.2 いつ、なぜ、それが機能するか
2.2 s次元での簡略化技法
2.3 ランダム化
2.4 配列ランダム化準モンテカルロ
3.光輸送シミュレーションへの応用
3.1 Fredholm積分及びVolterra積分
4.ソーティング技法及びシステム
4.1 状態のノルム
4.2 空間階層
4.3 バケットソーティング及び空間充填曲線
5.結果
6.結論
7.一般的技法
1.マルコフ連鎖及び準モンテカルロ法
数学的に、マルコフ連鎖は、システム状態の離散時間確率系列である。マルコフ連鎖は、現在の状態の知識が与えられれば、以降の状態の確率を予想する上で、以前の状態は無関係である、「記憶いらずの」プロセスである。マルコフ連鎖は、多くの異なる現象をモデル化し、分析するために使用することができる。例えば、英語は、1つの単語が別の単語の後に続く相対頻度の計算に基づいて、マルコフ連鎖を使用してモデル化された。これらの遷移確率を使用して、英語の文を生成することが可能である。例えば、待ち行列、ブラウン運動、粒子輸送の分析、及び本説明に特に関係が深い光輸送シミュレーションを含む、他の多くの進展プロセスも、マルコフ連鎖を使用して説明することができる。
より具体的には、マルコフ連鎖は、シミュレート画像のシーン内の物体を照明する光子の軌道をシミュレートするために使用できる。光輸送シミュレーションは、複雑な領域及び不連続性と、高次元積分への還元とによって特徴づけられる。加えて、光輸送シミュレーションは、同一演算子の反復適用による低次元構造によって特徴づけられる。
マルコフ連鎖自体も、準モンテカルロ(QMC)法を使用して、シミュレートされ得る。QMC法の背後にある一般的な考えは、何らかの方法でランダムに生成された数の調整を試みる代わりに、選択区間の非常に一様な被覆(coverage)を提供するために、知られた決定論的系列から開始するというものである。ランダム化QMCでは、数はランダムな様相を有するが、規則的な方法で選択区間を被覆するという所望の特性をグループとして保持するような方法で、系列はランダム化される。
QMCを使用してマルコフ連鎖をシミュレートするために利用できる多くの手法が存在する。1つの手法は、高次元低食い違い量点集合(high−dimensional,low−discrepancy point set)を適用することである。しかし、この手法は、中次元に対してだけ著しい利点を提供する。別の手法は、低次元ランダム化点集合のパディングである。この第2の手法は、実施するのがより簡単であり、ほぼ良好な結果を達成する。第3の手法は、状態のソーティングとパディングとを組み合わせる。この第3の手法は、QMCの能力が目に見える、性能の上昇をもたらし、決定論的技法及びランダム化技法の両方と併せて使用することができる。この手法の実施は、相対的に容易である。
プロセスの特性は、複数のマルコフ連鎖の寄与を平均することによって推定することができる。各軌道を個々にシミュレートする代わりに、相関サンプルを使用してマルコフ連鎖を同時にシミュレートし、各遷移ステップの後に1群の状態をソートすることで、収束を顕著に改善できることが見出された。
状態空間上で順序を与えた場合、これらの手法は、1群のマルコフ連鎖をソートすることによって改善され得る。以下に説明される本発明の態様によれば、決定論的手法の使用は、説明される技法において簡略化をもたらし、説明されたソーティングがいつ、なぜ、増大した性能をもたらすかに関する有益な徴候を提供する。以下にさらに説明されるように、説明されるソーティング戦略の一部又は全部は、有利には、光輸送シミュレーションの効率を増大させるために使用することができる。
2.マルコフ連鎖の同時シミュレーション
効率を増大させるため、マルコフ連鎖は、同時にシミュレートされ得る。準モンテカルロ法を用いたマルコフ連鎖の同時シミュレーションを中間ソーティングステップによって改善するというアイデアは、ボルツマン方程式を扱い、後に熱方程式を扱った一連の論文において、最初にLecotによって紹介された。その後、このアイデアは、グリッド上で熱方程式を解くために、Morokoff及びCaflischによって使用及び洗練され、最近、当該技法のランダム化バージョンと、希少事象シミュレーションのための分割とを組み込むために、L’Ecuyer、Tuffin、Demers他によって拡張された。独立した研究が、上記の手法に関連した方法で、コンピュータグラフィックスの分野において行われてきた。
以下の説明では、上記の方式にまさる改善を実施する技法が説明される。これらの改良技法の背景は、H.Niederreiter編、Monte Carlo and Quasi−Monte Carlo Methods in Scientific Computing 2002、pp.329〜44、Springer Verlag(2004)に記載の、Lecot他、「Quasi−Monte Carlo Methods for Estimating Transient Measures of Discrete Time Markov Chains」において説明されている技法によって部分的に提供され、同文献は、その全体があたかも説明されているかのように、参照により本明細書に組み込まれる。
以下の説明は、説明される技法が、いつ、なぜ、従来の手法よりも優れたものとなるかに関する、概念的フレームワークを提供する。説明される技法の有利な実施も説明される。
2.1 1次元での決定論的技法の分析
1次元問題についての決定論的技法が今から説明される。Lecotにおいて提示された技法は、初期分布
Figure 2010501100

及び遷移行列
Figure 2010501100

を有する離散状態空間E上で、マルコフ連鎖を同時にシミュレートする。基数bの(t,2)−列
Figure 2010501100

を使用して、N=b個の連鎖が、並列にシミュレートされ、ここで、Xn,lは、時間ステップnにおける連鎖lの状態であり、
Figure 2010501100

は、ゼロを含む自然数の集合である。さらに、当該技法は、m>tについて、N=b個の後続要素xi,1が、基数bの(0,m,1)−ネットを形成することを要求する。Lecotに示されるように、以下の基準が満たされる場合、当該技法は収束する。
Figure 2010501100
n,lは、時間ステップnにおける連鎖lの状態である。したがって、シミュレーションは、以下のように実行され得る。
n:=0
0≦l<Nについて、xl,2を使用して、
Figure 2010501100

を初期化する。
ループ
何らかの順序を使用して、状態ベクトルをソートする。
n:=n+1
0≦l<Nについて、
Figure 2010501100

を使用して、
Figure 2010501100

を計算することによって、連鎖を継続させる。
N=b個の連鎖の場合、m>tについて、b個の後続する要素xi,1が、(0,m,1)−ネットを形成するように、基数bの(t,2)−列 xが選択される。
基数b=2のSobol’(0,2)−列(φ(l),φ(l))が、以下の要件を満たすことが分かる。
m=3>t=0について、N=2=8となり、
Figure 2010501100

について、
Figure 2010501100

となる。
すべての置換は同一である。
2.1.1 技法の簡略化
一様分布を仮定した場合、安定なソーティングは、状態の順序を変化させないことが分かる。実際、収束条件は無変化であり続けるので、すべての置換は省略することができる。したがって、上述の技法は、簡略化することができる。
基数b=2の(0,2)−列であり、収束条件を維持するために必要とされる仮定を満たす、Sobol’列
Figure 2010501100

について検討する。元のSobol’列は、I.Sobol’、「On the Distribution of Points in a Cube and the Approximate Evaluation of Integrals」、Zh.Vychisl.Mat.iMat.Fiz.、7(4):784−802(1967)において定義されており、同文献は、その全体があたかも説明されているかのように、参照により本明細書に組み込まれる。
Figure 2010501100

についての簡単なコード例は、T.Kollig及びA.Keller、「Efficient Multidimensional Sampling」、Computer Graphics Forum、21(3):557〜563(2002年9月)において提供されており、同文献は、その全体があたかも説明されているかのように、参照により本明細書に組み込まれる。
シミュレーション自体は、時間ステップn=0で開始し、μの実現のため、xl,2を使用して、0≦l≦Nについて、状態
Figure 2010501100

を初期化する。その後、当該技法は、状態をソートすること(以下のセクション3において詳細に説明される)によって続行され、Pに従った遷移を実現するため、0≦l≦Nについて、
Figure 2010501100

を使用して、
Figure 2010501100

を計算することによって、連鎖を継続させる。遷移の次の状態を選択するためのインデックス
Figure 2010501100

は、実際には、基数2のvan der Corput列Φを使用し、これは、(0,1)−列であり、したがって、(0,m,1)−ネットの系列である。例えば、m=3>t=0を選択すると、N=2=8となり、
Figure 2010501100

について、
Figure 2010501100

となる。したがって、異なる時間ステップnの間に使用されるすべてのインデックスは、実際には、すべてのmについて同一である。
一様確率
Figure 2010501100

を仮定すると、収束定理(convergence theorem)が依然として適用されるが、より重要な安定なソーティングは、状態の順序を変化させない。したがって、実際には、インデックス置換は、収束条件に触れることなく、恒等置換(identity)として選択できることになる。同じことが、初期状態X0,lを選択するために適用され、それが、(0,2)−列 xの第2の要素だけを使用する、以下の簡略化された、しかし等価の技法をもたらす。
・ n:=0
・ 0≦l<2について、xl,2を使用して、X0,lを初期化する。
・ ループ
− 適切な順序を使用して、状態ベクトルをソートする。
− n:=n+1
− 0≦l<2について、Φ(l+n・2)を使用して、Xn,lを計算することによって、連鎖を継続させる。
2.1.2 いつ、なぜ、それが機能するか
多くの応用例において観測された、当該方式の改善された収束は、Pに従ったXn,lの遷移を実現するために使用されるサンプル
Φ(l+n・2
の構造によって引き起こされることが分かる。これは、暗黙の階層構造を露呈させる、根基逆関数(radical inverse)の分解
Figure 2010501100

によって理解することができ、Φ(l)は、状態数lに依存する間隔1/(2)を有するオフセットであり、一方、シフトΦ(n)は、時間ステップnにおけるすべての区間について同一である。図11は、シフトΦ(n)を図説する2次元配列700を示している。
ここで、l=0,...,2−1についてのΦ(l)の全体は、実際には、(0,m,1)−ネットでなければならず、したがって、サンプルの等距離集合でなければならないので、低次元設定は、サンプルがシフトされた格子又は階層化されたサンプルであるという、誤解を招く解釈をもたらすことがある。しかし、良好な性能は、Φ(l)が(t,s)−列であり、したがって、t≦m’≦mである任意のm’についての(t,m’,s)−ネットの系列であるという特性から生じる。これは、状態空間において同様であり、したがって、ソーティング後の順序によって連なるbm’個の状態が、(t,m’,s)−ネットによって遷移をサンプリングすることを意味し、それが、良好な離散密度近似を保証する。最大の改善は、2個の連鎖すべてが同じ状態にある場合に獲得される。連鎖の状態が状態空間において離れていればいるだけ、性能改善は小さくなる。
2.2 s次元での簡略化技法
(t,m,s)−ネットの系列である、基底bの(t,s)−列を使用して、当該方式は、s次元でも機能する。ソーティング後に状態が同様になるマルコフ連鎖は、低食い違い量サンプルによる遷移確率のサンプリングを保証される。s次元での簡略化技法は、今では以下のような様相を呈する。
・ n:=0
・ 準モンテカルロ点xを使用して、X0,lを初期化する。
・ ループ
− 適切な順序を使用して、状態ベクトルをソートする。
− n:=n+1
− (t,s)−列からの後続のサンプルxを使用して、Xn,lを計算することによって、連鎖を継続させる。
いくつかのシミュレーションは、ある局所的な微妙な効果を獲得するために、軌道分割を必要とする。これは、より複雑な手法を使用して、すでに対処されていたが、実際には、分割される状態について、単に(t,s)−列からより多くのサンプルを取り出すことによって、より簡単な方法で達成することができる。
これは、正確にb個の連鎖を同時にシミュレートする必要すらないという事実の結果である。最大性能利得を可能にするためには、(t,s)−列から後続のサンプルを取り出すこと、及び後続の(t,m,s)−ネット内の点の数bを最小化することだけが重要である。しかし、(t,s)−列の選択は、(0,s)−列はb≧sの場合にのみ存在し、m>tであるという条件によって制限される。
Halton列又はそのスクランブルされた変形などの他の根基逆変換(radical inversion)ベースの点集合は、(t,s)−列と同様の特性を満たし、同様の性能利得をもたらすことに留意されたい。図12は、Halton列、点x=(φ(l),φ(l))を図説するグラフ720を示している。示されたHalton列では、根基逆変換は、最大の「穴」に落ち込む後続の点を有する、階層構造を暗示している。この特性は、任意の開始点にとって好適であり、(t,s)−列も、同じ特性を有する。
2.3 ランダム化
より高次元における決定論的技法の収束についての一般的証明は現在存在していないが、当該技法は、各時間ステップnにおいて準モンテカルロ点を新たにランダム化することによって不偏になる。実際には、これはパディングされた複製のサンプリングの場合であるので、不偏性についての議論はより簡単になる。しかし、ランダム化は、特別な注意を払うに値する。
最も効率的な実施は、基底b=2の(t,s)−列を選択し、それから後続のサンプルを取り出し、そのサンプルにs次元ランダムベクトルによるXOR演算を施すことから成る。このランダムベクトルは、各遷移ステップの後、新たに取り出される。しかし、ランダムなスクランブリングは、点が列挙される順序を変化させるので、(t,m,s)−ネットの系列の局所的特性も、変化させられる。
この結果は、これまでの手法を使用した場合に見られる効果のいくつかについての説明として利用することができる。配列(R)QMCシミュレーションで使用されるSobol点及びKorobov点は、分散低減の10倍までは、その変換された等価物(Sobolに対するグレイコード、Korobovに対するBaker変換)よりも悪い。これについての説明は、点の構造において見出される。Sobol列から抽出される(t,m,s)−ネットの系列は、局所的には、そのグレイコード変形よりも悪い。同じことが、Korobov格子とそれを変換した変形についても言える。
2.4 配列ランダム化準モンテカルロ
以下は、s次元問題のためのランダム化技法である。
n:=0、点列xを選択する。
ランダム化をインスタンス化する。
0≦l<Nについて、rand(x)を使用して、X0,lを初期化する。
ループ
・ 適切な順序を使用して、状態ベクトルをソートする。
・ n:=n+1
・ ランダム化をインスタンス化する。
・ 0≦l<Nについて、rand(x)を使用して、Xn,lを計算することによって、連鎖を継続させる。
当該技法は、多くの興味深い特性を有する。第1に、当該技法は、xの表にまとめられた1つの集合(one tabulated set)について、及びxの連続ストリームについて不偏である。第2に、ストリームを使用する場合、分割及び吸収は本質的である。これは、ロシアンルーレット方式において真実であり、xからより多くの連続サンプルを取ることによって分割する場合にも真実である。
3.光輸送シミュレーション
数値的な証拠のため、上述の技法が、リアリスティックな画像を合成するための光輸送シミュレーションに適用される。基礎をなす積分方程式は、経路積分として定式化し直すことができる。
図13は、双方向経路トレーシングによってサンプリング輸送経路空間740を示す図である。目742からシーン物体746までの軌道と光源744からシーン物体746までの軌道とは、マルコフ連鎖によって生成され、輸送される光の量を決定するために接続される。図13に示されるサンプリング経路空間は、マルコフ連鎖をシミュレートすることに対応し、経路は、レイトレーシング及び散乱事象によって確立される。初期分布は、光源744の放出特性によって決定され、遷移確率は、衝突表面上における双方向反射分布関数によって与えられる。
経路積分を解くため、少なくとも2つの基本戦略が存在し、それらは、高次元低食い違い量点を使用するか、又は低次元低食い違い量点をパディングする。後者の手法は、上述の発見に適合しており、高次元事象は、マルコフ連鎖の後続する遷移として構成される。計測してみると、マルコフ連鎖シミュレーションのために高次元系列を使用することに対する差はないと言えるほど小さいが、パディングされた系列の使用は、計算的により高速であり、よりわずかな実施上の労力しか必要としない。それは、レンダリング業界の実務者にとってもより簡単である。
加えて、(t,s)−列又はHalton列及びそのスクランブルされた変形の階層構造特性は、上で説明されたように、次元が小さい場合にはるかに良好になるので、低次元手法は、はるかに良好な結果を可能にする。
図14A〜B及び図15A〜Bは、モンテカルロ法を使用するシミュレーションと配列ランダム化準モンテカルロ(A−RQMC)法を使用するシミュレーションの間の差を示した、レンダリングされた画像760、770、780、790である。モンテカルロ法を使用するシミュレーションは、図14A及び図15Aの画像760及び780に示されている。配列ランダム化準モンテカルロ法を使用するシミュレーションは、図14B及び図15Bの画像770及び790に示されている。各レンダリング画像の上部の矢印762、772、782、792は、放出位置及び方向を示している。図14A〜B及び図15A〜Bから、これらの例では、配列ランダム化QMC法を使用してシミュレートされた光路は、モンテカルロ法を使用してシミュレートされた光路よりも、はるかに一様に分布していることが分かる。
3.1 Fredholm積分及びVolterra積分
光輸送の基礎をなす積分方程式は、Fredholm積分方程式又はVolterra積分方程式と見なすことができるが、そのことは実施にとって重要となる。
Figure 2010501100

は、点xにおいて方向ωの方に表面から反射された放射であり、積分演算子の定義域
Figure 2010501100

は、xにおける法線n(x)と軸平行な半球である。
図16A〜Dは、光源上の複数の開始点804、814、824、834から開始させた光子軌道802、812、822、832を示した、一連の図800、810、820、830である。光線をトレースした後、表面806、816、826、836に衝突したとき、散乱の方向を決定して経路を継続するために、双方向反射分布関数がサンプリングされる。
は、光表面特性(optical surface property)を記述する双方向反射分布関数であり、Lは、入射放射である。この積分演算子の使用は、積分定義域がxに依存するような、第2種のVolterra積分方程式
Figure 2010501100

をもたらし、他方で、xとは独立に単位球Sの全方向にわたって積分が実行されるような、第2種のFredholm積分方程式をもたらす。
全方向を生成し、表面法線n(x)に対して負のスカラ積を有する方向を排除するという後者の手法の使用は、計算的に魅力があるが、第1の手法は、局所的な表面フレーム(surface frame)に変換されなければならない、半球における方向の生成を必要とし、これはよりコスト高になる。単位球からS又は
Figure 2010501100

への写像は、当技術分野において知られている。
全方向を生成するためにはるかに重要な議論は、これから説明される手法に関連する。ソーティングによって、例えば角にある、異なる表面法線を有する2つのすぐ近くの表面点が、散乱方向を生成するために、(t,s)−列の後続のサンプルを使用することが起こり得る。全方向の生成は、今は良好に機能するが、後続のサンプルを使用する、2つの異なる局所的フレームにおける方向の生成は、低食い違い量性を打ち壊す。これらの不連続性は、はっきりと目に見えるようになる。しかし、全方向の使用は、fによるインポータンス(importance)のサンプリング、又はコサイン項を可能にせず、それはしばしば不都合であり、さらなる研究に値する。
4.ソーティング技法及びシステム
上述の技法の効率を増大させるために、ソーティングを使用することが可能である。本明細書で説明されるように、(t,s)−列は、基底bの(t,m,s)−ネットの系列であり、Halton列及びその変形に類似している。類似の状態Xn,lは、連続する点を使用する。したがって、状態は、状態空間における近接性によって順序づけられるべきである。状態空間において状態がより近いほど、状態空間はより一様に探索される。
状態を互いに可能な限り近くするため、状態は、近隣の状態の距離の和が最小になるような順序で列挙されなければならない。これは、実際には、巡回セールスマン問題に関係するが、この問題では、与えられた都市の集合と、1つの都市から別の都市まで旅をするコストに対して、各都市を正確に1回訪れた後、出発した都市に戻る、最も安価な巡回旅行が求められる。この問題はすでに、18世紀初頭にオイラーによって研究され、残念なことに、NP困難であることを示すことができる。
われわれの問題は、ルートの最後の状態から最初の状態に戻る必要がないことを除いて、非常に類似している。近似ではあるが最適に近い、巡回セールスマン問題の解を効率的に計算するために、いくつかの技法がすでに利用可能である。しかし、これらの技法の実行時間は、距離行列の計算だけでもO(N)の計算量を示すので、シミュレーションでは許容可能ではないが、古典的なモンテカルロ法のO(N)の計算量に可能な限り近く、技法を維持することが望ましい。
以下では、高次元状態空間用の高速ソーティングを達成するための、本発明の態様による多くの順序が説明される。
4.1 状態のノルム
クイックソートの平均計算量は、O(NlogN)であるが、あるシナリオの場合、基数ソート(radix sort)など、O(N)の技法すら存在し、しかし、それは追加の一時メモリを必要とする。これらの1次元ソーティング技法を使用するため、多次元状態は、1次元まで引き下げられなければならない。多くの選択肢の中で、しばしば、何らかのノルム
Figure 2010501100

が、状態空間上で順序を定義するために使用される。しかし、類似のノルムが、必ずしも状態空間における近接性を示すわけではない。これについての簡単な例は、輸送シミュレーションにおける、空間内で遠く離れて配置された粒子の類似のエネルギーである。
4.2 空間階層
多次元ソーティングを可能にする第2の可能性は、状態上で順序を定義するための、空間階層の使用である。この目的のために効率的なデータ構造は、BSPツリー、その特殊な軸平行サブセット、kDツリー、又は境界ボリューム階層である。そのようなバイナリ階層の構築は簡単である。空間は、何らかの発見的方法によって選択された平面を使用して、再帰的に細分される。構築は、平均でO(NlogN)で実行される。階層の順序正しい横断が、近接性の順序でリーフを列挙する。この横断は、ツリーが左平衡化され、その結果、配列内に保存できる場合、自明なものとなる。
例えばレイトレーシングを加速するために、空間階層がとにかく使用されなければならない場合、階層のための付加的な構築時間は存在しない。その場合、階層のリーフに結びつけられたリンクリストとして、粒子が保存される。
図17A〜G、図18A〜B、及び図19A〜Cは、空間階層のリーフへの状態の分類が、階層を順序正しく横断することによって、近接性の順序を定義することを示した、一連の図である。
図17Aは、光源850と、レンダリングされる物体860とを含む、例示的なシーン840を示している。物体860は、五頂点の星形をしている。図17Bでは、物体860は、軸平行境界ボックス870によって境界を定められる。図17C〜Gでは、境界ボックス870が、再帰的にブランチに細分される。各ブランチは、リーフで終了する。
図17Cでは、境界ボックス870が、物体860の第1の頂点861を通過する分割平面871によって、第1世代の左ブランチLと第1世代の右ブランチRとに分割される。
図17Dでは、左ブランチLが、物体860の第2の頂点862を通過する第2の分割平面872によって分割され、第2世代の左ブランチLLと第2世代の右ブランチLRとを生じさせる。
図17Eでは、第3の分割平面873が、物体860の第3の頂点863を通過し、ブランチLRを第3世代の左ブランチLRLと右ブランチLRRとに分割する。
図17Fでは、第4及び第5の分割平面874及び875が、物体860の第4及び第5の頂点864及び865を通過する。図17Fに示されるように、結果は、星形860の5つの点の各々に対して1つの、5つのリーフLRL、LRR、RR、LLL、LLR、及びRLである。
図17Gは、各リーフ内の個々の点の照明を示している。図18Aでは、各リーフは、その明るさを示すために陰影づけされている。図18Bでは、リーフは、それぞれの明るさに従って、階層的に順序づけられる。「最も暗い」から「最も明るい」まで、リーフは、以下のように、LRL、LRR、LLR、RR、RLの順に並べられる。
残念ながら、この順序の品質は、シミュレーション用に使用される空間階層の品質によって強く決定され、そのことは、階層内のリーフの数が連鎖Nの数よりもはるかに少ない場合、これは複数の状態が同じリーフにマッピングされることを引き起こすので、特に問題となる。
4.3 バケットソーティング及び空間充填曲線
線形時間の計算量を保証するため、バケットソーティングが使用できる。セクション2.1で略述された簡単な技法のs次元への拡張では、多次元の状態が、状態の第1の次元によってバケットに分類され、その後、各バケットの状態が、第2の次元に従ってバケットに分類され、以降も同様に行われた。この手順は、うまく機能するが、状態空間内で近い状態がソーティング手順によって引き離され得るという問題を有する。加えて、各次元の階層構造が使用されなければならず、それが、同時にシミュレートされるマルコフ連鎖の数において、次元の呪い(curse of dimension)を引き起こす。
したがって、状態空間は、バケットとして役立つ、等しいボリュームセル即ち「ボクセル」になる。各状態のバケットは、ボクセルグリッドの解像度に従って、状態座標を切り捨てることによって見出される。これは、連続状態空間にも、離散状態空間にも適用されることに留意されたい。近接性によるボクセルの列挙は、状態に所望の順序をもたらし、ボクセルの数に対する線形時間で実行できる。
近接性によってボクセルを列挙する順序は、ペアノ曲線、ヒルベルト曲線、又はHインデクシング(H−indexing)などの空間充填曲線によって与えられる。これらの曲線は、すべてのボクセルが正確に1度だけ訪れられ、全体の経路長が相対的に短いことを保証する。われわれ自身のシミュレーションにおける場合である、大きな形状に関連する問題にとって、これは、巡回セールスマン問題に対する高速でメモリ効率のよい近似解を生成するための、数少ない可能性の1つにすらなり得る。しかし、これらの曲線は、むしろ評価するのにコストがかかり、効率的であるために表にまとめられる必要があり、又はより高い次元に対しては利用可能でない。
幸い、ルベーグ曲線又はモートン順序(Morton order)としても知られるZ曲線は、これらの問題を回避する。多次元空間においてバケットの整数座標を与えると、その1次元Z曲線インデックスが、図19A〜Cに示されるように、座標値をビット単位にインタリーブすることによって、簡単に計算される。
図19A〜Cは、2×2(図19A)、4×4(図19B)、及び16×16(図19C)のバケットについて、2次元のZ曲線891、893、895を示した、一連の図890、892、894を示している。左上を原点(0,0)とすると、×によって印を付けられた点は、整数座標(3,4)を有し、それは、2進法の(011,100)に対応する。そのバイナリZ曲線インデックス100101は、バイナリ座標をビット単位にインタリーブすることによって計算される。
これは、任意の次元及び問題サイズについて、計算が容易で高速であり、追加的なメモリを必要としない。その結果は、全体的な文脈では、例えばヒルベルト曲線ほど良好でないことが分かった。しかし、平均的な場合の分割品質、及び平均的な場合/最悪の場合の対数インデックス範囲は、同程度に良好である。問題は、数値的実験用に使用された、図20Aに示されたShirleyの「Scene 6」のような対称性の高いシーンにおいて生じる。(x,y)平面に平行な壁上の状態は、非常に良好にソートされるが、(y,z)平面に平行な他の2つの壁上に配置された状態は、曲線によって交互に訪れられ、それが、いくつかのシナリオでは、相関アーチファクトをもたらし得る。
5.数値的な証拠
上述の説明に続いて、不偏誤差推定を得るために、Cranley−Patterson回転によってランダム化された、Faureによる置換を行った、Halton列が使用された。ソーティングについては、Z曲線順序が、特定のセッティングに対して最良の結果をもたらし、以下の実験のために使用された。ランダム化の省略は結果の精度に顕著な影響をもたないことが数値的に検証されたことにさらに留意されたい。数値的な実験では、マルコフ連鎖をシミュレートするための4つの手法が比較された。
MC:メルセンヌツイスタ(Mersenne Twister)によって生成された一様乱数が、古典的モンテカルロサンプリング用に使用された。
RQMC:Cranley−Patterson回転によってランダム化された、Faureによる置換を行った、高次元Halton列が使用され、要素のペアが、2次元放出及び散乱事象をサンプリングするために使用された。
lo−dim RQMCS:Cranley−Patterson回転によってランダム化された、2次元Halton列が使用された。Z曲線が、バケットソーティングされた状態を列挙するために使用された。
hi−dim RQMCS:Cranley−Patterson回転によってランダム化された、Faureによる置換を行った、高次元Halton列が使用された。Z曲線が、バケットソーティングされた状態を列挙するために使用された。
第1の実験では、経路積分を計算するために、強い全体的な照明技法が使用された。図20Aは、相対的に簡単な光輸送設定である、テストシーン「Shirley 6」を示し、図21Aは、より複雑な光輸送設定である、テストシーン「Invisible Date」を示している。図20B及び図21Bは、マスタ解に対する平均RMS誤差を示す、グラフ901及び911であり、図20C及び図21Cは、(画像全体にわたって平均化された)大域的分散を示す、グラフ902及び912であり、図20D及び図21Dは、ピクセルベースの分散を示す、グラフ903及び913である。数値は、マルコフ連鎖の数を変化させた、10回の独立実行を平均することによって獲得された。測定された数値は、簡単なテストシーンについてのみ説得力がある。複雑なケースでさえ、独立実行の回数が少なすぎるため、モンテカルロサンプリングを上回る性能利得は測定できない。より多くの実験は、過大な実行時間のせいで可能でなかった。
しかし、視覚誤差は、図22A〜Cに見られるような、劇的に異なったストーリを語り、非常に困難なセッティングにおいてさえ、新しい技法の紛れもない優位性が明らかになる。図22A〜Cは、シミュレーション用に300個の連鎖を使用した、テストシーン「Invisible Date」についての視覚的比較を示している。図22Aは、モンテカルロを使用してレンダリングされたテストシーンを示し、図22Bは、ランダム化準モンテカルロを使用してレンダリングされたテストシーンを示し、図22Cは、ソーティングを伴うランダム化準モンテカルロを使用してレンダリングされたテストシーンを示している。
図22A〜Cでは、唯一の光源は、隣の部屋の天井に配置されているので、見えていない。光子のより良い分布のため、ランダム化準モンテカルロ(RQMC)(図22B)は、減少した陰影アーチファクトによって分かるように、モンテカルロ(MC)(図22A)よりも視覚的に性能がよい。(バケットソートのために256個のボクセルを使用した)ソーティングを伴うRQMC(RQMCS)(図22C)は、より多くの光子が第2の部屋に入り込み、ドアの裏側さえも非常によく照明されるので、さらに優れている。
このケースは例外でなく、多くのテストケースについて観測することができる。標準的な誤差測定は視覚的品質にとって適切な誤差測定でなく、このことは、コンピュータグラフィックスにおける、知られてはいるが未解決の問題であることだけを強調する。
図23A〜Dは、非常に困難な光輸送問題についての測定を示しており、光子は光源から直接トレースされ、最終経路セグメントはカメラに接続された(双方向経路トレーシングの1つの技法)。図23Aは、説明のために床と天井が取り除かれた、迷宮テストシーン940の概略図を示している。カメラは下方の部屋の中に配置され、光源は接続トンネルの他の終端に配置される。図23Bに示されたグラフ950は、「箱ひげ」図であり、各技法を使用した50回の独立した実現について、1048576のシミュレートされた光経路の、カメラによって受け取られた総放射の平均量(×によって印される)を示している。図23Cに示されたグラフ960は、図23Bに示されたグラフの関心のある部分を拡大したものである。図23Dに示された表970は、50回の独立した実現にわたって平均された、カメラ及び各ピクセル(256×256のピクセル解像度)によって受け取られた総放射のL1及びL2ノルム(分散)を使用した、マスタ解からの偏差を最終的に表示している。この困難なセッティングにおいて、新しい方法(RQMCS)は、紛れもなく優れている。
上記の測定とは反対に、ただ1つの同時にシミュレートされるマルコフ連鎖が検討される。今は、十分な回数の実験が、計算的に実現可能であり、新しい技法の優位性が、明瞭に見えるものとなった。
6.結論
上述のシステム及び技法は、従来技術にまさる多くの利点を有することが分かる。これらは、以下のもの、即ち、直観的には系列特性に焦点が絞られた技法の簡略化、改善された収束、線形の計算量、及び光輸送シミュレーションへの適用を含む。上述のシステム及び技法は、技法を積分として定式化することに一歩近づき、その点において、一貫性を示すことが相対的に容易である。
発明者らは、首尾よく、マルコフ連鎖を同時にシミュレートするための技法を簡略化し、いつ、なぜ、状態のソーティングが収束を改善できるかについての直観を提供した。加えて、技法はもはや次元の呪いによって制限されず、シミュレーションは時間につれて変化し得る遷移確率P≡Pをまさに使用できるので、斉次マルコフ連鎖(homogeneous Markov chain)への制限は存在しない。したがって、本明細書で説明された技法は、非斉次マルコフ連鎖(inhomogeneous Markov chain)をシミュレートするために、即ち、P≡Pが時間ステップnに依存する場合に、使用することができる。
実験は、必ずしもすべての(t,s)−列又は根基逆変換ベースの点列が等しく良好ではないことを示した。これは、さらなる特性解析に値する。
本明細書で説明された技法は、ランク1格子の系列が適用できる場合、さらに簡単になる。しかし、これまでの構築は、改善された性能にとって必要とされる、(t,s)−列の特性を欠いている。本発明のさらなる一態様によれば、所望の結果を達成するために、適切なランク1格子の系列を構築することが可能なこともある。
発明者らは全方向を使用しているので、即ち、球の積(product of spheres)にわたって積分するので、その方向で最近の研究との関連性を確立することも興味深い。
7.一般的技法
図24〜図30は、本発明の上述の態様による、多くの技法及び副技法のフローチャートである。個々のボックス及びボックスのグループを含む、以下の技法及び副技法の一部又は全部は、本明細書で説明された本発明を実施するために、望みどおりに組み合わされてよいことに留意されたい。
図24は、本発明による、第1の一般的技法1000のフローチャートである。技法1000は以下を含む。
ボックス1001:準モンテカルロ法を使用して、マルコフ連鎖をシミュレートする。
ボックス1002:状態をソートする。
(近接性ソーティングを含む、状態によるソーティングを含むことができる)
ボックス1003:複数のマルコフ連鎖を同時にシミュレートする。
(準モンテカルロ点を利用できる。Halton列、Halton列の変形、格子列、又は(t,s)−列のいずれかを使用して、準モンテカルロ点を選択できる。任意の数の連鎖を利用できる。軌道分割によるなど、軌道をオンザフライで追加するステップを含むことができる。ロシアンルーレット法又は粒子吸収をシミュレートする他の技法を利用できる)
図25は、s次元問題について複数のマルコフ連鎖を同時にシミュレートするための、本発明による、さらなる技法1100のフローチャートである。技法1100は以下を含む。
ボックス1101:n:=0
(nを0に等しく設定する)
ボックス1102:準モンテカルロ点xを使用して、X0,lを初期化する。
ボックス1103:適切な順序を使用して、状態ベクトルをソートする。
ボックス1104:n:=n+1
(nを1だけ増やす)
ボックス1105:次の準モンテカルロ点xを使用して、Xn,lを計算することによって、連鎖を継続させる。
(任意の選択されたランダム化を施された任意の選択された点集合又は点列、及び状態空間における近接性による状態の順序づけも利用できる)
ボックス1103〜1105は、ループ内で実行される。
図26は、追加技法1200のフローチャートであり、その1つ又は複数は、図25に示された技法1100と併せて実行されてよい。これらの技法1200は以下を含む。
ボックス1201:明るさ、又は状態のノルムによってソートする。
ボックス1202:空間階層を使用してソートする。
(バイナリ階層、又はBSPツリー、kDツリー、若しくはBSPツリー構造の他の軸平行サブセットのいずれか、又は境界ボリューム階層、又は規則的ボクセルを利用するステップを含むことができる。バイナリ階層は、選択された発見的手法によって選択された平面を使用して再帰的に細分を行い、その後、階層のリーフを近接性の順序で列挙するために、階層を順序正しく横断することによって構築することができる。階層の効率的な横断を可能にするために、ツリーを左平衡化させるステップと、ツリーを配列データ構造に保存するステップも含むことができる)
ボックス1203:少なくとも1つの空間充填曲線によって列挙されたバケットを使用してソートする。
図27は、本発明による、さらなる技法1300のフローチャートである。技法1300は以下を含む。
ボックス1301:n:=0、点列xを選択する。
ボックス1302:ランダム化をインスタンス化する。
ボックス1303:rand(x)を使用して、X0,lを初期化する。
ボックス1304:何らかの順序を使用して、状態ベクトルをソートする。
ボックス1305:n:=n+1
ボックス1306:ランダム化をインスタンス化する。
ボックス1307:rand(x)を使用して、Xn,lを計算することによって、連鎖を継続させる。
ボックス1304〜1307は、ループ内で実行される。
図28は、図27の技法1300と併せて実行されてよい、追加技法1400のフローチャートである。追加技法1400は、各時間ステップnにおいて準モンテカルロ点をランダム化し、以下を含む。
ボックス1401:後続のサンプルがそこから取り出される、基数b=2の(t,s)−列を選択する。
ボックス1402:サンプルにs次元ランダムベクトルによるXOR演算を施し、ランダムベクトルは、各遷移ステップの後に生成される。
図29は、本発明による、さらなる技法1500のフローチャートである。技法1500は以下を含む。
ボックス1501:軸平行境界ボックスによって、レンダリングされる物体の境界を定める。
ボックス1502:物体の選択された点を通過する分割平面を適用することによって、境界ボックスを、各々がリーフで終了する、連続的な左ブランチ及び右ブランチに再帰的又は反復的に分割し、それによって、複数のリーフを生成する。
ボックス1503:リーフをそれぞれの明るさに従って階層的に順序づける。
ボックス1504:選択された数のバケットに分割された、選択されたサイズの行列上で、バケットソートを実行する。
ボックス1505:行列内をたどるために選択された空間充填曲線を使用し、個々のバケット内において、より小さな空間充填曲線が、行列内の個々のセル内をたどるために使用される。
図30は、本発明による、さらなる技法1600のフローチャートである。技法1600は、リアルに見える画像を合成するための光輸送シミュレーションを可能にするシミュレーションを構成し、以下を含む。
ボックス1601:光輸送シミュレーションの基礎をなす積分方程式を、経路空間をサンプリングすることがマルコフ連鎖をシミュレートすることに対応するように、経路積分として定式化し直し、その際、経路は、レイトレーシング及び散乱事象によって確立される。
ボックス1602:初期分布を、光源又はセンサの放出特性によって決定し、遷移確率を、画像内の表面についての双方向反射分布関数及び双方向表面下散乱分布関数によって決定する。
ボックス1603:透過効果を、経路積分、初期分布、及び遷移確率を利用することによって処理する。
ボックス1604:経路積分を、任意の種類のランダム化を施して、又は施さずに、高次元準モンテカルロ点を利用することによって、又は低次元準モンテカルロ点をパディングすることによって解く。
(光輸送シミュレーションの基礎をなす積分方程式を、Fredholm積分方程式又はVolterra積分方程式と見なす)
上記の説明は、当業者が本発明を実施することを可能にする詳細を含むが、説明が本質的に例示的なものであること、これらの教示から利益を得る当業者には本発明の多くの修正及び変形が明らかであることを理解されたい。したがって、本明細書の発明が、本明細書に添付された特許請求の範囲によってのみ確定されること、特許請求の範囲が、従来技術によって許される限り広く解釈されることが意図されている。
コンピュータプログラムリスト

CODE LISTING 2.2.1

void Triangle::Transform()
{
Point *p = (Point *)this;
Vector n3d;
Vector n_abs = n3d =(p[1]-p[0])|(p[2]-p[0]);
// search largest component forprojection (0=x,1=y,2=z)
uintCast(n_abs.dx) &= 0x7FFFFFFF;
uintCast(n_abs.dy) &= 0x7FFFFFFF;
uintCast(n_abs.dz) &= 0x7FFFFFFF;
// Degenerated Triangles must be handled(set edge-signs)
if(!((n_abs.dx+n_abs.dy+n_abs.dz) >DEGEN_TRI_EPSILON))
//(!(...) > EPS) to handle NaN’s
{
d = p[0].x;
p0.u = -p[0].y;
p0.v = -p[0].z;
n.u=n.v = 0.0f;
e[0].u = e[1].u = e[0].v = e[1].v = 1.0f;
return;
}
U32 axis = 2;
if(n_abs.dx > n_abs.dy)
{
if(n_abs.dx > n_abs.dz)
axis = 0;
}
else if(n_abs.dy > n_abs.dz)
axis = 1;
Point p03d = p[0];
Point p13d = p[1];
Point p23d = p[2];
float t_inv = 2.0f/n3d[axis];
e[0].u =(p23d[PlusOneMod3[axis]]-p03d[PlusOneMod3[axis]])*t_inv;
e[0].v =(p23d[PlusOneMod3[axis+1]]-p03d[PlusOneMod3[axis+1]])*t_inv;
e[1].u =(p13d[PlusOneMod3[axis]]-p03d[PlusOneMod3[axis]])*t_inv;
e[1].v =(p13d[PlusOneMod3[axis+1]]-p03d[PlusOneMod3[axis+1]])*t_inv;
t_inv *= 0.5f;
n.u = n3d[PlusOneMod3[axis]] *t_inv;
n.v = n3d[PlusOneMod3[axis+1]]*t_inv;
p0.u = -p03d[PlusOneMod3[axis]];
p0.v = -p03d[PlusOneMod3[axis+1]];
d = p03d[axis] +n.u*p03d[PlusOneMod3[axis]] + n.v*p03d[PlusOneMod3[axis+1]];
}


CODE LISTING 2.2.2

U32 *idx = pointer_to_face_indices;
U32 ofs = projection_case;
for(U32 ii = num_triData; ii;ii--,idx++)
{
float t = (triData[*idx].d -ray.from[ofs]
-triData[*idx].n.u*ray.from[PlusOneMod3[ofs]]
-triData[*idx].n.v*ray.from[PlusOneMod3[ofs+1]])
/ (ray.d[ofs] +triData[*idx].n.u*ray.d[PlusOneMod3[ofs]]
+ triData[*idx].n.v*ray.d[PlusOneMod3[ofs+1]]);
if(uintCast(t)-1 >uintCast(result.tfar)) //-1 for +0.0f
continue;
float h1 = t*ray.d[PlusOneMod3[ofs]] +ray.from[PlusOneMod3[ofs]]
+ triData[*idx].p0.u;
float h2 = t*ray.d[PlusOneMod3[ofs+1]] +ray.from[PlusOneMod3[ofs+1]]
+ triData[*idx].p0.v;
float u = h1*triData[*idx].e[0].v -h2*triData[*idx].e[0].u;
float v = h2*triData[*idx].e[1].u -h1*triData[*idx].e[1].v;
float uv = u+v;
if((uintCast(u) | uintCast(v) |uintCast(uv)) > 0x40000000)
continue;
result.tfar = t;
result.tri_index = *idx;
}


CODE LISTING 2.3.1

Point *p = (Point*)&triData[tri_index];
int boxMinIdx, boxMaxIdx;
// boxMinIdx and boxMaxIdx index thesmallest and largest vertex of the triangle
// in the component dir[0] of the splitplane
if(p[0][dir[0]] < p[1][dir[0]])
{
if(p[2][dir[0]] < p[0][dir[0]])
{
boxMinIdx = 2;
boxMaxIdx = 1;
}
else
{
boxMinIdx = 0;
boxMaxIdx = p[2][dir[0]] <p[1][dir[0]] ? 1 : 2;
}
}
else
{
if(p[2][dir[0]] < p[1][dir[0]])
{
boxMinIdx = 2;
boxMaxIdx = 0;
}
else
{
boxMinIdx = 1;
boxMaxIdx = p[2][dir[0]] <p[0][dir[0]] ? 0 : 2;
}
}
/* If the triangle is in the split planeor completely on one side of the split plane
is decided without any numerical errors,i.e. at the precision the triangle is
entered to the rendering system. Usingepsilons here is wrong and not necessary.
*/
if((p[boxMinIdx][dir[0]] == split)&& (p[boxMaxIdx][dir[0]] == split)) // in split plane ?
{
on_splitItems++;
if(split < middle_split) // put tosmaller volume
left_num_divItems++;
else
{
unsorted_border--;
U32 t = itemsList[unsorted_border];
right_num_divItems--;
itemsList[right_num_divItems] =itemsList[left_num_divItems];
itemsList[left_num_divItems] = t;
}
}
else if(p[boxMaxIdx][dir[0]] <=split) // triangle completely left ?
left_num_divItems++;
else if(p[boxMinIdx][dir[0]] >=split) // triangle completely right ?
{
unsorted_border--;
U32 t = itemsList[unsorted_border];
right_num_divItems--;
itemsList[right_num_divItems] =itemsList[left_num_divItems];
itemsList[left_num_divItems] = t;
}
else
// and now detailed decision, trianglemust intersect split plane ...
{
/* In the sequel we determine whether atriangle should go left and/or right, where we already know that it mustintersect the split plane in a line segment.
All computations are ordered so that themore precise computations are done first. Scalar products and cross productsare evaluated last.
In some situations it may be necessaryto expand the bounding box by
an epsilon. This, however, will blow upthe required memory by large amounts.
If such a situation is encountered, itmay be better to analyze it numerically in order not to use any epsilons...
Arriving here we know thatp[boxMaxIdx][dir[0]] < split < p[boxMaxIdx][dir[0]]
and that p[boxMidIdx][dir[0]] \in[p[boxMaxIdx][dir[0]], p[boxMaxIdx][dir[0]]].
We also know, that the triangle has anon-empty intersection with the current
voxel. The triangle also cannot lie inthe split plane, and its vertices cannot
lie on one side only.
*/
int boxMidIdx = 3 - boxMaxIdx -boxMinIdx; // missing index, found by 3 = 0 + 1 + 2
/* We now determine the vertex that isalone on one side of the split plane.
Depending on whether the lonely vertexis on the left or right side,
we have to later swap the decision,whether the
triangle should be going to the left orright.
*/
int Alone = (split <p[boxMidIdx][dir[0]]) ? boxMinIdx : boxMaxIdx;
int NotAlone = 3 - Alone - boxMidIdx;
// == (split < p[boxMidIdx][dir[0]])? boxMaxIdx : boxMinIdx;
// since sum of idx = 3 = 0 + 1 + 2
float dist = split - p[Alone][dir[0]];
U32 swapLR = uintCast(dist)>>31;// == p[Alone][dir[0]] > split;
/* Now the line segments connecting thelonely vertex with the remaining two verteces
are intersected with the split plane. a1and a2 are the intersection points.
The special case "if(p[boxMidIdx][dir[0]]== split)" [yields a x / x, which could
be optimized] does not help at all sinceit only can happen as often as the highest
valence of a vertex of the mesh is...
*/
float at = dist / (p[boxMidIdx][dir[0]]- p[Alone][dir[0]]);
float at2 = dist / (p[NotAlone][dir[0]]- p[Alone][dir[0]]);
float a1x = (p[boxMidIdx][dir[1]] -p[Alone][dir[1]]) * at;
float a1y = (p[boxMidIdx][dir[2]] -p[Alone][dir[2]]) * at;
float a2x = (p[NotAlone][dir[1]] -p[Alone][dir[1]]) * at2;
float a2y = (p[NotAlone][dir[2]] - p[Alone][dir[2]])* at2;
// n is a vector normal to the line ofintersection a1a2 of the triangle
// and the split plane
float nx = a2y - a1y;
float ny = a2x - a1x;
// The signs indicate the quadrant ofthe vector normal to the intersection line
U32 nxs = uintCast(nx)>>31; // == (nx< 0.0f)
U32 nys = uintCast(ny)>>31; // ==(ny < 0.0f)
/* Numerical precision: Due tocancellation, floats of approximately same exponent
should be subtracted first, beforeadding something of a different order of
magnitude. All brackets in the sequelare ESSENTIAL for numerical precision.
Change them and you will see more errorsin the BSP...
pMin is the lonely point in thecoordinate system with the origin at
bBox.bMinMax[0]
pMax is the lonely point in thecoordinate system with the origin at
bBox.bMinMax[1]
*/
float pMinx = p[Alone][dir[1]] -bBox.bMinMax[0][dir[1]];
float pMiny = p[Alone][dir[2]] -bBox.bMinMax[0][dir[2]];
float pMaxx = p[Alone][dir[1]] -bBox.bMinMax[1][dir[1]];
float pMaxy = p[Alone][dir[2]] -bBox.bMinMax[1][dir[2]];
// Determine coordinates of the boundingbox, however, with respect to p + a1 being the origin.
float boxx[2];
float boxy[2];
boxx[0] = (pMinx + a1x) * nx;
boxy[0] = (pMiny + a1y) * ny;
boxx[1] = (pMaxx + a1x) * nx;
boxy[1] = (pMaxy + a1y) * ny;
/* Test, whether line of intersection ofthe triangle and the split plane passes by the
bounding box. This is done by indexingthe coordinates of the bounding box by the
quadrant of the vector normal to theline of intersection. In fact this is
the nifty implementation of the 3d testintroduced by in the book with Haines:
"Real-Time Rendering"
By the indexing the vertices areselected, which are farthest from the line.
Note that the triangle CANNOT completelypass the current voxel, since it must have
a nonempty intersection with it.
*/
U32 resultS;
if(pMinx + MAX(a1x,a2x) < 0.0f) //line segment of intersection a1a2 left of box
resultS = uintCast(pMinx)>>31;
else if(pMiny + MAX(a1y,a2y) < 0.0f)// line segment of intersection a1a2 below box
resultS = uintCast(pMiny)>>31;
else if(pMaxx + MIN(a1x,a2x) > 0.0f)// line segment of intersection a1a2 right of box
resultS = (pMaxx > 0.0f);
else if(pMaxy + MIN(a1y,a2y) > 0.0f)// line segment of intersection a1a2 above box
resultS = (pMaxy > 0.0f);
else if(boxx[1^nxs] > boxy[nys])
// line passes beyond bbox ? =>triangle can only be on one side
resultS = (a1y*a2x > a1x*a2y);
// sign of cross product a1 x a2 ischecked to determine side
else if(boxx[nxs] < boxy[1^nys])
resultS = (a1y*a2x < a1x*a2y);
else
// Ok, now the triangle must be bothleft and right
{
stackList[currStackItems++] =itemsList[left_num_divItems];
unsorted_border--;
itemsList[left_num_divItems] =itemsList[unsorted_border];
continue;
}
if(swapLR != /*^*/ resultS)
{
unsorted_border--;
U32 t = itemsList[unsorted_border];
right_num_divItems--;
itemsList[right_num_divItems] =itemsList[left_num_divItems];
itemsList[left_num_divItems] = t;
}
else
left_num_divItems++;
}


CODE LISTING 2.4.1

Intersection Boundary::Intersect(Ray&ray) //ray.tfar is changed!
{
// Optimized inverse calculation (saves2 of 3 divisions)
float inv_tmp =(ray.d.dx*ray.d.dy)*ray.d.dz;
if((uintCast(inv_tmp)&0x7FFFFFFF)> uintCast(DIV_EPSILON))
{
inv_tmp = 1.0f / inv_tmp;
ray.inv_d.dx =(ray.d.dy*ray.d.dz)*inv_tmp;
ray.inv_d.dy = (ray.d.dx*ray.d.dz)*inv_tmp;
ray.inv_d.dz =(ray.d.dx*ray.d.dy)*inv_tmp;
}
else
{
ray.inv_d.dx =((uintCast(ray.d.dx)&0x7FFFFFFF) > uintCast(DIV_EPSILON)) ?
(1.0f / ray.d.dx) :INVDIR_LUT[uintCast(ray.d.dx) >> 31];
ray.inv_d.dy =((uintCast(ray.d.dy)&0x7FFFFFFF) > uintCast(DIV_EPSILON)) ?
(1.0f / ray.d.dy) :INVDIR_LUT[uintCast(ray.d.dy) >> 31];
ray.inv_d.dz =((uintCast(ray.d.dz)&0x7FFFFFFF) > uintCast(DIV_EPSILON)) ?
(1.0f / ray.d.dz) :INVDIR_LUT[uintCast(ray.d.dz) >> 31];
}
Intersection result;
result.tfar = ray.tfar;
result.tri_index = -1;
//
//BBox-Check
//
float tnear = 0.0f;
worldBBox.Clip(ray,tnear);
if(uintCast(ray.tfar) == 0x7F7843B0)//ray.tfar==3.3e38f //!!
return(result);
//
U32 current_bspStack = 1; //wegen emptystack case == 0
U32 node = 0;
//
//BSP-Traversal
//
const U32 whatnode[3] ={(uintCast(ray.inv_d.dx)>>27) & sizeof(BSPNODELEAF),
(uintCast(ray.inv_d.dy)>>27) &sizeof(BSPNODELEAF),
(uintCast(ray.inv_d.dz)>>27) &sizeof(BSPNODELEAF)};
U32 bspStackNode[128];
float bspStackFar[128];
float bspStackNear[128];
bspStackNear[0] = -3.4e38f; // sentinel
do
{
//Ist Node ein Leaf (type<0) oder nur neVerzweigung (type>=0)
while(((BSPNODELEAF&)bspNodes[node]).type >= 0)
{
//Split-Dimension (x|y|z)
U32 proj =((BSPNODELEAF&)bspNodes[node]).type & 3;
float distl =(((BSPNODELEAF&)bspNodes[node]).splitlr[whatnode[proj]>>4]
- ray.from[proj])*ray.inv_d[proj];
float distr =(((BSPNODELEAF&)bspNodes[node]).splitlr[(whatnode[proj]>>4)^1]
- ray.from[proj])*ray.inv_d[proj];
node =(((BSPNODELEAF&)bspNodes[node]).type - proj) | whatnode[proj];
//type & 0xFFFFFFF0
if(tnear <= distl)
{
if(ray.tfar >= distr)
{
bspStackNear[current_bspStack] =MAX(tnear,distr);
bspStackNode[current_bspStack] =node^sizeof(BSPNODELEAF);
bspStackFar[current_bspStack] =ray.tfar;
current_bspStack++;
}
ray.tfar = MIN(ray.tfar,distl);
}
else
if(ray.tfar >= distr)
{
tnear = MAX(tnear,distr);
node ^= sizeof(BSPNODELEAF);

}
else
goto stackPop;
}
//
//Faces-Intersect
... code omitted ...
//
//
//Hit gefunden?
//
do //!! NEEDS bspStackNear[0] = -3.4e38f;!!!!!
{
stackPop:
current_bspStack--;
tnear = bspStackNear[current_bspStack];
}while(result.tfar < tnear);
if(current_bspStack == 0)
return(result);
node = bspStackNode[current_bspStack];
ray.tfar =bspStackFar[current_bspStack];
} while (true);
}

Claims (37)

  1. 画像内のピクセルのピクセル値を生成するためのコンピュータグラフィックスシステムであり、
    前記ピクセル値が、シーン内の点を、シミュレートされるカメラの画像平面上に記録されるように表し、
    前記コンピュータグラフィックスシステムが、選択された方向に沿って前記ピクセルからシーン内に向かう少なくとも1つの光線をシミュレートするステップを含む選択されたレイトレーシング法を使用して、画像の前記ピクセル値を生成するように構成され、
    前記レイトレーシング法が、光線と前記シーン内の物体の表面との交わりを計算するステップと、前記シーン内の物体を照明する光線の軌道をシミュレートするステップとをさらに含み、軌道をシミュレートする前記ステップが、マルコフ連鎖を使用する、前記コンピュータグラフィックスシステムの改良であって、
    準モンテカルロ法を使用して前記マルコフ連鎖をシミュレートするステップを含み、
    マルコフ連鎖をシミュレートする前記ステップが、状態をソートするステップを含み、
    ソートする前記ステップが、近接性ソーティングを含む、コンピュータグラフィックスシステムの改良。
  2. 複数のマルコフ連鎖を同時にシミュレートするステップを含む、請求項1に記載のコンピュータグラフィックスシステムの改良。
  3. 複数のマルコフ連鎖を同時にシミュレートする前記ステップが、準モンテカルロ点を利用するステップを含む、請求項2に記載のコンピュータグラフィックスシステムの改良。
  4. 前記準モンテカルロ点が、Halton列、Halton列の変形、格子列、又は(t,s)−列のいずれかを使用して選択される、請求項3に記載のコンピュータグラフィックスシステムの改良。
  5. 複数のマルコフ連鎖を同時にシミュレートする前記ステップが、任意の数の連鎖を利用する、請求項2に記載のコンピュータグラフィックスシステムの改良。
  6. 複数のマルコフ連鎖を同時にシミュレートする前記ステップが、追加的な軌道をオンザフライで追加するステップをさらに含む、請求項2に記載のコンピュータグラフィックスシステムの改良。
  7. 複数のマルコフ連鎖を同時にシミュレートする前記ステップが、軌道分割をさらに含む、請求項2に記載のコンピュータグラフィックスシステムの改良。
  8. 複数のマルコフ連鎖を同時にシミュレートする前記ステップが、粒子吸収をシミュレートする技法を利用するステップを含む、請求項2に記載のコンピュータグラフィックスシステムの改良。
  9. 複数のマルコフ連鎖を同時にシミュレートする前記ステップが、ロシアンルーレット法を使用するステップをさらに含む、請求項8に記載のコンピュータグラフィックスシステムの改良。
  10. s次元問題について、複数のマルコフ連鎖を同時にシミュレートする前記ステップが、
    n:=0
    準モンテカルロ点xを使用して、X0,lを初期化する
    ループ:
    − 適切な順序を使用して、状態ベクトルをソートする
    − n:=n+1
    − 次の準モンテカルロ点xを使用して、Xn,lを計算することによって、連鎖を継続させる
    というステップを含む、請求項2に記載のコンピュータグラフィックスシステムの改良。
  11. 状態空間における近接性によって状態を順序づけるステップを含む、請求項10に記載のコンピュータグラフィックスシステムの改良。
  12. ランダム化を含む、請求項11に記載のコンピュータグラフィックスシステムの改良。
  13. 任意の選択されたランダム化を施された任意の選択された点集合又は点列を利用するステップを含む、請求項12に記載のコンピュータグラフィックスシステムの改良。
  14. ランダム化と、以下の技法、即ち、
    n:=0、点列xを選択する
    ランダム化をインスタンス化する
    rand(x)を使用して、X0,lを初期化する
    ループ
    ・ 何らかの順序を使用して、状態ベクトルをソートする
    ・ n:=n+1
    ・ ランダム化をインスタンス化する
    ・ rand(x)を使用して、Xn,lを計算することによって、連鎖を継続させる
    を適用するステップとを含む、請求項11に記載のコンピュータグラフィックスシステムの改良。
  15. 各時間ステップnにおいて前記準モンテカルロ点をランダム化するステップを含み、
    ランダム化する前記ステップが、
    後続のサンプルがそこから取り出される、基数b=2の(t,s)−列を選択するステップと、
    前記サンプルにs次元ランダムベクトルによるXOR演算を施すステップであって、前記ランダムベクトルが、各遷移ステップの後に生成される、ステップと
    を含む、請求項11に記載のコンピュータグラフィックスシステムの改良。
  16. 選択された数の追加的な軌道をオンザフライで追加するステップを含む、請求項15に記載のコンピュータグラフィックスシステムの改良。
  17. 軌道分割を含む、請求項16に記載のコンピュータグラフィックスシステムの改良。
  18. 粒子吸収をシミュレートする技法を利用するステップを含む、請求項17に記載のコンピュータグラフィックスシステムの改良。
  19. ロシアンルーレット法を使用するステップを含む、請求項18に記載のコンピュータグラフィックスシステムの改良。
  20. 明るさ、又は状態のノルムによってソートするステップと、
    空間階層を使用してソートするステップと、
    少なくとも1つの空間充填曲線によって列挙されたバケットを使用してソートするステップと
    を含む、請求項2に記載のコンピュータグラフィックスシステムの改良。
  21. 空間階層を使用してソートするステップが、バイナリ階層を利用するステップを含む、請求項20に記載のコンピュータグラフィックスシステムの改良。
  22. 前記空間階層が、BSPツリー、kDツリー、若しくはBSPツリー構造の他の軸平行サブセットのいずれか、又は境界ボリューム階層、又は規則的ボクセルを含む、請求項21に記載のコンピュータグラフィックスシステムの改良。
  23. バイナリ階層が、選択された発見的手法によって選択された平面を使用して再帰的に細分を行い、
    その後、前記階層のリーフを近接性の順序で列挙するために、前記階層を順序正しく横断することによって、構築される、請求項20に記載のコンピュータグラフィックスシステムの改良。
  24. 前記ツリーを左平衡化させ、前記ツリーを配列データ構造に保存して、前記階層の効率的な横断を可能にするステップを含む、請求項23に記載のコンピュータグラフィックスシステムの改良。
  25. 前記空間階層がリーフを含み、
    前記空間階層を使用してソートするステップが、バケットソーティング及び選択された空間充填曲線を利用するステップをさらに含む、請求項24に記載のコンピュータグラフィックスシステムの改良。
  26. 前記空間階層を使用してソートするステップが、規則的ボクセルを使用するステップをさらに含む、請求項24に記載のコンピュータグラフィックスシステムの改良。
  27. 軸平行境界ボックスによって、レンダリングされる物体の境界を定めるステップと、
    前記物体の選択された点を通過する分割平面を適用することによって、前記境界ボックスを、各々がリーフで終了する、連続的な左ブランチ及び右ブランチに再帰的又は反復的に分割し、それによって、複数のリーフを生成するステップと、
    前記リーフをそれぞれの明るさに従って階層的に順序づけるステップと、
    選択された数のバケットに分割された、選択されたサイズの行列上で、バケットソートを実行するステップと、
    前記行列内をたどるために選択された空間充填曲線を使用するステップであって、個々のバケット内において、より小さな空間充填曲線が、前記行列内の個々のセル内をたどるために使用されるステップと
    を含む、請求項25に記載のコンピュータグラフィックスシステムの改良。
  28. 前記シミュレーションが積分方程式を解くための構成用に動作可能である、請求項2に記載のコンピュータグラフィックスシステムの改良。
  29. 前記シミュレーションが、リアルに見える画像を合成するための光移送シミュレーションを可能にするように動作可能である、請求項28に記載のコンピュータグラフィックスシステムの改良。
  30. 光移送シミュレーションの基礎をなす積分方程式が、経路空間をサンプリングすることがマルコフ連鎖をシミュレートすることに対応するように、経路積分として定式化し直され、その際、経路が、レイトレーシング及び散乱事象によって確立され、
    初期分布が、光源又はセンサの放出特性によって決定され、遷移確率が、前記画像内の表面についての双方向反射分布関数及び双方向表面下散乱分布関数によって決定される、請求項29に記載のコンピュータグラフィックスシステムの改良。
  31. 前記経路積分、初期分布、及び遷移確率を利用することによって、透過効果を処理するステップを含む、請求項30に記載のコンピュータグラフィックスシステムの改良。
  32. 前記経路積分が、高次元準モンテカルロ点を利用することによって、又は低次元準モンテカルロ点をパディングすることによって、解かれる、請求項30に記載のコンピュータグラフィックスシステムの改良。
  33. 光移送シミュレーションの基礎をなす前記積分方程式が、Fredholm積分方程式又はVolterra積分方程式と見なされる、請求項32に記載のコンピュータグラフィックスシステムの改良。
  34. 画像内のピクセルのピクセル値を生成するためのコンピュータグラフィックスシステムであり、
    前記ピクセル値が、シーン内の点を、シミュレートされるカメラの画像平面上に記録されるように表し、
    前記コンピュータグラフィックスシステムが、選択された方向に沿って前記ピクセルからシーン内に向かう少なくとも1つの光線をシミュレートするステップを含む選択されたレイトレーシング法を使用して、画像の前記ピクセル値を生成するように構成され、
    前記レイトレーシング法が、光線と前記シーン内の物体の表面との交わりを計算するステップと、前記シーン内の物体を照明する光線の軌道をシミュレートするステップとをさらに含み、
    軌道をシミュレートする前記ステップが、マルコフ連鎖を使用する、前記コンピュータグラフィックスシステムにおける方法であって、
    準モンテカルロ法を使用して前記マルコフ連鎖をシミュレートするステップを含み、
    マルコフ連鎖をシミュレートする前記ステップが、状態をソートするステップを含み、
    ソートする前記ステップが、近接性ソーティングを含む、方法。
  35. 画像内のピクセルのピクセル値を生成するためのコンピュータグラフィックスシステムであり、
    前記ピクセル値が、シーン内の点を、シミュレートされるカメラの画像平面上に記録されるように表し、
    前記コンピュータグラフィックスシステムが、選択された方向に沿って前記ピクセルからシーン内に向かう少なくとも1つの光線をシミュレートするステップを含む選択されたレイトレーシング法を使用して、画像の前記ピクセル値を生成するように構成され、
    前記レイトレーシング法が、光線と前記シーン内の物体の表面との交わりを計算するステップと、前記シーン内の物体を照明する光線の軌道をシミュレートするステップとをさらに含み、
    軌道をシミュレートする前記ステップが、マルコフ連鎖を使用する、前記コンピュータグラフィックスシステムにおけるシステムであって、
    準モンテカルロ法を使用して前記マルコフ連鎖をシミュレートするための手段を備え、
    マルコフ連鎖をシミュレートするための前記手段が、状態をソートするための手段を備え、
    ソートするための前記手段が、近接性ソーティングのための手段を備える、システム。
  36. 画像内のピクセルのピクセル値を生成するためのコンピュータグラフィックスシステムであり、
    前記ピクセル値が、シーン内の点を、シミュレートされるカメラの画像平面上に記録されるように表し、
    前記コンピュータグラフィックスシステムが、選択された方向に沿って前記ピクセルからシーン内に向かう少なくとも1つの光線をシミュレートするステップを含む選択されたレイトレーシング法を使用して、画像の前記ピクセル値を生成するように構成され、
    前記レイトレーシング法が、光線と前記シーン内の物体の表面との交わりを計算するステップと、前記シーン内の物体を照明する光線の軌道をシミュレートするステップとをさらに含み、
    軌道をシミュレートする前記ステップが、マルコフ連鎖を使用し、
    コンピュータプログラム製品が、コンピュータ可読媒体上に保存されたコンピュータ実行可能プログラムコードを含む、前記コンピュータグラフィックスシステムにおける前記コンピュータ実行可能プログラムコードであって
    準モンテカルロ法を使用して前記マルコフ連鎖をシミュレートするためのコンピュータコード手段を含み、
    マルコフ連鎖をシミュレートするための前記コンピュータコード手段が、状態をソートするためのコンピュータコード手段を含み、
    ソートするための前記コンピュータコード手段が、近接性ソーティングのためのコンピュータコード手段を含む、コンピュータ実行可能プログラムコード。
  37. 非斉次マルコフ連鎖をシミュレートするステップを含む、請求項19に記載のコンピュータグラフィックスシステムの改良。
JP2009524776A 2006-08-15 2007-08-15 準モンテカルロ法を使用するマルコフ連鎖の同時シミュレーション Expired - Fee Related JP4947394B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US82241706P 2006-08-15 2006-08-15
US60/822,417 2006-08-15
PCT/US2007/075966 WO2008022173A2 (en) 2006-08-15 2007-08-15 Simultaneous simulation of markov chains using quasi-monte carlo techniques

Publications (2)

Publication Number Publication Date
JP2010501100A true JP2010501100A (ja) 2010-01-14
JP4947394B2 JP4947394B2 (ja) 2012-06-06

Family

ID=39083085

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009524776A Expired - Fee Related JP4947394B2 (ja) 2006-08-15 2007-08-15 準モンテカルロ法を使用するマルコフ連鎖の同時シミュレーション

Country Status (4)

Country Link
EP (1) EP2052366A2 (ja)
JP (1) JP4947394B2 (ja)
CA (1) CA2660190A1 (ja)
WO (1) WO2008022173A2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011243029A (ja) * 2010-05-19 2011-12-01 International Business Maschines Corporation シミュレーション・システム、方法及びプログラム
JP2013037691A (ja) * 2011-08-04 2013-02-21 Nvidia Corp 加速構造を構築するためのシステム、方法、及びコンピュータプログラムプロダクト

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8131770B2 (en) * 2009-01-30 2012-03-06 Nvidia Corporation System, method, and computer program product for importance sampling of partitioned domains
US10235601B1 (en) 2017-09-07 2019-03-19 7D Labs, Inc. Method for image analysis
US11334762B1 (en) 2017-09-07 2022-05-17 Aurora Operations, Inc. Method for image analysis

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005505810A (ja) * 2001-06-07 2005-02-24 メンタル イメージズ ゲーエムベーハー サンプル点生成のためのリカーシブローテーション(recursiverotations)を用いた決定論的手法(strictlydeterministicmethodologies)を用いた画像レンダリング

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1264281A4 (en) * 2000-02-25 2007-07-11 Univ New York State Res Found ARRANGEMENT AND METHOD FOR PROCESSING AND PLAYING A VOLUME
US7184071B2 (en) * 2002-08-23 2007-02-27 University Of Maryland Method of three-dimensional object reconstruction from a video sequence using a generic model

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005505810A (ja) * 2001-06-07 2005-02-24 メンタル イメージズ ゲーエムベーハー サンプル点生成のためのリカーシブローテーション(recursiverotations)を用いた決定論的手法(strictlydeterministicmethodologies)を用いた画像レンダリング
JP2005506607A (ja) * 2001-06-07 2005-03-03 メンタル イメージス, ゲーエムベーハー グローバルイルミネーションを評価するためのロシアンルーレット法を用いた描画

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011243029A (ja) * 2010-05-19 2011-12-01 International Business Maschines Corporation シミュレーション・システム、方法及びプログラム
US8942962B2 (en) 2010-05-19 2015-01-27 International Business Machines Corporation Method and system for measured value simulation
JP2013037691A (ja) * 2011-08-04 2013-02-21 Nvidia Corp 加速構造を構築するためのシステム、方法、及びコンピュータプログラムプロダクト

Also Published As

Publication number Publication date
CA2660190A1 (en) 2008-02-21
JP4947394B2 (ja) 2012-06-06
WO2008022173A2 (en) 2008-02-21
EP2052366A2 (en) 2009-04-29
WO2008022173A3 (en) 2008-12-04

Similar Documents

Publication Publication Date Title
US7773088B2 (en) Simultaneous simulation of markov chains using quasi-monte carlo techniques
US8411088B2 (en) Accelerated ray tracing
US7952583B2 (en) Quasi-monte carlo light transport simulation by efficient ray tracing
US7499053B2 (en) Real-time precision ray tracing
US7659894B2 (en) Terminating spatial partition hierarchies by a priori bounding memory
JP4858795B2 (ja) 瞬時光線追跡
Jönsson et al. Historygrams: Enabling interactive global illumination in direct volume rendering using photon mapping
WO2009044282A2 (en) Quasi-monte carlo light transport simulation by efficient ray tracing
US20060066616A1 (en) Diffuse photon map decomposition for parallelization of global illumination algorithm
Wang et al. GPU-based out-of-core many-lights rendering
JP4947394B2 (ja) 準モンテカルロ法を使用するマルコフ連鎖の同時シミュレーション
EP1899896A2 (en) Real-time precision ray tracing
Shareef et al. Rapid previewing via volume-based solid modeling
Bruckner Dynamic Visibility‐Driven Molecular Surfaces
Krayer et al. Generating signed distance fields on the GPU with ray maps
Morrical et al. Quick clusters: A GPU-parallel partitioning for efficient path tracing of unstructured volumetric grids
Cook et al. Image-space visibility ordering for cell projection volume rendering of unstructured data
Ali et al. Compressed facade displacement maps
Figueiredo et al. An efficient collision detection algorithm for point cloud models
Byrne et al. Applications of the VOLA format for 3D data knowledge discovery
Wächter et al. Efficient simultaneous simulation of Markov chains
Berk et al. Direct volume rendering of unstructured grids
Gao et al. A GPU algorithm for convex hull
Ye et al. 3D Model Occlusion Culling Optimization Method Based on WebGPU Computing Pipeline.
Tuft System for Collision Detection Between Deformable Models Built on Axis Aligned Bounding Boxes and GPU Based Culling

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111025

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120113

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120207

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120222

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150316

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees