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

SH,MonoSH Lightmap Shader

kinakomoti-321
September 16, 2023
570

SH,MonoSH Lightmap Shader

補足
スライド内で使用しているx,y,zはnormalの方向ベクトル(x,y,z)です。(θ,Φ)はnormalの極座標です。
LightmapのテクスチャはBakeryだと補完して使用しているので、補完を加えてあげる必要があるかもしれません

kinakomoti-321

September 16, 2023
Tweet

Transcript

  1. やりたいこと • 法線𝑛が変化しても値がとれる事前計算の形式が欲しい 𝐸 𝜃, 𝜙 = න Ω 1

    𝜋 𝑛(𝜃, 𝜙) ⋅ 𝜔 𝐿𝑖 𝜔 𝑑𝜔 𝐿𝑖 (𝜔) 𝑛(𝜃, 𝜙) • テクスチャで保存するとなるとLightmap 1pixelの情報量がすごいことになる • 32*32で保存したとしても32*32*3倍のライトマップが必要になる
  2. Spherical Hermonics • 番号𝑙に対して𝑚 = −𝑙, … , −1,0,1, …

    , 𝑙の個の 関数がある • 𝑌𝑙 𝑚と表記される 𝑌0 0 𝑌1 1 𝑌1 −1 𝑌2 2 𝑌2 1 𝑌1 0 𝑌2 0 𝑌2 −1 𝑌2 −2 𝑌0 0 𝜃, 𝜙 = 1 4 𝜋 𝑌1 −1 𝜃, 𝜙 = 3 4 𝜋 𝑥 𝑌1 0 𝜃, 𝜙 = 3 4 𝜋 𝑦 𝑌1 1 𝜃, 𝜙 = 3 4 𝜋 𝑧
  3. SHの良いところ • 各SHは正規直交している 𝑌𝑙 𝑚, 𝑌 𝑙′ 𝑚′ = 𝛿𝑚𝑚′,𝑙𝑙′

    • 方向を引数とする関数𝑓(𝜃, 𝜙)はSHの級数として表現することが出来る • フーリエ級数展開みたいなもの 𝑓 𝜃, 𝜙 = ෍ 𝑙=0 ∞ ෍ 𝑚=−𝑙 𝑙 𝑓𝑙 𝑚𝑌𝑙 𝑚(𝜃, 𝜙)
  4. SHの良いところ • この形式は各係数を知っていれば置けば関数を近似できる 𝑓 𝜃, 𝜙 = ෍ 𝑙=0 ∞

    ෍ 𝑚=−𝑙 𝑙 𝑓𝑙 𝑚𝑌𝑙 𝑚(𝜃, 𝜙) ≈ 𝑓0 0 𝑌0 0 𝜃, 𝜙 + 𝑓1 −1𝑌1 −1 𝜃, 𝜙 + 𝑓1 0𝑌1 0 𝜃, 𝜙 + ⋯
  5. SHの良いところ • この形式は各係数を知っていれば置けば関数を近似できる 𝑓 𝜃, 𝜙 = ෍ 𝑙=0 ∞

    ෍ 𝑚=−𝑙 𝑙 𝑓𝑙 𝑚𝑌𝑙 𝑚(𝜃, 𝜙) ≈ 𝑓0 0 𝑌0 0 𝜃, 𝜙 + 𝑓1 −1𝑌1 −1 𝜃, 𝜙 + 𝑓1 0𝑌1 0 𝜃, 𝜙 + ⋯ これらを覚えておけば元の関数を近似できる
  6. SH Lightmap • 先ほどの放射照度の関数をSHで近似する手法 𝐸 𝜃, 𝜙 = 𝑓0 0

    𝑌0 0 + 𝑓1 −1 𝑌1 −1 + 𝑓1 0𝑌1 0 + 𝑓1 1𝑌1 1 + …
  7. SH Lightmap • SHの𝑌を展開するとこんな感じ 𝐸 𝜃, 𝜙 ≈ 𝑓0 0

    1 4 𝜋 + 𝑓1 −1 3 4 𝜋 𝑥 + 𝑓1 0 3 4 𝜋 𝑦 + 𝑓1 1 3 4 𝜋 𝑧
  8. SH Lightmap • RGBでそれぞれ必要なので全体としては以下のようになっている 𝐸𝑅 𝜃, 𝜙 ≈ 𝐿0𝑅 +

    𝐿1𝑥𝑅 𝑥 + 𝐿1𝑦𝑅 𝑦 + 𝐿1𝑧𝑅 𝑧 𝐸𝐺 𝜃, 𝜙 ≈ 𝐿0𝐺 + 𝐿1𝑥𝐺 𝑥 + 𝐿1𝑦𝐺 𝑦 + 𝐿1𝑧𝐺 𝑧 𝐸𝐵 𝜃, 𝜙 ≈ 𝐿0𝐵 + 𝐿1𝑥𝐵 𝑥 + 𝐿1𝑦𝐵 𝑦 + 𝐿1𝑧𝐵 𝑧
  9. SH Lightmap • RGBでそれぞれ必要なので全体としては以下のようになっている • Lightmap 1pixelあたり12パラメーターを持つ必要がある 𝐸𝑅 𝜃, 𝜙

    ≈ 𝐿0𝑅 + 𝐿1𝑥𝑅 𝑥 + 𝐿1𝑦𝑅 𝑦 + 𝐿1𝑧𝑅 𝑧 𝐸𝐺 𝜃, 𝜙 ≈ 𝐿0𝐺 + 𝐿1𝑥𝐺 𝑥 + 𝐿1𝑦𝐺 𝑦 + 𝐿1𝑧𝐺 𝑧 𝐸𝐵 𝜃, 𝜙 ≈ 𝐿0𝐵 + 𝐿1𝑥𝐵 𝑥 + 𝐿1𝑦𝐵 𝑦 + 𝐿1𝑧𝐵 𝑧
  10. SH Lightmap • Bakeryでは4つのLightmapTextureを用意して各パラメーターを持っている 𝐸𝑅 𝜃, 𝜙 ≈ 𝐿0𝑅 +

    𝐿1𝑥𝑅 𝑥 + 𝐿1𝑦𝑅 𝑦 + 𝐿1𝑧𝑅 𝑧 𝐸𝐺 𝜃, 𝜙 ≈ 𝐿0𝐺 + 𝐿1𝑥𝐺 𝑥 + 𝐿1𝑦𝐺 𝑦 + 𝐿1𝑧𝐺 𝑧 𝐸𝐵 𝜃, 𝜙 ≈ 𝐿0𝐵 + 𝐿1𝑥𝐵 𝑥 + 𝐿1𝑦𝐵 𝑦 + 𝐿1𝑧𝐵 𝑧 L0 L1x L1y L1z
  11. SH Lightmap • 高々4倍の容量で実現できる 𝐸𝑅 𝜃, 𝜙 ≈ 𝐿0𝑅 +

    𝐿1𝑥𝑅 𝑥 + 𝐿1𝑦𝑅 𝑦 + 𝐿1𝑧𝑅 𝑧 𝐸𝐺 𝜃, 𝜙 ≈ 𝐿0𝐺 + 𝐿1𝑥𝐺 𝑥 + 𝐿1𝑦𝐺 𝑦 + 𝐿1𝑧𝐺 𝑧 𝐸𝐵 𝜃, 𝜙 ≈ 𝐿0𝐵 + 𝐿1𝑥𝐵 𝑥 + 𝐿1𝑦𝐵 𝑦 + 𝐿1𝑧𝐵 𝑧 L0 L1x L1y L1z
  12. MonoSH • 式的にはこんな感じ L1 L0 𝐸𝑅 𝜃, 𝜙 ≈ 𝐿0𝑅

    𝐸𝐺 𝜃, 𝜙 ≈ 𝐿0𝐺 𝐸𝐵 𝜃, 𝜙 ≈ 𝐿0𝐵 +𝐿1𝑥 𝑥 + 𝐿1𝑦 𝑦 + 𝐿1𝑧 𝑧
  13. 参考、引用文献 • Bakery Wiki • https://geom.io/bakery/wiki/index.php?title=Manual#Render_mode • Global Illumination in

    Frostbite • https://media.contentapi.ea.com/content/dam/eacom/frostbite/files/gdc2018- precomputedgiobalilluminationinfrostbite.pdf