前段時間有在這裏(http://www.fseraph.com/?p=661)看到關於實時渲染中的一些常見渲染模型的總結,最近於是也找了些資料學習了一下,這裏簡單總結一下。
1. 一些基本概念
- Photon(光子): 波粒二象性;屬於粒子;擁有波長;具有能量
- Radiant Energy(輻射能量): 光子集所具有的能量,,單位:(焦耳)
- Radiant flux(輻射通量) , Radiant power(輻射功率):、,單位時間內的輻射能量(或光源在單位時間內所發射的光子所具有的能量),單位:(瓦特,焦耳/秒)
- Flux density(通量密度), Irradiance(輻射照度):,單位面積上的輻射通量,即:面積爲的平表面上通過(進入或離開)的輻射通量;Irradiance則是特化後用來描述單位表面在其法向半球空間內進入該表面的輻射通量;單位:
- Radiant intensity(輻射強度):,單位實體角上的輻射通量,即:在某個方向上通過(進入,發射或穿過)某一點的輻射通量;Solid angle(實體角):三維空間中的二維角度;在球面度上進行衡量;:在半徑爲的空間球上,實體角所對應的區域的球面表面積爲;單位:
- Radiance(輻射亮度):,單位實體角、單位投影面積的表面元素上在某一方向上通過(進入、發射或穿過)的輻射通量(爲方向與表面法向之間的夾角);比如,在各個方向上相同的輻射亮度對應着與成比例的輻射強度;在某一點上的輻射亮度與距離無關;單位:
2. Bidirectional Reflectance Distribution function
BRDF(雙向反射分佈函數)用來描述物體表面入射與反射光線之間的關係,其數學形式上的表示:在物體表面上的點處,出射方向上所反射的輻射亮度的微分與入射方向所進入的輻射照度的微分之間的比率;因而,BRDF是一個關於的三元函數,量化公式爲:
將上式變型後即可以得到在點處的反射方程:
該積分式計算出了物體表面在一定光源條件下特定方向上的輻射亮度,於是也就最終決定了其被人眼感知時所得到的形象。其中的核心就是BRDF所涉及的部分,它也是特化出不同渲染模型所對應的變化關鍵。
BRDF的一些屬性。首先是一些基本的公共屬性:
- Wavelength dependency, 波長相關:不同波長的光線在其表面上應有不同的反射結果,因而其是波長相關的。
- Reciprocity, 互反性:變換入射和出射光線的方向並不會影響BRDF的值,數學上的描述爲:。這個屬性在一些基於物理的渲染中很重要,比如Bidirectional path tracing等(但在實時渲染模型中可能會被忽略)。
- Energy conservation, 能量守恆: BRDF需要滿足能量守恆定律,即要求從一表麪點上反射出的總能量不大於進入該點的總能量。對於一表麪點進行量化後有:。大多數BRDF都能一定程度上滿足此屬性,這樣會讓渲染結果看起來更自然;但在嚴格意義上地滿足該約束則不太容易,它要求能量不能被無緣由地損失或減少(這些在基於物理的渲染中可能很重要)。
- Anisotropy & Isotropy, 各向異性&各向同性:如果BRDF是關於表面法向量是旋轉對稱的,它的結果只取決於以及所對應的方位角之間的差值,那麼其爲各向同性的;反之則其爲各向異性。大多數金屬質感材質的BRDF具有各向差異的屬性。
- 直觀簡單的參數化:BRDF需要若干關鍵參數來進行調製,直觀易用的參數能使美工更方便地對材質的各項屬性進行設置,極大地降低使用難度以及提高使用效率。
- 更高的計算效率: 效率是實時渲染中最主要的考慮因素,這也正是各種高效Phong模型很流行,其它有更好表現力的模型並不被廣泛使用的重要原因之一。關於BRDF的計算效率包括兩方面,即時間和空間;在當前的GPU架構下一般來說對於每個Pixel均需要進行對應的BRDF計算,因而這兩個方面的效率同樣重要。
3. 菲涅爾反射(Fresnel Reflectance)
當然,在BRDF之中由於只考慮光線的雙向反射分佈,因而可以只取其中的部分即可;而在其它的比如BTDF或BSDF(Bidirectional Transmission/Scattering Distribution Function)中則同樣需要考慮其中的部分(比如在一些次表面散射等效果中就需要使用)。
- 高近似度的還原需要的計算量過大;
- 幾近真實的物理屬性參數並不儘可知;
其中的爲介質的折射率;爲入射光線與反射光線之間的半夾角(在BRDF中使用時即爲與之間的半夾角)。有了上述的Fresnel term之後即可將其適時地嵌入到某些BRDF中以便一定程度上還原菲涅爾現象進而豐富BRDF對於該類型材質的表現力度(比如在後面的Cook-Torrance等模型中)。
4. 一些常見的渲染模型
對反射方程的原始積分式直接計算顯然不太可行,需要採用離散化的方式進行簡化,這裏通常結合對於光源的狄拉克脈衝函數建模的方法進行(看這裏); 簡化後可得:
這樣,對於有限個方向上的光源進行疊加即可得到最終的渲染結果;在分析過程中只需要考慮一個方向上的光線影響,即有:
轉換爲另外一種抽象表達的形式以便於後述對於各種渲染模型的分析(注意:此處的I 並非前述的輻射強度):
上式中的爲物體表面的法向量,爲光線到表面點的向量,而V則爲視點到表面點的向量;其中的表示兩個單位向量之間的點乘,用來取代分量;原始的三個參數此時也完全可以由來直接、間接地轉換並替代(見下圖示):
通常來說BRDF是關於表面多種屬性的反射結果之間的線性組合(在實時渲染中一般只考慮diffuse和specular兩種即可),其可以量化表示爲:
其中的分別表示兩種反射的結果,表示其對應的權重;如此一來通過調製組合中的四個參數就可以得到不同渲染表現的BRDF。接下來看一下一些常見的模型:
Lambert
Lambert模型是最簡單的一種形式,它主要是用來還原完全的diffuse reflection效果(入射的光線在稱爲Lambert 的表面上均勻地反射向外部的各個方向),而不考慮specular反射;其BRDF的表述爲:而在實時渲染中又通常將上式中的直接替換爲diffuse顏色值,因而其最終的BRDF調製因數就爲:
單純的蘭伯特模型使用較少,它通常是被合理地融入到其它更復雜的模型之中。
Phong
Phong應該說是當前使用得最多的一種渲染模型,它在diffuse反射的基本上加入了glossy specular反射,其關於該部分的計算使用了光線從表面射出的方向(或)與光線在該點的全反射方向之間的夾角的一個數學變換操作來實現(餘弦值的冪),其BRDF公式化如下:上式中的即爲glossy specular反射分量:其中的爲對應的specular color(與類似);部分可以用來約去反射方程中外部的幾何因子;調節其中的可以控制高光區域的範圍:較大的對應較小範圍的高光區域,反之則相對;關於的計算爲:。
基本Phong模型的BRDF調製因數爲:
一般情況下有,但也可以使其值小於1,只要不大於1其均滿足energy consveration的約束。
- Blinn-Phong
Blinn-Phong是在原始Phong基礎上對計算細節做了改動,其使用halfway vector:來計算specular反射分量的值:
其與原始Phong在計算效率上還是有所差別:當某些情況下恆定不變時,可以預計算出統一使用,因其不依賴於表面法向量(依賴則要求在每個Pixel均需計算);其它情況下,計算R則更加節省(至少可以節省出開方操作)。B-P的調製參數爲(其餘的均無變化):
- Modified-Phong
P和B-P兩種模型中的中均有關於的除法操作,這樣就會在(也即光線與法線幾近垂直時)處產生數學運算上的問題進而導到BRDF的互反性(Reciprocity)不被滿足。在Modified-Phong中就直接去掉了這一操作來避免這個問題,其BRDF如下:
因而這種修改也被稱爲:reciprocal (Blinn-)Phong。雖然這個簡單的修改可以避免0除問題,但同時也會使得在的周圍的渲染效果看起來不太自然。此處的BRDF有:
- Max-Phong
另一種關於基本Phong的變型是Max-Phong,其相對於前幾種可以在一定程度上更好地模擬具有光滑金屬質感的表面,同時也使用了Modified-Phong的方法來保持BRDF的互反性,其BRDF如下所示:
此時有:
前述幾種Phong模型都是實時渲染中最爲常用的反射模型,其公共特點是參數都比較容易調節、計算效率也比較高,這也正是其流行的主要原因;它們之間的主要區別均在於其對部分使用的不同計算方法,但是總體來說Phong模型對於部分的表現力度還是不夠,而這也是其它更加複雜的渲染模型所改進的重點之一。
Oren-Nayar
Lambert方法是一種基本的漫射模型,它假定光線在物體的表面朝各個方向上均勻發散,而這顯然不太符合物理事實,特別是對於一些表面較爲粗糙的材質;Oren-Nayar模型是另外一種基於一定物理事實的漫射模型,它能更好地反映這類材質表面的漫射現象。該模型的分析基於微表面方法,該方法主要建立在以下幾個假設的基礎上(圖示如下):- 物體的表面是由一些微小得對稱的V形結構組成;微表面之間有相互反射
- 每個V表面的寬度要遠遠小於其長度
- 每個微表面的面積要遠遠大於光線的波長(這點很容易滿足)
- 每個Pixel要能夠覆蓋足夠多的微表面
- 每個微表面具有Lambert漫射屬性
其中的表示兩個向量在點處的切平面上的投影向量之間的夾角;另有:
上式中的表示材質表面的粗糙度,有效取值範圍爲;其值越大則漫射方向的分佈越不均勻,當其爲0時對應漫射方向的均勻分佈,此時退化爲Lambert模型。對該模型的BRDF用另外一種形式表述後有:
而其中對應在點的切平面上的單位投影向量,這樣就可以得到其BRDF調製參數:
Oren-Nayar相對於Lambert來說對於diffuse反射有更強的表現力,不過其代價就是不菲的計算量,這之中主要涉及:
- 對於的計算:這個操作對於每個Pixel均要進行,因其與N相關。
- 對於分量的計算:若物體表面使用統一的則可以預計算後直接使用;若物體表面使用不統一的,則需要動態計算(通常將該信息存儲到紋理,這樣就有額外的紋理讀取開銷)。
Cook-Torrance
其中爲之間的夾角,即,是分析模型中微表面的平均坡度,其取值範圍應爲,並從中可以看出,當很小時,此時表面接近平面,進而就有很強的specular反射;反之若很大,即表面越不平滑時此時specular反射不斷弱化。爲幾何衰減因子,它用來反映微表面之間的相互覆蓋與遮擋關係,其計算式如下:
上述式子中的及其它的一些參數(如28/23等)主要用來實現該BRDF中的能量守恆等特性,且其中有對應該點處切空間中的切向量Tangent T , 對應該點處切空間中的次向量Binormal B。如此一來即有該模型的BRDF調製參數:
Ward
Ward同樣是一種各向異性的模型,它在一定程度上也是依賴於微表面理論作爲依據,但並不嚴格,不過其最終還是獲得了不錯的效果;同時該模型也滿足能量守恆和互反性。各向異性的Ward模型的BRDF表述如下:其中的 ,分別是表面坡度在方向上的標準差(因而相對於無區分的坡度表示時就具有各向異性的屬性)。