Unity3D在5.0引入了PBS(Physically-Based Shading)特性,這一光照模型取代了Lambert和Phong氏光照模型填具,帶來更逼真的視覺體驗(yàn),可以在這個(gè)demo查看效果房维。那么什么是Physically-Based Shading呢腊敲,Jeff Russell有一篇文章缅疟,我個(gè)人覺得寫得非常好捍靠,在此翻譯一下墓臭,幫助自己理解和消化稽煤,同時(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ù)帶來的改變裂垦。
在介紹新東西之前顺囊,我們將先確定一些基礎(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è)行為跟球從地面或者墻壁上彈回來很像夷家。在一個(gè)光滑的表面蒸其,這使得表面看起來像鏡子●ⅲ“鏡面(specular)”一詞經(jīng)常用來描述這個(gè)效果("specular"來源于拉丁文"mirror"枣接,即鏡子的意思)。
然而缺谴,并不是所有的光都從表面反射出去但惶,有些光會(huì)滲透到被照明物體的里面耳鸯。其中有些光被物體材質(zhì)吸收(通常轉(zhuǎn)化成熱量),有些則在內(nèi)部被散射膀曾。這些被散射的光有一部分最后從表面再射出來县爬,從而被眼球或者攝像機(jī)看見。我們知道有很多名次來形容這個(gè)現(xiàn)象:“漫射光”添谊,“漫反射”财喳,“表面散射”——都是一個(gè)意思。
對(duì)于不同波長(zhǎng)的光斩狱,不同物體的漫反射和散射行為通常會(huì)有很大差異耳高,這就是為什么物體會(huì)看起來有不同的顏色(比如,一個(gè)物體吸收大部分除了藍(lán)色波長(zhǎng)的光所踊,那么它看起來是藍(lán)色的)泌枪。散射往往是如此的混亂、均勻秕岛,我們可以認(rèn)為各個(gè)方向看上去都一樣碌燕,這點(diǎn)和鏡面完全不同。一個(gè)著色器在實(shí)現(xiàn)這種近似效果時(shí)继薛,只需要一個(gè)輸入:“albedo”修壕,它用來描述各種顏色的光照射表面并散射出去時(shí)的顏色。我們有時(shí)候也叫做“漫反射顏色(Diffuse color)”遏考。
半透明(Translucency)和透明(Transparency)
在某些情況下漫反射會(huì)更復(fù)雜一些——比如慈鸠,像皮膚和蠟這類材質(zhì)具有更寬的散射距離。在這種情況下诈皿,只給一個(gè)簡(jiǎn)單的漫反射顏色不夠林束,著色系統(tǒng)必須考慮被照明物體的形狀還有厚度。如果足夠薄稽亏,通常能看到光從物體背面散射出來壶冒,我們稱這類物體時(shí)半透明的。如果漫反射更少(比如截歉,玻璃)胖腾,那么幾乎沒有明顯的散射現(xiàn)象,能完整的從一邊透過物體看到另一邊瘪松,即是透明咸作。這些行為跟典型的“接近表面”漫反射有很大不同,所以一般要模擬這些效果宵睦,需要單獨(dú)的著色器记罚。
能量守恒
通過上面的描述,我們現(xiàn)在有足夠的信息得出一個(gè)結(jié)論:反射和漫反射是互斥的壳嚎。這是因?yàn)橥┲牵馊绻宦瓷淠┰纾紫鹊脻B透到表面里(即不會(huì)被反射)。在著色領(lǐng)域里说庭,這叫做“能量守恒”然磷。意思是離開表面的光線不會(huì)比投射到表面上的更亮。
這個(gè)很容易在著色系統(tǒng)里實(shí)施:漫反射著色時(shí)刊驴,只要減去反射光即可姿搜。這意味著高反光的物體只有較少甚至沒有漫反射,因?yàn)闆]有光線滲透進(jìn)表面捆憎,幾乎全被反射回去了舅柜。反之亦然,如果一個(gè)物體有較亮的漫反射光攻礼,反射光就會(huì)減少业踢。
這種能量守恒是基于物理著色的一個(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)生漫反射旺订,使得金屬看起來非常有光澤弄企。
其次,導(dǎo)體的反射率有時(shí)會(huì)因可見光譜變化而不同区拳,這使得他們的反射光會(huì)有顏色拘领。這種帶顏色的反射即使在導(dǎo)體中也很少見,但確實(shí)在一些常見材料上會(huì)發(fā)生(比如:金樱调、銅约素,黃銅)洽瞬。絕緣體通常都沒有這種效果,它們的反射不帶有顏色业汰。
最后伙窃,導(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)象是他第一次精確描述出來的。如果不是用他的名字污朽,討論光的反射會(huì)變得困難散吵。
在計(jì)算機(jī)圖形學(xué)中,“菲涅爾”指不同的角度將產(chǎn)生不同的反射率蟆肆。特別的矾睦,光斜著射入表面比垂直射入表面更容易發(fā)生反射。也就是說一個(gè)有適當(dāng)菲涅爾效果的物體靠近邊緣的地方會(huì)更亮炎功。我們對(duì)這個(gè)現(xiàn)象比較熟悉枚冗,這在計(jì)算機(jī)圖形學(xué)也不是新鮮事。然而亡问,PBR著色器在此基礎(chǔ)上對(duì)菲涅爾計(jì)算方程做了一些修正官紫。
第一,對(duì)于所有材質(zhì)州藕,反射率在入射角臨界值達(dá)到飽和——任何平滑物體邊緣看起來都像鏡子一樣束世,與材質(zhì)無(wú)關(guān)。是的床玻,只要在恰當(dāng)?shù)慕嵌扔^看毁涉,任何平滑物體都可以像一面鏡子!這可能有點(diǎn)違反直覺锈死,但物理上就是這樣贫堰。
第二穆壕,關(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)在完全能自己處理菲涅爾效果珍德。
基于物理渲染的工作流练般,只需設(shè)計(jì)師給出一個(gè)“基礎(chǔ)反射率”。它提供最小的反射光照和顏色菱阵。對(duì)于菲涅爾效果踢俄,一旦渲染完成,會(huì)在設(shè)計(jì)師指定值的基礎(chǔ)上增加晴及,直到邊沿的100%。即嫡锌,內(nèi)容描述一個(gè)基本值虑稼,菲涅爾公式計(jì)算剩下的,這樣就能產(chǎn)生我們需要的各個(gè)角度不同反射光的效果势木。
微表面
上面描述的反射和漫反射都基于表面的方向蛛倦。將其放大,
他由被渲染的網(wǎng)格形狀提供啦桌。我們也可以利用法線貼圖來描述更小的細(xì)節(jié)溯壶。有了這些信息,任何渲染系統(tǒng)也能渲染出很好的漫反射甫男、反射效果且改。
然而,還有很重要的一塊沒考慮到板驳。大多實(shí)際的表面有非常小的瑕疵:細(xì)小的凹槽又跛,裂紋,眼睛不可見的小塊若治,還有連法線貼圖都無(wú)法表示的細(xì)節(jié)(法線貼圖必須控制在一個(gè)合理的分辨率)慨蓝。雖然肉眼看不見感混,但這些為特征仍然影響著光的漫射和反射。
微表面的細(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è)常量來指定府阀。
由于真實(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)過適當(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”):
這里我們得出能量守恒必須維持的第二種形式,加上之前描述過的漫反射/反射平衡拐格。把這些做對(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í),主要通過設(shè)置光澤度或粗糙度貼圖來達(dá)到區(qū)別蟀苛,而不是調(diào)整反射率益咬,如下圖所示:
微表面屬性還有一個(gè)反射上微妙的效果。舉個(gè)例子帜平,粗糙表面會(huì)減弱“使得邊緣更亮”的菲涅爾效果(粗糙表面會(huì)散射菲涅爾效應(yīng)幽告,從而讓人很難清晰的觀察到)梅鹦。其次,一些大的或凹陷的微表面能把光“陷”在里面——使得光在里面反射多次冗锁,從而更多的光被吸收齐唆、亮度下降。不同的渲染系統(tǒng)以不同的方式冻河、不同的程度來處理這些細(xì)節(jié)箍邮,結(jié)果確實(shí)一致的:越粗糙的表面顯得越暗。
結(jié)論
關(guān)于基于物理的渲染還有很多話題叨叙,這篇文章僅提供一個(gè)基礎(chǔ)的介紹锭弊。如果你還沒有準(zhǔn)備好請(qǐng)閱讀喬威爾遜的創(chuàng)建PBR藝術(shù)品教程(creating PBR artwork).對(duì)于想要更多技術(shù)信息的朋友,我推薦幾個(gè)閱讀:
- John Hable’s excellent blog post: Everything Is Shiny
- John Hable’s even better blog post: Everything Has Fresnel
- Sébastien Lagarde’s summary of Rendering Remember Me
- Come to think of it, all of Sébastien Lagarde’s Blog is good stuff
- The SIGGRAPH 2010 course on PBR
- Always worth mentioning: The Importance of Being Linear
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/