PBR:應用于虛幻引擎4貼圖和材質創建的啟示
PBR材質似乎在一夜之間改變了人們對于引擎實時渲染畫面的理解。在游戲中我們也能夠體驗到銹蝕的金屬,厚重的皮革,精細的紋理,更加真實的世界從此展現在眼前。自此,PBR材質成為了“次時代”游戲必備的標準。
在GDCC2015,來自Epic Games資深開發者支持美術設計師李文磊,為大家帶來應用于虛幻引擎4貼圖和材質創建的啟示。
以下內容是演講實錄:
PBR是個不老不新的話題,很早它就出現在預渲染的渲染器里,隨著硬件越來越快,尤其是顯卡,最近幾年逐漸的開始應用到實時渲染中來。
今天就和大家一起來聊聊虛幻引擎實時渲染引入PBR以后,我們怎么來正確的使用它
PBR即基于物理的渲染,渲染包括燈光,shader, 材質, 貼圖,以及他們之前如何交互影響的,今天的演講內容主要分三部分內容。1.真實世界的光,材質,以及他們之間的交互是如何的,2. UE4里是如何來模擬真實世界的,3.我們該怎么做才是正確的。
要學會使用PBR首先需要了解什么是PBR,需要從真實世界的這些PBR材質特有的屬性拆分開來去了解他們,這樣我們就需要了解光,物體表面材質以及光是如何與材質交互的。 光包括了顏色,亮度,衰減,強度,形狀等主要屬性,真實的世界中永遠是多光源并存,除非身處于宇宙深空之中。
我們把自身能發光的物體叫做直接光源,自身不發光僅僅反彈其他光源的物體叫做非直射光源。分析下這張圖,從美術角度我們把他分成主光,輔光,裝飾光。雖然天色已晚主光還是來自于天空,天空的光線來自于太陽的散射,因此主光來自于一個天空的非直射光
附光來自于路燈,大的城市照明。這些光大都數也是反彈光,而非燈泡光源直接照射到。因此前景的人物基本是在一個天光的環境下低對比低照度的燈光環境下
那么自然界中的材質是如何跟光交互的呢?燈光照射到物體表面后兩種情況,反射或繼續前行折射。折射后的光線被吸收(一般轉化為熱),或離散。光線被吸收的行為不是發生在表面,而是次表面,或者內部反射不會帶出任何顏色。
吸收會使光線強度降低,吸收某一光譜的光線,余下的光線顏色化,但方向不變,離散后方向改變,強度不變這里對于絕緣體和導體,兩者與光的交互是完全不同的絕緣體,即非金屬的反射率普遍很低,一般在2%-8%左右,大部分光線進行折射,折射后的光線或者被吸收,或者重新離散出來。這部分折射的光線吸收率和材質的明度關,暗的吸收多,亮的吸收少;離散后光線的顏色也取決于物體表面顏色;
對于導體,即金屬,反射率普遍很高,達到70%-100%,所以大部分光線會以鏡面反射的形式反彈回來。小部分光線折射后完全被吸收(光是一種粒子,被導體吸收),不同的金屬吸收不同波長的光線,導致鏡面反射回的光線帶有顏色;
漫射和鏡面反射:漫射為反射光線方向隨機,不一致;鏡面反射為一個方向。鏡面反射會根據物體表面的粗糙程度表現不同結果。但無論光滑粗糙,反射的總能量是一樣的,而且光線反射后的強度不變。漫射是光線被折射的表現。光線從一種媒介進入另一種媒介,并在里面經過多次的散射后從近似入射點的位置返回原來的介質中。漫射過程中除了光線的離散光線還會被吸收(轉化成熱能)。光線進入介質不深,那么進入點和離開點的差別就可以被忽略。那種光線離散性高,但吸收性弱的材質有時指參與介質或者叫透明材質。比如煙,牛奶,皮膚,翡翠,大理石等。
而在更細微的層面,比如顯微鏡下,微表面就是物體表面細微的不規則。根據不同的流程可以叫粗糙度,光滑度,光澤度。表面的不規則度其實對于慢反射的影響視覺上不大,因為漫射的這種離散和吸收過程是發生在材質內部的而非表面。
微表面理論就是建立在物體表面這種細微不規則性的基礎上的。可以把它看作許許多多不同方向的面,這些面就叫做微表面。光線對于這些面對入射角都是不一樣的,反彈后的角度也不一樣,并且有的地方被擋住,有的地方會產生陰影,視覺上會產生模糊的反射
在引擎中的明暗shading計算引入了各種函數理論模型,來盡量逼近模擬自然界的物理現象
我們可以通過BRDF來了解UE4里面是如何模擬的。
BRDF 雙向反射分布函數(Bidirectional Reflectance Distribution Function,BRDF)場景中的光照射到材質表面反射到視點的光亮度計算方法函數,來定義材質屬性。它描述了入射光線經過某個表面反射后如何在各個出射方向上分布,這可以是從理想鏡面反射到漫反射
UE4 PBS中引入了各種BRDF理論模型,也可以在shader里選擇默認模型,最終需要效率和效果的一個最佳結合點。
通過一些簡單的參數,我們可以在引擎中用來區分不同類型材質的反射特性。
在UE4材質里面,每一個input都有著各自的特性,他們的組合成為了一個個不同屬性的物理材質。
通過一個簡單的Metallic參數的調整,我們就可以輕易區分兩個完全不同的材質。
物體表面的反光屬性也是這樣一個非常重要的參數,通過這張圖片,我們就能夠非常清晰的區分開來。
那么如何制作一個高質量的PBR材質,如何選擇使用的工具,如何設置燈光呢?、
首先觀察生活中的真實物體是非常重要的環節,它能夠給你一個基本的概念,不同的材質應該有哪些不同的屬性。在設計過程中,我們會有一些描述性的詞語來清晰說明目標材質的屬性(文字+圖片),描述詞匯包括
材質類型:鋼,塑料,鐵,玻璃,油漆
材質明度顏色
材質表面處理:打磨過的,拋光,磨砂
材質環境影響細節描述: 生銹的,刮擦的,磕碰的,臟的,油膩的,油漆剝落的,積灰的,嶄新的
翻譯這些信息到UE的材質屬性,材質類型的信息來區分金屬還是非金屬,材質明度及顏色來定義BaseColor,表面處理關系到Roughness,環境影響復雜多變,牽扯到包括以上多個通道。
比如臟舊磕碰的金屬掉漆的表面:掉落油漆的部分為金屬,未掉落部分為油漆,在材質類型金屬性的定義里區分開來;磕碰信息從法線貼圖,粗糙度貼圖;新舊又影響鏡面反射的量和連續性,又和粗糙度貼圖有關
在項目開始前問幾個問題:
-
材質需要共用嗎?
-
材質的精度要求高嗎?
-
材質需要統一管理迅速迭代嗎?
-
需要自定義或允許改變外觀嗎?
-
效率/內存:材質能夠多復雜?貼圖能夠支持多少?
-
是否需要復用?
-
CG or Game?
-
需要改變貼圖嗎?
-
內存多大?
-
客戶端大小?
-
編輯器內還是外
-
其他問題
通過創建區分材質,將一個模型不同的區域區分開來,區分大塊面材質的意義在于一個物件有多種材質,必須有區分它們的mask,方便隨時修改不同材質區域的貼圖,提供在引擎中更換不同區域的材質的可能性,為進一步在表面增加細節提供區分的通道
區分材質的信息是灰度圖,不同的區域可以放在一張RGBA貼圖的各個通道里;根據材質的數量可以是單張或多張。
真實的世界中,每一個材質都有許多的細節,所以接下來,為材質添加更多的細節,比如劃痕,污漬,環境元素等,這些信息來自于模型起伏,法線,可以手動選取;經常由一些工具軟件生成,這些工具軟件可以比較只能的根據已有的模型信息判斷和生成出自然的細節。
將大塊面的材質區分通道和細節材質區分通道進行混合,由于大塊面材質區分通道和細節材質區分通道是分離的給混合提供了更多的自由度,這種自由度表現在可以控制哪些細節可以出現或者被屏蔽在哪些區域。
現在在市面上可以看到大量的工具可以幫助在UE4里面完成PBR材質的制作,在這里我們列舉出了一些主流的配套工具。
制作的過程分為三個部分,從高模和低模創建出NormalMap,ID Mask ,AO和Cavity。然后再上面添加必要的細節,最終導入UE4。
在這里我們可以通過這些工具來增加細節貼圖,在引擎中合并,這樣可以讓材質更為真實。
通過以下這些步驟,我們就能夠表現多層材質
-
導入:主MASK, 細節MASK, NORMALMAP, AO, CAVITY
-
創建基本材質,包括基本材質中細節添加的可能性
-
創建母材質,混合基本材質
-
添加更多變化:圖案,潮濕度/多孔性
-
創建材質實例
材質貼圖都完事了?還沒結束呢。PBR的關鍵之一燈光:創建真實的燈光環境。 (這里不談論藝術的燈光環境,僅追求真實)
真實的燈光包括直射光,非直射光, 并且HDR,在燈光半徑范圍內的物體表面會被燈光直接照亮,并有高光點;范圍外物任何照明(包括漫射和鏡面反射)。
在真實世界中燈光理論上是沒有范圍的,雖然隨著距離增加照度降低,但始終會有影響,在鏡面反射上尤為明顯。
這種反射在UE4里需要由高動態的環境反射貼圖來表現,是一種IBL的照明方式。
有了燈光的烘托,一把次時代PBR材質的武器就正式登場了。
PBR材質是未來的標準,在傳統材質轉換到PBR材質的過程當中,我們會遇到很多的挑戰。對于傳統貼圖到PBR貼圖沒有一鍵轉換的工具,因為有些信息計算機是無法猜測出來的,還是需要主觀去判斷。目前有兩種PBR流程貼圖轉換可以使用工具。
現在的燈光有直射光,陰影,也有間接光,間接反射等,所以貼圖上不需要把燈光信息畫上去,只要專注于表達材質屬性。我們不需要畫高光顏色(反色)來達到一個看上去是白色的;線性空間渲染意味著對于basecolor的明度范圍大概30-50 到180-250
能量守恒使得高光如何怎么變都不會增加或減少,就不需要手動的來調整貼圖使得粗糙的地方高光貼圖暗,光滑的地方高光貼圖亮。這時候就需要用已有的信息或修改后生成roughness,Cavity:來定義微表面的變化。
通過這樣的調整,我們就能夠將傳統的材質轉化到PBR材質。為我們的游戲添加更好的質感。
-
分享到:
全部評論:0條