一、自然界中的材質(zhì)
首先了解下自然界中的材質(zhì)
如上這幅圖,不同的物體、場景、組合,會讓我們看到不同的效果。
我們通常認(rèn)為物體由其表面定義,表面是物體和其他物體或周圍介質(zhì)之間的邊界面。但是物體內(nèi)部的材質(zhì)也會影響光照效果。我們目前只考慮兩種不同介質(zhì)間的邊界面,并假定光穿過邊界面后有不同的傳播方式。
但是歸根到底就一個核心:光線如何傳播的,又是如何跟物體作用的。
研究自然界中的材質(zhì),就是在研究光線如何傳播
光與材質(zhì)的交互作用非常簡單。作為基本的類似,每個擊中物體表面的光子有三種情況:
- 被吸收并轉(zhuǎn)換成熱能
- 穿過表面進入物體內(nèi)部
- 被表面反射出去
每一種情形出現(xiàn)的概率和發(fā)生作用后光子的傳播方向由物體的材質(zhì)以及撞擊點附近表面微表面的朝向所決定。
二、 計算機圖形學(xué)中的材質(zhì)
如下3D的由四邊形組成的模型,右邊是渲染后的圖,表現(xiàn)為陶瓷杯,為啥就能看出是陶瓷? 因為在渲染方程中通過對BRDF函數(shù)的定義,使杯子表現(xiàn)了一定程度的鏡面反射+漫反射,給人一種陶瓷感。
一般情況下,我們至少需要區(qū)分以下五種在審美和感知上有意義的現(xiàn)象:
- 清晰的鏡面反射,如玻璃上的反光
- 具有光澤的高光和反射,例如涂蠟蘋果上的高光
- 表面下的淺層散射,他導(dǎo)致獨立于觀察方向的朗伯漫反射,例如平坦墻上涂料的觀察效果
- 表面下的深層反射,這是由于光在表面下的漫散射,是皮膚和大理石等外觀較柔和的原因
- 透射,當(dāng)光通過幾乎透明的材質(zhì)(如水和霧)時,進入介質(zhì)后發(fā)生折射。在光的路徑上可能有少量的漫反射
因為這些現(xiàn)象都源于散射(或者由于被吸收而無散射),所以常使用散射函數(shù)進行描述,有幾種散射函數(shù),其中包括:
- 用于描述表面散射的雙向散射分布函數(shù)–BSDF
- 僅考慮不透明表面反射的雙向反射分布函數(shù)–BRDF
- 用于純透射表面的雙向透射分布函數(shù)–BTDF
- 用于描述表面反射和表面下淺層散射效果的雙向散射反射分布函數(shù)–BSSDF
2.1 漫反射材質(zhì)的BRDF
漫反射的BRDF推導(dǎo)過程:
假設(shè)入射光是均勻分布在半球上的并且處處相等,漫反射光也一樣
由能量守恒可以知道入射的照度Irradiance == 出射的Irradiance,并且入/出射都是均勻分布,那么他們各自某個立體角的radiance也相等,即 Lo = Li 建立渲染方程如下:
對cosθ在半球上的定積分結(jié)果為π(過程省略),最終可得到完全不吸收能量的漫反射BRDF項fr為: 1 / π
還可以定義 ρ 反射率albedo,可以是單通道(0~1)、三通道(RGB),從而可以引入不同顏色的漫反射BRDF
2.2 拋光/毛面金屬材質(zhì)的BRDF
這種材質(zhì)散射規(guī)律是在鏡面反射方向附近,一小塊區(qū)域進行均勻的散射,用代碼實現(xiàn)的話也很簡單,算出鏡面反射方向(x,y,z),就以(x,y,z)為球心(圓心也行),隨機在球內(nèi)生成一個點,以反射點到這個點作為真的反射方向。這樣的話,高一點的SPP下,就能夠均勻的覆蓋鏡面反射方向附近的一塊小區(qū)域了
2.3 完全鏡面反射+折射材質(zhì)的BRDF
折射方向稍微難算一些,鏡面反射方向簡單。
這種材質(zhì)與光的作用方式可分為射入和射出(默認(rèn)折射率η比空氣大)
- 從空氣射入材質(zhì)內(nèi)部,則一定是鏡面反射+折射同時發(fā)生
- 如果從材質(zhì)內(nèi)部射入空氣,則分兩種情況: 鏡面反射+折射 不滿足折射條件,僅鏡面反射。
2.3.1 鏡面反射方向(立體角)計算
已知入射方向向量為,則反射方向向量 = V + 2B
這里其實可以看出來,計算鏡面反射方向其實還是有那么點麻煩的吧,所以之前進行Blinn-Phong模型著色計算時,高光項判斷出射方向是否足夠接近鏡面反射時,沒有用鏡面反射方向與出射方向做比較,而是用半程向量half vector跟法線n來比,半程向量計算非常簡單:入射+出射然后單位化就行了。
如果天頂角+方位角的形式來描述三維空間的一個方向,則出射方向計算很簡單
方位角φ,他們必然在一個面上,并且相差180°,滿足下面這個方程
天頂角θ:鏡面反射的入射和出射的θ是相等的
2.3.2 折射方向計算
光從一種介質(zhì)進入到另一種介質(zhì)就會發(fā)生折射。
第三幅圖水底的這種現(xiàn)象稱為caustics,這是由于水面凹凸不平,水底某些點會聚集較多的光線,有點聚焦的意思。
折射方向計算:
斯內(nèi)爾定律(Snell’s Law): 給出了描述光從一種介質(zhì)傳播到另一種介質(zhì)時是如何折射的方程:ηisinθi = ηtsinθt
必須知道兩種材質(zhì)的折射率η1,η2,和入射角度θi,然后能得到θt;再根據(jù)入射和出射的方位角關(guān)系公式,能算出φt。θt和φt組成ωt
折射發(fā)生的條件:
- 光疏介質(zhì)->光密介質(zhì):必然折射
- 光密介質(zhì)->光疏介質(zhì):根據(jù)入射角度大小,過大可能就沒有折射而是全反射
所以會有一個全反射和折射的臨界角
證明:
由折射方程:ηisinθi = ηtsinθt,sin2θ + cos2θ = 1可知
看根號內(nèi)的式子(首先1-cos2θi < 1 恒成立)
當(dāng)ηi/ηt < 1,根號下式子 > 0,等式有意義,必然發(fā)生折射 。
當(dāng)ηi/ηt > 1,具體看1-cos2θi 的大小,如果入射角θi比較大,根號下式子可能會 < 0。
例子:水介質(zhì)和光介質(zhì)
兩個角度看這張圖:
(1)光從空氣射入水中,可以明顯看到,空氣中不管角度多大都會發(fā)生折射
(2)記住圖形學(xué)中考慮問題都是攝像機發(fā)射光線,光線從水中射入空氣,只能看到大概97.2°的一個錐形區(qū)域的光,角度再大一點就發(fā)生全反射了。所以超過這個錐形區(qū)域,其他地方的光都射向水底了,比較黑。
三、菲涅爾項(Fresnel Term)
反射率取決于入射角度,入射光與法線的夾角越大,反射的能量越多
從書上反射出的光,射到桌面然后反彈到人眼中,如果入射光跟法線夾角比較小(左1),則幾乎看不到桌面的倒影,即反射能量比較少;當(dāng)入射光跟法線夾角特別大,幾乎接近90°的時候,桌面會形成比較明顯的書的倒影,也就是能量衰減得比較少
入射角度與反射率關(guān)系曲線圖
- 絕緣體(非金屬) : 可以看到如果一根光線跟法線幾乎成90°的話,反射率幾乎為1,沒有能量損失虛線可以不看,這部分是偏振光的性質(zhì),實線是兩個方向偏振光取平均的結(jié)果,看紅實線即可
- 導(dǎo)體(金屬物品) : 不管什么角度反射率都蠻高的
菲涅爾項的計算:
精確計算菲涅爾項(沒有必要)
求s、p偏振光的菲涅爾項,然后取兩者的平均作為最終結(jié)果
計算挺復(fù)雜,明白這玩意兒跟出/入射角度、介質(zhì)反射率η有關(guān)就行了
近似計算:Schlick’s approximation(性價比更高)
- R(θ)函數(shù),自變量θ為入射光線與法線夾角,定義域在[0°,90°],返回值為反射率,值域[0,1]
- Schlick提出這個計算方式,其實就是重新擬合了一條曲線,近似的表現(xiàn)上面介紹的“入射角度與反射率關(guān)系曲線圖”。R0就是入射光與法線夾角為0時的反射率。
- 我們?nèi)绻毽?= 0,θ = 90,進去算很容易看出R(0) = R0,R(90) = 1,還是比較正確的。這個函數(shù)同時適用于導(dǎo)體和絕緣體。
- n1,n2是兩種介質(zhì)的折射率
在這里提到菲涅爾項的目的:引出微表面材質(zhì)/模型
四、 微表面材質(zhì)(Microfacet Material)
研究微表面材質(zhì)的動機是什么?—— 因為現(xiàn)實生活中,確實有這種現(xiàn)象存在
如下,衛(wèi)星拍攝的一幅圖,這片高光的效果看起來像平面,但我們知道它是凹凸不平的
只要當(dāng)視角離得足夠遠(yuǎn),我們看不到表面的細(xì)節(jié),只能看到光對該表面整體的作用結(jié)果
4.1 微表面模型Microfacet Theory/Model
對于看向一個粗糙表面
- 宏觀上:平坦且略有粗糙
- 微觀上:凹凸不平,且每個微元都認(rèn)為只發(fā)生鏡面反射
總之,要有這么一個概念:從近處看能看到不同的幾何細(xì)節(jié),拉遠(yuǎn)后細(xì)節(jié)消失
為什么會發(fā)生漫反射?因為粗糙的物體表面在微觀上可以看成超級多細(xì)小的鏡子,他們的朝向/法線各不相同,他們會把光線反射到四面八方.
微表面的BRDF:
對于glossy毛面的材質(zhì),微表面的法線方向其實差不多,
把他們的分布畫出來,會集中在宏觀的法線周圍(宏觀即不看微表面,鏡頭拉遠(yuǎn)后忽略細(xì)節(jié),法線正直朝上)
對于特別粗糙的材質(zhì),微表面法線分布圖(左),渲染效果(右)
所以,通過微表面理論,我們可以把表面的粗糙程度用 微表面的法線分布 來表示
- 如果微表面法線分布集中 ==> glossy
- 如果微表面法線分布分散 ==> diffuse
4.2 微表面的 BRDF (雙向反射分布函數(shù) f(i,o))
注意:微觀上對于表面任意一個點來說,是鏡面反射
- F(i,h):Fresnel Term 菲涅爾項。給定入射方向 ωi 和半程向量h方向,返回反射方向的反射率,值域[0,1]
- D(h) :Distribution of normals 微表面的法線分布。給定一個半程向量h,返回法線位于該方向的微表面數(shù)量
- G(i,o,h):Shadowing Masking Term 陰影遮蔽,也叫幾何項。 當(dāng)入射光以非常平(Grazing Angle 掠射角度)的射向表面時,有些凸起的微表面就會遮擋住后面的微表面。這一項其實就起修正作用,當(dāng)入射為掠射角度時,這一項可能就會返回一個比較小的數(shù)比如0.5,0.4之類的,把BRDF的返回值拉低一點。 如果沒有這一項,假如我們渲染一個球,球的邊界上,就會是掠射角度,會特別亮。(看分子 菲涅爾項F(i,h) 返回值接近1,D(h)的返回值也會很大,因為微表面法線分布基本是正態(tài)分布,又因為入射很平,半程向量很居中,微表面的數(shù)量是最多的,返回值就大。最終就造成BRDF返回值比較大,反射光的能量只會減少很少的兩,因此邊緣著色特別亮。)
4.3 微表面模型渲染出來的效果特別真實
現(xiàn)在特別火的PBR——physically Based Rendering 就一定會使用微表面模型。為了更好的效果和表現(xiàn),工業(yè)界有很多自己開發(fā)的不同種類的微表面模型,但是都是基于上面介紹的微表面模型搞出來的 核心是不變的。
五、 各向同性/異性材質(zhì)
電梯間的四周的材質(zhì)是這種沿某方向磨過的金屬,它的高光表現(xiàn)如下所示,這是種各項同性材質(zhì)。
- Isotropic Material:各向同性材質(zhì),各個方向法線分布是差不多的,方向性很弱。
- Anisotropic Material:各項異性材質(zhì),各個方向法線分布是不同的,方向性很強。如沿著某個方向刷過的金屬
這兩種BRDF的區(qū)分方式:
各向同性材質(zhì):BRDF值只跟相對方位角有關(guān),BRDF函數(shù)可以從四維降成三維
什么意思?—— 對于各向同性材料,不管入射方位角 φi ,和出射方位角 φr ,怎么變化,只要這倆角度的相對差值 |φi - φr| 沒變,那BRDF就不變,加絕對值是因為光的可逆性,下面公式也可以加上問題不大。
具體來說,入射方向和出射方向的方位角同時繞著色點隨便怎么轉(zhuǎn),只要 |φi - φr| 不變,BRDF返回值不會變,著色結(jié)果相同。
各項異性材質(zhì):絕對方位角(各自的φ)有關(guān),只要任意一方的方位角改變,就會呈現(xiàn)比較大的差別。
六、 BRDF的性質(zhì)總結(jié)
(1) 非負(fù)性:fr(ωi ->ωr ) ≥ 0
(2)線性:BRDF可以分成多項分別計算后相加(類似Blinn-Phong模型分成高光+漫發(fā)射+環(huán)境光)
(3)可逆性:調(diào)換BRDF的入射光和出射光,返回值是一樣的
(4)能量守恒:不能違背能量守恒原則。下面公式,其實可以看做是半球上所有方向入射光的能量Li總 的一個系數(shù),這個系數(shù)必須滿足 ≤ 1
(5)各向異性/各向同性BRDF:不管是各項同性還是異性材質(zhì)都遵循光的可逆性,互換出入射光,BRDF返回值不變。
各向同性材質(zhì)BRDF:跟出入射方位角無關(guān),跟他們相對差值有關(guān),因此四維BRDF函數(shù)變成三維。保持相對靜止,方位角隨便怎么旋轉(zhuǎn),BRDF返回值不變。
并且滿足光的可逆性,交換出入射光,數(shù)值不變;方位角也不用管誰大誰小。文章來源:http://www.zghlxwxcb.cn/news/detail-846434.html
各向異性材質(zhì)BRDF:跟絕對方位角有關(guān)。文章來源地址http://www.zghlxwxcb.cn/news/detail-846434.html
到了這里,關(guān)于實時渲染 -- 材質(zhì)(Materials)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!