拡散環境マップ

  • 理論的つじつまがあってきた。

ある値はπ/Nθ·Nφだ。多分。

  • 2π/Nθ·Nφだった。
  • 拡散環境マップをつくる方法

ざっと説明してみる。
ある微小面におけるirradianceの和はその法線との入射角をθ*1とすると、ランバート則に従うのなら以下の式のようになる。


I = ∫L(ω)·cosθdω
ここでcosθのθは法線とのなす角なのでこれを法線nとωとの内積に置き換え、θの範囲を拡張すると*2、この式は

I = ∫L(ω)·max(0,<n,ω>)·dω
さらに

dω = sinθdθdφ
なので、*3

I = ∫∫L(ω)·max(0,<n,ω>)·sinθdθdφ
となる。
これを総和の形に直す。このときsinθで補正した分、全体量が1/2πとなり、小さくなるのでこれを考慮して2πをかけてやり
Nθ·Nφをθ、φのサンプリング数とすると以下の式になる。

I = 2π/( Nθ·Nφ)ΣΣ{L(ωi)·max(0,<n,ωi>)·sinθ}

ただしθを0からπまで、φを0から2πまでに対応付けるとする。

ここから球面マッピングされた天空画像から拡散環境マップをえて


out(o_θ,o_φ) = 2π/( Nθ·Nφ ) ΣΣ{sky(θ,φ)· max(0,<n(o_θ,o_φ),ω(θ,φ)>)·sinθ}

とする。

放射輝度


I = ∫L(ω)cosθdω
であるが、ここで

F = ∫cosθdω

F = ∫cosθdω
= ∫∫cosθsinθdθdφ
= ∫dφ∫cosθsinθdθ
= φ/2·2·-cos2θ/2
= φ/2·(1-cos2θ)
ここでφに2πをθにπ/2を代入すると

F = π
となる。

*1:0...π/2

*2:0...π

*3:ここで、sinθは立体角を緯度方向の面積を補正する為にあり、これは球面マップにそのまま対応する。また法線とは関係ない。

*4:よく見たらJensen本にも書いてありましたな。・・・だから考える前に調べろと!>自分