現在、モンテカルロパストレーサーを実装しようとしています。私はいくつかの研究を行ってきましたが、材料への一般的なアプローチは、階層化モデルを使用することです。このようなもの:
光が表面に当たると、フレネルは、その光のどれだけが最初の層で反射され、どれだけが2番目の層に行くかなどを示します。
それで、私は似たようなことをしましたが、よりシンプルになりました。鏡面反射の1つのレイヤーと拡散の1つのレイヤーだけです。透過率はまだありません。これまでのところ、拡散反射光には単純なコサイン加重brdfを使用し、鏡面反射にはCook-Torranceマイクロファセットモデルを使用しています。
ここで難しい部分があります:光線が表面に到達したらどうすればよいですか?通常、表面材料に対応するbrdfを選択し、入射光の方向をサンプリングし、brdfを評価し、正しい確率分布関数で除算します。
しかし、ここでは、サーフェスヒットは事実上複数のマテリアルに対応しています。これを処理する素朴な方法は、各レイヤーヒットに対して1回サンプリングすることです。しかし、これは明らかに大きなパフォーマンスヒットの原因であり、私の道が事実上ツリーになります。
より良い解決策はありますか?
1
材料層を「モンテカルロ」にできませんか?たとえば、反射率に応じて各レイヤーに重みを付け、それに基づいてランダムに1つ選択します。より深い層では、その上のすべての層の吸収の合計に基づいて減衰が必要になります。
—
-PaulHK
PaulHKそれはまさに、パストレーサーで行っていることです。レイヤー間の各インターフェイスのロシアンルーレットなので、まったく分岐しません。残念ながら、私の実装はまだ完了していないため、実際のパフォーマンスに関する情報はありません。Andrea WeidlichとAlexander Wilkieの論文「Arbitrarily Layered Micro-Facet Surfaces」に基づいて実装しましたが、Wenzel Jakobのフレームワーク(ステファンの回答で指摘されている)よりも制限されているようです。非常に良い結果を生成し、実装がはるかに簡単です。
—
クリスチャンパゴット