小さなパス トレーサーがあり、いくつかの基本的な BRDF を実装する方法を見つけようとしています。私が使用するパイプラインの簡単な説明を次に示します (再帰なし)。
1) For each pixel:
1.1) For each sample:
1.1.1) I construct a path.
1.1.2) I calculate the contribution of this path.
1.1.3) I calculate the "probability" of this path.
1.1.4) Finally, I calculate the overall color value(taking into account number of samples, "probability" and contribution of the path).
1.2) Take the sum of all samples' values and write it to the pixel.
そこで、ステップ で反射光線の方向を計算し1.1.1) I construct a path
ます。
とりあえず、拡散反射、鏡面反射、光沢反射、屈折を実装しました。ここで、複雑な BRDF を実装したいと思います。たとえば、Cook-Torrance BRDF としましょう。いくつかのコンポーネント (拡散反射と鏡面反射) が含まれていることがわかります。組み合わせを取得するには、これらの光線をどのようにトレースすればよいですか? ランダムにdiffuse_ray/specular_rayの間で選択し、値を(いくつかの係数を掛けて)通常通り蓄積するべきですか? (たとえば、ランダムな値が0.5より大きい場合は拡散光線を追跡し、そうでない場合は鏡面反射光を追跡します)または複数の光線を追跡する必要がありますか?各交差点から?
通常、物理ベースのレンダラーではどのように実装されますか?
PS誰かがこのトピックに関する良い記事を知っていれば、私はそれらを見てうれしいです. pbrt を読み込もうとしましたが、非常に複雑で巨大に思えます。また、カメラのモデルやその他のもののように、実装が異なるものもあります。