基于物理渲染的基本原理

Unity3D在5.0引入了PBS(Physically-Based Shading)特性,這一光照模型取代了Lambert和Phong氏光照模型,帶來(lái)更逼真的視覺(jué)體驗(yàn),可以在這個(gè)demo查看效果。那么什么是Physically-Based Shading呢,Jeff Russell有一篇文章,我個(gè)人覺(jué)得寫得非常好,在此翻譯一下,幫助自己理解和消化,同時(shí)方便更多對(duì)這個(gè)技術(shù)感興趣的朋友。

本文翻譯自Jeff Russell的《Basic Theory of Physically-Based Rendering》,原文鏈接地址:https://www.marmoset.co/toolbag/learn/pbr-theory

基于物理渲染(PBR, Physically-based rendering)是最近實(shí)時(shí)渲染領(lǐng)域一個(gè)令人興奮的趨勢(shì)。這個(gè)術(shù)語(yǔ)大家談?wù)摿撕芏啵?jīng)常會(huì)讓人困惑它究竟是什么意思。簡(jiǎn)單的回答可能是:“包含內(nèi)容很多”,或者“得看情況”,這些答案都不盡如人意。所以我自己嘗試去解釋一下PBR到底是什么、它和老的渲染方式有什么區(qū)別。這篇文章并非專門為工程師而寫,不會(huì)含有任何算法或者代碼。

Physically-based shading系統(tǒng)和之前光照系統(tǒng)(主要指Phong氏模型、Lambert模型等)的主要區(qū)別是,它對(duì)光和表面產(chǎn)生行為有更具體的描述。其著色的能力足夠強(qiáng)大,一些老的為了達(dá)到近似效果的手段現(xiàn)在可以安全的舍棄,相應(yīng)額外增加的美術(shù)資源也不再需要。這意味著工程師和設(shè)計(jì)師都應(yīng)該了解這項(xiàng)技術(shù)帶來(lái)的改變。

在介紹新東西之前,我們將先確定一些基礎(chǔ)概念。這些基礎(chǔ)概念你可能已經(jīng)了解,但很值得再次讀一讀。之后,你可能
也想看看我們自己的Joe Wilson寫的文章:創(chuàng)建PBR資源(creating PBR artwork)

漫反射(Diffusion)和反射(Reflection)

漫反射和反射是描述光與表面作用的兩個(gè)基本術(shù)語(yǔ),很多人可能在經(jīng)驗(yàn)層面熟悉這兩個(gè)概念,但并不知道他們?cè)谖锢砩系膮^(qū)別。
當(dāng)一束光投射到表面上時(shí),其中一些會(huì)發(fā)生反射——即在表面法線另一側(cè)射出的光線。這個(gè)行為跟球從地面或者墻壁上彈回來(lái)很像。在一個(gè)光滑的表面,這使得表面看起來(lái)像鏡子。“鏡面(specular)”一詞經(jīng)常用來(lái)描述這個(gè)效果("specular"來(lái)源于拉丁文"mirror",即鏡子的意思)。
然而,并不是所有的光都從表面反射出去,有些光會(huì)滲透到被照明物體的里面。其中有些光被物體材質(zhì)吸收(通常轉(zhuǎn)化成熱量),有些則在內(nèi)部被散射。這些被散射的光有一部分最后從表面再射出來(lái),從而被眼球或者攝像機(jī)看見。我們知道有很多名次來(lái)形容這個(gè)現(xiàn)象:“漫射光”,“漫反射”,“表面散射”——都是一個(gè)意思。

pbr_theory_refl_diff.png

對(duì)于不同波長(zhǎng)的光,不同物體的漫反射和散射行為通常會(huì)有很大差異,這就是為什么物體會(huì)看起來(lái)有不同的顏色(比如,一個(gè)物體吸收大部分除了藍(lán)色波長(zhǎng)的光,那么它看起來(lái)是藍(lán)色的)。散射往往是如此的混亂、均勻,我們可以認(rèn)為各個(gè)方向看上去都一樣,這點(diǎn)和鏡面完全不同。一個(gè)著色器在實(shí)現(xiàn)這種近似效果時(shí),只需要一個(gè)輸入:“albedo”,它用來(lái)描述各種顏色的光照射表面并散射出去時(shí)的顏色。我們有時(shí)候也叫做“漫反射顏色(Diffuse color)”。

