1.使用Shader中的LOD技術(shù)
Shader的LOD技術(shù)可以控制使用的Shader等級,原理是,只有Shader的值小于某個設(shè)定的值,這個Shader才會被使用,而使用了那些超過設(shè)定值的Shader的物體將不會被渲染執(zhí)行。
例如,我們通常會在SubShader中使用類似下面的語句來指明該Shader的LOD值:
SubShader{
Tags{"RenderType" = ?"Opaque"}
LOD 200
}
我們也可以在Unity Shader的導(dǎo)入面板上看到該Shader的LOD值。在默認(rèn)情況下,允許的LOD等級是無限大的。這意味著,任何被當(dāng)前顯卡支持的Shader都可以被使用。但是,在某些情況下需要去掉一些有復(fù)雜計算的Shade渲染。這時可以使用Shader.maximumLOD或Shader.globalMaximumLOD來設(shè)置允許的最大LOD值。
Unity內(nèi)置的Shader使用了不同的LOD值(Diffuse使用的LOD為200,Bumped Specular的LOD為400)。
2.優(yōu)化shader的代碼
(1)如果可以,盡可能將一些計算放到頂點著色器中進(jìn)行
(2)在片元著色器中盡可能使用低精度的浮點值進(jìn)行計算
(3)在使用插值寄存器把數(shù)據(jù)從頂點著色器傳遞給下一階段時,避免使用過多的插值寄存器。
(4)盡可能不要使用分支語句和循環(huán)語句
(5)盡可能不要使用discard操作,因為這會影響硬件的某些優(yōu)化
(6)對于全屏的屏幕后期處理效果來說,盡量把多個特效合并到一個Shader中。例如,哦我們可以把顏色校正和添加噪聲等屏幕特效在Bloom特效的最后一個Pass中進(jìn)行合成。