2014年11月4日 星期二

Unity5 中基於物理的著色器

作者:ROD LOPEZ
原文:http://blogs.unity3d.com/2014/10/29/physically-based-shading-in-unity-5-a-primer/

翻譯:“小七、子程”

什麼是基於物理的著色呢?基於物理的著色(簡稱PBS)就是以一種模擬現實中材質和光照的相互影響。直到最近PBS才能應用在即時圖形運算中。這種方法在有光源和材質接近真實的場合下優勢非常明顯。

物理著色是想建立一種友善的方式來實現不同的光照條件下的逼真效果。它模擬光線在現實中的行為,而非使用多個特定的演算模型來模擬,因為後者可能會在一些情況下失真。

為實現這種效果它必須遵循物理原理,包括能量守恆(也就是物體反射出去的光量不可能超過所接收的光量),菲涅耳反射
Fresnel reflections - 所有表面反射在掠射角處更加強烈),以及物體表面如何自我遮擋(Surfaces occlude)等。

Unity 5包含了一些Shader,像是標準著色器(Standard Shader),它們組成了一個易用又完整的PBS光照明模組。標準著色器主要是針對硬質表面(也就是建築材質)設計的,可以處理大多數現實世界的材質,例如石頭、陶瓷、銅器、銀器或橡膠等。但它也可以非常出色地處理一些非硬質表面的材質,例如皮膚、頭髮或布料等。

跟"我的"遊戲內容有何關聯?

基於物理的著色器並不代表“真實”,單純加入功能也不一定就能完全決定遊戲表現。它適合多種不同的美術風格和美學效果,例如從精確掃描(Accurately Scanned),到傳統拍照(Traditionally Photographed),再到手工繪製(Hand-painted)的各類貼圖。

對於製作沒有特殊光照表現的2D遊戲開發者來說,PBS不是必需的選項。但是如果你想玩玩PBS來創建出酷炫的效果,這裡我們將提供一些有用的使用經驗。

一窺究竟

當我們談及Unity5中的光照時,不妨引入兩個概念,即Context和Content:Context是指Unity原生的一些內容,而Content則是使用者創造的內容(類似於UGC)。

關於CONTEXT

當給一個物件加入光照時,該物件周邊的環境是非常重要的。Unity先前的版本中已經提供了一些經典的輔助工具,例如光照探頭(Light Probes),它能夠對某個位置上的漫反射光照進行採樣。而在Unity 5中我們將提供描述周圍環境資訊更加有效的方式。

縱覽全域

HDR資訊是PBS中一個非常重要的元素。它能夠更加有效地描述環境資訊,例如太陽的明亮度可能會超過藍天10倍。Unity5中提供了一個原生的通道來處理HDR格式檔案,你可以直接匯入副檔名為.hdr和.exr的圖片。

加入發光效果

反射探頭(Reflection Probe)紀錄了某個確定位置的反射情況。Unity5的場景中會預設包含一個反射探頭(你可以從Edit->Scene Render Settings->Default Reflection來查看它)。你可以修改設定或者採用天空盒(Skybox),不設置具體位置。

當然,你也可以建立自己的反射探頭。可以從GameObject->Light->Create Reflection probe找到這個功能。

然後就可以進行以下的操作:

將反射探頭拖到場景中的任意位置,它就會開始主動獲取周圍環境的光照資訊了。

每個反射探頭都有作用區域(就是探頭周圍顯示的黃色區域)。裡面的物體會從反射探頭上獲取反射資訊。

更多的圖元著色:

由於Unity5的動態全域光照(dynamic GI),光照探針也包含了間接的光線反射資訊,並透過標準著色器作用於每個圖元。這樣不管光線是直接或間接地作用於法線貼圖,它的效果看起來都會很棒。

這張圖只用了一個往下照明的光源,桶子旁邊和底部並沒有受到直接光源

動態全域光照(Dynamic GI)

全域光照是PBS模組中Context層面重要的成員。為了對Unity5中的全域光照有一個全面的理解,最好的方法是看看我們發表的有關動態全域光照的文章

顏色空間(Color Space)

PBS和標準著色器都工作在線性和Gamma模式。HDR編碼、反射探針的資料以及其他Content都會與你選擇的顏色空間相呼應。但為了達到最佳(最舒服)的視覺效果,你應該盡可能保持在線性顏色空間。

內容(The Content)

內容是你直接建立的資料,標準著色器確實對Unity傳統的材質工作流程進行了一些改進,希望你會滿意。

材質編輯器(The Material Editor)

標準著色器還引入了一個新的材質編輯器,它使PBS的材質編輯工作比以前的非PBS材質更簡單。

新編輯器更精簡,但卻提供了材質所有可能選項。在新編輯器中我們不需要選不同的著色器來改變貼圖通道,不會再出現“texture unused, please choose another shader” 這樣的錯誤,不再需要切換著色器來改變混合模式。

你會有一些備選的貼圖通道,任何一個沒用到的通道都會在編譯時被優化掉,因此不用擔心效率問題。Unity會根據你輸入到編輯器中的資料來產生正確的程式,使它用最高的效率執行。

小技巧:你可以用ctrl+點擊貼圖來預覽大圖,還可以分別查看顏色和Alpha通道。

按照你想的方式點亮一切!

PBS當然和Unity5的動態全域光照(GI)是相容的,全域光照系統完全瞭解標準著色器的工作方式,並在產生場景時將其考慮在內。

PBS和GI合體使開發者可以快速改變整個場景的光照條件,把不可能變成可能,效果也更逼真。

下圖中的小鎮你會注意到它和文章開頭那幅有不同的光照設定。靜態物體看起來更有質感和層次,整個場景遠近分明。這正是PBS的魔力所在。一旦材質加入PBS構建,它就會變得和光照條件完全獨立,大大減少工作量!

這就是我們喜歡它的理由,也是我們認為你也會喜歡它的理由!

好康分享,這個維京人的村莊我們打算在Unity5.0發佈的同時也在Asset Store上發佈。讚喔!

沒有留言:

張貼留言

著作人