高階光照與材質之光照和反射模型

2021-07-11 02:59:51 字數 3968 閱讀 5718

第五章講述了一些漫反射模型和鏡面反射模型的原理和數學公式

博主在unity中實現了一下,把部分結果貼在上面

有下面幾個主題:

渲染公式

基本光照定義

光照和lambert法則

雙向反射分布函式brdf

漫反射材質原理簡介與模型

鏡面反射材質原理簡介與模型

對於我們眼睛可見的光對於表面的作用,他們會發生,反射,穿透,折射,吸收,或者表面自發光。

對於所有物體的光照基本公式如下

如果表面不發光則emittedlight為0。

接下來會討論許多種形式的反射函式reflectance function

irradiance輻照度:表面每單位面積接受到的所有能量(包括光能和其他能量)

illuminance照度:表面每單位面積接受到的所有光能(只有光能)

radiance輻射:表面每單位面積反射的的所有能量(包括光能和其他能量)

luminance亮度:表面每單位面積反射的的所有光能(只有光能)

不同的材質可能會反射不同數量的光為不同方向

同等數量的光照射到的表面積越小,單位表面積受到的能量越多。

當增加表面法線與入射角度增加時,受到光照的表面也增加,說明單位表面積收到的能量越少。

當光照方向與表面法線垂直時,光線正好擦過表面,受到光照為0,但是自然界不可能出現這種狀況,因為物體材質都是粗糙的,會受到其他表面反射光的照明。

物體的lambert漫反射可以用法線與入射角度的cos值表示,光照強度的範圍在0-1.cos的範圍為-1-1,必須把其限制在光照強度範圍內,否則之後的計算會出現錯誤結果。

公式如下

光強il是乙個顏色值。在某些情況下,材質在不同的顏色通道有不同的反射行為。

接下來要講述的反射公式他們都有著微妙的不同,但都是同一種方式-brdf。

brdf是描述入射光怎樣反射為出射光的函式,用來求出出射光強,我們只關注進入眼睛的部分反射光。brdf並不適合所有材質

brdf』有兩個屬性

1.    他是雙向的,意味著可以互換光照入射方向和出射方向,得到的結果是相同的

2.    真正的brdf服從能量守恆定律

brdf所需引數如下

brdf也依賴於波長。

brdf與著色模型相比計算更加複雜,理論更加嚴謹,更符合真實世界的光照,嚴格遵守能量守恆定律。

各向異性意味著反射屬性依賴於視角和表面法線,乙個例子就是摩擦過的金屬,在不同角度存在不同數量的反射光線

後面將會實現各向異性效果。

lambert模型非常簡單但是並不適用於所有材質,效果不真實,其材質均勻,不能反映粗糙度帶來的變化。

注意:因為恰好進入眼睛的是物體表面的一小部分部分反射光,並且光射到表面其部分會被吸收,能量會被減弱,所以沒有絕對的光強為1的物體表面,比如,假使乙個反射光強為1(錯誤)的物體表面,向他打純紅色的光,他是不會變為紅色的,因為純光強為1編碼為rgb格式為(1,1,1),而純紅色的光為(1,0,0)所以不會為紅色,所以這個是錯誤的,自然界中,無論我們看著多白的物體,打上紅光也變紅,這就是能量守恆定律,自然界的反射光強的最大極值為1/π,這也解釋了為什麼一些基於物理漫反射模型會除以π的原因了。

遊戲中基於物理的渲染能夠更好在hdr高動態範圍影象中會有更真實的效果。

lambert過於均勻不能表現材質的粗糙度,比如灰塵,粘土,衣服等等高度回射的材質,回射是物體表面粗糙,存在一定數量的反射光指向光源,oren-nayar能更好的實現這種回射效果,顯得更為平坦,尤其是實現與光線方向相同的時候。

博主之前看過風之旅者的ppt,他們就是用oren-nayar模型來實現鬆散沙子的漫反射的,效果真實可信

oren-nayar模擬的粗糙的小麵非常小,螢幕上乙個畫素包括大量的方向不同的小麵在一起,而對於lambert只包含乙個面

