1. 程式人生 > >關於unity裡pbr技術和材質 unity5預設shader和傳統的對比

關於unity裡pbr技術和材質 unity5預設shader和傳統的對比

剛開始也不知道什麼是pbr (Physically Based Rendering)後來才發現這是一種新的渲染方式

與之對應的是材質是pbs(Physically Based Shader)

unity中的pbs有兩種,一種是金屬度的,一種是反射的,

具體前者可以做金屬泥土之類,後者用於其他非金屬的,但是這不絕對,前者也能做布料木頭之類

最終使用還是要看藝術效果


(unity中金屬度pbr材質)

(unity中反射流程pbr材質)

PBR做法

albedo map 無光顏色貼圖
normal map 法線貼圖
metallic map 金屬度貼圖 或者specular map 高光貼圖

roughness 粗糙度貼圖


3.19.2016內容糾正和更新


(unity中普通材質)

傳統做法
diffuse mapping 顏色貼圖
specular map 高光貼圖
normal map 法線貼圖

在PBR流程下,遊戲中場景將更加符合自然,對於光照的計算也更符合現實。將在以後離線渲染和實時渲染中佔據主流,單一材質能模擬出更多現實中的特性

當然在國內這種框架還不是很流行,大部分還是採用傳統的方式進行製作。PBR流程和傳統區別就是不再使用Specular Map
在PBR裡是glossness(光澤 可以理解成高光粗糙度)和metallicity(金屬),後面兩張基本都是灰度圖,需要在遊戲引擎中調節效果,據其他網上說法“一般公司會根據專案發一張材質球的表,Albedo ,glossness,metallicity的值的範圍都在上面,根據物品的物理屬性來調整就行。”
貼圖的流程有了新的變化,模型流程沒有多少變化

當然這裡要說的是unity5,預設材質其實就是使用的pbs,最明顯特徵是使用了Metallic,金屬貼圖(這個在unity裡可以通過選擇shader Standard Specular setup來使用反射版本pbr

)也可以繼續使用Legacy舊版非pbr材質

現在說下unity5貼圖
http://docs.unity3d.com/Manual/StandardShaderMaterialParameters.html
albedo相對於diffuse map 但不相同
固有色貼圖(Albedo map)不需要光照資訊,看起來更平,沒有高光點,大多也不需要疊加AO和那幾張黑白邊,只需要給出物體表面固有顏色和很淺的紋理而已,一張光澤度貼圖(GLOSS map)來表現物體粗糙度(只和粗糙度有關),越粗糙越黑反之越白,一張SPECULAR map 來表現物體固有反光能力的,這個只和材質有關,不同的專案會給出不同的材質的高光色值範圍

Metallic 灰度圖,就是pbr中特殊的,可以說是金屬的感覺吧
normal map 主體藍色的,法線貼圖
height map 是灰度圖 這裡指的是視差貼圖( parallax mapping),當然也可以放凹凸貼圖(bump map)或者置換貼圖(displacement map)


http://docs.unity3d.com/Manual/StandardShaderMaterialParameterHeightMap.html
這個簡單說就是能更好增加凹凸感,這個概念很想法線貼圖,但是技術更加複雜,
Occlusion map是灰度圖 這個用來保護高光和間接照片照到的地方,間接照明來自環境光和反射光,


Emission 彩色貼圖 自發光貼圖 控制表面光發射 這個選項也會影響到附近的物體,但是要設定lighting裡面是realtime,如果是baked動態物體將不接受光照 其實要看到效果必須加light probe 然後發光的物體要static才能看到,否則只能靠指令碼重新整理或者其他方式才能看到了

Detail Mask 細節圖片的遮罩
Secondary Maps
Detail Albedo 細節顏色貼圖
Normal Map 細節的法線貼圖
這三個其實是一組為了再放大物體時能看到物體的細節層次,比如做面板的毛孔貼圖之類,放在這裡貼圖一般使用repeat並且重複很多次才能達到細節效果

有兩種流程可以自己選擇
反射流程


金屬度流程

混用也沒問題,當然金屬度還是反射材質沒有絕對的使用選擇
具體看這裡
http://blogs.unity3d.com/2015/02/18/working-with-physically-based-shading-a-practical-approach/
還有畫貼圖工具

substance

http://quixel.se/

既然說到了pbr那再結合下色彩空間

linear和srgb,HDR區別
人眼有光線自適應的特性,這樣也是能讓人在暗的場景裡看到更多東西,在亮的場景裡能分辨更多東西,這種效果一般從電影院這樣昏暗的場所裡走出來更能體會,眼睛會有一個慢慢適應的過程。現在攝像頭一般也會自適應曝光度,但是工業需求的有些還是需要不自動的,三維渲染之中,如果把這種真實完全模擬的影象給人眼看到,會感覺比我們人眼看到灰暗的多,所以一般會在硬體方面做一個反曲線最後變成srgb的色彩空間讓人看到。

遊戲引擎裡面最終效果給人看到,當然是這種強化過的適應人眼的色彩空間,但是我做光照計算和貼圖就不行,因為會由於多次的色彩強化導致最終畫面強烈失真,這時候就是需要linear的色彩空間,計算時候用真實色彩,直到輸出這一步把色彩強化一遍以適合人眼。unity很早就是linear的色彩空間,但是由於後期最後一部的矯正方面很多從業人士的素養不足,或者完全沒有這個意識,做出來的效果完全是不正確,或者缺乏調整彈性的。而unreal則在工作流上面幾乎是整合和後期的色表,去解決這個問題。

而HDR是模擬人眼的過程,能看到更廣範圍的光(就是亮的時候能更亮瞎),HDR影象的一般色域也超過普通的RGB色域(但也可以不超過)。HDR在unity中需要勾選攝像機上的HDR選項和使用延遲渲染deferred才能(否則會有濾鏡提示The camera is not HDR enabled 這是沒使用延遲渲染),要看出效果還要加個bloom之類的


(對照圖 在延遲渲染模式和HDR下加Tonemapping(effects裡面的))