PBR渲染介紹
PBR全稱(Physicallly-Based Rendering)?;\統(tǒng)的說,就字面含義可以看出,這是一種基于物理規(guī)律模擬的一種渲染技術(shù)。最早用于電影的照片級(jí)真實(shí)的渲染。近幾年由于硬件性能的不斷提高,已經(jīng)大量運(yùn)用于PC游戲與主機(jī)游戲的實(shí)時(shí)渲染。幾款著名的3D引擎均有了各自的實(shí)現(xiàn)(UnrealEngine 4, CryEngine 3, Unity 3D 5)。此外目前國外的一款HTML5 3D引擎(PlayCanvas) 也已使用了PBR,并且在iPhone5s的手機(jī)瀏覽器中可以流暢播放。
本文雖然是介紹渲染技術(shù)的,但不是工程師向的,所以不會(huì)涉及到任何的高等數(shù)學(xué)公式與程序代碼:
如下是PBR的實(shí)際應(yīng)用案例,PBR可以達(dá)到什么樣的效果:
HTML5引擎Demo
基于PBR的電影級(jí)渲染器Arnold
Arnold渲染器是一款高級(jí)的、跨平臺(tái)的渲染API,是基于物理算法的電影級(jí)別渲染引擎。近期使用了Arnold的一些電影有:地心引力,饑餓游戲(系列),復(fù)仇者聯(lián)盟(系列),精靈旅社(系列),碟中諜4,X戰(zhàn)警(系列),源代碼。
PBR的組成
漫反射與反射
漫反射與反射是光線在物體表面作用的最基本的兩個(gè)表現(xiàn)。傳統(tǒng)游戲的渲染系統(tǒng)中也把它們叫做漫反射與高光。
當(dāng)光線達(dá)到物體表面的時(shí)候其中的一部分將會(huì)沿著表面的垂直法線反彈向與來源光線相反的方向。這就像皮球沿一定角度砸向地面后反彈一樣。在越光滑的表面就表現(xiàn)的越像鏡面反射,這種現(xiàn)象一般本稱作表面高光(Specular)。這個(gè)詞就是來源于拉丁文的“鏡子”的發(fā)音。
然而并不是所有的光線都會(huì)被反射,部分光線將進(jìn)入被照射物體的內(nèi)部。這部分光線一部分被物體吸收轉(zhuǎn)換為熱能,另一部分則會(huì)在物體內(nèi)部發(fā)生散射,最終離開物體被人眼和攝像機(jī)捕獲到。這一現(xiàn)象被叫做“漫反射”與“子表面散射”。其中子表面散射(Sub Surface Scattering),經(jīng)常能看到SSS效果就是這部分光線進(jìn)過散射后從物體另一邊射出的現(xiàn)象。
不同波長的光線的吸收與散射有著很大的不同,這就是為什么白光在不同物體的表面能照射出不同的顏色。比如:某種材料會(huì)散射大部分的藍(lán)光,并吸收其它顏色的光,那么這種材料的表面就會(huì)表現(xiàn)出藍(lán)色。散射出去的光線是雜亂的,射向各個(gè)方向的,所以不會(huì)表現(xiàn)出鏡面反射的效果。游戲引擎中一般使用漫反射貼圖(“Diffuse Map”也叫“Albedo Map”)來描述物體表面的顏色。
能量守恒
由上面的描述我們可以看出,漫反射與反射是相互獨(dú)立的兩部分。入射光線的一部分在物體表面發(fā)生了反射,沒有反射的一部分進(jìn)入物體表面被吸收或者被散射。因此可以得出一個(gè)重要的結(jié)論:漫反射光線+反射光線=入射光線。這就是光線的能量守恒。
這一現(xiàn)象就表現(xiàn)在,同樣的光照條件下,反射越強(qiáng)烈的材質(zhì)表面漫反射就越弱(表現(xiàn)為更暗)。如下圖可以看出,從左到右材質(zhì)的反射逐漸加強(qiáng),同時(shí)材質(zhì)本身的顏色越來越不明顯。
能量守恒是PBR最重要的一個(gè)守則,遵循此守則可以確保美術(shù)在調(diào)整物體材質(zhì)的漫反射和反射時(shí)不至于調(diào)出一些打破物理規(guī)律,在不同環(huán)境中表現(xiàn)極不真實(shí)的材質(zhì)。
金屬
這里把金屬(導(dǎo)電性材質(zhì))單獨(dú)拿出來說有以下幾點(diǎn)原因。
首先,導(dǎo)體的反射度通常都達(dá)到60%-90%,而絕緣體只有0%-20%。高反射度導(dǎo)致只有很少的光線能進(jìn)入導(dǎo)體表面之下發(fā)生散射,這也就是為什么導(dǎo)體通常表現(xiàn)的很有“金屬光澤"。
第二,導(dǎo)體的反射度針對(duì)不同的可見光譜是不同的,這就導(dǎo)致導(dǎo)體能反射出有顏色的光。這種帶顏色的反射導(dǎo)體很少,但生活中卻很常見。如:金、銅反射出黃色。而絕緣體則沒有此種特性,總是反射所有的光線。
最后一點(diǎn),導(dǎo)體理論上講只會(huì)吸收光線而不會(huì)散射光線的。但實(shí)際上物體材質(zhì)總有或多或少的雜質(zhì)與表面污跡,所以金屬類材質(zhì)也會(huì)發(fā)生少許的散射。
正因?yàn)榻饘俚倪@些特性,所以很多渲染系統(tǒng)中都單獨(dú)為材質(zhì)引入了一個(gè)屬性“金屬度”(Metalness)。這只是方便美術(shù)進(jìn)行材質(zhì)的調(diào)節(jié),并非PBR所必須的。如星際爭霸二的材質(zhì)就沒有金屬度這個(gè)屬性,但仍然能表現(xiàn)出人族和神族單位的金屬材質(zhì)。
菲涅耳
菲涅耳是一種反射現(xiàn)象,最早由奧古斯汀-讓·菲涅爾發(fā)現(xiàn),因此被以非聶耳反射命名。
從計(jì)算機(jī)圖形學(xué)來解釋的話,就是隨著入射光線相對(duì)與表面法線的夾角越大,反射率就越大。也就是說在物體邊緣的反射會(huì)比中間要亮。在早期的渲染中也有引入菲涅耳反射,但在PBR中進(jìn)一步完善相關(guān)計(jì)算公式的幾個(gè)方面。
第一點(diǎn),所有的材質(zhì),在其“邊緣”(入射光線與物體表面角度無限趨近于0度)都會(huì)發(fā)生完美的鏡面反射,且反射所有顏色的光線。這可能是很難想象的,但在物理上已經(jīng)被證實(shí)了。
第二點(diǎn),不同材質(zhì)的菲涅耳反射隨著角度的變化可以用曲線表示,并且相差都不大。不同金屬材質(zhì)之間差異雖然會(huì)更大,但仍然能夠被分析并且公式化。因此藝術(shù)家們可以很方便的定義幾種預(yù)定義的材質(zhì)模板,并在他們之間調(diào)整參數(shù)就能創(chuàng)造出不同的材質(zhì)了。
這兩點(diǎn)可以由下圖很好的解釋:
從上圖曲線可以看出我們要實(shí)現(xiàn)菲涅耳反射非常簡單,只需要美術(shù)定義出中心最小的反射度,然后程序更具特定的公式計(jì)算出不同角度的實(shí)際反射度。就可以實(shí)現(xiàn)菲涅耳反射了。
微表面
以上的理論都是基于宏觀的,然而在微觀世界中,物體的表面不可能是絕對(duì)平滑的,總有一些或多或少的溝壑。這就導(dǎo)致了反射光線并不是總是平行的。
如下圖:
因?yàn)槲⒈砻娲嬖谟谖⒂^層面,所以如果使用數(shù)據(jù)描述的話,由于精度需要將會(huì)是海量數(shù)據(jù),是任何系統(tǒng)都無法承受的。因此在PBR中我們定義了一個(gè)屬性“光澤度”(Gloss)或者“光滑度”(Smoothness),它的反屬性為“粗造度”(Roughness)。這樣就可以在渲染系統(tǒng)中通過光澤度貼圖加以描述了。
再次的能量守恒
這里的能量守恒和之前第2點(diǎn)提到的能量守恒不同,第2點(diǎn)是針對(duì)于入射光線,反射光線與散射光線,這里的守恒僅僅指反射光線。
反射光線由于微表面的作用造成了不同方向的反射,但總能量維持不變。
下圖可以方便理解這一點(diǎn)
從左到右光澤度一次增加,圖中的高光點(diǎn)越來越亮,但范圍越來越小,因此總亮度維持不變。
在老式的渲染系統(tǒng)中關(guān)于高光的實(shí)現(xiàn)通常都是錯(cuò)誤的,隨著光澤度提高不是變的更亮就是變得更暗。
結(jié)語
至此,整個(gè)PBR都已介紹完畢,如有興趣了解具體實(shí)現(xiàn)的這里推薦一本書《基于物理的渲染-從理論到實(shí)踐》(Physically Based Rendering – From Theory to Implementation)。
本文作者:張恒(點(diǎn)融黑幫),游戲行業(yè)從業(yè)11年。做過2D、3D游戲。端游、頁游還有手游。既做客戶端也做服務(wù)端?,F(xiàn)如今開始了HTML5 3D游戲新的歷程。
- Tags:pbr
-
分享到:
您需要登錄后才可以發(fā)帖 登錄 | 立即注冊(cè)
- 用戶名:
- 密 碼:
- 驗(yàn)證碼: 看不清? 點(diǎn)擊更換
- 忘記密碼?
全部評(píng)論:0條