免責事項:環境マップサンプリングの最新技術についてはわかりません。実際、このトピックに関する知識はほとんどありません。したがって、これは完全な答えではありませんが、数学的に問題を定式化し、分析します。私は主に自分自身でこれを行いますので、自分自身でそれを明確にしますが、OPや他の人がそれを役に立つと思うことを願っています。
ある点で直接照明を計算したい、つまり積分
値を知りたい
ここで、はBSDF関数です(後で有用になる法線への依存を明示的に示します)、は環境マップの放射輝度、余弦項は、(視認性と共にあるその何のためのものである IE)であれば
I=∫S2f(ωi,ωo,n)L(ωi)(ωi⋅n)+dωi
f(ωi,ωo,n)L(ωi)(ωi⋅n)++(ωi⋅n)+=0(ωi⋅n)<0
確率密度関数に関するサンプル を生成することにより、この積分を推定します。推定量は
Nω1i,…,ωNip(ωi)
I≈1N∑k=1Nf(ωki,ωo,n)L(ωki)(ωki⋅n)+p(ωki)
問題は、許容可能な時間内にサンプルを生成でき、上記の推定量の分散が適度に小さいように、pdfをどのように選択するかです。p
最善の方法被積分関数比例する
選択
しますこのpdfに従ってサンプルを生成するのは非常に高価なので、実際には役に立ちません。p
p(ωi)∼f(ωi,ωo,n)L(ωi)(ωi⋅n)+
OPが提案する方法:
方法1:余弦項に比例する
選択する方法2:EMに比例する
選択するp
p(ωi)∼(ωi⋅n)+
pp(ωi)∼L(ωi)
言及された論文の名前に基づいて、私はそれらが何をするかを部分的に推測することができます(残念ながら、私は今それらを読む時間とエネルギーを持っていません)。しかし、彼らがおそらく何をするかを議論する前に、パワーシリーズについて少し話しましょう:D
1つの実変数の関数、たとえば。その後、適切に動作する場合、べき級数
ますは定数です。これは近似するために使用することができるいくつかのステップで和を切り捨てることによって
場合十分に高いエラーが本当に小さいです。f(x)
f(x)=∑k=0∞akxk
akfn
f(x)≈∑k=0nakxk
n
2つの変数に関数がある場合、最初の引数でのみ関数を展開できます
ここで、 はのみの関数です。また、両方の引数
で展開できます。ここで、は定数です。したがって、実引数を持つ関数は、その引数の累乗の合計として展開できます。同様のことが、球体で定義された関数に対しても実行できます。f(x,y)
f(x,y)=∑k=0∞bk(y)xk
bk(y)yf(x,y)=∑k,l=0∞cklxkyl
ckl
さて、球で定義された関数、例えば持ちましょう。このような関数は、1つの実パラメーター関数と同様の方法で展開できます
。は定数で、は球面調和関数です。球面調和関数は通常2つのインデックスでインデックス付けされ、球面座標の関数として記述されますが、ここでは重要ではありません。重要なことは、がいくつかの既知の関数の合計として記述できることです。f(ω)
f(ω)=∑k=0∞αkSk(ω)
αkSk(ω)f
球上の2点を取る関数は、最初の引数
またはその両方の引数
f(ω,ω′)
f(ω,ω′)=∑k=0∞βk(ω′)Sk(ω)
f(ω,ω′)=∑k,l=0∞γklSk(ω)Sl(ω′)
では、これはどのように役立つのでしょうか?
CMUNSM(クレイジーメンタルノーサンプリングノーメソッド)を提案し ます:すべての関数、すなわち
我々はにこれを接続した場合積分
f(ωi,ωo,n)L(ωi)(ωi⋅n)+=∑k,l,m=0∞αklmSk(ωi)Sl(ωo)Sm(n)=∑n=0∞βnSn(ω)=∑p,q=0∞γpqSp(ωi)Sq(n)
I=∑k,l,m,n,p,q=0∞αklmβnγpqSl(ωo)Sm(n)Sq(n)∫S2Sk(ωi)Sn(ω)Sp(ωi)dωi
積分値事前に計算してからを計算できるため、実際にはモンテカルロは必要ありません。合計、最初のいくつかの用語のみを合計します)、望ましい結果が得られます。∫S2Sk(ωi)Sn(ω)Sp(ωi)dωi
これはすべて素晴らしいことですが、BSDFまたは環境マップの展開がわからないか、展開が非常にゆっくり収束するため、合理的に正確な答えを得るには、合計で多くの用語を取る必要があります。
そのため、すべての引数を拡張することは考えていません。調査する価値のある方法の1つは、BSDFを無視して環境マップのみを展開することです。つまり、
pdfになります:
P (ω I)〜K Σ N = 0 β N S N(ω I)(ω ⋅ N )+
L(ωi)≈∑n=0KβnSn(ωi)
p(ωi)∼∑n=0KβnSn(ωi)(ω⋅n)+
に対してこれを行う方法はすでに知っています。これはメソッド1に他なりません。私の推測では、それはより高い論文の1つで行われています。KK=0K
さらなる拡張。異なる引数で異なる関数を展開し、上記と同様のことを行うことができます。別のことは、異なる基準で拡張できることです。つまり、球面調和関数ではなく異なる関数を使用します。
これがこのトピックに対する私の見解です。少なくとも少しでもお役に立てば幸いです。そして今度はGoTとベッドに向かいます。