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

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

55e378cb6005107f3d7c9add5b411bcc?s=47 sakanaman
August 15, 2020
84

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

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

55e378cb6005107f3d7c9add5b411bcc?s=128

sakanaman

August 15, 2020
Tweet

Transcript

  1. None
  2. 実装したのはこの論文 ! ! !

  3. 何が出来るの? 薄膜干渉による光学現象をRGBレンダリングで再現できる

  4. 薄膜干渉とは何ぞや ・複数の波が重なり合って強めあったり、弱めあったりするのが干渉 ・シャボン玉や油膜のような薄い膜での反射/屈折光による干渉が 薄膜干渉と言われる現象

  5. どのような数学モデルになる? ・薄膜は単層であると仮定する ・用意すべきパラメーターは外側の屈折率!!、薄膜内の!"、内側の複素屈折率!# + #$ 、薄膜の厚さ%の5つ % !! !" !#

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

    1 2 ((∥ + (") フレネル項を薄膜干渉を考慮した形に置き換える!! これをAiry Reflectanceと名前をつけます
  7. どのような数学モデルになる? 前ページの&を使うことで、薄膜干渉を考慮した'&()を考えることができる 完全鏡面BRDF R " cos & ※引数はめんどくさいので書いてません 完全鏡面BTDF !!

    " !# " (1 − %) ' cos + Microfacet BRDF % , - 4 cos +# cos +!
  8. どのような数学モデルになる? % !! !" !# + #$ /$% ∶= 2$%

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

  10. どのような数学モデルになる? % !! !" !# + #$ '!" ("# '"!

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

    ("# '"! )"$∆&
  12. どのような数学モデルになる? % !! !" !# + #$ '!" ("# ("!

    ("# '"! )"$∆& これを無限回まで続けてあげて、全ての反射光を足し合わせる + " " " " " + + '!" ("# '"! )$∆& 0 0 0 0 0 0 0 0 0 0 (!" ) ≔
  13. どのような数学モデルになる? '!" ("# ("! ("# '"! )"$∆& これを無限回まで続けてあげて、全ての反射光を足し合わせる + "

    " " " " + + '!" ("# '"! )$∆& (!" ) ≔ = (!" + '!" *"# '"! )$∆& 1 − *"! *"# )$∆&
  14. どのような数学モデルになる? 前のページの式に対し血を吐くような計算をすることで次の式を得る(論文参照) 2 " = 5' + 2 8 ()*

    + 5( cos(9Φ) 5& ≔ )!" + )∗ 5( ≔ )"#)"! ( ()∗ − 9!"9"!) 9$%、)$%をそれぞれフレネル透過率、フレネル反射率として )∗ ≔ 9!"9"!)"# 1 − )"#)"! 0 0 0 0 (⋆) Φ ≔ ∆+ + +"! + +"#
  15. どのような数学モデルになる? 先ほどの式に対してうまい計算を経て次の式を得る(論文参照) ( " = "!" + "∗ + 2

    "↕ cos Φ − "↕ " 1 − 2"↕ cos Φ + "↕ " ("∗ − -!" -"! ) &↕ ≔ & => & >=
  16. どのような数学モデルになる? 光の強度は電界の振幅の絶対値の二乗に比例するので光の強度の反射率は次のようになる (∥ = )∥ $ (" = )" $

    前ページの式をこの式に代入すれば所望のAiry Reflectanceが得られる あとはスペクトラルレンダリングによって薄膜干渉を再現すれば良い。 ※p偏光、s偏光で分けて計算することを忘れずに p偏光、s偏光でのフレネル係数をそれぞれ) ∥ 、) @ とする
  17. だがしかし

  18. 正しい結果を得るためには多数の波長のサンプル点が必要. . .

  19. じゃあどうするの? スペクトラルレンダリングとは次の積分方程式を解くことを言います /$ (0% ) = 1 2$ (3) 4

    1 & 5 0% , 0' ; 3 /(0' ) 0' 8 9 :0' :3 (A)はBCD表色系の等色関数、Eは正規化定数)
  20. じゃあどうするの? スペクトラルレンダリングを考え直す /$ (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+ と置く
  21. じゃあどうするの? ; <, = > ? @ A! , A#

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

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

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

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

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

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

    (−@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)
  28. じゃあどうするの? (% = 1 2 (( % ∥ + (%

    ") ℜ)(]W)、 ℑ)(]W)は事前計算で求められる(論文著者のホームページにデータがある) もちろんこのままでは&)はXYZ表色系の値なので、RGBに変換する必要がある これが最終結果!! この式は波長に依存していないので、RGBレンダリングで使える。 透過には9 = 1 − &で対応する(エネルギー保存のため)
  29. None
  30. None
  31. 僕のLTは終わりだけど、論文自体はまだ終わりじゃない. . . ・リアルタイムレンダリングに適用する際の実装方法 ・等色関数をガウシアンフィッティングして最適化