在Unity3D中的渲染优化-优化Shader

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中进行合成。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注