JP2010501100A - 準モンテカルロ法を使用するマルコフ連鎖の同時シミュレーション - Google Patents
準モンテカルロ法を使用するマルコフ連鎖の同時シミュレーション Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-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
n:=0
準モンテカルロ点xlを使用して、X0,lを初期化する。
ループ:
− 適切な順序を使用して、状態ベクトルをソートする。
− n:=n+1
− 後続の準モンテカルロ点xlを使用して、Xn,lを計算することによって、連鎖を継続させる。
n:=0、点列xlを選択する。
ランダム化をインスタンス化する。
rand(xl)を使用して、X0,lを初期化する。
ループ
・ 何らかの順序を使用して、状態ベクトルをソートする。
・ n:=n+1
・ ランダム化をインスタンス化する。
・ rand(xl)を使用して、Xn,lを計算することによって、連鎖を継続させる。
軸平行境界ボックス(axis−aligned bounding box)によって、レンダリングされる物体の境界を定めるステップと、
物体の選択された点を通過する分割平面を適用することによって、境界ボックスを、各々がリーフで終了する、連続的な左ブランチ及び右ブランチに再帰的又は反復的に分割し、それによって、複数のリーフを生成するステップと、
リーフをそれぞれの明るさに従って階層的に順序づけるステップと、
選択された数のバケットに分割された、選択されたサイズの行列上で、バケットソートを実行するステップと、
行列内をたどるために選択された空間充填曲線を使用するステップであって、個々のバケット内において、より小さな空間充填曲線が、行列内の個々のセル内をたどるために使用される、ステップと
を含む。
I.リアルタイム高精度レイトレーシング
II.マルコフ連鎖及び準モンテカルロ法を使用してシミュレートされる光線のためのソーティング戦略
図3は、本発明の一態様による全体的な方法200を示す図である。この方法は、コンピュータグラフィックスシステムに関連して実施され、システムでは、画像内の各ピクセルについて、ピクセル値が生成される。生成された各ピクセル値は、シーン内の点を、シミュレートされるカメラの画像平面上に記録されるように表す。コンピュータグラフィックスシステムは、選択されたレイトレーシング法を使用して、画像のピクセル値を生成するように構成される。選択されたレイトレーシング法は、選択された方向に沿ってピクセルからシーンに向かって放たれた少なくとも1つの光線を含む光線ツリー(ray tree)の使用を含み、光線とシーン内の物体(及び/又は物体の表面)との交わりの計算をさらに含む。
以下に説明される本発明の態様は、光線表面交わりを計算するためにレイトレーシング法を使用する、画像内のピクセルのピクセル値を計算するためにコンピュータ又は他のデジタルプロセッサが使用されるコンピュータグラフィックス及び他の応用例における使用に適した、光輸送の効率的なフォトリアリスティックシミュレーションのための方法、技法、及びシステムを提供する。
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つの単語が別の単語の後に続く相対頻度の計算に基づいて、マルコフ連鎖を使用してモデル化された。これらの遷移確率を使用して、英語の文を生成することが可能である。例えば、待ち行列、ブラウン運動、粒子輸送の分析、及び本説明に特に関係が深い光輸送シミュレーションを含む、他の多くの進展プロセスも、マルコフ連鎖を使用して説明することができる。
効率を増大させるため、マルコフ連鎖は、同時にシミュレートされ得る。準モンテカルロ法を用いたマルコフ連鎖の同時シミュレーションを中間ソーティングステップによって改善するというアイデアは、ボルツマン方程式を扱い、後に熱方程式を扱った一連の論文において、最初にLecotによって紹介された。その後、このアイデアは、グリッド上で熱方程式を解くために、Morokoff及びCaflischによって使用及び洗練され、最近、当該技法のランダム化バージョンと、希少事象シミュレーションのための分割とを組み込むために、L’Ecuyer、Tuffin、Demers他によって拡張された。独立した研究が、上記の手法に関連した方法で、コンピュータグラフィックスの分野において行われてきた。
1次元問題についての決定論的技法が今から説明される。Lecotにおいて提示された技法は、初期分布
及び遷移行列
を有する離散状態空間E上で、マルコフ連鎖を同時にシミュレートする。基数bの(t,2)−列
を使用して、N=bm個の連鎖が、並列にシミュレートされ、ここで、Xn,lは、時間ステップnにおける連鎖lの状態であり、
は、ゼロを含む自然数の集合である。さらに、当該技法は、m>tについて、N=bm個の後続要素xi,1が、基数bの(0,m,1)−ネットを形成することを要求する。Lecotに示されるように、以下の基準が満たされる場合、当該技法は収束する。
n:=0
0≦l<Nについて、xl,2を使用して、
を初期化する。
ループ
何らかの順序を使用して、状態ベクトルをソートする。
n:=n+1
0≦l<Nについて、
を使用して、
を計算することによって、連鎖を継続させる。
一様分布を仮定した場合、安定なソーティングは、状態の順序を変化させないことが分かる。実際、収束条件は無変化であり続けるので、すべての置換は省略することができる。したがって、上述の技法は、簡略化することができる。
について検討する。元の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)において定義されており、同文献は、その全体があたかも説明されているかのように、参照により本明細書に組み込まれる。
についての簡単なコード例は、T.Kollig及びA.Keller、「Efficient Multidimensional Sampling」、Computer Graphics Forum、21(3):557〜563(2002年9月)において提供されており、同文献は、その全体があたかも説明されているかのように、参照により本明細書に組み込まれる。
を初期化する。その後、当該技法は、状態をソートすること(以下のセクション3において詳細に説明される)によって続行され、Pに従った遷移を実現するため、0≦l≦Nについて、
を使用して、
を計算することによって、連鎖を継続させる。遷移の次の状態を選択するためのインデックス
は、実際には、基数2のvan der Corput列Φ2を使用し、これは、(0,1)−列であり、したがって、(0,m,1)−ネットの系列である。例えば、m=3>t=0を選択すると、N=23=8となり、
について、
となる。したがって、異なる時間ステップnの間に使用されるすべてのインデックスは、実際には、すべてのmについて同一である。
を仮定すると、収束定理(convergence theorem)が依然として適用されるが、より重要な安定なソーティングは、状態の順序を変化させない。したがって、実際には、インデックス置換は、収束条件に触れることなく、恒等置換(identity)として選択できることになる。同じことが、初期状態X0,lを選択するために適用され、それが、(0,2)−列 xlの第2の要素だけを使用する、以下の簡略化された、しかし等価の技法をもたらす。
・ n:=0
・ 0≦l<2mについて、xl,2を使用して、X0,lを初期化する。
・ ループ
− 適切な順序を使用して、状態ベクトルをソートする。
− n:=n+1
− 0≦l<2mについて、ΦS(l+n・2m)を使用して、Xn,lを計算することによって、連鎖を継続させる。
多くの応用例において観測された、当該方式の改善された収束は、Pに従ったXn,lの遷移を実現するために使用されるサンプル
ΦS(l+n・2m)
の構造によって引き起こされることが分かる。これは、暗黙の階層構造を露呈させる、根基逆関数(radical inverse)の分解
によって理解することができ、ΦS(l)は、状態数lに依存する間隔1/(2m)を有するオフセットであり、一方、シフトΦS(n)は、時間ステップnにおけるすべての区間について同一である。図11は、シフトΦS(n)を図説する2次元配列700を示している。
(t,m,s)−ネットの系列である、基底bの(t,s)−列を使用して、当該方式は、s次元でも機能する。ソーティング後に状態が同様になるマルコフ連鎖は、低食い違い量サンプルによる遷移確率のサンプリングを保証される。s次元での簡略化技法は、今では以下のような様相を呈する。
・ n:=0
・ 準モンテカルロ点xlを使用して、X0,lを初期化する。
・ ループ
− 適切な順序を使用して、状態ベクトルをソートする。
− n:=n+1
− (t,s)−列からの後続のサンプルxlを使用して、Xn,lを計算することによって、連鎖を継続させる。
より高次元における決定論的技法の収束についての一般的証明は現在存在していないが、当該技法は、各時間ステップnにおいて準モンテカルロ点を新たにランダム化することによって不偏になる。実際には、これはパディングされた複製のサンプリングの場合であるので、不偏性についての議論はより簡単になる。しかし、ランダム化は、特別な注意を払うに値する。
以下は、s次元問題のためのランダム化技法である。
n:=0、点列xlを選択する。
ランダム化をインスタンス化する。
0≦l<Nについて、rand(xl)を使用して、X0,lを初期化する。
ループ
・ 適切な順序を使用して、状態ベクトルをソートする。
・ n:=n+1
・ ランダム化をインスタンス化する。
・ 0≦l<Nについて、rand(xl)を使用して、Xn,lを計算することによって、連鎖を継続させる。
数値的な証拠のため、上述の技法が、リアリスティックな画像を合成するための光輸送シミュレーションに適用される。基礎をなす積分方程式は、経路積分として定式化し直すことができる。
光輸送の基礎をなす積分方程式は、Fredholm積分方程式又はVolterra積分方程式と見なすことができるが、そのことは実施にとって重要となる。
をもたらし、他方で、xとは独立に単位球S2の全方向にわたって積分が実行されるような、第2種のFredholm積分方程式をもたらす。
への写像は、当技術分野において知られている。
上述の技法の効率を増大させるために、ソーティングを使用することが可能である。本明細書で説明されるように、(t,s)−列は、基底bの(t,m,s)−ネットの系列であり、Halton列及びその変形に類似している。類似の状態Xn,lは、連続する点を使用する。したがって、状態は、状態空間における近接性によって順序づけられるべきである。状態空間において状態がより近いほど、状態空間はより一様に探索される。
クイックソートの平均計算量は、O(NlogN)であるが、あるシナリオの場合、基数ソート(radix sort)など、O(N)の技法すら存在し、しかし、それは追加の一時メモリを必要とする。これらの1次元ソーティング技法を使用するため、多次元状態は、1次元まで引き下げられなければならない。多くの選択肢の中で、しばしば、何らかのノルム
が、状態空間上で順序を定義するために使用される。しかし、類似のノルムが、必ずしも状態空間における近接性を示すわけではない。これについての簡単な例は、輸送シミュレーションにおける、空間内で遠く離れて配置された粒子の類似のエネルギーである。
多次元ソーティングを可能にする第2の可能性は、状態上で順序を定義するための、空間階層の使用である。この目的のために効率的なデータ構造は、BSPツリー、その特殊な軸平行サブセット、kDツリー、又は境界ボリューム階層である。そのようなバイナリ階層の構築は簡単である。空間は、何らかの発見的方法によって選択された平面を使用して、再帰的に細分される。構築は、平均でO(NlogN)で実行される。階層の順序正しい横断が、近接性の順序でリーフを列挙する。この横断は、ツリーが左平衡化され、その結果、配列内に保存できる場合、自明なものとなる。
線形時間の計算量を保証するため、バケットソーティングが使用できる。セクション2.1で略述された簡単な技法のs次元への拡張では、多次元の状態が、状態の第1の次元によってバケットに分類され、その後、各バケットの状態が、第2の次元に従ってバケットに分類され、以降も同様に行われた。この手順は、うまく機能するが、状態空間内で近い状態がソーティング手順によって引き離され得るという問題を有する。加えて、各次元の階層構造が使用されなければならず、それが、同時にシミュレートされるマルコフ連鎖の数において、次元の呪い(curse of dimension)を引き起こす。
上述の説明に続いて、不偏誤差推定を得るために、Cranley−Patterson回転によってランダム化された、Faureによる置換を行った、Halton列が使用された。ソーティングについては、Z曲線順序が、特定のセッティングに対して最良の結果をもたらし、以下の実験のために使用された。ランダム化の省略は結果の精度に顕著な影響をもたないことが数値的に検証されたことにさらに留意されたい。数値的な実験では、マルコフ連鎖をシミュレートするための4つの手法が比較された。
上述のシステム及び技法は、従来技術にまさる多くの利点を有することが分かる。これらは、以下のもの、即ち、直観的には系列特性に焦点が絞られた技法の簡略化、改善された収束、線形の計算量、及び光輸送シミュレーションへの適用を含む。上述のシステム及び技法は、技法を積分として定式化することに一歩近づき、その点において、一貫性を示すことが相対的に容易である。
図24〜図30は、本発明の上述の態様による、多くの技法及び副技法のフローチャートである。個々のボックス及びボックスのグループを含む、以下の技法及び副技法の一部又は全部は、本明細書で説明された本発明を実施するために、望みどおりに組み合わされてよいことに留意されたい。
ボックス1001:準モンテカルロ法を使用して、マルコフ連鎖をシミュレートする。
ボックス1002:状態をソートする。
(近接性ソーティングを含む、状態によるソーティングを含むことができる)
ボックス1003:複数のマルコフ連鎖を同時にシミュレートする。
(準モンテカルロ点を利用できる。Halton列、Halton列の変形、格子列、又は(t,s)−列のいずれかを使用して、準モンテカルロ点を選択できる。任意の数の連鎖を利用できる。軌道分割によるなど、軌道をオンザフライで追加するステップを含むことができる。ロシアンルーレット法又は粒子吸収をシミュレートする他の技法を利用できる)
ボックス1101:n:=0
(nを0に等しく設定する)
ボックス1102:準モンテカルロ点xlを使用して、X0,lを初期化する。
ボックス1103:適切な順序を使用して、状態ベクトルをソートする。
ボックス1104:n:=n+1
(nを1だけ増やす)
ボックス1105:次の準モンテカルロ点xlを使用して、Xn,lを計算することによって、連鎖を継続させる。
(任意の選択されたランダム化を施された任意の選択された点集合又は点列、及び状態空間における近接性による状態の順序づけも利用できる)
ボックス1103〜1105は、ループ内で実行される。
ボックス1201:明るさ、又は状態のノルムによってソートする。
ボックス1202:空間階層を使用してソートする。
(バイナリ階層、又はBSPツリー、kDツリー、若しくはBSPツリー構造の他の軸平行サブセットのいずれか、又は境界ボリューム階層、又は規則的ボクセルを利用するステップを含むことができる。バイナリ階層は、選択された発見的手法によって選択された平面を使用して再帰的に細分を行い、その後、階層のリーフを近接性の順序で列挙するために、階層を順序正しく横断することによって構築することができる。階層の効率的な横断を可能にするために、ツリーを左平衡化させるステップと、ツリーを配列データ構造に保存するステップも含むことができる)
ボックス1203:少なくとも1つの空間充填曲線によって列挙されたバケットを使用してソートする。
ボックス1301:n:=0、点列xlを選択する。
ボックス1302:ランダム化をインスタンス化する。
ボックス1303:rand(xl)を使用して、X0,lを初期化する。
ボックス1304:何らかの順序を使用して、状態ベクトルをソートする。
ボックス1305:n:=n+1
ボックス1306:ランダム化をインスタンス化する。
ボックス1307:rand(xl)を使用して、Xn,lを計算することによって、連鎖を継続させる。
ボックス1304〜1307は、ループ内で実行される。
ボックス1401:後続のサンプルがそこから取り出される、基数b=2の(t,s)−列を選択する。
ボックス1402:サンプルにs次元ランダムベクトルによるXOR演算を施し、ランダムベクトルは、各遷移ステップの後に生成される。
ボックス1501:軸平行境界ボックスによって、レンダリングされる物体の境界を定める。
ボックス1502:物体の選択された点を通過する分割平面を適用することによって、境界ボックスを、各々がリーフで終了する、連続的な左ブランチ及び右ブランチに再帰的又は反復的に分割し、それによって、複数のリーフを生成する。
ボックス1503:リーフをそれぞれの明るさに従って階層的に順序づける。
ボックス1504:選択された数のバケットに分割された、選択されたサイズの行列上で、バケットソートを実行する。
ボックス1505:行列内をたどるために選択された空間充填曲線を使用し、個々のバケット内において、より小さな空間充填曲線が、行列内の個々のセル内をたどるために使用される。
ボックス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に記載のコンピュータグラフィックスシステムの改良。
- 前記準モンテカルロ点が、Halton列、Halton列の変形、格子列、又は(t,s)−列のいずれかを使用して選択される、請求項3に記載のコンピュータグラフィックスシステムの改良。
- 複数のマルコフ連鎖を同時にシミュレートする前記ステップが、任意の数の連鎖を利用する、請求項2に記載のコンピュータグラフィックスシステムの改良。
- 複数のマルコフ連鎖を同時にシミュレートする前記ステップが、追加的な軌道をオンザフライで追加するステップをさらに含む、請求項2に記載のコンピュータグラフィックスシステムの改良。
- 複数のマルコフ連鎖を同時にシミュレートする前記ステップが、軌道分割をさらに含む、請求項2に記載のコンピュータグラフィックスシステムの改良。
- 複数のマルコフ連鎖を同時にシミュレートする前記ステップが、粒子吸収をシミュレートする技法を利用するステップを含む、請求項2に記載のコンピュータグラフィックスシステムの改良。
- 複数のマルコフ連鎖を同時にシミュレートする前記ステップが、ロシアンルーレット法を使用するステップをさらに含む、請求項8に記載のコンピュータグラフィックスシステムの改良。
- s次元問題について、複数のマルコフ連鎖を同時にシミュレートする前記ステップが、
n:=0
準モンテカルロ点xlを使用して、X0,lを初期化する
ループ:
− 適切な順序を使用して、状態ベクトルをソートする
− n:=n+1
− 次の準モンテカルロ点xlを使用して、Xn,lを計算することによって、連鎖を継続させる
というステップを含む、請求項2に記載のコンピュータグラフィックスシステムの改良。 - 状態空間における近接性によって状態を順序づけるステップを含む、請求項10に記載のコンピュータグラフィックスシステムの改良。
- ランダム化を含む、請求項11に記載のコンピュータグラフィックスシステムの改良。
- 任意の選択されたランダム化を施された任意の選択された点集合又は点列を利用するステップを含む、請求項12に記載のコンピュータグラフィックスシステムの改良。
- ランダム化と、以下の技法、即ち、
n:=0、点列xiを選択する
ランダム化をインスタンス化する
rand(xl)を使用して、X0,lを初期化する
ループ
・ 何らかの順序を使用して、状態ベクトルをソートする
・ n:=n+1
・ ランダム化をインスタンス化する
・ rand(xl)を使用して、Xn,lを計算することによって、連鎖を継続させる
を適用するステップとを含む、請求項11に記載のコンピュータグラフィックスシステムの改良。 - 各時間ステップnにおいて前記準モンテカルロ点をランダム化するステップを含み、
ランダム化する前記ステップが、
後続のサンプルがそこから取り出される、基数b=2の(t,s)−列を選択するステップと、
前記サンプルにs次元ランダムベクトルによるXOR演算を施すステップであって、前記ランダムベクトルが、各遷移ステップの後に生成される、ステップと
を含む、請求項11に記載のコンピュータグラフィックスシステムの改良。 - 選択された数の追加的な軌道をオンザフライで追加するステップを含む、請求項15に記載のコンピュータグラフィックスシステムの改良。
- 軌道分割を含む、請求項16に記載のコンピュータグラフィックスシステムの改良。
- 粒子吸収をシミュレートする技法を利用するステップを含む、請求項17に記載のコンピュータグラフィックスシステムの改良。
- ロシアンルーレット法を使用するステップを含む、請求項18に記載のコンピュータグラフィックスシステムの改良。
- 明るさ、又は状態のノルムによってソートするステップと、
空間階層を使用してソートするステップと、
少なくとも1つの空間充填曲線によって列挙されたバケットを使用してソートするステップと
を含む、請求項2に記載のコンピュータグラフィックスシステムの改良。 - 空間階層を使用してソートするステップが、バイナリ階層を利用するステップを含む、請求項20に記載のコンピュータグラフィックスシステムの改良。
- 前記空間階層が、BSPツリー、kDツリー、若しくはBSPツリー構造の他の軸平行サブセットのいずれか、又は境界ボリューム階層、又は規則的ボクセルを含む、請求項21に記載のコンピュータグラフィックスシステムの改良。
- バイナリ階層が、選択された発見的手法によって選択された平面を使用して再帰的に細分を行い、
その後、前記階層のリーフを近接性の順序で列挙するために、前記階層を順序正しく横断することによって、構築される、請求項20に記載のコンピュータグラフィックスシステムの改良。 - 前記ツリーを左平衡化させ、前記ツリーを配列データ構造に保存して、前記階層の効率的な横断を可能にするステップを含む、請求項23に記載のコンピュータグラフィックスシステムの改良。
- 前記空間階層がリーフを含み、
前記空間階層を使用してソートするステップが、バケットソーティング及び選択された空間充填曲線を利用するステップをさらに含む、請求項24に記載のコンピュータグラフィックスシステムの改良。 - 前記空間階層を使用してソートするステップが、規則的ボクセルを使用するステップをさらに含む、請求項24に記載のコンピュータグラフィックスシステムの改良。
- 軸平行境界ボックスによって、レンダリングされる物体の境界を定めるステップと、
前記物体の選択された点を通過する分割平面を適用することによって、前記境界ボックスを、各々がリーフで終了する、連続的な左ブランチ及び右ブランチに再帰的又は反復的に分割し、それによって、複数のリーフを生成するステップと、
前記リーフをそれぞれの明るさに従って階層的に順序づけるステップと、
選択された数のバケットに分割された、選択されたサイズの行列上で、バケットソートを実行するステップと、
前記行列内をたどるために選択された空間充填曲線を使用するステップであって、個々のバケット内において、より小さな空間充填曲線が、前記行列内の個々のセル内をたどるために使用されるステップと
を含む、請求項25に記載のコンピュータグラフィックスシステムの改良。 - 前記シミュレーションが積分方程式を解くための構成用に動作可能である、請求項2に記載のコンピュータグラフィックスシステムの改良。
- 前記シミュレーションが、リアルに見える画像を合成するための光移送シミュレーションを可能にするように動作可能である、請求項28に記載のコンピュータグラフィックスシステムの改良。
- 光移送シミュレーションの基礎をなす積分方程式が、経路空間をサンプリングすることがマルコフ連鎖をシミュレートすることに対応するように、経路積分として定式化し直され、その際、経路が、レイトレーシング及び散乱事象によって確立され、
初期分布が、光源又はセンサの放出特性によって決定され、遷移確率が、前記画像内の表面についての双方向反射分布関数及び双方向表面下散乱分布関数によって決定される、請求項29に記載のコンピュータグラフィックスシステムの改良。 - 前記経路積分、初期分布、及び遷移確率を利用することによって、透過効果を処理するステップを含む、請求項30に記載のコンピュータグラフィックスシステムの改良。
- 前記経路積分が、高次元準モンテカルロ点を利用することによって、又は低次元準モンテカルロ点をパディングすることによって、解かれる、請求項30に記載のコンピュータグラフィックスシステムの改良。
- 光移送シミュレーションの基礎をなす前記積分方程式が、Fredholm積分方程式又はVolterra積分方程式と見なされる、請求項32に記載のコンピュータグラフィックスシステムの改良。
- 画像内のピクセルのピクセル値を生成するためのコンピュータグラフィックスシステムであり、
前記ピクセル値が、シーン内の点を、シミュレートされるカメラの画像平面上に記録されるように表し、
前記コンピュータグラフィックスシステムが、選択された方向に沿って前記ピクセルからシーン内に向かう少なくとも1つの光線をシミュレートするステップを含む選択されたレイトレーシング法を使用して、画像の前記ピクセル値を生成するように構成され、
前記レイトレーシング法が、光線と前記シーン内の物体の表面との交わりを計算するステップと、前記シーン内の物体を照明する光線の軌道をシミュレートするステップとをさらに含み、
軌道をシミュレートする前記ステップが、マルコフ連鎖を使用する、前記コンピュータグラフィックスシステムにおける方法であって、
準モンテカルロ法を使用して前記マルコフ連鎖をシミュレートするステップを含み、
マルコフ連鎖をシミュレートする前記ステップが、状態をソートするステップを含み、
ソートする前記ステップが、近接性ソーティングを含む、方法。 - 画像内のピクセルのピクセル値を生成するためのコンピュータグラフィックスシステムであり、
前記ピクセル値が、シーン内の点を、シミュレートされるカメラの画像平面上に記録されるように表し、
前記コンピュータグラフィックスシステムが、選択された方向に沿って前記ピクセルからシーン内に向かう少なくとも1つの光線をシミュレートするステップを含む選択されたレイトレーシング法を使用して、画像の前記ピクセル値を生成するように構成され、
前記レイトレーシング法が、光線と前記シーン内の物体の表面との交わりを計算するステップと、前記シーン内の物体を照明する光線の軌道をシミュレートするステップとをさらに含み、
軌道をシミュレートする前記ステップが、マルコフ連鎖を使用する、前記コンピュータグラフィックスシステムにおけるシステムであって、
準モンテカルロ法を使用して前記マルコフ連鎖をシミュレートするための手段を備え、
マルコフ連鎖をシミュレートするための前記手段が、状態をソートするための手段を備え、
ソートするための前記手段が、近接性ソーティングのための手段を備える、システム。 - 画像内のピクセルのピクセル値を生成するためのコンピュータグラフィックスシステムであり、
前記ピクセル値が、シーン内の点を、シミュレートされるカメラの画像平面上に記録されるように表し、
前記コンピュータグラフィックスシステムが、選択された方向に沿って前記ピクセルからシーン内に向かう少なくとも1つの光線をシミュレートするステップを含む選択されたレイトレーシング法を使用して、画像の前記ピクセル値を生成するように構成され、
前記レイトレーシング法が、光線と前記シーン内の物体の表面との交わりを計算するステップと、前記シーン内の物体を照明する光線の軌道をシミュレートするステップとをさらに含み、
軌道をシミュレートする前記ステップが、マルコフ連鎖を使用し、
コンピュータプログラム製品が、コンピュータ可読媒体上に保存されたコンピュータ実行可能プログラムコードを含む、前記コンピュータグラフィックスシステムにおける前記コンピュータ実行可能プログラムコードであって
準モンテカルロ法を使用して前記マルコフ連鎖をシミュレートするためのコンピュータコード手段を含み、
マルコフ連鎖をシミュレートするための前記コンピュータコード手段が、状態をソートするためのコンピュータコード手段を含み、
ソートするための前記コンピュータコード手段が、近接性ソーティングのためのコンピュータコード手段を含む、コンピュータ実行可能プログラムコード。 - 非斉次マルコフ連鎖をシミュレートするステップを含む、請求項19に記載のコンピュータグラフィックスシステムの改良。
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)
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)
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005505810A (ja) * | 2001-06-07 | 2005-02-24 | メンタル イメージズ ゲーエムベーハー | サンプル点生成のためのリカーシブローテーション(recursiverotations)を用いた決定論的手法(strictlydeterministicmethodologies)を用いた画像レンダリング |
Family Cites Families (2)
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 |
-
2007
- 2007-08-15 WO PCT/US2007/075966 patent/WO2008022173A2/en active Application Filing
- 2007-08-15 CA CA002660190A patent/CA2660190A1/en not_active Abandoned
- 2007-08-15 JP JP2009524776A patent/JP4947394B2/ja not_active Expired - Fee Related
- 2007-08-15 EP EP07814103A patent/EP2052366A2/en not_active Withdrawn
Patent Citations (2)
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)
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 |