次世代向け物理ベースマイクロファセットモデルを設 計してみる Designing a physically based microfacet model for next generation • 五反田義治 • (株) トライエース 研究開発部 次世代? • PlayStation 4やXbox Oneではありません – さらに次世代を想定 • PS5や次世代Xbox? • Desktop GPUで2016~2017年以降のハイエンド?(のマルチ構成?) – Nvidia Pascal? – AMD Rx400? • Mobile GPUなら2020年~? 今回のセッションは? • 次世代で利用できる物理ベースのマイクロファセット モデルを自分で設計できるようになることを目標 – 物理ベースのマイクロファセットモデル? • ものによっては簡略化により現世代でも利用できる そのためには? • 既存のマイクロファセットモデル(MFM)の限界を理解する – シンプルな物理構造しか表現できない • (複雑な)物理ベースリフレクタンスモデルを設計すると いうことはどういうことかを理解する – 前提となる数学および物理知識 なぜ自分でモデル化? • すでにあるもの使えばいいのでは? – 本当にそれは正しい? – ad-hoc的思考 検証(1) • Metallic (metalness)概念 – 誘電体(dielectric)の屈折率は1.5, 反射率0.04で固定でいいの? • 水は? • 各種塗料は? 屈折率1.5? • 現代的なものは塗装してあることが多い – 屈折率1.5~2.0まであり、反射率もかなり変化する • 屈折率1.5 : 垂直反射率 0.04 • 屈折率2.0 : 垂直反射率 0.11 – 印刷物や塗装は複雑な屈折率の変化が独特の質感を生み出して いる • 1.5固定だとそれを再現できない 絵作りに必要なモデルとは? • 現代的な絵作りを目指しているタイトルでは屈折率1.5 では危険 – 油彩絵具でも屈折率は大きく変化するので絵画表現なども影響 を受ける – 化粧品などもいろいろな物質を混合していて屈折率は1.5固定で はない • 1.4~2.0 – 本当にあなたが開発しているタイトルではそのモデルでいいの か物理的な検証をしているか? • (プログラマが)検証せずにそのまま天下り的に使っていたらそれは ad-hocと同じ というわけで • 自分でモデルを作れるということは – リフレクタンスモデルの背後にある物理的性質を理解できると いうこと – 現実のマテリアルがどのような物理的性質を持っているか考察 できるということ – (適切でない)モデルで間違った使い方をする危険性を回避できる マイクロファセットモデル(MFM) 𝐷 𝒍, 𝒆 𝐹 𝒍, 𝒆 𝐺(𝒍, 𝒆) 𝑓𝑟 𝒍, 𝒆 = 4 cos 𝜃𝑙 cos 𝜃𝑒 • MFM自体は物理ベースではない – D,F,G項を適切に選ぶことにより物理ベースになる – このモデルはスペキュラのみを想定している 既存のMFMでは何が不足? • 物理ベースのディフューズモデル • より複雑な光の伝播モデル – e.g. 散乱や二次反射 • 波動光学領域で起こる光の現象 • 単一でない物理構造で定義される物質 • 既存のD,G項で表現できない表面構造 リフレクタンスモデルの設計 • マイクロファセットモデルで表現できない物質を再現 するために新しいモデルを定義する – 物理ベースリフレクタンスモデル設計 • 完全なスクラッチ設計 • マイクロファセットモデルの改良 スクラッチのリフレクタンスモデル • 理論的にはなんでも表現できる – 汎用的な数理モデルを設計するのは骨が折れる • 特定の(MFMで表現できない)物質だけをターゲットにするにしても (アーティストによる)パラメータ調整をできるようにしたい – 計測ベースのBRDF向けの数理モデルには向く? • BRDFデータのデータおよび次元圧縮のための概念としては有効 MFMの改良 • 既存の概念からスタートできるので設計難易度が 比較的低い – スペキュラやディフューズといった概念 – NDF項や幾何遮蔽項といった概念 – まったくMFMを適用できないモデルの場合は遠回り • 既存の概念が邪魔する場合 物理ベースのモデル設計とは? • 無限光源から入射した光がある一点でなんらかの物理現 象を起こして出射した場合のレンダリング方程式を立式 すること – 結果的に新しい反射モデルを定義できる – 解析解を求められない場合は近似する • 完全数理モデル化か部分数理モデル化 • 実際にはほとんどの場合は解析解を求められない というわけで何をすればいいの? • 表現したい物理構造の方程式化 • 既存MFMの問題点と改良 • 解析解の数理モデル近似(完全 or 部分) テーマが多すぎる!!! すべてをカバーしていたら時間がいくらあっても足りません 本日のセッションではわかりやすいところをピックアップして 具体例を挙げながらほんの触りだけを解説します 復習 • 物理ベースのリフレクタンスモデルとは? – 𝑓 Ω 𝑟 𝒙, 𝒍, 𝒆 𝒍 ∙ 𝒏 𝑑𝒍 ≤ 1 • エネルギー保存則 – 𝑓𝑟 𝒙, 𝒍, 𝒆 =𝑓𝑟 𝒙, 𝒆, 𝒍 • 相反性 – これらはBRDFの性質(条件) • これだけでは物理ベースのリフレクタンスモデルとはならない マイクロファセットモデル? 𝐷 𝒍, 𝒆 𝐹 𝒍, 𝒆 𝐺(𝒍, 𝒆) 𝑓𝑟 𝒍, 𝒆 = 4 cos 𝜃𝑙 cos 𝜃𝑒 • マイクロファセットモデルを使えば物理ベース? – ではない • D,F,G項を適切に定義することにより物理ベースとなる 物理ベースマイクロファセットモデル • 物理的には以下の条件を満たす – 𝐹 𝜔, 𝒏 = フレネル方程式 – Ω 𝐷 𝒎 𝑑𝒎 = 1 – Ω 𝐺1 𝒆, 𝒎 (𝒆 ∙ 𝒎) 𝐷(𝒎)𝑑𝒎 = 𝑐𝑜𝑠𝜃𝑒 • 𝐺1 はMasking Function (遮蔽関数) • Shadow-Masking Functionは2つの𝐺1 の組み合わせからなる – 𝐺1 𝒆∙𝒉 𝐷 𝒉 Ω𝒍 4 𝒏∙𝒆 𝑑𝒍 = 1 (Weak White Furnace Test) 物理条件 • 以上で十分? – これらの数学的要件を満たせば物理ベースと言っても良いが… • 再現したい物質を表現するのに適切なモデルやパラメータが 存在しているか? • 厳密にはもう一段上の物理ベースの概念が理想 問題例(1) - D項の限界 • MFMモデルにおけるD項とは? – Normal Distribution Function(確率分布関数) – つまりD(x)に対してxの方向の法線の割合(確率)を示している • 実際の法線の分布がD(x)に従っている 本当に? • もしこんなマイクロファセットがあったら – V-CavityモデルでCavityの深さ,幅は一定 検証(1) • 法線はそれぞれすべて一定 – 一般的なマイクロファセットモデルでは各ファセットは完全鏡面 – この2種類の法線に対して視線ベクトルとライトベクトルが反転 (反射の関係)にならない限りスペキュラが出ない 検証(2) • しかしマイクロファセットモデルだと – ジオメトリ法線は垂直 – Roughnessは分散なので2種類の法線でそれなりに広がる – つまり実際のスペキュラとはだいぶ違う見た目になる 各種統計近似モデルは? • Toksvig, LEAN, CLEANなど – 昨年発表した[Gotanda 2014]も含む – これらは統計的モデルでしかないので近似としては適切 • たとえば正規分布 • その統計モデルから大きく外れているときは? • たとえばglintのような時 – 先ほどの例をノーマルマップで作成してトップmipレベルでroughness を0にして(マイクロファセットモデル的に)正しいmipmapテクスチャが 作成されているレンダラーでは見た目がおかしいのが確認できる D項の問題 • モデル化された確率分布関数との誤差が大きい表面構造 においては結果が大きく異なる – 確率分布関数のLUT化 • 例えばMipmapとU,Vと法線方向で5次元テクスチャ! – 複雑な数理モデル化 • パラメータが多い, 重い – 適応的数理モデル化 • 表面構造でモデルを適切に使い分ける • テクセルごとにモデルIDとパラメータ? 問題例(2) – レイヤー構造 • マイクロファセットモデルは単一の物理構造を前提と している – 複数の物理構造を含んでいるサーフェースを正しく表現できない – どうなる? 単一構造の問題 • アーティストが既存モデルで無理にパラメータ調整で レイヤー構造マテリアルを再現しようとする – 本来は複数の構造が見える独特な反射 • それを無理に既存の単一マイクロファセット物理ベースシェーダと albedo, roughness, reflectance等の組み合わせで再現しようとする Deja vu • ん? どこかで聞いたことありませんか? 完全にad-hoc的 アプローチでのやり方 物理モデルの危険性(1) • このようなケースならまだad-hocモデルのほうがマシ – 各パラメータが相互に物理的制約を持たないのでアーティスト が自由に調整できる • 作業は大変だが目的の見た目に近い結果を達成できる可能性も 残っている 物理モデルの危険性(2) • 物理ベースモデルでは物理制約がアーティストの表現も 制約することがある – 先ほどの例ではもともと与えられたモデルではいくら調整して も目的のビジュアルに到達できない – 物理ベースモデルを利用しているのに実は物理ベースになって いない というわけでBRDFを求める • BRDFはレンダリング方程式から定義できる – CEDEC 2011 – レンダリストのための物理ベースレンダリング – 基礎理論編 – 復習してみましょう 復習(1) 𝐿𝑟 𝒙, 𝒆 = Ω 𝑓𝑟 𝒙, 𝒍, 𝒆 𝐿𝑖 𝒙, 𝒍 𝒍 ∙ 𝒏 𝑑𝒍 𝑑𝐿𝑟 𝒙, 𝒆 = 𝑓𝑟 𝒙, 𝒍, 𝒆 𝐿𝑖 𝒙, 𝒍 𝒍 ∙ 𝒏 𝑑𝒍 𝑑𝐿𝑟 𝒙, 𝒆 𝑓𝑟 𝒙, 𝒍, 𝒆 = 𝐿𝑖 𝒙, 𝒍 𝒍 ∙ 𝒏 𝑑𝒍 復習(2) 𝑑𝐿𝑟 𝒙, 𝒆 𝑓𝑟 𝒙, 𝒍, 𝒆 = 𝐿𝑖 𝒙, 𝒍 𝒍 ∙ 𝒏 𝑑𝒍 𝑑𝐿𝑟 𝒙, 𝒆 = 𝑑 2 Φ𝑖 𝒍 ∙ 𝒏 𝑑𝒍 𝒍 ∙ 𝒏𝑑𝐴𝑑𝒍 𝑑𝐿𝑟 𝒙, 𝒆 = 𝑑Φ𝑖 𝑑 𝑑𝐴 復習(3) 𝑑𝐿𝑟 𝒙, 𝒆 𝑓𝑟 𝒙, 𝒍, 𝒆 = 𝑑Φ𝑖 𝑑 𝑑𝐴 𝑑𝐿𝑟 𝒙, 𝒆 = 𝑑𝐸𝑖 𝒙, 𝒍 復習(4) 𝑑𝐿𝑟 𝒙, 𝒆 𝑓𝑟 𝒙, 𝒍, 𝒆 = 𝑑𝐸𝑖 𝒙, 𝒍 BRDF (双方向反射分布関数) BRDFの設計 • どういうこと? – ある条件に対してレンダリング方程式を立式することにより BRDFを定義することができる レンダリング方程式からBRDFへ 𝑑𝐿𝑟 𝒙, 𝒆 𝑓𝑟 𝒙, 𝒍, 𝒆 = 𝐿𝑖 𝒙, 𝒍 𝒍 ∙ 𝒏 𝑑𝒍 = = 1 𝐿𝑖 𝒙, 𝒍 𝒍 ∙ 𝒏 𝒆 ∙ 𝒏 1 𝒍∙𝒏 𝒆∙𝒏 𝐿𝑖 𝒙, 𝒍 𝜌 𝒍, 𝒆, 𝒎 𝒍 ∙ 𝒎 𝒆 ∙ 𝒎 𝐺 𝒆, 𝒎 𝐷 𝒎 𝑑𝒎 𝛀 𝜌 𝒍, 𝒆, 𝒎 𝒍 ∙ 𝒎 𝒆 ∙ 𝒎 𝐺 𝒆, 𝒎 𝐷 𝒎 𝑑𝒎 𝛀 • 𝜌 𝒍, 𝒆, 𝒎 は各マイクロファセットのBRDF – マイクロファセットモデルは各マイクロファセットのレンダリ ング方程式(BRDF)の積分と考えることができる 例題 • 2レイヤー構造を元にレンダリング方程式を立式する 仮定 1層目 • • • • • • 2層目 屈折率𝜂0 厚さ𝜏0 透過吸収率exp(−𝛼𝜏0 ) Microfacetモデル GGX:roughnessは𝑟0 G項=1(ほぼ透過として近似) • 屈折率𝜂1 • Microfacetモデル + Lambert • GGX:roughnessは𝑟1 • G項はSmith 入射点と出射点のparallax効果は考慮しない(BRDF) 1層目 2層目 厚さ𝜏0 2層目の スペキュラ 2層目の ディフューズ 1層目の スペキュラ 2層目の ディフューズ 1ピクセル ベクトル計算 • 2層目へのライトベクトル 𝑐𝑜𝑠𝜃𝑙′ = 𝜂02 1 − 2 1 − 𝑐𝑜𝑠 2 𝜃𝑙 𝜂1 • 2層目への視線ベクトル 𝑐𝑜𝑠𝜃𝑒 ′ = 𝜂02 1 − 2 1 − 𝑐𝑜𝑠 2 𝜃𝑒 𝜂1 2層目の スペキュラ 2層目の ディフューズ 1層目の スペキュラ 2層目の ディフューズ 1層目のモデル化(入射~反射) • Microfacetによる反射のモデル化 𝜕𝒎 𝜌𝑠𝑝𝑒𝑐0 𝒍, 𝒆, 𝒎 = 𝐹 𝒆, 𝒎, 𝜂0 𝛿 𝒍, 𝒆, 𝒎 𝜕𝒍 𝑚 – – 𝛿 𝒍, 𝒆, 𝒎 = 𝜕𝒎 𝜕𝒍 = 1 4 𝒍∙𝒎 1, 0, 𝒍+𝒆 𝒍+𝒆 ∙𝒎=1 𝑜𝑡ℎ𝑒𝑟𝑤𝑖𝑠𝑒 ハーフベクトルへの変換のヤコビアン [Walter et al. 2007] 2層目の スペキュラ 2層目の ディフューズ 1層目の スペキュラ 2層目の ディフューズ 1層目のモデル化(入射~透過) • Microfacetによる透過のモデル化 𝜏0 𝑓𝑡𝑟𝑎𝑛𝑠0 𝒍, 𝒎 = exp(−𝛼 ) 1 − 𝐹 𝒍, 𝒎, 𝜂0 𝑐𝑜𝑠𝜃𝑙′ 2層目の スペキュラ 2層目の ディフューズ 1層目の スペキュラ 2層目の ディフューズ 2層目のモデル化 • Microfacetによるスペキュラ反射のモデル化 𝜌𝑠𝑝𝑒𝑐1 𝒍′ , 𝒆 ′ , 𝒎 𝜕𝒎 𝜂1 ′ = 𝐹𝑚 𝒆 , 𝒎, 𝛿 𝒍′ , 𝒆 ′ , 𝒎 𝜕𝒍 𝜂0 • ディフューズ反射のモデル化 𝜌𝑑𝑖𝑓𝑓1 1 𝒍′ , 𝒆 ′ = 𝜋 2層目の スペキュラ 2層目の ディフューズ 1層目の スペキュラ 2層目の ディフューズ 1層目のモデル化(出射) • 2層目で反射した光の1層目を再度透過する際のモデル 𝑓𝑡𝑟𝑎𝑛𝑠1 𝜏0 1 𝒆, 𝒎 = exp(−𝛼 ) 1 − 𝐹𝑚 𝒆, 𝒎, 𝑐𝑜𝑠𝜃𝑒 ′ 𝜂0 2層目の スペキュラ 2層目の ディフューズ 1層目の スペキュラ 2層目の ディフューズ 合わせてみる • 最終的に反射する光は 𝜌𝑠𝑝𝑒𝑐0 𝒍, 𝒆, 𝒎 + 𝑓𝑡𝑟𝑎𝑛𝑠0 𝒍, 𝒎 𝑓𝑡𝑟𝑎𝑛𝑠1 𝒆, 𝒎 𝜌𝑠𝑝𝑒𝑐1 𝒍′ , 𝒆′ + 𝜌𝑑𝑖𝑓𝑓1 𝒍′ , 𝒆′ – 簡略化 𝑓𝑡𝑟𝑎𝑛𝑠0 𝒍, 𝒎 𝑓𝑡𝑟𝑎𝑛𝑠1 𝒆, 𝒎 = exp(−𝛼 = exp(−𝛼 𝜏0 𝜏0 1 ) 1 − 𝐹𝑚 𝒍, 𝒎, 𝜂0 exp(−𝛼 ) 1 − 𝐹𝑚 𝒆, 𝒎, 𝑐𝑜𝑠𝜃𝑙′ 𝑐𝑜𝑠𝜃𝑒 ′ 𝜂0 𝜏0 𝜏0 + ) 1 − 𝐹𝑚 𝒍, 𝒎, 𝜂0 𝑐𝑜𝑠𝜃𝑙′ 𝑐𝑜𝑠𝜃𝑒 ′ 1 − 𝐹𝑚 𝒆, 𝒎, 1 𝜂0 マイクロファセットモデル化 • Analytic Light用 – 通常のマイクロファセットモデルの定義式をそのままの形式で 適用できる • IBL用 – テクスチャ等や部分的な関数に係数を分離するためにマイクロ ファセットモデル化したものを部分的に積分する • いずれにせよ複雑な形式な場合には近似関数やテクス チャへのベイクが必要 – プラットフォームの特性や要求性能に合わせて最適化する Analytic Lightの場合(1) • ただ代入するだけ 𝑓𝑟 𝒙, 𝒍, 𝒆 = 1 4 𝒍∙𝒏 𝒆∙𝒏 +𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 𝛺 𝐹𝑚 𝒆, 𝒎, 𝜂0 𝛿 𝒍, 𝒆, 𝒎 𝐺 𝒆, 𝒎 𝐷 𝒎 𝑑𝒎 1 𝟒 𝒍∙𝒏 𝒆∙𝒏 𝛺 𝐹𝑚 𝒆′ , 𝒎, 𝜂1 𝜂0 𝛿 𝒍′ , 𝒆′ , 𝒎 𝐺 𝒆′ , 𝒎 𝐷 𝒎 𝑑𝒎 + • ただし1層目はマイクロファセットの凹凸が厚さに対して十分小さいとき 透過性が高いと考えるとG項の効果を無視できる – 近似 1 𝜋 Analytic Lightの場合(2) 𝑓𝑟 𝒙, 𝒍, 𝒆 = 𝐹 𝒍, 𝒆, 𝜂0 𝐷 𝒍, 𝒆 +𝑓𝑡𝑟𝑎𝑛𝑠 4 𝒍∙𝒏 𝒆∙𝒏 𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 = exp(−𝛼𝜏0 𝜂𝜂11 ′ ′ ′ , 𝒆′ 𝒍 , 𝒆 , 𝐺 𝒍 ′ ′ ′ ′ 𝒍 , 𝒆 𝐷𝜂𝜂00𝒍 , 𝒆 1 + ′ , 𝒆′ 𝐷 𝒍 𝐹 𝐺 1 𝒍, 𝒆 + 𝜋 𝟒 𝒍 ∙ 𝒏 𝟒 𝒆𝒍 ∙ 𝒏 𝒆 ∙ 𝜋𝒏 1 1 + ) 1 − 𝐹 𝒍, 𝒆, 𝜂0 𝐧 ∙ 𝒍′ 𝐧 ∙ 𝒆′ 1 − 𝐹 𝒍, 𝒆, 1 𝜂0 第2項中カッコ内のF項を𝑓𝑡𝑟𝑎𝑛𝑠 に移動すると Analytic Lightの場合(3) 𝐺 𝒍′ , 𝒆′ 𝐷 𝒍′ , 𝒆′ 1 𝐹 𝒍, 𝒆, 𝜂0 𝐷 𝒍, 𝒆 +𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 + 𝑓𝑟 𝒙, 𝒍, 𝒆 = 𝜋 𝟒 𝒍∙𝒏 𝒆∙𝒏 4 𝒍∙𝒏 𝒆∙𝒏 𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 = exp(−𝛼𝜏0 𝐧 ∙ 𝒍′ = 1 1 + ) 1 − 𝐹 𝒍, 𝒆, 𝜂0 𝐧 ∙ 𝒍′ 𝐧 ∙ 𝒆′ 𝜂02 1− 2 1− 𝐧∙𝒍 𝜂1 2 ′ 𝐧∙𝒆 = 1 − 𝐹 𝒍, 𝒆, 1 𝜂0 𝜂02 1− 2 1− 𝐧∙𝒆 𝜂1 𝐹 𝒍′ , 𝒆′ , 2 𝜂1 𝜂0 IBLの場合 • シェーディングモデルの積分が必要 Ω 𝐹 𝒍, 𝒆, 𝜂0 𝐷 𝒍, 𝒆 + 𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 4 𝒆∙𝒏 𝐺 𝒍′ , 𝒆 ′ 𝐷 𝒍′ , 𝒆 ′ 1 + 𝒍∙𝒏 𝟒 𝒆∙𝒏 𝜋 • AmbientBRDF方式でもパラメータが多い – Prefiltered IBL texture – Ambient BRDF texture • 𝐧∙𝒆 • 𝑟0 , 𝜂0 • 𝑟1 , 𝜂1 𝐿𝑖 (𝒙, 𝒍)𝑑𝒍 もう一段階の分離(1) • 積分を6枚のテクスチャにAmbientBRDF方式で分離する (積分の近似) 𝐹 𝒍, 𝒆, 𝜂0 𝐷 𝒍, 𝒆 + 𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 4 𝒆∙𝒏 Ω ≈ + 1 4 𝒆∙𝒏 𝑓𝑡𝑟𝑎𝑛𝑠 Ω Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍, 𝒆, 𝑟0 𝑑𝒍 1 𝒍, 𝒆 𝑑𝒍 4(𝒆 ∙ 𝐧) 𝐺 𝒍′ , 𝒆 ′ 𝐷 𝒍′ , 𝒆 ′ 1 + 𝒍∙𝒏 𝟒 𝒆∙𝒏 𝜋 𝐹 𝒍, 𝒆, 𝜂0 𝑑𝒍 Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍′ , 𝒆′ , 𝑟1 𝑑𝒍 Ω 𝐿𝑖 (𝒙, 𝒍)𝑑𝒍 𝐺(𝒍′ , 𝒆′ , 𝑟1 )𝑑𝒍 + Ω 1 𝜋 Ω 𝐧 ∙ 𝒍 𝐿𝑖 (𝒙, 𝒍) 𝑑𝒍 もう一段階の分離(2) 1 4 𝒆∙𝒏 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍, 𝒆, 𝑟0 𝑑𝒍 Ω Pre-filtered Cubemap[1] + 1 𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 𝑑𝒍 4(𝒆 ∙ 𝐧) Ω Ambient BRDF Texture [2] Ω 𝐹 𝒍, 𝒆, 𝜂0 𝑑𝒍 Ambient BRDF Texture [1] Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍′ , 𝒆′ , 𝑟1 𝑑𝒍 Pre-filtered Cubemap[2] Ω 𝐺(𝒍′ , 𝒆′ , 𝑟1 )𝑑𝒍 + Ambient BRDF Texture [3] 1 𝜋 Ω 𝐧 ∙ 𝒍 𝐿𝑖 (𝒙, 𝒍) 𝑑𝒍 Irradiance Cubemap AmbientBRDFTexture [2] • 4のパラメータが必要 𝐴𝐵𝑇𝑒𝑥2 𝒏 ∙ 𝒆, 𝛼𝜏0 , 𝜂0 , 𝜂1 = = Ω exp(−𝛼𝜏0 Ω 𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 𝑑𝒍 1 1 + ) 1 − 𝐹 𝒍, 𝒆, 𝜂0 𝐧 ∙ 𝒍′ 𝐧 ∙ 𝒆′ 1 4 𝒆∙𝒏 + 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍, 𝒆, 𝑟0 𝑑𝒍 Ω 1 𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 𝑑𝒍 4(𝒆 ∙ 𝐧) Ω 𝐹 𝒍, 𝒆, 𝜂0 𝑑𝒍 Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍′ , 𝒆′ , 𝑟1 𝑑𝒍 Ω 1 1 − 𝐹 𝒍, 𝒆, 𝜂0 Ω 𝐺(𝒍′ , 𝒆′ , 𝑟1 )𝑑𝒍 + 1 𝜋 Ω 𝐧 ∙ 𝒍 𝐿𝑖 (𝒙, 𝒍) 𝑑𝒍 𝐹 𝜂1 ′ ′ 𝒍 ,𝒆 , 𝜂0 𝑑𝒍 AmbientBRDF Texture [2]の分離(1) Ω exp(−𝛼𝜏0 1 1 + ) 1 − 𝐹 𝒍, 𝒆, 𝜂0 𝐧 ∙ 𝒍′ 𝐧 ∙ 𝒆 ′ −𝛼𝜏0 −𝛼𝜏0 = exp( ′ )exp( 𝐧 ∙ 𝒆′ ) 1 − 𝐹 𝒍, 𝒆, 𝜂0 𝐧 ∙ 𝒍 Ω ≈ exp( Ω −𝛼𝜏0 −𝛼𝜏0 )exp( ) 𝑑𝒍 𝐧 ∙ 𝒍′ 𝐧 ∙ 𝒆′ 1 4 𝒆∙𝒏 + Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍, 𝒆, 𝑟0 𝑑𝒍 Ω 1 𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 𝑑𝒍 4(𝒆 ∙ 𝐧) Ω 1 1 − 𝐹 𝒍, 𝒆, 𝜂0 1 − 𝐹 𝒍, 𝒆, 𝜂0 1 − 𝐹 𝒍, 𝒆, 𝐹 𝒍, 𝒆, 𝜂0 𝑑𝒍 Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍′ , 𝒆′ , 𝑟1 𝑑𝒍 Ω 1 1 − 𝐹 𝒍, 𝒆, 𝜂0 Ω 𝐺(𝒍′ , 𝒆′ , 𝑟1 )𝑑𝒍 + 1 𝜋 Ω 𝐧 ∙ 𝒍 𝐿𝑖 (𝒙, 𝒍) 𝑑𝒍 𝐹 1 𝜂0 𝑑𝒍 𝜂1 ′ ′ 𝒍 ,𝒆 , 𝜂0 𝑑𝒍 𝐹 𝒍′ , 𝒆′ , 𝜂1 𝜂0 𝑑𝒍 AmbientBRDF Texture[2]の分離(2) • さらに2枚のテクスチャに分離 2 𝜂 0 𝐴𝐵𝑇𝑒𝑥20 (𝐧 ∙ 𝒆′ , 𝛼𝜏0 , 2 ) = 𝜂1 𝐴𝐵𝑇𝑒𝑥21 (𝐧 ∙ 𝒆, 𝜂0 , 𝜂1 ) = 1 4 𝒆∙𝒏 + Ω −𝛼𝜏0 −𝛼𝜏0 exp( )exp( ) 𝑑𝒍 ′ ′ 𝐧 ∙ 𝒍 𝐧 ∙ 𝒆 Ω 1 − 𝐹 𝐧 ∙ 𝒆, 𝜂0 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍, 𝒆, 𝑟0 𝑑𝒍 Ω 1 𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 𝑑𝒍 4(𝒆 ∙ 𝐧) Ω 𝐹 𝒍, 𝒆, 𝜂0 𝑑𝒍 Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍′ , 𝒆′ , 𝑟1 𝑑𝒍 Ω 1 1 − 𝐹 𝐧 ∙ 𝒆, 𝜂0 Ω 𝐺(𝒍′ , 𝒆′ , 𝑟1 )𝑑𝒍 + 1 𝜋 Ω 𝐧 ∙ 𝒍 𝐿𝑖 (𝒙, 𝒍) 𝑑𝒍 𝐹 𝐧∙ 𝜂1 ′ 𝒆, 𝜂0 𝑑𝒍 Pre-filtered Cubemap [2]の分離(1) • パラメータが3つのcubemap – 𝜂02 ′ 𝒆 , 𝑟1 , 2 𝜂 1 – Mipmappped Cubemapでは表現できない 𝑐𝑢𝑏𝑒1 2 𝜂 0 𝒆′ , 𝑟1 , 2 = 𝜂1 1 4 𝒆∙𝒏 + 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍, 𝒆, 𝑟0 𝑑𝒍 Ω 1 𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 𝑑𝒍 4(𝒆 ∙ 𝐧) Ω Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍′ , 𝒆′ , 𝑟1 𝑑𝒍 𝐹 𝒍, 𝒆, 𝜂0 𝑑𝒍 Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍′ , 𝒆′ , 𝑟1 𝑑𝒍 Ω Ω 𝐺(𝒍′ , 𝒆′ , 𝑟1 )𝑑𝒍 + 1 𝜋 Ω 𝐧 ∙ 𝒍 𝐿𝑖 (𝒙, 𝒍) 𝑑𝒍 Pre-filtered Cubemap [2]の分離(2) 𝑐𝑢𝑏𝑒1 𝜂02 ′ 𝒆 , 𝑟1 , 2 𝜂1 = Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍′ , 𝒆′ , 𝑟1 𝑑𝒍 = Ω 𝐧 ∙ 𝒍′ = 1− 𝑟12 𝐿𝑖 (𝒙, 𝒍) 𝜋 1+𝒏∙ 2 𝒍′ 𝑟12 − 1 + 1 2 𝜂02 1− 𝐧∙𝒍 𝜂12 𝑑𝒍 • 正規化ベクトル1つとスカラー2つ必要なので1枚のMipmapped Cubemapで表現できない 1 4 𝒆∙𝒏 + 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍, 𝒆, 𝑟0 𝑑𝒍 Ω 1 𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 𝑑𝒍 4(𝒆 ∙ 𝐧) Ω 𝐹 𝒍, 𝒆, 𝜂0 𝑑𝒍 Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍′ , 𝒆′ , 𝑟1 𝑑𝒍 Ω Ω 𝐺(𝒍′ , 𝒆′ , 𝑟1 )𝑑𝒍 + 1 𝜋 Ω 𝐧 ∙ 𝒍 𝐿𝑖 (𝒙, 𝒍) 𝑑𝒍 2 Pre-filtered Cubemap [2]の分離(3) • 𝜂0 を𝑟1 で表せるように近似 𝜂1 𝑐𝑢𝑏𝑒1 𝜂1 ′ 𝒆 , 𝑟𝑠 ,𝑟 𝜂0 1 2 𝜂1 = 𝐿𝑖 (𝒙, 𝒍)𝑟𝑠 , 𝑟1 𝜂 0 Ω 1−𝑟 0.4𝑟+0.2 , 𝑟𝑠 𝑥, 𝑟 = 𝑥 𝑟+𝑥 1−𝑟 , 1 4 𝒆∙𝒏 + 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍, 𝒆, 𝑟0 𝑑𝒍 Ω 1 𝑓𝑡𝑟𝑎𝑛𝑠 𝒍, 𝒆 𝑑𝒍 4(𝒆 ∙ 𝐧) Ω 𝑥<1 𝑥≥1 𝐹 𝒍, 𝒆, 𝜂0 𝑑𝒍 Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍′ , 𝒆′ , 𝑟1 𝑑𝒍 Ω 𝜂1 𝐷 𝒍, 𝒆, 𝑟𝑠 , 𝑟 𝑟 𝑑𝒍 𝜂0 1 1 Ω 𝐺(𝒍′ , 𝒆′ , 𝑟1 )𝑑𝒍 + 1 𝜋 Ω 𝐧 ∙ 𝒍 𝐿𝑖 (𝒙, 𝒍) 𝑑𝒍 Textureのまとめ Prefiltered Mipmapped Cube-map [1] 𝑡𝑒𝑥0 𝒆, 𝑟0 = Ambient BRDF Texture [1] 𝑡𝑒𝑥1 𝒏 ∙ 𝒆, 𝑓0 = 𝑓0 + (1 − 𝑓0 ) Ambient BRDF Texture [2-0] 𝑡𝑒𝑥2 (𝐧 ∙ 𝒆′ , 𝛼𝜏0 , Ambient BRDF Texture [2-1] 𝑡𝑒𝑥3 (𝐧 ∙ 𝒆, 𝜂0 , 𝜂1 ) = Prefiltered Mipmapped Cube-map [2] 𝑡𝑒𝑥4 𝜂1 𝒆 , 𝑟𝑠 ,𝑟 𝜂0 1 Ambient BRDF Texture [3] 𝑡𝑒𝑥5 𝒏 ∙ 𝒆′ , Irradiance Cubemap 𝑡𝑒𝑥6 𝒍 = Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍, 𝒆, 𝑟0 𝑑𝒍 𝜂02 )= 𝜂12 Ω Ω ′ 𝜂02 , 𝑟1 = 𝜂12 Ω exp( Ω D項のNormalize項はAmbientBRDFに 移す[Gotanda 2011, 2013] 𝐹 ′ 𝒍, 𝒆, 𝑓0 𝑑𝒍 −𝛼𝜏0 −𝛼𝜏0 )exp( ) 𝑑𝒍 ′ 𝐧∙𝒍 𝐧 ∙ 𝒆′ 1 − 𝐹 𝐧 ∙ 𝒆, 𝜂0 1 − 𝐹 𝐧 ∙ 𝒆, 𝜂1 = 𝐿𝑖 (𝒙, 𝒍)𝑟𝑠 ,𝑟 𝜂0 1 Ω Ω 𝐺(𝒍′ , 𝒆′ , 𝑟1 )𝑑𝒍 𝐧 ∙ 𝒍 𝐿𝑖 (𝒙, 𝒍) 𝑑𝒍 3D Texture 1 𝜂0 2 𝐷 𝒍, 𝒆, 𝑟𝑠 𝐹 𝐧 ∙ 𝒆′ , 𝜂1 𝑑𝒍 𝜂0 𝜂1 , 𝑟 𝑟 𝑑𝒍 𝜂0 1 1 3D Texture D項については上記と同じ 3D Texture マテリアルとして必要なパラメータ Roughness0 上層レイヤーのroughness Roughness1 下層レイヤーのroughness (𝜂0 _𝑟, 𝜂0 _𝑔, 𝜂0 _𝑏) (𝜂1 _𝑟, 𝜂1 _𝑔, 𝜂1 _𝑏) 上層レイヤーの屈折率 下層レイヤーの屈折率 (𝛼𝜏_𝑟, 𝛼𝜏_𝑔, 𝛼𝜏_𝑏) (r, g, b) 𝑓0 , 𝑓1 など 上層レイヤーの透過率 下層レイヤーのディフューズアルベド 屈折率からシェーダ内で求める カラーが必要ないパラメータはスカラーでよい 7枚ものテクスチャ! • いくら次世代といっても – IBLシェーディングモデルに7枚のテクスチャは多いか? • 現在ではAmbientBRDF1枚+キューブマップのブレンド数程度 • しかもこれでもDiffuseはまだLambert – 簡略化(テクスチャ数削減)の検討は必要か? 簡略化案(1) • Irradiance CubemapをSH化する – 現世代でも行っている – 次世代ではさらにALUが余るはず – 2次(3 bands)以上あればクオリティも遜色ない 𝑡𝑒𝑥6 𝒍 = Ω 𝐧 ∙ 𝒍 𝐿𝑖 (𝒙, 𝒍) 𝑑𝒍 簡略化案(2) • Prefiletered Cubemap [1], [2]の統合 – 屈折による影響をroughnessへの関数にフィッティングしたので 統合可能 – Normalize項はAmbientBRDFに移動してあるのでテクスチャ自体 はともに正規化されている 𝑡𝑒𝑥0 𝒆, 𝑟0 = 𝑡𝑒𝑥4 Ω 𝐿𝑖 (𝒙, 𝒍)𝐷 𝒍, 𝒆, 𝑟0 𝑑𝒍 𝜂1 ′ 𝒆 , 𝑟𝑠 , 𝑟1 𝜂0 𝜂1 = 𝐿𝑖 (𝒙, 𝒍)𝑟𝑠 , 𝑟1 𝜂0 Ω 2 𝜂1 𝐷 𝒍, 𝒆, 𝑟𝑠 , 𝑟1 𝑟1 𝑑𝒍 𝜂0 簡略化案(3) • AmbientBRDF Texture [3]の簡略化 – この項はG項なので定数(1)にしてしまう簡略化も検討できる • 2層目の屈折率>1層目の屈折率ならいけそう Roughness 0.3 紫 : GGX 青 : 屈折したGGX 上層屈折率 1.45 下層屈折率 1.55 𝑡𝑒𝑥5 Roughness 0.3 紫 : GGX 青 : 屈折したGGX 上層屈折率 1.5 下層屈折率 1.33 2 𝜂 0 𝒏 ∙ 𝒆′ , 𝑓1 , 2 = 𝜂1 Ω 𝐺(𝒍′ , 𝒆′ , 𝑟1 )𝑑𝒍 簡略化案(4) • AmbientBRDF Texture [2-0]を簡略化 – 複雑な式 • 屈折や角度を無視すれば簡単な関数に近似はできる • フィッティングするアイディアも 2 𝜂 0 𝑡𝑒𝑥2 (𝐧 ∙ 𝒆′ , 𝛼𝜏0 , 2 ) = 𝜂1 −𝛼𝜏0 −𝛼𝜏0 exp( )exp( ) 𝑑𝒍 ′ ′ 𝐧∙𝒍 𝐧∙𝒆 Ω 簡略化案(5) • AmbientBRDF Texture [2-1]は簡略化可能か? – 𝜂0 > 𝜂1 なら簡単な関数で近似可能 • 𝜂0 , 𝜂1 の比をパラメータにした関数でフィッティング – 𝜂0 < 𝜂1 なら別の関数で近似可能 • Schlick的な関数でフィッティング 𝑡𝑒𝑥3 (𝐧 ∙ 𝒆, 𝜂0 , 𝜂1 ) = Ω 1 − 𝐹 𝐧 ∙ 𝒆, 𝜂0 1 1 − 𝐹 𝐧 ∙ 𝒆, 𝜂0 𝐹 𝐧∙ 𝜂1 ′ 𝒆, 𝜂0 𝑑𝒍 簡略化結果 • すべての簡略化を行うと – テクスチャ数7枚⇒2枚へ – 関数の近似が必要なのでALU命令数増加 • 次世代では全く問題ない • 問題が出るなら帯域と相談しながらテクスチャ数を減らす – むしろ現世代でも実装可能 もっと大胆な簡略化 • 屈折による効果を無視(近似) – よりシンプルな表現 • 現世代どころか現行モバイルGPUでも実装可能なレベルへ – 詳しくは[Gotanda 2012]を参考に フィッティングの積極利用 • 次世代ではよりテクスチャに対してALUの性能比が向上 – 現行機でもテクスチャフェッチよりフィッティングしたほうが 高速なケースも多い • テクスチャで表現しづらい多変数関数の近似 – 4つ以上のパラメータ – 1つのベクトルと2つ以上のスカラーパラメータ フィッティングを利用したモデル例 • マイクロファセットを考慮したディフューズモデル – といえば[Oren and Nayar 1994] – Oren-Nayarには問題がある • NDFが今流行のGGXではない – 球面ガウス的な分布 (球面ガウスそのものではなくBeckmannでもない) • G項が今流行のSmithではない – V-Cavityモデル • スペキュラとエネルギー保存をしていない – マクロ的にもマイクロ的にも – つまり物理ベースモデルではない 物理ベースディフューズモデルの設計 • 物理ベースのディフューズマイクロファセットモデルを 設計してみる 𝑓𝑟 𝒙, 𝒍, 𝒆 = 1 𝒍∙𝒏 𝒆∙𝒏 𝜌 𝒍, 𝒆, 𝒎 𝒍 ∙ 𝒎 𝒆 ∙ 𝒎 𝐺 𝒆, 𝒎 𝐷 𝒎 𝑑𝒎 𝛀 ディフューズモデルでもスタートはここから 各関数の定義 • 𝐺 𝒆, 𝒎 : Smith系モデル(Height-Correlatedなど) • 𝐷 𝒎 : GGX • 𝜌 𝒍, 𝒆, 𝒎 = 1 𝜋 1 − 𝐹(𝒍, 𝒎) – 各ファセットのスペキュラは完全鏡面反射とみなすので • スペキュラのフレネルは𝐹 𝒍, 𝒎 = 𝐹(𝒆, 𝒎) • ディフューズはスペキュラの残りとなる – エネルギー保存 – 各ファセットのディフューズはLambertian • 半球の全方向に反射するのでデルタ関数は必要ない 物理ベースディフューズモデル 1 𝑓𝑟 𝒙, 𝒍, 𝒆 = 𝜋 𝒍∙𝒏 𝒆∙𝒏 1 − 𝐹(𝒍, 𝒎) 𝒍 ∙ 𝒎 𝒆 ∙ 𝒎 𝐺 𝒆, 𝒎 𝐷 𝒎 𝑑𝒎 𝛀 • 解析解は存在しない – テクスチャにベイク – 数値解でフィッティング テクスチャにベイク(1) 1 − 𝐹(𝒍, 𝒎) 𝒍 ∙ 𝒎 𝒆 ∙ 𝒎 𝐺 𝒆, 𝒎 𝐷 𝒎 𝑑𝒎 𝛀 • パラメータとしては𝒍, 𝒆, 𝑟, 𝑓0 – 正規化ベクトル2つに, スカラー1つ • 𝑓0 は外に出せる – Mipmapped Cubemapか3D Texture, 2つに因数分解して近似? • 近似としての精度がどうか? – 試していないのでわからない – 誰か試してみてください テクスチャにベイク(2) • 実は𝒏 ∙ 𝒍, 𝒏 ∙ 𝒆, 𝒆 ∙ 𝒍, 𝑟の4つのパラメータでベイクすると 良い近似になる – あとでフィッティングすることによってわかる – 𝒆∙𝒎=𝒍∙𝒎= 1+𝒆∙𝒍 2 から – それでも4つのパラメータ テクスチャにベイク(3) • 3D Texture Arrayがあれば簡単だが – BTF方式で3D Textureにベイクする • lerpはシェーダで独自に行う • キャッシュ効率を考えると𝒏 ∙ 𝒆をインデックスにして(𝒏 ∙ 𝒍, 𝒆 ∙ 𝒍, 𝑟)の 3D Textureが良い – lerpは2回フェッチするか, 2要素にしてフェッチを1回にするか – 精度とシェーダパスの実装によって決める – ディフューズなのでベクトル方向にはそれほど解像度はいらない フィッティングしてみる • 次世代では(現世代でも)ALU優位なのでちょっと複雑な式 でもテクスチャをフェッチするより高速 – キャッシュを乱さない – ただしレジスタ数には注意 – フィッティングすることによりテクスチャベイクに役に立つこ ともある • 精度の良い基底座標系を見つけることができるかも(前述) – なにはともあれ複雑で多変数の関数なので観察してみる 観察(1) n·e 1.0 (0) cos 1.0 (0) roughness 0.0 f0 Lr 青 : Oren-Nayar 紫 : Oren-Nayar (Fresnelあり) [Gotanda 2012]モデル 緑 : 物理ベースディフューズモデル 0.04 ql 観察(2) n·e 1.0 (0) cos 1.0 (0) roughness 0.5 f0 Lr 青 : Oren-Nayar 紫 : Oren-Nayar (Fresnelあり) 緑 : 物理ベースディフューズモデル 0.04 ql 観察(3) n·e 1.0 (0) cos 1.0 (0) roughness 1.0 f0 Lr 青 : Oren-Nayar 紫 : Oren-Nayar (Fresnelあり) 緑 : 物理ベースディフューズモデル 0.04 ql 観察(4) n·e 0.5 (60) cos 1.0 (0) roughness 0.8 f0 Lr 青 : Oren-Nayar 紫 : Oren-Nayar (Fresnelあり) 緑 : 物理ベースディフューズモデル 0.04 ql 観察(5) n·e 0.342 (70) cos 0.5 (60) roughness 0.6 f0 Lr 青 : Oren-Nayar 紫 : Oren-Nayar (Fresnelあり) 緑 : 物理ベースディフューズモデル 0.04 ql 観察(6) n·l 0.866 (30) cos 1.0 (0) roughness 0.0 f0 Lr 青 : Oren-Nayar 紫 : Oren-Nayar (Fresnelあり) 緑 : 物理ベースディフューズモデル 0.04 qe 観察(7) n·l 0.866 (30) cos 1.0 (0) roughness 0.3 f0 Lr 青 : Oren-Nayar 紫 : Oren-Nayar (Fresnelあり) 緑 : 物理ベースディフューズモデル 0.04 qe 観察(8) n·l 0.866 (30) cos 1.0 (0) roughness 0.7 f0 Lr 青 : Oren-Nayar 紫 : Oren-Nayar (Fresnelあり) 緑 : 物理ベースディフューズモデル 0.04 qe 観察(9) n·l 0.259 (75) cos 0.985 (10) roughness 0.8 f0 Lr 青 : Oren-Nayar 紫 : Oren-Nayar (Fresnelあり) 緑 : 物理ベースディフューズモデル 0.04 qe フィッティング(1) • 多変数関数はいろいろな軸から見るのが大事 – まずそれぞれの平面における傾向をつかむ – 入力(軸)に対してどのように変化するか • シェーダで使える基底関数 – 加減乗除, 内積, 外積 – 多項式 (n次関数) – – – – – sqrt, rsqrt max, min, saturate, sign sin, cos, tan, asin, acos, atan, sinh, cosh log, exp, pow floor, frac, fmod, trunc, lerp フィッティング(2) • その軸に対してどのような傾向があるか? – – – – – 右肩上がり? 下がり? 周期的? 指数, 対数的? どの基底関数が近いか? 基底関数の組み合わせ • 有理近似など – Mathematicaなどを使って係数を求める フィッティング(3) • その軸以外のパラメータを動かしたらどのような傾向が あるか – その変化を関数化して乗算, 加算していく • グラフを作るパラメータを入れ替えて繰り返し観察するのが大切 – あとはひたすらこれを繰り返す • 最後は気合 フィッティング(4) • 最終的にフィッティングした式 𝐿𝑟 𝒆, 𝒍, 𝑟, 𝑓0 = 21 1 − 𝑓0 𝐹𝑟 𝒆, 𝒍, 𝑟 𝐿𝑚 𝒍, 𝑟 + 𝑉𝑑 𝒆, 𝒍, 𝑟 𝐵𝑝 𝒆, 𝒍 20𝜋 0.542026𝑟 2 + 0.303573𝑟 𝐹𝑟 𝒆, 𝒍, 𝑟 = 1 − 𝑟 2 + 1.36053 𝐿𝑚 𝒍, 𝑟 = 𝑀𝑎𝑥 1 − 2𝑟, 0 1 − 1 − 𝒏 ∙ 𝒍 𝑉𝑑 𝒆, 𝒍, 𝑟 = 𝐵𝑝 𝒆, 𝒍 = 5 1 − 𝒏 ∙ 𝒆 5−4𝑟 1− 2 𝑟 + 1.36053 + 𝑀𝑖𝑛(2𝑟, 1) 𝑟2 𝑟 2 + 0.09 1.31072 + 0.995584𝒏 ∙ 𝒆 1.4 𝒏 ∙ 𝒆 𝒏 ∙ 𝒍 𝒆 ∙ 𝒍 − 𝒏 ∙ 𝒆 𝒏 ∙ 𝒍 𝒆∙𝒍− 𝒏∙𝒆 𝒏∙𝒍 2 −0.733996𝑟 3 + 1.50912𝑟 2 − 1.16402𝑟 1 − 𝒏 ∙ 𝒆 1 − 0.5𝑟 𝒏 ∙ 𝒍 + 0.5 𝒏 ∙ 𝒍 1− 1−𝒏∙𝒍 2 1−0.3726732 𝒏∙𝒆 2 0.188566+0.38841𝒏∙𝒆 if 𝒆 ∙ 𝒍 − 𝒏 ∙ 𝒆 𝒏 ∙ 𝒍 otherwise <0 1 +1 39𝑟 4 +1 +1 検証(1) n·e 1.0 (0) cos 1.0 (0) roughness 0.0 f0 Lr 青実線 : フィッティングモデル 橙点線 : 数値積分 0.04 ql 検証(2) n·e 1.0 (0) cos 1.0 (0) roughness 0.5 f0 Lr 青実線 : フィッティングモデル 橙点線 : 数値積分 0.04 ql 検証(3) n·e 1.0 (0) cos 1.0 (0) roughness 1.0 f0 Lr 青実線 : フィッティングモデル 橙点線 : 数値積分 0.04 ql 検証(4) n·e 0.5 (60) cos 1.0 (0) roughness 0.8 f0 Lr 青実線 : フィッティングモデル 橙点線 : 数値積分 0.04 n·l 検証(5) n·e 0.342 (70) cos 0.5 (60) roughness 0.6 f0 Lr 青実線 : フィッティングモデル 橙点線 : 数値積分 0.04 ql 検証(6) n·l 0.866 (30) cos 1.0 (0) roughness 0.0 f0 Lr 青実線 : フィッティングモデル 橙点線 : 数値積分 0.04 qe 検証(7) n·l 0.866 (30) cos 1.0 (0) roughness 0.3 f0 Lr 青実線 : フィッティングモデル 橙点線 : 数値積分 0.04 qe 検証(8) n·l 0.866 (30) cos 1.0 (0) roughness 0.7 f0 Lr 青実線 : フィッティングモデル 橙点線 : 数値積分 0.04 qe 検証(9) n·l 0.259(75) cos 0.985 (10) roughness 0.8 f0 Lr 青実線 : フィッティングモデル 橙点線 : 数値積分 0.04 qe フィッティングモデル検証結果 • Roughnessの範囲は0~1まで – 元々フィッティングしたときにその範囲で係数を計算している • ライトベクトルおよび視線ベクトルがともにglazing angle に近い場合に精度が低い – バックライトでエッジを見るような場合に若干明るさに違いが 出る IBL用AmbientBRDF • もうわかりますよね? – ここまでのやり方と同じです – ぜひ自分でチャレンジしてください – 参考までに • フィッティングモデルを利用せず数値積分の結果を直接Ambient BRDF Textureに代入したほうが当然精度は高い • 過去のSIGGRAPHやCEDEC資料が参考になります 比較(1) Roughness 0.0 Lambert Oren-Nayar フレネル改 物理ベースディフューズ わかりやすくするために環境光(IBL)と 背景色は合っていない 比較(2) Roughness 0.05 Lambert Oren-Nayar フレネル改 物理ベースディフューズ 比較(3) Roughness 0.1 Lambert Oren-Nayar フレネル改 物理ベースディフューズ 比較(4) Roughness 0.3 Lambert Oren-Nayar フレネル改 物理ベースディフューズ 比較(5) Roughness 1.0 Lambert Oren-Nayar フレネル改 物理ベースディフューズ 比較(ディフューズのみ) Roughness 1.0 Lambert Oren-Nayar フレネル改 物理ベースディフューズ まとめ(1) • 目的のモデルを設計し数式化しレンダリング方程式と 合わせてシェーディングモデル化する – Analyic Light用モデル – IBL用モデル • AmbientBRDF式で分離する • 関数をテクスチャにベイク • 数値積分結果をフィッティング まとめ(2) • 今日出てきたモデルは現世代でも動作するレベル – 最終的に簡略化や近似の精度調整で問題なく動作 – 本当の次世代ではもっと複雑なモデルも動作可能 • 次世代では目的に応じたモデルを自分で設計する – より自然なモデルを求めれば次世代でも単一モデルは難しい – 物理ベース(と言われている)モデルを単に使えば物理ベースレン ダリングになるわけではない • レンダリングパイプラインとワークフロー全体で物理ベースの 設計を! 参考文献 • • • • • • • • • • • • • • • • • • Bruce G. Smith “Geometrical Shadowing of a Radom Rough Surface” IEEE Transactions on Antennas and Propagation, Vol. AP-15, No. 5, 1967 K. E. Torrance “Theory for Off-Specular Reflection From Roughened Surfaces” Journal of the Optical Society of America Vol. 57, 1967 James F. Blinn “Models of Light Reflection for Computer Synthesized Pictures” Proceedings of the 4 th annual conference on Computer graphics and interactive techniques, 1977 Michael Oren et al. “Generalization of Lambert’s Reflectance Model” ACM SIGGRAPH, 1994 Peter Shirley et al. “A Practitioners’ Assessment of Light Reflection Models” Pacific Graphics, 1997 Lawrence B. Wolff et al. “Improved Diffuse Reflection Models for Computer Vision” International Journal of Computer Vision 30(1), 1998 Istavan Lazanyi et al. “Fresnel Term Approximations for Metals” WSCG, 2005 Bruce Walter et al. “Microfacet Models for Refraction through Rough Surfaces” Eurographics Symposium on Rendering, 2007 Yoshiharu Gotanda, Practical Implementation at tri-Ace. In Physically Based Shading Models in Film and Game Production Course, SIGGRAPH 2010 Sebastien Lagarde, “Spherical Gaussian approximation for Blinn-Phong, Phong and Fresnel”, 2012. http://seblagarde.wordpress.com/2012/06/03/spherical-gaussien-approximation-for-blinn-phong-phong-and-fresnel/ Naty Hoffman “Background: Physics and Math of Shading” SIGGRAPH, 2012 Brent Burley “Physically-Based Shading at Disney” SIGGRAPH, 2012 Yoshiharu Gotanda, Beyond a Simple Physically Based Blinn-Phong Model in Real-Time. In Practical Physically Based Shading in Film and Game Production Course, SIGGRAPH 2012 Yoshiharu Gotanda, Real-time Physically Based Rendering – Basic Theory, CEDEC 2011 Yoshiharu Gotanda, Real-time Physically Based Rendering – Implementation, CEDEC 2011 Yoshiharu Gotanda, Physically Based Reflectance Model Design for Next Generation, CEDEC 2013 Yoshiharu Gotanda, Designing Reflectance Models for New Consoles. In Practical Physically Based Shading in Film and Game Production Course, SIGGRAPH 2014 Eric Heitz, Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs. Journal of Computer Graphics Techniques Vol. 3, No. 2, 2014
© Copyright 2024 ExpyDoc