アルゴリズム 1. 提案分布 から 個のサンプル を生成 2. 各サンプルの重み を計算 3. 確率 に従って を選び直してサンプル を生成 M (x) p ^ p(x) M (x , x , ⋯ , x ) 1 2 M w = i M 1 p(x ) i (x ) p ^ i P = i w ∑i=1 M i w i x i y
が与えられる 2. 重み を計算 3. Reservoirのこれまでの重みの総和を更新: 4. サンプル数も更新: 5. の一様乱数 が ならReservoirのサンプルを で置き換える struct Reservoir { ReservoirSample x; // サンプル float w_sum; // 重みの総和 float c; // サンプル数 float ucw; // Unbiased Contribution Weight }; x next p(x ) next w = next M 1 p(x ) next (x ) p ^ next w + sum = w next c += 1 [0, 1) u u < w sum w next x next
を Unbiased Contribution Weight (UCW) という 上の式は と等価 RISのUCWは で与えられる W X E f(X)W = [ X] f(x)dx ∫ Ω W X E[W ∣X] = X p (X) X 1 W = X (X) p ^ w ∑i=1 M i
が出来るだけ変動しないようにすることが分散を減らすために重要 lim V[ w ] → M→∞ ∑i=1 M i 0 C > f 0 0 ≤ f ≤ C f p ^ V[f(X)W ] ≤ X V + [ (X) p ^ f(X) ] C ∥ ∥ + 2 f 2 V w [ i=1 ∑ M i] p ^ 2 V w [ i=1 ∑ M i] f(x) = C (x) f p ^ V[f(X)W ] = X C V w f 2 [ i=1 ∑ M i] p ^ f w i
: Reservoir 1, Reservoir 2のサンプル : Reservoir 1, Reservoir 2のサンプル数 Reservoir 1, Reservoir 2のUCW 1. 重み を計算 2. Reservoir 1の重みの総和を更新: 3. Reservoir 1のサンプル数を更新: 4. の一様乱数 が ならReservoir 1のサンプルをReservoir 2で置き換える x , x 1 2 c , c 1 2 W , W X 1 X 2 w = 2 (x )W c +c 1 2 c 2 p ^ 2 X 2 w + sum = w 2 c + 1 = c 2 [0, 1) u u < w sum w 2
を用いて重みの計算を と置き換える. Constant MIS: Balance Heuristics: Generalized Balance Heuristics m (x) i w (x ) = i i m (x ) (x )W i i p ^ i X i m (x ) = i i c ∑j=1 K j c i m (x ) = i i c p (x ) ∑j=1 K j j i c p (x ) i i i m (x ) = i i c (x ) ∑j=1 K j p ^j i c (x ) ip ^i i
Second hit pointからFirst hit pointに向かう放射輝度をパストレーシングで計算 3. Temporal Resampling 4. Spatial Resampling 5. Reservoirに含まれているサンプルを利用して を評価 PT ReSTIR GI f × G × L × i V