パストレースとマテリアル


8

パストレーサーで次のイベントのレイヤードマテリアルをサンプリングするときに使用する手法について疑問に思っています。私は3つのレイヤーを持つマテリアルを持っています:ベースディフューズ、スペキュラー、光沢ローブ。次の光線方向に向けてサンプリングする個別のレイヤーを選択するにはどうすればよいですか?これはランダムな選択ですか?もしそうなら、レイヤーに等しい重みが割り当てられていますか、それともローブの最終的な寄与に基づいて重みが使用されていますか?このサンプリング段階についての洞察をありがとう。

〜M

回答:


12

この質問はこれにいくらか関連しています。

アランがすでに述べたように、各層を通る実際の光路をたどると、より物理的に正確な結果が得られます。私の解答は、私が読んで部分的に実装したAndrea WeidlichとAlexander Wilkieによる論文(「任意のレイヤードマイクロファセットサーフェス」)に基づいています。この論文では、著者は2つの層の間の距離が微分面積要素の半径よりも小さいと仮定しています。この仮定により、レイヤーごとに交差点を個別に計算する必要がないため、実装が簡素化されます。実際には、レイヤー上のすべての交差点がまったく同じ点であると想定しています。

この論文によれば、多層材料を作るためには2つの問題を解決しなければならない。1つ目は、レイヤーを適切にサンプリングすることであり、2つ目は、サンプリングパスに沿って見つかった複数のBSDFの組み合わせによって生成された結果のBSDFを見つけることです。

更新:実際、私はこの階層化モデルの評価を実装するために別の方法を採用しました。私は交差点をレイヤーに沿ってちょうど同じポイントであると考える考えを維持しましたが、私はサンプリングと最終的なBRDFを異なって計算しました:サンプリングのために、私は通常のレイトレーシングを使用しましたが、(ロシア語を使用して)その場合、反射/屈折を選択するルーレット); 最終的なBRDFの評価では、光線の経路によってトラバースされた各BRDFを乗算します(入射光線の余弦に従って入射放射輝度に重みを付けます)。

サンプリング

この最初の段階では、レイヤーを通過する実際の光路を決定します。光線が空気などの密度の低い媒体からガラスなどの密度の高い媒体に移動するとき、そのエネルギーの一部が反射され、残りの部分が透過します。フレネル反射の方程式で反射されるエネルギーの量を見つけることができます。したがって、たとえば、特定の誘電体のフレネル反射率が0.3の場合、エネルギーの30%が反射され、70%が透過されることがわかります。

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

光線が密度の高い媒体から密度の低い媒体に移動する場合、フレネル反射率で説明されているのと同じ原理が適用されます。ただし、この特定のケースでは、入射光線の角度が臨界角を超えている場合、全反射(別名TIR)も発生する可能性があります。TIRの場合、エネルギーの100%が材料に反射されます。

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

光が導体または拡散表面に当たると、常に反射されます(BRDFのタイプに関連する反射方向です)。多層材料では、結果として生じる光路は、これらすべての可能性の総合的な結果になります。したがって、3層材料の場合、1番目と2番目の層が誘電体で3番目の層が拡散性であると仮定すると、たとえば次のような光路(実際にはツリー)になる可能性があります。

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

再帰を使用してこのタイプの相互作用をシミュレートし、対応する入射点での実際の反射率/透過率に従って各光路に重みを付けることができます。この場合の再帰の使用に関する問題は、再帰の深さとともに光線の数が増加し、個々に最終結果にほとんど何も寄与しない可能性がある光線に計算上の労力が集中することです。一方、深い再帰レベルでのこれらの個々の光線の集計結果は重要な場合があるため、破棄しないでください。この場合、ロシアンルーレット(RR)を使用して、分岐を回避し、エネルギーを失うことなく確率的に光路を終了できますが、分散が大きくなります(ノイズの多い結果)。この場合、フレネル反射率またはTIRの結果、追跡するパスをランダムに選択するために使用されます。例えば:

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

ご覧のように、TIRまたはフレネル反射は、一部の光線をレイヤー間で無期限にバウンスさせ続ける可能性があります。私の知る限り、ミツバはプラスチックを2層材料として実装しており、この特定のケースでは閉じたフォームソリューションを使用して、層間の光の跳ね返りの数を無限にしています。ただし、ミツバでは任意の層数の多層材料を作成することもできます。この場合、一般的なケースでは閉形式の解が存在しないように思われるため、内部バウンスの最大数が課されます。副作用として、レンダリングプロセスで一部のエネルギーが失われ、マテリアルが最終的に本来よりも暗く見える場合があります。

現在の多層マテリアルの実装では、レンダリング時間が長くなるという犠牲を払って、任意の数の内部バウンスを許容しています(まあ、実際には、2つのレイヤーしか実装していません。1つの誘電体と1つの拡散:)。

追加のオプションは、分岐とRRを混合することです。たとえば、最初の光線(より深いレベル)は、最終的な画像に大きな影響を与える可能性があります。したがって、後でRRのみを使用して、最初の1つまたは2つの交差点でのみ分岐することを選択できます。これは、たとえばsmallptが使用するアプローチです。