半透明(Translucency)和透明(Transparency)
在某些情況下漫反射會(huì)更復(fù)雜一些——比如,像皮膚和蠟這類材質(zhì)具有更寬的散射距離。在這種情況下,只給一個(gè)簡(jiǎn)單的漫反射顏色不夠,著色系統(tǒng)必須考慮被照明物體的形狀還有厚度。如果足夠薄,通常能看到光從物體背面散射出來(lái),我們稱這類物體時(shí)半透明的。如果漫反射更少(比如,玻璃),那么幾乎沒(méi)有明顯的散射現(xiàn)象,能完整的從一邊透過(guò)物體看到另一邊,即是透明。這些行為跟典型的“接近表面”漫反射有很大不同,所以一般要模擬這些效果,需要單獨(dú)的著色器。

能量守恒
通過(guò)上面的描述,我們現(xiàn)在有足夠的信息得出一個(gè)結(jié)論:反射和漫反射是互斥的。這是因?yàn)椋馊绻宦瓷洌紫鹊脻B透到表面里(即不會(huì)被反射)。在著色領(lǐng)域里,這叫做“能量守恒”。意思是離開表面的光線不會(huì)比投射到表面上的更亮。

這個(gè)很容易在著色系統(tǒng)里實(shí)施:漫反射著色時(shí),只要減去反射光即可。這意味著高反光的物體只有較少甚至沒(méi)有漫反射,因?yàn)闆](méi)有光線滲透進(jìn)表面,幾乎全被反射回去了。反之亦然,如果一個(gè)物體有較亮的漫反射光,反射光就會(huì)減少。

pbr_theory_conservation.png

