Loading [MathJax]/jax/output/HTML-CSS/jax.js

2016年3月5日土曜日

Rough Specular Surface (GGX BRDF)

Rough Specular Surface (GGX BRDF)

本ページでは,モンテカルロレイトレーシング法において, 金属など絶縁体の粗い表面を表現する方法を説明する. 言い換えると,粗い表面モデルのBRDFの実装に必要なパラメータや数式, 重点的サンプリングの方法を説明する. 本ページでは,粗い表面モデルとして[1]のGGXモデルを用いる.

記号について

本ページでは以下の記号は定義済として扱う.

記号 説明
ωn Macrosurfaceの単位法線ベクトル
ωm Microsurfaceの単位法線ベクトル,本ページではマイクロファセット法線と呼ぶ
ωi 入射方向の単位ベクトル
ωo 反射方向の単位ベクトル
fr BRDF
ni 入射側の媒体の屈折率
no 透過側の媒体の屈折率
ηo 透過側の媒体の消衰係数
n noni
η ηoni
F フレネル項
χ+(x) {1(0<x)0(otherwise)

マイクロファセットモデルとGGX

マイクロファセットモデルは様々な 方向を向いた微小平面で構成される表面(Microsurface)を 単純な平面(Macrosurface)で近似したモデルである. このモデルでは,単純化のため波動光学や表面での2回以上の反射は無視する. マイクロファセットモデルは2つの統計量, 法線分布関数 D と Shadowing-Masking Function G を用いて表される.

表面の粗さについて

GGXは微小平面で見れば鏡面反射しかしていないが, 様々な法線を持った微小平面から構成されているため 表面が粗いほど拡散反射をしているように見える. 表面の粗さは roughness パラメータを用いて制御する. roughness がとる値の範囲は 0<roughness1 である. 値が 0 に近いほど理想的な鏡面反射に近くなり, 1 に近いほど理想的な拡散反射に近くなる.

また,計算時に用いる表面粗さの値は, roughness を直接用いるのではなく, [3]で解説してあるように

α=(roughness)2

を用いるほうがより視覚的に線形比例した変化となる. 本ページでも, α を計算時の表面粗さの値として用いる.

法線分布関数 (Normal Distribution Function) D

法線分布関数 D はMicrosurface上にできる法線の統計分布を表したものである. GGXでは D は以下の式で表される.

D(ωm)=χ+(ωnωm)α2π((α21)(ωnωm)2+1)2

ここでは簡易表記のため, D(ωn,ωm,α)D(ωm) と表記している.

Shadowing-Masking Function G

Shadowing-Masking Function は[2]の論文では V-cavityモデルとSmithモデルの2通りのモデルを載せているが, ここではSmithモデルを説明する(V-cavityモデルについては[2]を参照).

Shadowing-Masking Function G はある法線を持つMicrosurfaceが可視かどうかの比率 を表したものである. G2は入射方向,反射方向の双方向から可視かどうかの比率を表しており, G1は入射方向もしくは反射方向のどちらか単方向から可視かどうかの比率を表している.

G2(ωi,ωo,ωm)=G1(ωi,ωm)G1(ωo,ωm)G1(ω,ωm)=χ+((ωωn)(ωωm))2(ωωn)(ωωn)α2+(1α2)(ωωn)2

ここでは簡易表記のため, G1(ω,ωn,ωm,α)G1(ω,ωm) と表記している.

GGX BRDF

GGXのBRDFは以下の式になる.

fr(x,ωi,ωo)=14(ωiωn)(ωoωn)F(ωi,ωm)G2(ωi,ωo,ωm)D(ωm)

ここでは簡易表現のため, F(ω,ωm,n,η)F(ω,ωm) と表記している.

ExplicitConnection のように, マイクロファセット法線 ωm がわからない状態で fr(x,ωi,ωo) を評価する場合は, ωm は 反射ハーフベクトル ωhr を用いて,

ωm=ωhr||ωhr||ωhr=ωi+ωo

から求める.

重点的サンプリング (Importance Sampling)

反射方向 ωo の重点的サンプリングを行う. GGX BRDF では, マイクロファセット法線 ωm を重点的サンプリングし, 入射方向 ωiωm から正反射方向 ωo を求める.

ωm は 投影法線分布関数(Projected Normal Distribution Function) Dωi(ωm) に従ってサンプリングする. Dωi(ωm) は, D(ωm) の中で 入射方向 ωi から見える法線のみの分布を示したもので,

Dωi(ωm)=(ωiωm)(ωiωn)G1(ωi,ωm)D(ωm)

で定義される (ここでは簡易表記のため, Dωi(ωn,ωm)Dωi(ωm) と表記している). マイクロファセット法線 ωm の pdf p(ωm)=Dωi(ωm) から, 反射方向 ωo とそのpdf p(ωo)

ωo=2(ωiωm)ωmωip(ωo)=||δωmδωi||p(ωm)=14(ωiωm)Dωi(ωm)

で求められる. ここで,||δωmδωi||=14(ωmωi) はヤコビアンである.

重点的サンプリングの際の反射レイのWeightは

fr(x,ωi,ωo)(ωoωn)p(ωo)=F(ωi,ωm)G1(ωo,ωm)

となる.

ωm のサンプリング

Dωi(ωm) に従ってマイクロファセット法線 ωm をサンプリングする. サンプリング方法はV-cavity法とSmith法の2通りの方法があるが, ここではSmith法を載せる(V-cavity法については[2]を参照).

注意として,このサンプリング方法は macrosurfaceの法線が ωn=(0,0,1) の時の 入射角 ωi=(xi,yi,zi) を用いる. ωn がそれ以外の場合は ωn=(0,0,1) となるように ωi の基底変換を行う. ωm のサンプリング後は ωiωm を 元の基底に変換する.

Smith法によるωmのサンプリング方法は 大きく分けて以下の5つのプロセスからなる.

  1. Stretch ωi
  2. Sample P22ωi(x˜m,y˜m,1)
  3. Rotate ωm
  4. Unstretch ωm
  5. Normalize ωm

Stretch ωi

ωi(αxi,αyi,zi)(αxi)2+(αyi)2+z2i

Sample P22ωi(x˜m,y˜m,1)

x˜m のサンプリング

Au1(1+1+tan2θωi)1Btanθωix˜m1BA21(BA21)2A2B2A21x˜m2BA21+(BA21)2A2B2A21x˜m{x˜m1(A<0  or  cotθωi<x˜m2)x˜m2(otherwise)

ここで,u1[0,1) の乱数である.

y˜m のサンプリング

s{1(0.5<u2)1(otherwise)t2s(u20.5)zs0.46341t0.73369t2+0.27385t30.597999t+0.309420t2+0.093073t3y˜mz1+x2˜m

ここで,u2[0,1) の乱数である.

Rotate ωm

(x˜my˜m)=(cosϕωisinϕωisinϕωicosϕωi)(x˜my˜m)

Unstretch ωm

(x˜my˜m)=(αx˜mαy˜m)

Normalize ωm

ωm(x˜m,y˜m,1)x2˜m+y2˜m+1

まとめ

パラメータ

名称 記号
表面粗さ roughness 0<roughness1

レンダリング

名称 記号
BRDF fr(x,ωi,ωo) 14(ωiωn)(ωoωn)F(ωi,ωm)G2(ωi,ωo,ωm)D(ωm)
pdf p(ωo) 14(ωiωm)Dωi(ωm)
反射レイのWeight fr(x,ωi,ωo)(ωoωn)p(ωo) F(ωi,ωm)G1(ωo,ωm)

以上,GGX BRDFについてまとめた.

参考文献

  1. B. Walter, S. R. Marschner, H. Li, K. E. Torrance: Microfacet models for refraction through rough surfaces (2007)
  2. E. Heitz, E. D'Eon: Importance Sampling Microfacet-Based BSDFs using the Distribution of Visible Normals (2014)
  3. B. Burley: Physically-Based Shading at Disney (2012)