基于物理的渲染一(PBS)
光線和某一介質(zhì)接觸之后一般會發(fā)生兩種情況签舞,一個是反射,而另一個就是折射咙咽。光線到底被反射多少是由菲涅耳等式( Fresnel equations)決定巩螃。
而我們可以認為現(xiàn)實世界中,光滑的平面并不是真的光學平滑嚷炉,而是有很多的細小微平面組成,微平面越凹凸不平則物體表面就越粗糙陈莽,否則表面就越光滑渤昌。因為越光滑法線變化越小虽抄,反射的光越集中,高光現(xiàn)象就越明顯独柑,反之法線變化越大迈窟,反射的光就越發(fā)散,高光現(xiàn)象就越不明顯忌栅,高光就越模糊车酣。
一、表面反射
表面反射就是指光線經(jīng)過介質(zhì)的折射一部分會進入介質(zhì)內(nèi)部索绪,一部分會反射介質(zhì)外部湖员,被反射出來的就是表面反射,而具體反射多少瑞驱,是由菲涅爾等式來描述娘摔。在渲染中,表面反射對應的就是高光反射唤反。
二凳寺、次表面散射
一些光被折射進介質(zhì)內(nèi)部后,又會被散射出來彤侍,而被散射出去的光就是次表面散射光肠缨。金屬材質(zhì)具有很高的吸收系數(shù),因此盏阶,所有被折射的光往往會被立刻吸收晒奕,被金屬內(nèi)部的自由電子轉換為其他能量。而非金屬材質(zhì)往往具有吸收和散射兩種現(xiàn)象名斟。也就是次表面散射光脑慧。
但是散射出去的光的位置有多種情況,既可能離射入點很近砰盐,也有可能很遠漾橙。所以數(shù)學建模的時候會有兩種情況。如果離得近并小于一個像素的大小楞卡,那么渲染就可以在局部進行,如果離得遠則需要使用次表面散射渲染技術脾歇。
這篇內(nèi)容建立在忽略次表面散射距離的基礎上蒋腮,只是用局部渲染。
三藕各、渲染方程
而如何使用數(shù)學模型來描述上面所提到的光照模型池摧,也就是對光這個抽象概念進行量化,可以使用輻射率來量化光激况。輻射率是指單位面積作彤,單位方向上光源的輻射通量膘魄。通常使用L表示。而在渲染中竭讳,通常會使用入射光線輻射率Li來計算出射光線的輻射率Lo创葡,這個過程往往也被成為著色。也就是有了渲染方程:
其中Le(v)是自發(fā)光的輻射率绢慢,dw可以被認為是某條光線灿渴,f(w,v)就是某條光線在觀察方向上射出的百分比,也就是權重胰舆,Li(w)是有效入射光線的輻射率骚露,(n·w)就是光線在法線上的投影。
這個方程可以從右向左來解釋:
某一光線×它在某個方向上的投影(也就是衰減)
×對應的入射光輻射度×在觀察方向上射出的權重缚窿。它們在180度方向上的積分(求和)+自發(fā)光輻射率棘幸。
而去掉渲染方程中的自發(fā)光項,就會變成反射等式( Reflectance Equation)倦零。而在實時渲染中误续,自發(fā)光往往都是直接加上對應的光源即可。
四光绕、精確光源
在實時渲染中女嘲,累加部分,也就是積分诞帐,基本無法實現(xiàn)欣尼,所以往往會使用若干精確光源疊加的方式來代替,而不是計算入射光線整個半球上的積分停蕉。
所以使用精確光源來近似模擬這些光源愕鼓。也就是經(jīng)常使用的平行光,點光源慧起,聚光燈菇晃。這些光源被認定為大小無限小且方向確定。公式:
其中l為光的方向蚓挤,c為光的顏色磺送,v是觀察方向。相比積分操作灿意,這里使用一個特定方向的f(l,v)值來代替積分估灿,這樣簡化了操作。如果是多個光源缤剧,就把對應的光源疊加求和即可:
五馅袁、BRDF(Bidirectional Reflectance Distribution Function)雙向反射分布函數(shù)
在近似光源的公式中,只剩下f(l,v)未知荒辕,它代表在給定入射光的方向的情況下汗销,有多少百分比的光會被反射到觀察方向犹褒,它有個專門的名字:雙向反射分布函數(shù)(BRDF)。
顧名思義弛针,雙向就意味著有兩個方向:f(I,V)叠骑,其中I是入射方向,V是觀察方向钦奋。如果沿著法線旋轉不影響B(tài)RDF的結果座云,那么這種BRDF被稱為各向同性的BRDF,如果結果不一樣就是各向異性的BRDF付材。
BRDF的理解就是當一束光沿著入射方向I到表面某個點時朦拖,f(I,V) 表示了有多少部分的能量反射到了觀察方向V上。
BRDF決定了整個著色過程是不是基于物理的厌衔,這可以用BRDF是否滿足兩個特性來判斷:
是否滿足交換律和能量守恒璧帝。
交換律要求當交換l和v之后,BRDF的值不變富寿,即:f(l,v)=f(v,l)睬隶。
能量守恒則要求表面反射的能量不能超過入射的光能,即:
BRDF可以描述兩種不同的物理現(xiàn)象:表面反射页徐,次表面散射苏潜。
用于描述表面反射的部分叫做高光反射項,用于描述次表面散射的部分叫做漫反射項变勇。
如何得到BRDF呢恤左?一種情況是使用精確的光學儀器在真實的物理世界測量,根據(jù)所得到的數(shù)據(jù)進行數(shù)學建模搀绣。但真實世界的光照非常復雜飞袋,很難有一個BRDF可以滿足所有材質(zhì)。下面給出常見的BRDF的高光反射項链患,漫反射射項:
Disney BRDF巧鸭。
六、漫反射項
經(jīng)常使用的是Lambert模型麻捻,就是最簡單也是最廣泛的BRDF:
其中cdiff表示漫反射光線所占的比例纲仍,通常也被稱為漫反射顏色(diffuse color)。 與我們使用Lambert光照模型的不同的是這里的f(l,v)是一個定值贸毕,還缺少一個余弦因子(n· l)巷折,但實際(n· l)是反射公式的一部分,而不屬于BRDF崖咨。之所以要除以π是因為假設漫反射在各個方向上的強度都是一樣的。同時BRDF要求在半球內(nèi)的積分值是1油吭,所以在給定入射方向l的光源在某表面的出射漫反射輻射率為:
這樣看右側的公式就和我們經(jīng)常使用的Lambert光照模型差不多了击蹲。
但實際的世界中很難有這種完美均勻的散射署拟,根據(jù)真實的BRDF分析發(fā)現(xiàn),很多材質(zhì)在掠射角表現(xiàn)出了的明顯的高光反射歌豺,而且還與表面的粗糙程度有著很大關系推穷。粗糙表面在掠射角容易出現(xiàn)亮邊,光滑的表面在掠射角會形成一條陰影类咧。而這些實際情況是無法使用現(xiàn)有的Lambert光照模型體現(xiàn)出來的馒铃。
http://filmicworlds.com/blog/everything-has-fresnel/
這篇文章寫的很詳細,什么是菲涅爾現(xiàn)象痕惋。
所以很多基于物理的渲染會選擇使用更加復雜的的漫反射項來模擬更加真實的次表面散射的結果区宇,如Disney BRDF:
其中baseColor是表面顏色,一般通過紋理采樣得到值戳,roughness是表面粗糙度议谷。這個公式既考慮了掠射角的反射的情況,也考慮了粗糙度對漫反射的影響堕虹。Disney使用了Schlick 菲涅耳近似等式來模擬掠射角的反射變化卧晓,同時使用粗糙度進一步修改它,這使得光滑材質(zhì)在掠射角也可以有明顯的的陰影邊赴捞。