天天看點

《Unity着色器和螢幕特效開發秘笈(原書第2版)》一1.3 從Unity 4向Unity 5遷移

不可否認,電子遊戲中的圖像技術在過去的10年中發生了翻天覆地的變化。每一個包含前沿技術的新遊戲的面世,帶給我們的都是無與倫比的實時超現實體驗。同樣,在unity中着色器及其相關技術也是日新月異,這種不斷的更新換代很多時候也是大家産生迷惑的根源之一。在unity 5之前,主要有兩種着色器被采用:漫反射和高光着色器。顧名思義,這兩種着色器分别用在無光和高光材料上。如果你已經用了unity 5,可以跳過這一部分,這部分内容主要解釋如何使用unity 5重制這些之前的特效。

開始這一部分之前,我們需要準備一個unity 4的環境。在unity 4中同樣有一些預先提供好的内建着色器。如果你是開始開發一個新遊戲,毫無疑問你會使用最新版本的unity,但是如果是個遺留項目,很有可能之前使用的就是一些低版本的unity。在做版本遷移的時候一定要格外小心。在unity引擎中,很多東西都發生了變化。而且就算是某些内建着色器能正常工作,腳本也可能變了。如果你準備遷移整個工作空間,首要的是要做好備份。很重要的一點是:要記住僅僅儲存資源和場景檔案是遠遠不夠的,unity中大量的配置檔案儲存在其中繼資料中。做遷移備份時最安全的方式是将包含項目的整個檔案夾拷貝一份。最好的方式是從資料總管(windows)或者finder(mac)中将整個檔案夾實體拷貝一份。

如果你想将之前做好的着色器遷移到unity 5,有兩種方式:自動更新項目或統一切換到标準着色器。

自動更新

這是最簡單的一種辦法。unity可以導入之前版本的項目并對其進行更新。你會發現,更新轉換完之後,就不能用unity 4了,哪怕你的資源檔案一個都沒有改動。原因是unity的中繼資料已經做過轉換了。自動更新的步驟是打開unity 5,單擊open other來選擇老版本項目所在的檔案夾。unity會詢問你是否需要進行轉換。單擊upgrade按鈕開始轉換。unity會重新導入你的所有資源檔案,重新編譯腳本。如果你的項目很大的話,這個過程可能持續數小時。轉換完成之後,你就會發現一些改變。例如材質的inspector欄中可能會從bumped diffuse變成了legacy shader/bumped diffuse。

 即使unity 4中的諸如漫反射、鏡面反射等着色器都已經廢棄了,untiy 5還是保持了良好的向下相容性。你可以在材質的下拉菜單中的legacy shaders目錄下找到這些遺留着色器。

使用标準着色器

如果不想繼續使用遺留的着色器,可以使用unity 5中新的标準着色器來取而代之。在替換之前,需要記住一點:這兩者是基于不同的光照模型來建構的,是以肯定會影響材質本身的外觀。unity 4中有超過80種不同的内建着色器,總共分為6個大類(普通、透明、透明剪切、自照明和反射類等)。在unity 5中,全都被标準着色器取代。不幸的是,并沒有什麼魔法可以将你的着色器直接轉換成标準着色器,但是你可以通過下面這個表格來了解如何配置unity 5中的标準着色器來模拟unity 4中那些遺留的着色器:

着色器 unity 4 unity 4(遺留) unity 5

漫反射着色器 漫反射朗伯 遺留着色器/漫反射朗伯 标準着色器

基于實體基礎的渲染:金屬工作流

高光着色器 高光blinn-phong 遺留着色器/高光blinn-phong 标準着色器(高光設定)

基于實體基礎的渲染:高光工作流

透明着色器 透明頂點 遺留着色器/透明頂點 标準着色器

渲染模式:透明

渲染模式:剪切

可以使用inspector中的shader下拉菜單來讓老的材質使用這些着色器,隻需要選擇合适的标準着色器即可。如果你的老着色器使用了紋理、顔色和法線映射,這些屬性會自動應用在新的标準着色器中。你可能還是需要配置一些标準着色器的參數來讓它跟之前的光照模型保持一緻。下圖展示的是一個斯坦福兔子在舊的漫反射着色器(右圖)、轉換成标準着色器(左圖)和光滑度(smoothness)調為0的标準着色器(中圖)中的顯示效果:

《Unity着色器和螢幕特效開發秘笈(原書第2版)》一1.3 從Unity 4向Unity 5遷移

遷移自定義着色器

如果你在unity 4中寫過自定義着色器,大部分情況下在unity 5中可以直接使用這些代碼。除此之外,unity 5中對着色器的工作方式做了些微調,是以可能會引起一些錯誤或者沖突。最重要的一點修改是光的亮度。unity 5中的光亮度是unity 4 中的兩倍。所有老的着色器在重寫的時候都考慮到了這一點。如果你更新一些内建着色器,或者切換到标準着色器,不會發現任何問題。但是如果你重寫過自己的光照模型,需要注意新環境下光亮度不再需要乘以2倍了。下面這段代碼可以確定這一點:

《Unity着色器和螢幕特效開發秘笈(原書第2版)》一1.3 從Unity 4向Unity 5遷移

如果你沒寫過着色器也不用害怕。光照模型相關内容會在第3章中詳細解釋。

制作着色器始終要考慮成本效益。拟實效果好的着色器需要占用大量的計算資源,在某些裝置上可能會引起延時。一般而言特效最好應用在一些非常重要、缺之不可的地方。如果某種材質并不需要高光反射,那麼就沒有必要專門用一個着色器來計算高光效果。這也是unity 4中引入了如此多不同的着色器的原因之一。unity 5中的标準着色器理論上可以替代之前的所有着色器,因為标準着色器集合了法線映射、透明和反射功能。但是在unity 5中進行了某些合理的優化,以確定隻計算那些真正必需的特效。如果你的标準材質并沒有反射效果,那麼unity 5是不會計算這一部分的。

除此之外,标準着色器主要是為拟實材質而設計的。相對而言,老的漫反射和高光着色器并不是為拟實材質而設計的。這也是從老的着色器遷移到标準着色器時,需要對物體的渲染方式做一些修改的原因之一。

第3章深入講解了漫反射着色器和高光着色器是如何工作的。即使在unity 5 中這些着色器已經廢棄了,了解它們的原理對于你設計新的光照模型也是大有裨益的。

第4章将會向你展示如何釋放unity 5中的标準着色器的更多潛力。

繼續閱讀