多層材料に関する興味深い点は、個々の反射/透過光線が、各層の対応するBRDF / BTDFに従って重要度をサンプリングできることです。

最終的なBSDFの評価

RRを使用して計算された次の光路を考えます。

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

輝きの総量を評価できます Lr各レイヤーを個別のオブジェクトと見なし、通常のパストレースで使用されるのと同じアプローチを適用する多層BSDFによって反映されます(つまり、レイヤーを離れる放射輝度が次のレイヤーの入射放射輝度になります)。したがって、最終的な推定量は、個々のモンテカルロ推定量の積で表すことができます。

Lr=fr1cosθ1pdf1fr2cosθ2pdf2frcosθpdffr2cosθ4pdf2Lfr1cosθ5pdf1

推定量のすべての項が乗算されるため、最終的なBSDFを計算することで実装を簡素化でき、 pdf と因数分解 L 期間:

fr=fr1fr2frfr2fr1

pdf=pdf1pdf2pdfpdf2pdf1

cosθ=cosθ1cosθ2cosθcosθ2cosθ1

Lr=frcosθpdfL

アンドレアWeidlichおよびアレクサンダー・ウィルキーによっても考慮吸収をとる、すなわち、各光線は各透過層とその厚さの吸収率に応じて減衰されるかもしれません。レンダラーには吸収をまだ含めていませんが、ビールの法則に従って評価される1つのスカラー値だけで表されます。

代替アプローチ

Mitsubaレンダラーは、「フーリエ基準の反射率関数の集計」に基づいて、多層マテリアルの代替表現を使用します。私はまだそれを掘り下げるていませんが、参考になります。「レンダリング層状物質のための包括的な枠組みA」ヴェンツェルヤコブで。このペーパーの拡張バージョンもあります。


1
すべてのレイヤーにコサイン項を追加することについて確信があるかどうかを確認します(論文を覚えていることを願っています)。私が理解している限りでは、レンダリング方程式は最上位レイヤーでのみ計算されます。下向きに進み、最終的な発信方向を決定し、BRDFを決定します。私は何かを逃していますか?
MustafaIşık2018

@MustafaIşık正解です。論文では、最終的なBRDFに余弦項を追加していません。実際、私はこの論文で提案されているアプローチとは少し異なるアプローチを採用しています(私の回答にそれを含めます)。この論文では、階層化されたBRDFから一意のBRDFの定義を提案しています。導出プロセスが少しわかりにくいことに気づきました。1)なぜ個々のBRDFを追加するのかわかりません(乗算する必要があると思います)。
クリスチャンパゴ

@MustafaIşık2)あなたが指摘したように、余弦項による乗算はありません(微分領域に入射するエネルギーのみを考慮しているため、そうする必要があると思います)。3)彼らは表現を発達させないt=1G+T21G; 4)BRDF内の余弦項が希釈されているかどうかはわかりません。5)また、TIRはエネルギー損失を引き起こす可能性があります。これらの理由により、私はロシアンルレットを使用して各光線を追跡し、屈折または反射を決定することにしました。
クリスチャンパゴ

1
紙は簡単に見えますが、すべての用語や戦略が正確な実装のために十分に明確に説明されているわけではないためです。しかし、それは影響力があります。あなたのものは、紙で避けられたシミュレーションに似ていますが、より正確です。
MustafaIşık2018

3

物理的な観点から考えると、拡散/鏡面反射計算の一般化バージョンのように機能するようです。

一番上のレイヤーから始め、フレネルなどを使用して、反射と透過の光の割合を計算します。次に、乱数を使用して、サンプルに対してこれらのどれを行うかを決定します。

反射の場合、最上層の鏡面ローブを行い、表面で反射して次に進みます。

送信の場合は2層目に移動します。

このレイヤーでは、反射と送信の確率をもう一度計算します。

リフレクションの場合、この2番目のレイヤーのスペキュラーローブを使用し、リフレクションを実行して次に進みます。

トランスミッションの場合は、内層に移動します。

この最も内側のレイヤーでは、反射または透過する必要があるかどうかをもう一度判断します。

反射には、この内側のレイヤーの鏡面ローブを使用します。

透過については、拡散計算を行うか、透過光に対して最も内側の表面が実行したいことを何でも行います(サブ表面散乱?屈折?など)。

各レイヤーがそれ自体の屈折を行うべきかどうか、また技術的にはレイヤー間で光線を少し動かしてよりリアルな効果を得る必要があるかどうかはわかりません。あなたの場合、それは違いを生まないかもしれません。

しかし基本的には、3つのレイヤーを持つ球体がある場合、透過と反射を処理する単一のレイヤーを持つ3つの異なる球体が互いにネストされているかのように動作する必要があります。

レイヤードマテリアルを使用することは、3つの個別のオブジェクトを使用するよりもコンパクトな方法であり、これが望ましいことです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.