鏡面シェーディングでR(phong)の代わりにH(blinn)が使用されるのはなぜですか?


22

この理由はどこにもありません。phongで使用される反射ベクトルは、物理学の基礎が単純です。しかし、blinnで使用されるハーフベクトルは、一見合理的な根拠がなく、適切な反映を構成していません。それにもかかわらず、いわゆる「物理ベース」のシェーディング機能すべてで使用されています。それに物理的な基盤があれば、知りたいのですが。

私が見つけることができたのはいくつかの理由です:

それは速いです -これについてはさまざまな情報がありますが、それでも1998年には大きな理由だったでしょう。

これは90度よりも高い角度をより適切に処理します。これが唯一の理由である限り、フォンの用語が不適切に使用されているためです。反射とビューのドット積は、-1〜+1の角度を与えます。通常、この角度は0〜1に固定されており、これが90度問題の直接的な原因です。角度を固定するのではなく再正規化すると、180度の完全なカバレッジが得られます。私は、単純なx * 0.5 + 0.5の操作がグラフィックスの世界を40年間逃げていたとは信じません。

エッジをより適切に処理します -エッジの「問題」もblinnソリューションにわずかに存在します。主な原因は、ターミネーターでのエリア照明の不適切なシミュレーションです。これは、「物理ベースの」シェーダーに不可欠です。しかし、より単純な状況でも、シグモイド関数はソフトターミネーターラインを正しく近似できます。ランバート項への乗算は、鏡面反射項を不適切に減衰させるため不正確です。これにより、フレネル項がキャンセルされ、さらなるエラーが発生する可能性があります。

エッジに長い反射があります -異方性反射は現実的かもしれませんが、blinnはエッジにのみ表示されるため、それらを実装する正しい方法ではないようです。H項のエラーが偶然現実的に見えるのは、単なる幸せな偶然です。

これらの理由はどれも満足のいくものではありません。この狂気を整理したいと思います。

私はブリンとフォンの話ではないのですということを明確にしたい、特に、代わりにこれらのシェーダだけでなく、他の人のための基礎として使用されているベクトル成分HとR、程度。

回答:


24

完全に反射する表面には、Phongモデルが理にかなっています。しかし、より粗い表面を近似するためのフォンモデルの(RV)^ nのnはどこから来るのでしょうか?ドット積の結果を累乗する必要があるという理論は、経験的に適切な結果を与えるように見えることを除いてどこにありますか?

Blinnモデルには、方程式のすべてのコンポーネントをサポートする物理ベースのマイクロファセット理論があり、モデルが実際の表面をより厳密に(完全ではないが)近似するという経験的証拠もあります。Blinnモデルのハーフベクトルは、正規分布関数(NDF)への入力として使用されます。これは、表面粗さの関数として表面法線の周りにマイクロファセットが分布する方法の近似です。つまり、Hベクトルが法線方向を指す場合、ほとんどのマイクロファセットはその方​​向を指すため、値は最高になり、法線とHベクトルの間の角度が大きくなると、確率はそれに応じて減少します。

ただし、Blinnモデルは決して完璧ではなく、たとえば、マイクロファセットモデルのジオメトリ用語を考慮していません(つまり、グレージング角度で重要度が増加するマイクロファセットのシャドーイングとマスキング)。


私は実際に物理的な基盤を持たないフォンの特定の実装については話していません。しかし、反射ベクトルの基礎として、マイクロファセット理論がどのようにHをRよりもよくサポートしているかはわかりません。経験的にシェーディングモデルはサポートされていません。2005年の「BRDFの実験的検証」に従って、実際のマテリアルを再現することはすべて失敗します。再マッピング機能またはランプを介して、より物理的に正確なハイライトの基礎。べき関数は、最も単純で、最も不正確な再マッピングです。
BmB 14

2
@BmBいいえ、マイクロファセットは「フォンでモデル化」されませんが、Nベクトルで定義されたマイクロファセットの確率分布を使用します。これはHベクトルで「サンプリング」されます。NDFは通常、法線に対して対称(等方性/異方性)であるため、Hベクトルを使用するのが理にかなっています。私は、BlinnモデルがPhongよりも実世界の素材により 近いという経験的証拠があると言いました。
JarkkoL 14

