PBR実装と混同される


13

私は素晴らしい数学の世界を発見しており、PBRと命名で巨大な壁にぶつかっているので、いくつか質問があります:BRDFを理解する限り、マテリアルが光にどのように反応するか(直接的な光と反射の受信)を説明します。しかし、「クックトーランス」では、反射については何も表示されません。統合方法がわからないため、拡散光と反射しか得られません。

「Oren-Nayar」のような異なる「拡散用語」についてたくさん読んだことがありますが、DFGノミネーターの異なる「D」のようなCook-Torranceの一部ですか?鏡面反射計算なしで置き換えますか?

ブレンダーアーティストの背景から「GGX」について多くのことを読みましたが、それはぼやけた反射を引き起こすものだと思っていましたが、間違っているようで、今ではマイクロファセットなどのさまざまな状況でこのGGX用語を見つけていますこのチュートリアルの配布

つまり、問題は「Oren-Nayar」と「GGX」と「Cook-Torrance」が互いにどのように関係しているのか(それらがある場合)、それらのアルゴリズムに「vec3リフレクション」をどのように統合するかです。

前に言ったように、私は数学の初心者なので、あなたの答えが「数学が重い」なら、あなたの方程式のglsl / hlslバージョンを書いてください。

PS:私の質問はぼやけていることは理解していますが、主題を理解するのと同じくらいぼやけています。


1
あなたを助けるかもしれない何かは、「鏡面反射鏡」が「鏡のような」を意味するということです。そのため、鏡面反射と拡散反射について話すとき、鏡面反射とは鏡のような反射を意味し、通常は反射と呼ばれます。びまん性は、単に「ものが光る」ことです。それらも光を反射していますが、多くの異なる方向から反射しているため、結果は画像を認識できるものではありません。実際のオブジェクトには鏡面反射と拡散反射の間にスケールがあり、これはPBRコントロールの「粗さ」パラメーター。
アランウルフ

オリジナルのCook-Torranceの論文を読むことができます:inst.cs.berkeley.edu/~cs294-13/fa09/lectures/cookpaper.pdf-可能な場合は、最後に記載されている参考文献も必ず確認してください(ほとんどはオンラインで入手可能)。少し時間がかかりますが、何が起こっているのかを「深く」理解する確実な方法です。
WIP

回答:


11

DFGは、マイクロファセットベースのBRDFのファミリに表示されます。これは、単に3つの用語の積です。

  • D:マイクロファセット分布。
  • F:フレネル係数。
  • G:マイクロファセット間の幾何学的減衰。

誰かがクックトーランスと言うとき、彼らは通常、分布(D)がベックマンであるマイクロファセットBRDFを意味します。

GGXは、実際には異なるディストリビューション(D用語)です。GTRももう1つです。名前は多くの場合、そのディストリビューションを使用するBRDFを意味するショートカットとして使用されます。

現在、これらはすべて、マイクロファセットでの鏡面反射(または屈折)、つまりフレネル項を想定しています。同様のアイデアを取り入れながら、拡散(ランバート)マイクロファセットを使用すると、Oren-Nayar BRDFが得られます。マイクロファセットのガウス分布に基づいていると思いますが、詳細には詳しくありません。


さて、それはもう少し明確ですが、レイトレーシング/マーチングまたはSSR /キューブマップを使用してレイを再起動することで得られる「vec3 reflectionColour」で何をするかについてはまだ説明していません。これは、ポイントライト/スポットライトのみを考慮し、エリアライトや反射については考慮していない方程式のようなものです。また、「鏡面」が唯一の意味= /ことはありませんので、その「白ドット」の代わりに、反射に関係しているようだ
newin

@newin PBRモデルでは、鏡面反射と反射は同じものに対して異なる名前です。光線が光に当たると鏡面反射ハイライトになり、別のオブジェクト(または環境)に当たると反射します。reflectionColourに関しては、光線の生成方法に依存します。直接照明をサンプリングしていますか?エリアライト?環境マップに対してBRDFを統合していますか?Explicit Light Samplingを使用したProgressive Path Tracingを読んでみてください。プロセスに関するいくつかのことが明らかになる長い答えがあります。
オリビエ

したがって、「vec3 reflectionColour」をライトとして扱う必要があることを正しく理解し、メッシュを発光させる場合は、アルベドに値> 1を設定するだけでよいのでしょうか。(私は最初は私が光を発するメッシュをしたいraymarcherで、他のは、おそらく使用SSRとは、キューブマップを使用することをゲームエンジンである別のシナリオにしてPBRを統合しようとしている)
newin

@newinが放射する光は、他のすべての上に追加されます。BRDFとは無関係です。メッシュが光を放出するだけの場合は、それ以上の光線を追跡する必要もありません。大きなアルベドは光を増幅します(物理的に間違っています)。
オリビエ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.