5

小さなパス トレーサーがあり、いくつかの基本的な 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 を読み込もうとしましたが、非常に複雑で巨大に思えます。また、カメラのモデルやその他のもののように、実装が異なるものもあります。

4

1 に答える 1

2

最初のステップは、光線がどのように跳ね返るかを BRDF に決定させることです。複数の方法の組み合わせである場合は、BRDF で各方法に確率を割り当て、与えられた確率に従って BRDF に 1 つを選択させます。

たとえば、鏡面反射と拡散反射を組み合わせた BRDF が必要だとします。BRDF をインスタンス化するとき、60% のスペキュラーと 40% のディフューズが必要であることを伝えることができます。次に、パス トレーサーが BRDF にクエリを実行して反射した光線の方向を取得すると、BRDF は 60% の確率で鏡面光線を、40% の確率で拡散光線を内部的に計算できます。

編集 - 別の、おそらくより正確なアプローチは、BRDF が提供された確率を使用して、2 つの方法の間を補間することによって反射方向を生成することです。上記の例では、クエリを実行すると、BRDF はすべての交点についてスペキュラー レイとディフューズ レイを計算し、計算されたスペキュラー レイの 60% と計算されたディフューズ レイの 40% の線形補間を方向とする新しいレイを返します。

于 2016-10-27T15:20:02.660 に答える