這種能量守恒是基于物理著色的一個(gè)重要方面。它允許設(shè)計(jì)師為材質(zhì)調(diào)節(jié)反射率、漫反射率值時(shí)不必?fù)?dān)心因?yàn)槟承┮馔膺`背物理規(guī)律(之前這通常會(huì)導(dǎo)致物體看上去很糟糕)。同時(shí),代碼里產(chǎn)生看上去好的效果時(shí)也不必再嚴(yán)格實(shí)施這些限制(譯者注:指校驗(yàn)設(shè)計(jì)師給出的反射、漫反射值,防止人為的錯(cuò)誤)。它就像一個(gè)“保姆物理學(xué)家”一樣,防止作品偏離規(guī)則太遠(yuǎn)或者在不同光照條件下變得不一致。

金屬

導(dǎo)電材料,最值得注意的是金屬,這里有幾點(diǎn)需要特別注意。
首先,金屬相比絕緣體,往往會(huì)有更多反射。導(dǎo)體通常表現(xiàn)的反射性高達(dá)60%~90%,然而絕緣體一般會(huì)小很多,在0~20%。這種高反射率阻止光到達(dá)材質(zhì)內(nèi)部產(chǎn)生漫反射,使得金屬看起來(lái)非常有光澤。

其次,導(dǎo)體的反射率有時(shí)會(huì)因可見光譜變化而不同,這使得他們的反射光會(huì)有顏色。這種帶顏色的反射即使在導(dǎo)體中也很少見,但確實(shí)在一些常見材料上會(huì)發(fā)生(比如:金、銅,黃銅)。絕緣體通常都沒(méi)有這種效果,它們的反射不帶有顏色。

最后,導(dǎo)電體通常會(huì)吸收滲透進(jìn)表面的光,而非散射。這意味著理論上導(dǎo)體不會(huì)有任何漫反射的現(xiàn)象。然而實(shí)際上,由于在這些金屬表面通常存在氧化物或其他殘留物,使得金屬也會(huì)散射少量的光。

正是由于金屬和其他物體的這些雙重性,導(dǎo)致一些渲染系統(tǒng)采用“metalness”作為直接輸入。在這些系統(tǒng)里,設(shè)計(jì)師指定材質(zhì)的金屬性,而不是僅僅指定反射率和漫反射率。這有時(shí)候作為創(chuàng)建材質(zhì)的一個(gè)簡(jiǎn)單的方式,而在基于物理渲染下就不需要這樣做。

Fresnel(菲涅爾效應(yīng))
奧古斯丁·菲涅耳(Augustin-Jean Fresnel)是我們不能忘記的逝去白人中的一位,主要因?yàn)樗拿钟糜诖硪恍┈F(xiàn)象,這些現(xiàn)象是他第一次精確描述出來(lái)的。如果不是用他的名字,討論光的反射會(huì)變得困難。

在計(jì)算機(jī)圖形學(xué)中,“菲涅爾”指不同的角度將產(chǎn)生不同的反射率。特別的,光斜著射入表面比垂直射入表面更容易發(fā)生反射。也就是說(shuō)一個(gè)有適當(dāng)菲涅爾效果的物體靠近邊緣的地方會(huì)更亮。我們對(duì)這個(gè)現(xiàn)象比較熟悉,這在計(jì)算機(jī)圖形學(xué)也不是新鮮事。然而,PBR著色器在此基礎(chǔ)上對(duì)菲涅爾計(jì)算方程做了一些修正。

第一,對(duì)于所有材質(zhì),反射率在入射角臨界值達(dá)到飽和——任何平滑物體邊緣看起來(lái)都像鏡子一樣,與材質(zhì)無(wú)關(guān)。是的,只要在恰當(dāng)?shù)慕嵌扔^看,任何平滑物體都可以像一面鏡子!這可能有點(diǎn)違反直覺(jué),但物理上就是這樣。

第二,關(guān)于Fresnel屬性的第二個(gè)現(xiàn)象是:不同材質(zhì)的反射率/角度曲線差異不大。金屬差異相對(duì)較大,但也可以分析。

這意味著,如果希望達(dá)到非常真實(shí)的效果,設(shè)計(jì)師通常應(yīng)該減少對(duì)“菲涅爾”的人為干涉。或者至少,我們現(xiàn)在知道怎么設(shè)置相應(yīng)的默認(rèn)值!

這的確是一個(gè)好消息,因?yàn)樗芎?jiǎn)化內(nèi)容的生成。只需要獲取之前一些已經(jīng)存在的材質(zhì)屬性,比如光澤和反射率,渲染系統(tǒng)現(xiàn)在完全能自己處理菲涅爾效果。

pbr_theory_fresnel.png

基于物理渲染的工作流,只需設(shè)計(jì)師給出一個(gè)“基礎(chǔ)反射率”。它提供最小的反射光照和顏色。對(duì)于菲涅爾效果,一旦渲染完成,會(huì)在設(shè)計(jì)師指定值的基礎(chǔ)上增加,直到邊沿的100%。即,內(nèi)容描述一個(gè)基本值,菲涅爾公式計(jì)算剩下的,這樣就能產(chǎn)生我們需要的各個(gè)角度不同反射光的效果。

微表面

上面描述的反射和漫反射都基于表面的方向。將其放大,
他由被渲染的網(wǎng)格形狀提供。我們也可以利用法線貼圖來(lái)描述更小的細(xì)節(jié)。有了這些信息,任何渲染系統(tǒng)也能渲染出很好的漫反射、反射效果。

然而,還有很重要的一塊沒(méi)考慮到。大多實(shí)際的表面有非常小的瑕疵:細(xì)小的凹槽,裂紋,眼睛不可見的小塊,還有連法線貼圖都無(wú)法表示的細(xì)節(jié)(法線貼圖必須控制在一個(gè)合理的分辨率)。雖然肉眼看不見,但這些為特征仍然影響著光的漫射和反射。

pbr_theory_microsurf.png

微表面的細(xì)節(jié)在反射上有最顯著的效果(表面的漫射影響不大,這里將不再討論)。在上面的圖中,你可以看見入射的平行光在粗糙表面反射后分叉,因?yàn)椴煌渚€投射到了不同方向的表面。就好比把球扔向一面懸崖或者類似的不平的地方:球還是會(huì)反彈,但在一個(gè)不可預(yù)知的角度。簡(jiǎn)而言之,表面越粗糙,更多的反射光將會(huì)發(fā)散或出現(xiàn)“模糊”。

不幸的是,由于資源制作效率、內(nèi)存占用、計(jì)算量的原因,著色時(shí)計(jì)算每個(gè)微表面是不可行的。怎么辦呢?如果我們放棄直接描述微表面細(xì)節(jié),轉(zhuǎn)而指定一個(gè)粗糙程度的一般度量,我們能準(zhǔn)確地寫出類似結(jié)果的著色器。這個(gè)度量我們通常叫做“光澤度”、“光滑度”,或“粗糙度”。它可以在材質(zhì)中用一個(gè)貼圖或一個(gè)常量來(lái)指定。

由于真實(shí)世界充滿了大量微表面特征,微表面細(xì)節(jié)是任何材質(zhì)一個(gè)非常重要的特性。光澤貼圖不是一個(gè)新概念,但由于微表面對(duì)光反射有如此重大的影響,它在基于物理渲染中擔(dān)任了一個(gè)重要的角色。就像我們馬上將要看到的,PBR著色器系統(tǒng)對(duì)微表面屬性的幾個(gè)方面做出的改善。

能量守恒(再次提及)

我們假設(shè)的著色系統(tǒng)現(xiàn)在考慮了微表面,并且適當(dāng)?shù)膫鞑チ斯夥瓷洌€必須考慮到反射光的多少。遺憾的是,很多老的渲染系統(tǒng)在這上面犯了點(diǎn)錯(cuò),根據(jù)微表面的粗糙度,多算或少算了反射光。

當(dāng)公式經(jīng)過(guò)適當(dāng)調(diào)整后,渲染器應(yīng)該在顯示粗糙表面時(shí)具有更大范圍的反光,但其亮度相對(duì)較暗。而光滑的表面反光范圍小,亮度更強(qiáng)、更清晰。明顯亮度是關(guān)鍵:兩個(gè)材質(zhì)都反射相同數(shù)量的光,但粗糙的表面將其散射到了不同的方向,然而平滑的表面反射出一個(gè)集中的光線(這里原文是:whereas the smoother surface is reflecting a more concentrated “beam”):

pbr_theory_micro_cons.png

這里我們得出能量守恒必須維持的第二種形式,加上之前描述過(guò)的漫反射/反射平衡。把這些做對(duì),是任何想做好“基于物理”渲染器的重點(diǎn)之一。

All Hail Microsurface
有了上面的只是,我們意識(shí)到一個(gè)重要的事實(shí):微表面光澤直接影響到反射的亮度。這意味著設(shè)計(jì)師可以直接將變化畫到光澤貼圖里,如劃痕,凹陷,刮擦或拋光區(qū)域等任何效果,一個(gè)PBR系統(tǒng)會(huì)自動(dòng)顯示反射形狀和相對(duì)強(qiáng)度的變化。不再需要特殊的蒙板貼圖、修改反射率!

這是非常有意義的,在物理上相關(guān)的兩個(gè)真實(shí)世界量——微表面細(xì)節(jié)和反射率,現(xiàn)在被正確綁定在一個(gè)美術(shù)內(nèi)容中作為第一次渲染處理。這和之前描述的漫反射/反射平衡行為很像:我們可以單獨(dú)編寫兩個(gè)值,但因?yàn)樗鼈兪窍嚓P(guān)的,嘗試單獨(dú)處理它們就變得比較困難。

另外,在對(duì)真實(shí)世界材質(zhì)的調(diào)查中表明,反射率變化不會(huì)太大(見上一章節(jié)中關(guān)于導(dǎo)體的討論)。水合泥巴是一個(gè)很好的例子:它們都有非常相似的反射率,但因?yàn)槟喟头浅4植凇⑺尤狈浅F交浞瓷湫Ч懿灰恢隆TO(shè)計(jì)師在創(chuàng)建PBR系統(tǒng)的場(chǎng)景時(shí),主要通過(guò)設(shè)置光澤度或粗糙度貼圖來(lái)達(dá)到區(qū)別,而不是調(diào)整反射率,如下圖所示:

pbr_theory_watermud.png

微表面屬性還有一個(gè)反射上微妙的效果。舉個(gè)例子,粗糙表面會(huì)減弱“使得邊緣更亮”的菲涅爾效果(粗糙表面會(huì)散射菲涅爾效應(yīng),從而讓人很難清晰的觀察到)。其次,一些大的或凹陷的微表面能把光“陷”在里面——使得光在里面反射多次,從而更多的光被吸收、亮度下降。不同的渲染系統(tǒng)以不同的方式、不同的程度來(lái)處理這些細(xì)節(jié),結(jié)果確實(shí)一致的:越粗糙的表面顯得越暗。

結(jié)論

關(guān)于基于物理的渲染還有很多話題,這篇文章僅提供一個(gè)基礎(chǔ)的介紹。如果你還沒(méi)有準(zhǔn)備好請(qǐng)閱讀喬威爾遜的創(chuàng)建PBR藝術(shù)品教程(creating PBR artwork).對(duì)于想要更多技術(shù)信息的朋友,我推薦幾個(gè)閱讀:

If there are any burning questions still left unanswered, I can usually be reached on twitter.

參考資料:
[1]http://blogs.unity3d.com/cn/2015/02/18/working-with-physically-based-shading-a-practical-approach/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容