反射ベクトルに沿っていない反射は、完全な鏡面反射ではありません。内積は、完全ではない角度の反射率値を生成します。必然的に、これらはマイクロファセットによって生成される必要があります。したがって、内積はマイクロファセットをモデル化します。単純なドットは線形分布を生成します。しかし、分布はRで任意の関数によってモデル化することができるだけでだけでなく、H.これはR.超えるHの妥当性については何も説明しない
BMB

1
@BmB概念を理解するために、マイクロファセット理論、特にNDF部分について読むことをお勧めします。それはあなたの質問に対する答えを得るのに役立ちます。
JarkkoL 14

1
マイクロファセットとNDFについての新しい質問を開く必要があります。明らかに、これらの概念について多くのことを理解しておらず、コメントはそれらを説明する適切な場所ではないからです。
JarkkoL 14

6

実際、BlinnがPhongよりもデフォルトである理由をあなた自身がリストしたと思います。

あなたがそこに挙げたそれぞれの理由は、実際、ブリンがフォンよりも優れていることが証明されている領域です。

全体として考えると、これらはすべて、BlinnがPhongよりも優れたデフォルトであることにつながります。

ブリンは完璧ですか?Phongよりも良いですか?

いや

しかし、これ妥当なデフォルトです。作成したレンダラー/シェーダーで、Blinnの代わりにPhongを使用してください。


同意します、これはまさにそれです。どちらのモデルも完璧ではありません。半角を計算する方がずっと安価なので、Blinnの近似は何よりもパフォーマンスの最適化よりも優れていました。ほとんどの場合、見た目も良くなっています。
デイモン

-2

Hベクトルが使用される理由を発見しました。残念ながら、ほとんどのシェーディングモデルで使用される方法ではありません。

物理ベースのシェーディングでは、反射光はフレネル方程式に従う必要があります。(ほとんどの「物理ベースの」シェーダーはそうではありません)マイクロファセットはフレネル方程式に従う必要があります。

反射の法則によれば、入射角は、表面の法線に沿った反射角とミラーリングする必要があります。光線がカメラに当たったためには-光線が反射したに違いない-方向を知っている必要があります。したがって、表面の法線はこれら2つの方向のミラー軸でなければなりません。これにより、それらの間にある半分のベクトルHが得られます。両方の合計を正規化して計算されます。

ここで、光の方向Lと半ベクトルHの間の角度を計算することにより、マイクロファセットの鏡面反射の入射角を取得し、フレネル項を使用して正確に減衰させることができます。

ビュー方向はそのマイクロファセットのRに等しく、Hは反射項ではないことに注意してください。Blinn、Cook、Torrance、およびSparrowはそれを吸うことができます。フォンとフレネルは正しかった。


フレネル項はマイクロファセットBRDF方程式の一部であり、個々のマイクロファセットは完全な反射器としてモデル化されているため、これを考慮しません。また、LとHのベクトル間の角度は計算せず、NとHのベクトルを計算します。これにより、Hが使用されている理由がわかります。誰が正しかったか、または「より正しかった」かを結論付けるために、トピックに関するもう少しの知識が必要です;)
JarkkoL 14

マテリアルのマイクロファセットには、マテリアルと同じプロパティがあります。したがって、不完全な反射体のマイクロファセット自体が完全な反射体になることはできません。あなたの論理は不健全で役に立たない。N dot Hには物理的な意味はありません。
BmB 14

4
いいえ、それはマイクロファセットモデルの仕組みではありません。マイクロファセットモデルの基本さえ理解している人なら誰でも確認できるように、私の論理は完全に健全です。各マイクロファセットは完全なリフレクター(つまり、光学的にフラット)であり、材料の不完全な反射は、NDFで定義されているマイクロファセット法線の分散に起因します。完全に有効なアドバイスに
逆らうという

あなたは何のアドバイスも与えていません。あなたがやったことは、あなたが正しいと断言し、それを裏付けるために何もせず、persist辱を投げかけるだけです。Hはマイクロファセットの法線であり、反射ではありません。反射は法線で計算できます。基本的な物理学はあなたに同意しません。
BmB 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.