對於模型的粗糙程度,描述這些小平面的方向作為乙個平均值為0的隨機高斯分布。根據這個,可以用乙個標準差來度量表面的粗糙程度,標準差越高說明這些小平面的方向越各自不同,表面就越粗糙。我們把這個控制粗糙度的變數設為σ。

公式如下:

實現結果:

作者說實現效果像天鵝絨,博主感覺。。。引數調大一點直接像高光了好不好。。。總之博主認為效果不好。。。

minnaert模型意圖沿著邊緣發射「黑光」,使得結果非常像天鵝絨(才不像。。。)

公式如下:

實現結果:

鏡面反射與漫反射並不相同,漫反射是向所有方向反射,而鏡面反射只向鏡面方向反射,

ward反射模型比phong更加物理精確。

它含有各向同性各向異性兩種模型

各向同性:

sigma變數用來控制粗糙度

實現結果:

各向異性:

兩個變數代表水平、垂直兩個正交方向的粗糙度

其實他這個公式的eta方位角聽不清楚的,沒給明tangent怎麼求,博主又找了些資料遂實現之:

結果如下:

視覺化的結果如下,左側為各項同性的高光,右側為各向異性的高光,各向異性這種不規則的形狀說明反射更傾向於給定的方向

schlick模型相比於phong模型計算消耗要少一些,免去了指數運算,但是效果相對phong有差別

公式如下:

實現結果:

cook-torrance模型基於torrance和sparrow致力於建立乙個brdf來模擬金屬鏡面反射

基本原理是假設物體表面是由無數不同方向的絕對光滑的小微面組成,存在幾何對光照的影響,比如凹凸產生的投影以及對光線的阻擋。

模型也含有菲涅爾項在不同角度的入射光線的反射光線的數量。完整的基本公式如下:

有三個重要的項f,d,g來控制不同的效果。d控制粗糙度,g為幾何項,控制小微面相互之間的陰影和遮擋,從而決定鏡面反射光數量

公式:

g項沒有什麼額外的依賴物理屬性的引數來控制效果變化

f項為菲涅爾項,決定從小微面反射光線的數量並且控制物體視覺的的金屬性程度。

公式如下:

菲涅爾有時依賴波長來產生豐富的效果。

d項為法線分布項,用來控制小微面的斜率從而決定表面粗糙度。d項有很多種模型來實現比如blinn,beckmann,並且未來還會研究出更多種d模型,具體可以看這篇文章:

unity3d 基於物理渲染physically-based rendering之specular brdf

本書講了兩種方法

beckmann:

和另一種基於高斯分布的blinn,blinn計算起來消耗更小:

全部結合起來實現結果是這樣的:

近期更新下一章

博主近期渲染:

2016的渲染

2015後半段的渲染

---- by wolf96

菜鳥DirectX之光照與材質

光照 一 先介紹一下光照的型別吧 1 環境光 特點 稱它為背景光更合適,只有乙個顏色亮度,不會衰減。2 漫反射 特點 沿著特定的方向傳播,碰到障礙物時沿著各個方向反射,和觀察者的位置無關 3 鏡面反射 特點 當光線碰到障礙物時將嚴格的沿著另一方向反射 4 自發光 特點 物體自身發的光 不參與光照的計...

高階光照與材質之光的物理學

對advanced lighting and materials with shaders的讀書筆記與總結,05年的老書了,這本書簡單並且通俗易懂 這一章是講述光照理論知識的,雖然大部分的理論都知道,但是複習一遍總是好的 正如作者所說,你在知道 how 之前需要知道 why 之所以二元性,是因為我們...

高階光照與材質之光的物理學

對advanced lighting and materials with shaders的讀書筆記與總結,05年的老書了,這本書簡單並且通俗易懂 這一章是講述光照理論知識的,雖然大部分的理論都知道,但是複習一遍總是好的 正如作者所說,你在知道 how 之前需要知道 why 之所以二元性,是因為我們...