Some Shading Models in realtime rendering

前段時間有在這裏(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需要用來表現儘可能多樣的材質類型,這其中當然就包括常見的金屬、水晶或液體之類的物質。物理實際中,光線在這類比較光滑的物質表面上傳遞時會出現另外一種反射和折射現象:菲涅爾現象。在菲涅爾現象中,通過不同介質間的光線會以某種與折射率、反射率有關的比率和夾角、並通過反射或折射的方式通過物體。這種反射現象可以用菲涅爾方程進行描述,它主要用來描述光線在不同介質間傳遞時反射與折射量之間的相互關係。菲涅爾方程中主要包括兩個分量:反射係數,透射係數(或折射),兩者之間滿足關係:

當然,在BRDF之中由於只考慮光線的雙向反射分佈,因而可以只取其中的部分即可;而在其它的比如BTDF或BSDF(Bidirectional Transmission/Scattering Distribution Function)中則同樣需要考慮其中的部分(比如在一些次表面散射等效果中就需要使用)。
在實際中,計算出近似物理真實的並不容易,這主要由於兩方面原因:
  • 高近似度的還原需要的計算量過大;
  • 幾近真實的物理屬性參數並不儘可知;
在實時渲染中,多數情況下會採用近似的方法以儘可能小的代價來計算出看起來比較可信的結果。當前使用比較多的近似途徑是一種由Schlick提出的方法,其式如下所示:

其中的爲介質的折射率;爲入射光線與反射光線之間的半夾角(在BRDF中使用時即爲之間的半夾角)。有了上述的Fresnel term之後即可將其適時地嵌入到某些BRDF中以便一定程度上還原菲涅爾現象進而豐富BRDF對於該類型材質的表現力度(比如在後面的Cook-Torrance等模型中)。

4. 一些常見的渲染模型

對反射方程的原始積分式直接計算顯然不太可行,需要採用離散化的方式進行簡化,這裏通常結合對於光源的狄拉克脈衝函數建模的方法進行(看這裏); 簡化後可得:

這樣,對於有限個方向上的光源進行疊加即可得到最終的渲染結果;在分析過程中只需要考慮一個方向上的光線影響,即有:


轉換爲另外一種抽象表達的形式以便於後述對於各種渲染模型的分析(注意:此處的並非前述的輻射強度):


上式中的爲物體表面的法向量,爲光線到表面點的向量,而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漫射屬性

關於Oren-Nayar模型的理論分析也比較複雜,這裏不再多說,詳細可以參考論文:Generalization of Lambert's reflectance Model 。這裏直接看一下其最後量化的BRDF方程:


其中的表示兩個向量在點處的切平面上的投影向量之間的夾角;另有:


上式中的表示材質表面的粗糙度,有效取值範圍爲;其值越大則漫射方向的分佈越不均勻,當其爲0時對應漫射方向的均勻分佈,此時退化爲Lambert模型。對該模型的BRDF用另外一種形式表述後有:


而其中對應點的切平面上的單位投影向量,這樣就可以得到其BRDF調製參數:


Oren-Nayar相對於Lambert來說對於diffuse反射有更強的表現力,不過其代價就是不菲的計算量,這之中主要涉及:

  • 對於的計算:這個操作對於每個Pixel均要進行,因其與N相關。
  • 對於分量的計算:若物體表面使用統一的則可以預計算後直接使用;若物體表面使用不統一的,則需要動態計算(通常將該信息存儲到紋理,這樣就有額外的紋理讀取開銷)。

Cook-Torrance

Cook-Torrance是另外一種基於微表面理論的模型,其相對於O-N模型則更注重於用來表現specular反射;它將每個微表面處理爲具有完全specular反射的基本單元(區別於Oren-Nayar),這樣每個微表面上的specular反射都可以用fresnel方程來進行描述。Cook-Torrance的BRDF描述爲:



注意其中描述specular反射的,它可以使用前述的schlick fresnel近似方法來計算;另外有


其中之間的夾角,即是分析模型中微表面的平均坡度,其取值範圍應爲,並從中可以看出,當很小時,此時表面接近平面,進而就有很強的specular反射;反之若很大,即表面越不平滑時此時specular反射不斷弱化。爲幾何衰減因子,它用來反映微表面之間的相互覆蓋與遮擋關係,其計算式如下:


Cook-Torrance模型的BRDF調製參數如下:


Cook-Torrance由於增強了於speuclar反射的表現力,因而可以更真實地模擬更多的材質特別是具有金屬質感的表面;不過該模型的計算量也稍大。

Ashikhmin-Shirley

Ashikhmin-Shirley是一種各向異性模型,其BRDF如下:

其中:






上述式子中的及其它的一些參數(如28/23等)主要用來實現該BRDF中的能量守恆等特性,且其中有對應該點處切空間中的切向量Tangent T 對應該點處切空間中的次向量Binormal B。如此一來即有該模型的BRDF調製參數:

該模型可以在更少的計算代價下得到近似於Cook-Torrance的spcular反射效果,不過其中關於BRDF的調製中需要考慮分量對的影響,這帶來的不便很可能會影響美工對該模型的接受程度。

Ward

Ward同樣是一種各向異性的模型,它在一定程度上也是依賴於微表面理論作爲依據,但並不嚴格,不過其最終還是獲得了不錯的效果;同時該模型也滿足能量守恆和互反性。各向異性的Ward模型的BRDF表述如下:

其中的 ,分別是表面坡度在方向上的標準差(因而相對於無區分的坡度表示時就具有各向異性的屬性)。
Ward模型可以對大多數的材質類型獲得較好的模擬,不過其在specular反射部分中並沒有使用fresnel分量,因而在該部分的表現力上可能有所欠缺。

上述列出的這些個實時渲染中常用(其實除了Phong,其餘的在實時渲染中並沒有使用太多)的渲染模型大多距今已經有些時間了,近年來該部分並無太多進展,這很大程度上跟需求有關係:畢竟,在離線渲染中可能並不需要用這些個近似的渲染模型,完全可以用更高級、更精確的BRDF描述形式(比如通過實際採樣得到的data-driven模型);而在效率考量作爲關鍵的實時渲染遊戲中,更精確的近似帶來的好處可能遠遠小於其效率上帶來的負面影響,因而並沒有太多的用武之地。不過這些BRDF近似過程中用到的一些方法(比如微表面方法)等還是很有啓發意義的,隨着硬件的不斷進化,更精確的BRDF近似肯定還是有價值的並會被不斷使用的。

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