計算機圖形學:BRDF

BRDF(Bidirectional Reflectance Distribution Function,雙向反射分佈函數

參考

Spherical Coordinate (球面座標)

image

  • 方向相對法線的角度θ\bm \theta,稱爲 極角(Polar Angle) 或天頂角(Zenith Angle)
  • 方向在平面上的投影相對於平面上一個座標軸的角度φ\bm \varphi,稱爲方位角(Azimuthal Angle)

Solid Angle(立體角)

立體角是度量三維角度的量,用符號w表示,單位爲立體弧度(也叫球面度,Steradian,簡寫爲sr),等於立體角在單位球上對應的區域的面積,單位球的表面積是4π4\pi,所以整個球面的立體角也是4π4\pi

Light generally arrives at or leaves a surface point from a range of directions that is denoted by solid angles. solid angles represents a 3D generalization of angle formed by a region on a sphere.

dw=dsr2dA=(rdθ)(rsinθdφ)=r2sinθdθdφdw=dAr2=sinθdθdφ \mathbf{dw=\frac{ds}{r^2}}\\ \mathbf{dA=(rd\theta)(rsin\theta d\varphi)=r^2sin\theta d\theta d\varphi}\\ \mathbf{dw = \frac{dA}{r^2} = sin\theta d\theta d\varphi}\\

image

Foreshortened Area(投影面積)

The apparent area of a surface patch according to the angle at which it is viewed

image

area=Acosθ \mathbf{area=Acos\theta}


輻射

Radiant Energy (輻射能量)

能量(Energy),用符號QQ表示,單位焦耳(JJ),每個光子都具有一定量的能量,和頻率相關,頻率越高,能量也越高。

image

Radiant Flux (輻射通量)

輻射功率(Power),單位瓦特(Watts),或者焦耳/秒(J/sJ/s)。輻射度學中,輻射功率也被稱爲輻射通量(Radiant Flux)或者通量(Flux),指單位時間內通過表面或者空間區域的能量的總量,用符號$\Phi $表示,定義:

Φ=dQdt \Phi = \frac{dQ}{dt}

image

Irradiance (輻照度)

輻照度(Irradiance),指單位時間內到達單位面積的輻射能量,或到達單位面積的輻射通量,也就是通量對於面積的密度。用符號EE表示,單位W/m2W/m^2。定義:

E=dΦdA E = \frac{d\Phi}{dA}

image

輻出度(Radiant Existance),也稱爲輻射出射度、輻射度(Radiosity),用符號M表示。輻出度與輻照度類似,唯一的區別在輻出度衡量的是離開表面的通量密度,輻照度衡量的是到達表面的通量密度。輻照度和輻出度都可以稱爲輻射通量密度(Radiant Flux Density)。

image

處理通量密度時,我們需要注意表面朝向和光線方向的角度。如上圖所示,當光線垂直表面照射時,照射到表面上時的間距爲d;而當光線傾斜照射表面時(光照向量l和表面法線n的夾角爲θi\theta_i),間距爲d/cosθid/cos\theta_i,光線間距相對垂直照射時變大了,也就是說傾斜照射時通量密度降低了。光照角度影響通量密度在我們日常生活中有很多實際例子,地球的季節變化就是因爲光照角度變化,導致通量密度發生了變化。

假定不垂直於光線傳輸方向的表面面積爲AA,將它投影到垂直於光線方向得到一個虛擬表面,這個虛擬表面的面積爲AcosθiAcos\theta_i,通過這兩個面積的通量是相同的,均爲Φ\Phi,則表面接收到的輻照度E=ΦAE=\frac{\Phi}{A},虛擬表面上的輻照度EL=ΦA=ΦAcosθiE_L=\frac{\Phi}{A^\perp}=\frac{\Phi}{Acos\theta_i},於是E=ELcosθiE=E_Lcos\theta_i

Radiant Intensity (輻射強度)

輻射強度(Radiant Intensity),指通過單位立體角的輻射通量。用符號II表示,單位W/srW/sr,定義:

I=dΦdw I = \frac{d\Phi}{dw}

image

之所以引入輻射強度,是因爲有時候要度量通過一個點的通量的密度,但因爲點的面積是0,無法使用輻照度,所以引入輻射強度。輻射強度不會隨距離變化而變化,不像點光源的輻照度會隨距離增大而衰減,這是因爲立體角不會隨距離變化而變化。

Radiance (輻射率, 光亮度)

輻射率(Radiance),指每單位面積每單位立體角的輻射通量密度。用符號LL表示,單位W/m2srW/m^2sr

輻射率實際上可以看成是我們眼睛看到(或相機拍到)的物體上一點的顏色。在基於物理着色時,計算表面一點的顏色就是計算它的輻射率。

image

輻射率不會隨距離變化而衰減,這和我們日常感受一致,在沒有霧霾的干擾時,我們看到的物體表面上一點的顏色並不會隨距離變化而變化。爲什麼輻照度會隨距離增大而衰減,但是我們看到的顏色卻不會衰減呢?這是因爲隨着距離變大,我們看到的物體上的一塊區域到達視網膜的通量密度會變小,同時這塊區域在視網膜表面上的立體角也會變小,正好抵消了通量密度的變化。

BRDF

我們看到一個表面,實際上是周圍環境的光照射到表面上,然後表面將一部分光反射到我們眼睛裏。雙向反射分佈函數 BRDF(Bidirectional Reflectance Distribution Function)就是描述表面入射光和反射光關係的。

對於一個方向的入射光,表面會將光反射到表面上半球的各個方向,不同方向反射的比例是不同的,我們用BRDF來表示指定方向的反射光和入射光的比例關係,BRDF定義爲:

f(l,v)=dLo(v)dE(l) \mathbf{f(l, v) = \frac{dL_o(v)}{dE(l)}}

  • 其中ff就是BRDF,ll是入射光方向,vv是觀察方向,也就是我們關心的反射光方向。

  • dLo(v)dL_o(v)是表面反射到vv方向的反射光的微分輻射率。表面反射到vv方向的反射光的輻射率爲Lo(v)L_o(v),來自於表面上半球所有方向的入射光線的貢獻,而微分輻射率dLo(v)dL_o(v)特指來自方向ll的入射光貢獻的反射輻射率。

  • dE(l)dE(l)是表面上來自入射光方向ll的微分輻照度。表面接收到的輻照度爲EE,來自上半球所有方向的入射光線的貢獻,而微分輻照度dE(l)dE(l)特指來自於方向ll的入射光。

至於爲什麼BRDF要定義成輻射率和輻照度的比值,而不是直接定義爲輻射率和輻射率比值,有兩種解釋。

第一種解釋是容易測量

image

第二種解釋從數學的角度出發這樣更有意義

用BRDF來計算表面輻射率

我們考慮來自方向ll的入射光輻射率Li(l)L_i(l)(輻射出來的單位面積單位立體角的能量),由輻射率和輻照度的定義:

Li(l)=dΦdwidAcosθi=dE(l)dwicosθi \mathbf{L_i(l) = \frac{d\Phi}{dw_idAcos\theta_i} = \frac{dE(l)}{dw_icos\theta_i} }

則照射到表面來自於方向ll的入射光貢獻的微分輻照度 (照射進來的單位時間單位面積的能量)

dE(l)=Li(l)dwicosθi \mathbf{dE(l) = L_i(l)dw_icos\theta_i}

表面反射到vv方向的由來自於方向ll的入射光貢獻的微分輻射率:

dLo(v)=f(l,v)dE(l)=f(l,v)Li(l)dwicosθi \mathbf{dL_o(v) = f(l,v)\otimes dE(l) = f(l,v)L_i(l)dw_icos\theta_i}

符號\otimes表示按向量的分量相乘,因爲ffLiL_i都包含RGB三個分量。

要計算表面反射到vv方向的來自上半球所有方向入射光線貢獻的輻射率,可以將上式對半球所有方向的光線積分:

Lo(v)=Ωf(l,v)Li(l)cosθidwi \mathbf{L_o(v) = \int_{\Omega}f(l,v)\otimes L_i(l)cos\theta_idw_i}

上式稱爲反射方程 (Reflectance Equation),用來計算表面反射輻射率。

對於點光源、方向光等理想化的精準光源(Punctual Light),計算過程可以大大簡化。我們考察單個精準光源照射表面,此時表面上的一點只會被來自一個方向的一條光線照射到(而面積光源照射表面時,表面上一點會被來自多個方向的多條光線照射到),則輻射率:

Lo(v)=f(l,v)ELcosθi \mathbf{L_o(v) = f(l,v)\otimes E_Lcos\theta_i}

對於多個精準光源,只需簡單累加就可以了:

Lo(v)=k=1nf(lk,v)ELkcosθik \mathbf{L_o(v) = \sum_{k=1}^{n}f(l_k,v)\otimes E_{Lk}cos\theta_{ik}}

微表面理論

微表面理論(Microfacet Theory)認爲我們看到的表面上的一點是由很多朝向各異且光學平的微小表面組成。當光線從l\bm l方向照射到這點,而我們在v\bm v方向觀察時,由於光學平面只會將光線l\bm l反射到關於法線對稱的v\bm v方向,而l\bm lv\bm v已經確定,所以只有法線朝向正好是l\bm lv\bm v的半角向量h\bm h的微表面纔會將光線發射到v\bm v方向(如下圖),從而被我們看見。

image

法線分佈函數

我們用法線分佈函數 (Normal Distribution Function,簡寫爲NDF)D(h)\mathbf{ D(h)}來描述組成表面一點的所有微表面的法線分佈概率,現在可以這樣理解:向NDF輸入一個朝向h\bm h,NDF會返回朝向是h\bm h的微表面數佔微表面總數的比例(雖然實際並不是這樣,這點我們在講推導過程的時候再講),比如有1%的微表面朝向是h\bm h,那麼就有1%的微表面可能將光線反射到[公式]v\bm v方向。

幾何衰減因子

但實際上並不是所有微表面都能收到接受到光線,如下面左邊的圖有一部分入射光線被遮擋住,這種現象稱爲Shadowing。也不是所有反射光線都能到達眼睛,下面中間的圖,一部分反射光線被遮擋住了,這種現象稱爲Masking。光線在微表面之間還會互相反射,如下面右邊的圖,這可能也是一部分漫射光的來源,在建模高光時忽略掉這部分光線。

image

Shadowing和Masking用幾何衰減因子 (Geometrical Attenuation Factor)G(l,v)\mathbf{ G(l,v)}來建模,輸入入射和出射光線方向,輸出值表示光線未被遮蔽而能從l\bm l反射到v\bm v方向的比例。

菲涅爾方程

光學平面並不會將所有光線都反射掉,而是一部分被反射,一部分被折射,反射比例符合菲涅爾方程(Fresnel Equations)F(l,h)\mathbf{ F(l,h)}

image

如果你站在湖邊,低頭看腳下的水,你會發現水是透明的,反射不是特別強烈,如果你看遠處的湖面,你會發現水並不透明,這說明反射非常強烈。這就是“菲涅爾效應”。

當視線垂直於表面時,反射較弱,折射越強,而當視線非垂直表面時,夾角越小(越平行於表面),反射越明顯,折射越弱。

Cook-Torrance模型

Torrance-Sparrow基於微表面理論,用上述三個函數建立了高光BRDF模型:

f(l,v)=F(l,h)G(l,v)D(h)4cosθicosθo=F(l,h)G(l,v)D(h)4(nl)(nv) \mathbf{f(l,v) = \frac{F(l,h)G(l,v)D(h)}{4cos\theta_icos\theta_o}=\frac{F(l,h)G(l,v)D(h)}{4(n\cdot l)(n\cdot v)}}

其中n\bm n是宏觀表面法線,h\bm h是微表面法線

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章