1.使用的渲染路徑說明
現(xiàn)在游戲內(nèi)使用的渲染管線是 : Forward
所以shader的最低要求是支持Forward渲染路徑。 可以不對延遲渲染做支持。

游戲發(fā)布使用的GPU的API為 OPENGLES3(android)和 Metal (ios),所以需要確保在至少在對應(yīng)API編譯時不出現(xiàn)異常。

2. 命名方式
游戲的使用的自定義shader(非第三方插件和庫), 需要有一定的命名規(guī)范, 已達見名知意。
防止shader的重復(fù)創(chuàng)建和不能確定shader功能的問題。
游戲內(nèi)的命名可以按如下方式進行處理:

顏色混合說明:

內(nèi)置粒子命名:

整體命名規(guī)范: 功能名(通用、牌桌、描邊、特效、水等)+通用前綴+[資源說明]+光照+[混合方式]+[其他描述(霧,模板等)]
具體可以參考unity內(nèi)置shader的命名方式**例如: Common-Transparent-Diffuse (通用-透明-漫反射)
3.著色器細節(jié)處理(Shader LOD設(shè)置)
消耗較大的shader應(yīng)該提供LOD支持,完成對不同性能手機的處理。 LOD原則按unity內(nèi)置的為準(zhǔn)
可為各個著色器分別設(shè)置著色器 LOD(使用 Shader.maximumLOD),也可為所有著色器進行全局設(shè)置(使用 Shader.globalMaximumLOD)。
在自定義著色器中,使用 LOD 命令可設(shè)置任何子著色器的 LOD 值。
Unity 中的內(nèi)置著色器按以下方式設(shè)置 LOD:
-頂點光照 (VertexLit) 類型著色器 = 100
-貼花、反光頂點光照 = 150
-漫射 = 200
-漫射細節(jié)、反光凹凸無光照、反光凹凸頂點光照 = 250
-凹凸、鏡面反射 = 300
-凹凸鏡面反射 = 400
-視差 = 500
-視差鏡面反射 = 600
4. Shader 的變體處理
4.1變體引起的問題:
1、大量的著色器變體會增加游戲打包時間,會讓游戲的總包體積變大;
2、加載大量的著色器變體會很慢,并且消耗大量的內(nèi)存。
4.2 查看shader的變體
1.點擊著色器文件在Inspector面板中查看

就這樣一個普通的新建的SurfaceShader就有569個變體,全編譯會生成569個GPU程序
2.在ShaderVaruantsCollection中查看

3.剔除多余著色器變體
1)個別著色器特性,比如使用 #pragma shader_feature的著色器,如果沒有材質(zhì)使用到了這個特性,那么就不會把它打包進去或者刪除對應(yīng)代碼;
2)沒有被任何場景使用到的霧效(Fog)或光照貼圖模式(Lightmap)的著色器變體,也不會打包進去或者刪除對應(yīng)代碼;
變體是如何產(chǎn)生的,可以查看這篇文章:https://docs.unity3d.com/cn/2018.4/Manual/SL-MultipleProgramVariants.html
5. shader 相關(guān)的編輯器
如果后期需要大量使用shader功能的話,建議使用shader的編輯器進行處理,這樣標(biāo)準(zhǔn)容易統(tǒng)一,渲染問題也比較容易定位。
推薦比較好用的兩個shader可視化編輯器:
- Shader Graph https://docs.unity3d.com/cn/2018.4/Manual/shader-graph.html
- AmplifyShaderEditor https://assetstore.unity.com/packages/tools/visual-scripting/amplify-shader-editor-68570
6.其他 - 參考資源
粒子blend的說明 https://docs.unity3d.com/cn/2018.4/Manual/shader-StandardParticleShaders.html
標(biāo)準(zhǔn)著色器 https://docs.unity3d.com/cn/2018.4/Manual/StandardShaderMaterialCharts.html
舊版著色器 https://docs.unity3d.com/cn/2018.4/Manual/shader-Performance.html
LOD https://docs.unity.cn/cn/2018.1/Manual/SL-ShaderLOD.html
變體 https://docs.unity3d.com/cn/2018.4/Manual/SL-MultipleProgramVariants.html