パストレーサー-多層材料と重要度サンプリング


12

現在、モンテカルロパストレーサーを実装しようとしています。私はいくつかの研究を行ってきましたが、材料への一般的なアプローチは、階層化モデルを使用することです。このようなもの:

ここに画像の説明を入力してください

光が表面に当たると、フレネルは、その光のどれだけが最初の層で反射され、どれだけが2番目の層に行くかなどを示します。

それで、私は似たようなことをしましたが、よりシンプルになりました。鏡面反射の1つのレイヤーと拡散の1つのレイヤーだけです。透過率はまだありません。これまでのところ、拡散反射光には単純なコサイン加重brdfを使用し、鏡面反射にはCook-Torranceマイクロファセットモデルを使用しています。

ここで難しい部分があります:光線が表面に到達したらどうすればよいですか?通常、表面材料に対応するbrdfを選択し、入射光の方向をサンプリングし、brdfを評価し、正しい確率分布関数で除算します。

しかし、ここでは、サーフェスヒットは事実上複数のマテリアルに対応しています。これを処理する素朴な方法は、各レイヤーヒットに対して1回サンプリングすることです。しかし、これは明らかに大きなパフォーマンスヒットの原因であり、私の道が事実上ツリーになります。

より良い解決策はありますか?


1
材料層を「モンテカルロ」にできませんか?たとえば、反射率に応じて各レイヤーに重みを付け、それに基づいてランダムに1つ選択します。より深い層では、その上のすべての層の吸収の合計に基づいて減衰が必要になります。
-PaulHK

PaulHKそれはまさに、パストレーサーで行っていることです。レイヤー間の各インターフェイスのロシアンルーレットなので、まったく分岐しません。残念ながら、私の実装はまだ完了していないため、実際のパフォーマンスに関する情報はありません。Andrea WeidlichとAlexander Wilkieの論文「Arbitrarily Layered Micro-Facet Surfaces」に基づいて実装しましたが、Wenzel Jakobのフレームワーク(ステファンの回答で指摘されている)よりも制限されているようです。非常に良い結果を生成し、実装がはるかに簡単です。
クリスチャンパゴット

回答:


7

Wenzel Jakobらは、SIGGRAPH 2014 でレイヤードマテリアルのフレームワークを発表しました。セクション6.2では、重要度サンプリングについて説明しています。方程式よりもコードを好む場合、メソッドはMitsubaレンダラーで実装されます


2
Jakob等による方法に注意してください。特殊なフーリエ基底表現で表形式のBSDFデータをレンダリングすることに依存しています。詳細については、対応する技術レポートも参照してください。オープンソース実装は、PBRTの最新の第3版でも利用できます。BSDFファイルは、Pythonのレイヤーラボで生成できます。
ティツィアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.