2010年7月29日 星期四

Unity 3功能介紹---Surface Shaders


你可以利用Unity寫自己的shaders,當然啦大家都知道寫shaders很難,因為你必須要思考shaders與每個像素與燈光、陰影的交互作用。在Unity 3 狀況可能會變得更困難,因為有些老舊的東西,而你寫的shaders必須要支援新的延遲光照(Deferred Lighting),我們決定要做一點範例,讓大家知道要怎樣處理這樣的問題。

警告!這是一篇技術文,以下沒有什麼插圖。

在過去幾年我都一直在想:『Shaders去死』,但是你知道嗎,後來我們竟然在Unity 3做同樣的事情,我們稱這個為Surface Shaders。我相信在不久的將來『Shaders去死』搞不好會變成新增功能。

觀念
主要的觀念是90%的狀況我都必須要宣告surface properties,因此我要說:

ㄟ,反照率是根據各種材質的混合,各種normal map混合所產生的, 請採用Blinn-Phong光照模型,不要再讓我困惑了!

以上狀況,我不會再管是否有採用延遲算圖(deferred rendering)或者各種必須處理的光線,或者每個pass有多少的光源,會用在forward renderer 或是間接光的SH probes等,我根本就不管這些,這些都是程式設計師的工作,我不想管!

這不是新觀念,大部分的圖形shader編輯器,沒有“pixel color”與最終輸出的節點。取而代之的是,有表現物體表面的節點 (diffuse, specularity, normal, …) 而這些光照程式碼通常不會在shader graph表現出來。OpenShadingLanguage是一個很類似的概念,因為他是針對離線電影算圖使用的,它比較昂貴,也比較複雜。

完整的編碼範例請看原文連結

沒有留言: