Upgrade to Pro — share decks privately, control downloads, hide ads and more …

玉虫色シェーダーのススメ

Avatar for sakanaman sakanaman
August 15, 2020
700

 玉虫色シェーダーのススメ

OSKの夏休みLTで発表した際の資料。
"A Practical Extension to Microfacet Theory for the Modeling of Varying Iridescence"という論文の実装・理論について説明しました。

Avatar for sakanaman

sakanaman

August 15, 2020
Tweet

Transcript

  1. どのような数学モデルになる? ! = 1 2 (!∥ + !") ( =

    1 2 ((∥ + (") フレネル項を薄膜干渉を考慮した形に置き換える!! これをAiry Reflectanceと名前をつけます
  2. どのような数学モデルになる? % !! !" !# + #$ /$% ∶= 2$%

    3#&!" aからbへ入射する光の振幅反射率*$%と反射による位相の変化+$%を掛け合わせた次の式を考える フレネル係数といいます
  3. どのような数学モデルになる? % !! !" !# + #$ '!" ("# '"!

    )$∆& ∆+は光路長による位相差で 2. / 0 2!"% cos 4" 4! 4" 振幅透過率
  4. どのような数学モデルになる? % !! !" !# + #$ '!" ("# ("!

    ("# '"! )"$∆& これを無限回まで続けてあげて、全ての反射光を足し合わせる + " " " " " + + '!" ("# '"! )$∆& 0 0 0 0 0 0 0 0 0 0 (!" ) ≔
  5. どのような数学モデルになる? 前のページの式に対し血を吐くような計算をすることで次の式を得る(論文参照) 2 " = 5' + 2 8 ()*

    + 5( cos(9Φ) 5& ≔ )!" + )∗ 5( ≔ )"#)"! ( ()∗ − 9!"9"!) 9$%、)$%をそれぞれフレネル透過率、フレネル反射率として )∗ ≔ 9!"9"!)"# 1 − )"#)"! 0 0 0 0 (⋆) Φ ≔ ∆+ + +"! + +"#
  6. どのような数学モデルになる? 光の強度は電界の振幅の絶対値の二乗に比例するので光の強度の反射率は次のようになる (∥ = )∥ $ (" = )" $

    前ページの式をこの式に代入すれば所望のAiry Reflectanceが得られる あとはスペクトラルレンダリングによって薄膜干渉を再現すれば良い。 ※p偏光、s偏光で分けて計算することを忘れずに p偏光、s偏光でのフレネル係数をそれぞれ) ∥ 、) @ とする
  7. じゃあどうするの? スペクトラルレンダリングとは次の積分方程式を解くことを言います /$ (0% ) = 1 2$ (3) 4

    1 & 5 0% , 0' ; 3 /(0' ) 0' 8 9 :0' :3 (A)はBCD表色系の等色関数、Eは正規化定数)
  8. じゃあどうするの? スペクトラルレンダリングを考え直す /$ (0% ) = 1 2$ (3) 4

    1 & 5 0% , 0' ; 3 /(0' ) 0' 8 9 :0' :3 積分順序の入れ替え(フビニの定理?) /$ 0% = 1 & 1 2$ 3 4 8 5 0% , 0' ; 3 :3 /(0' ) 0' 8 9 :0' ここをまとめてBRDFとみる。F) G*, G+ と置く
  9. じゃあどうするの? ; <, = > ? @ A! , A#

    ; = D= 薄膜干渉が現れるようなBRDF(完全鏡面、マイクロファセット)の形を見ると 波長依存するのはR(Airy Reflectance)のみである。
  10. じゃあどうするの? !E ≔ # $E % & ' ! ℎ

    ' )F ; % +% だけ考えれば良い
  11. じゃあどうするの? ; <, = > ? % ℎ ? A#

    ; = D= まだここからも大変なのです. . . I = 1 / 、積分区間を調整 - .' 1 / 0/" 1 2 / 3/ K)(L)とおく
  12. じゃあどうするの? (% = * ( + ,% (+)-+ パーセバルの定理を適用して (というよりプランシュレルの定理?)

    (% = * . ((/)0 ,% (/)⋆-/ M &、 N K)はそれぞれ&、 K)をフーリエ変換したもの。 ⋆は複素共役を表す
  13. じゃあどうするの? 前に(⋆)印をつけといた式を思い出そう 2 " = 5' + 2 8 ()*

    + 5( cos(9Φ) ユニタリ・周波に関するフーリエ変換(計算略) /をIに変数変換したのち、 * P +(,) + - QR= S * Q .TQU!+ , − 01 + .VTQU!+(, + 01) (+" ≔ +"! + +"#、W ≔ 2!"% cos 4")
  14. じゃあどうするの? * P +(,) + - QR= S * Q

    .TQU!+ , − 01 + .VTQU!+(, + 01) X K Y ⋆かけて積分する(計算略) ;( + < )*! + ;) ='),! > ?$ (−@A) + =-'),! > ?$ (@A) あともうちょっと
  15. じゃあどうするの? ;( + < )*! + ;) ='),! > ?$

    (−@A) + =-'),! > ?$ (@A) N K)(Y)とN K) −Y が互いに複素共役の関係にあることから、 実部と虚部をそれぞれN K) ±Y = ℜ)(Y) ± $ℑ(Y)と書くと ;( + 2 < )*! + ;) cos(@B" ) sin(@B" ) . ℜ$ (@A) ℑ$ (@A) これをp偏光、s偏光に分けて計算したものを&) ∥、&) .とする 級数部分の計算は有限回で止める(2,3回程度でok)
  16. じゃあどうするの? (% = 1 2 (( % ∥ + (%

    ") ℜ)(]W)、 ℑ)(]W)は事前計算で求められる(論文著者のホームページにデータがある) もちろんこのままでは&)はXYZ表色系の値なので、RGBに変換する必要がある これが最終結果!! この式は波長に依存していないので、RGBレンダリングで使える。 透過には9 = 1 − &で対応する(エネルギー保存のため)