1. 程式人生 > >影視和引擎當中的PBR材質和線性色彩空間

影視和引擎當中的PBR材質和線性色彩空間

pbr

Pbr材質應該都熟悉吧,就是如今遊戲影視廣泛應用的物理材質,pbr有很多種實現方式,而且不同的pbr有不同的特點。如今pbr總是和線性空間聯絡在一起,雖然兩者並不是絕對依賴,但都是為了讓渲染更加真實更加理性化的方式。

pbr在非固有色貼圖上需要更明確定義貼圖是是線性的,原因是一般固有色貼圖需要人的感知,而且因為歷史遺留問題,大多數固有色貼圖都是需要人眼感知的,人眼感知就會產生gamma校正問題,技術就不細說了,因為很多技術部落格都提到了,通俗點的說法就是人眼看到物體的顏色其實已經經過視覺和大腦的處理了,並不是物體以前的顏色了。

Untiy3d預設使用左側gamma方式容易曝光,右側是線性的,不容易曝光

 

線性空間下物體效果,最大的優勢就是光照的自然,特別是在光影在物體表面的衰減上

下面是對比圖

離線渲染下也是非線性空間下的物體容易過度曝光,或者灰濛濛的

 

 

所以固有色通常標記為srgb,表示這是人眼裡看到的顏色,這樣計算機就能將這類圖片在內部轉換成線性的,來讓整個場景貼圖計算更符合自然

而非srgb貼圖,通常是視覺化製作出來的(比如如今的substance painter之類),

實時渲染

Unity3d總的線性空間和圖片srgb設定

Unity3d預設是gamma空間,這是因為線性空間需要支援OpenGL ES 3.0,部分手機和蘋果機不支援

Unreal4當中的預設就是線性空間,這也是為什麼很多ue4專案質感很不錯的

貼圖處理格式還是要製作者根據實際情況調整

離線渲染

(這裡以maya2016 arnold4為例)

以前老版本設定比較繁瑣,這也是為什麼以前很多渲染專案中效果不如引擎中的,不僅需要自己改色彩空間,設定圖片是否是線性還需要再連節點(因為以前版本arnold不能識別maya中的貼圖資訊)。但是2017以後arnold5已整合如maya預設即線性空間,只需要關係圖片是raw還是srgb了。

 

可以看出線性空間和PRB都是必要的。

 

製作環節

這裡要說下一般有顏色的貼圖都是srgb的

法線貼圖是線性的,但以前軟體一般都能自動把法線貼圖認對,很多製作人員可以手繪法線貼圖,這是為什麼呢,因為熟練...

還有以前使用的HDR環境貼圖其實也是線性的,有人問那麼mask貼圖或者3s貼圖等是線性的嗎?答案就要看你的製作環境了,如果如今在pbr相關dcc軟體中製作,那麼這些貼圖都是線性的,如果是以前的素材,那八成都是srgb的了,因為以前軟體多為非線性空間,貼圖效果都靠對著湊,所以如今線上性空間裡都是可以算srgb的,雖然大多數貼圖還是要重新湊。

 

一般製作人除非專案指定某種金屬(或者高精度專案),其實並不需要關心哪種顏色代表的是金屬度多少多少,粗糙度多少多少,因為我們只需要在相關軟體裡觀察調整質感匯出貼圖,在其他軟體裡放上,或渲染或實時,整體效果是對的就可以了。現在相關貼圖軟體比如sp,sd之類直接就能在正確的線性空間下預覽pbr材質的效果。