1.使用Shader中的LOD技术
Shader的LOD技术可以控制使用的Shader等级,原理是,只有Shader的值小于某个设定的值,这个Shader才会被使用,而使用了那些超过设定值的Shader的物体将不会被渲染执行。
例如,我们通常会在SubShader中使用类似下面的语句来指明该Shader的LOD值:
SubShader{
Tags{"RenderType" = "Opaque"}
LOD 200
}
我们也可以在Unity Shader的导入面板上看到该Shader的LOD值。在默认情况下,允许的LOD等级是无限大的。这意味着,任何被当前显卡支持的Shader都可以被使用。但是,在某些情况下需要去掉一些有复杂计算的Shade渲染。这时可以使用Shader.maximumLOD或Shader.globalMaximumLOD来设置允许的最大LOD值。
Unity内置的Shader使用了不同的LOD值(Diffuse使用的LOD为200,Bumped Specular的LOD为400)。
2.优化shader的代码
(1)如果可以,尽可能将一些计算放到顶点着色器中进行
(2)在片元着色器中尽可能使用低精度的浮点值进行计算
(3)在使用插值寄存器把数据从顶点着色器传递给下一阶段时,避免使用过多的插值寄存器。
(4)尽可能不要使用分支语句和循环语句
(5)尽可能不要使用discard操作,因为这会影响硬件的某些优化
(6)对于全屏的屏幕后期处理效果来说,尽量把多个特效合并到一个Shader中。例如,哦我们可以把颜色校正和添加噪声等屏幕特效在Bloom特效的最后一个Pass中进行合成。