UnityShader入门精要——Unity中的渲染优化技术(四)

节省带宽

1 减少纹理大小

  • 所有纹理的长宽比最好是正方形,且长宽值最好是2的整数幂。
  • 使用多级渐远纹理技术。

通过把纹理类型设置为Advanced, 就可以自定义许多选项,例如,是否生成多级渐远纹理(mipmaps), 当勾选了Generate Mip Maps选项后,Unity就会为同一张纹理创建出很多不同大小的小纹理,构成一个纹理金字塔。而在游戏运行中就可以根据距离物体的远近,来动态选择使用哪一个纹理。

  • 纹理压缩。

纹理压缩icon-default.png?t=M5H6http://t.csdn.cn/zK5632        利用分辨率缩放

过高的屏幕分辨率也是造成性能下降的原因之一,尤其是对于很多低端手机,除了分辨率高其他硬件条件并不尽如人意,而这恰恰是游戏性能的两个瓶颈:过大的屏幕分辨率和糟糕的GPU。因此,我们可能需要对于特定机器进行分辨率的放缩。当然,这样可能会造成游戏效果的下降,但性能和画面之间永远是个需要权衡的话题。

在Unity中设置屏幕分辨率可以直接调用Screen. SetResolution。

减少计算复杂度

1        shader的LOD技术

和模型的LOD技术类似,Shader 的LOD技术可以控制使用的Shader等级。它的原理是,只有Shader的LOD值小于某个设定的值,这个Shader才会被使用,而使用了那些超过设定值的Shader的物体将不会被渲染。

SubShader {
    Tags { 个"RenderType "="Opaque" }
    LOD 200
}

我们也可以在Unity Shader 的导入面板上看到该Shader使用的LOD值。在默认情况下,允许的LOD等级是无限大的。这意味着,任何被当前显卡支持的Shader都可以被使用。但是,在某些情况下我们可能需要去掉一些使用了复杂计算的Shader 渲染。这时,我们可以使用Shader.maximumLOD或Shader.globalMaximumLOD来设置允许的最大LOD值。Unity内置的Shader使用了不同的LOD值,例如,Diffuse的LOD为200,而Bumped Specular的LOD为400。

2        代码优化

在实现游戏效果时,我们可以选择在哪里进行某些特定的运算。通常来讲,游戏需要计算的对象、顶点和像素的数目排序是对象数<顶点数<像素数。因此,我们应该尽可能地把计算放在每个对象或逐顶点上。

  • 尽量使用低精度浮点值运算

最高精度的floathighp 适用于存储诸如顶点坐标等变量,但它的计算速度是最慢的,我们应该尽量避免在片元着色器中使用这种精度进行计算。

half/mediump适用于一些标量、纹理坐标等变量,它的计算速度大约是float的两倍。

fixed/lowp 适用于绝大多数颜色变量和归一化后的方向矢量,在进行一些对精度要求不高的计算时,我们应该尽量使用这种精度的变量。它的计算速度大约是float 的4倍,但要避免对这些低精度变量进行频繁的swizzle操作( 如color.xwxw)。

还需要注意的是,我们应当尽量避免在不同精度之间的转换,这有可能会造成一定的性能下降。

  • 对于绝大多数GPU来说,在使用插值寄存器把数据从顶点着色器传递给下一个阶段时,我们
    应该使用尽可能少的插值变量。

如果需要对两个纹理坐标进行插值,我们通常会把它们打包在同一个float4类型的变量中,两个纹理坐标分别对应了xy分量和zw分量。

然而,对于PowerVR平台来说,这种插值变量是非常廉价的,直接把不同的纹理坐标存储在不同的插值变量中,有时反而性能更好。尤其是,如果在PowerVR上使用类似 tex2D( MainTex, uv.zw)这样的语句来进行纹理采样,GPU就无法进行一些纹理的预读取,因为它会认为这些纹理采样是需要依赖其他数据的。因此,如果我们特别关心游戏在PowerVR上的性能,就不应该把两个纹理坐标打包在同一个四维变量中。

  • 尽可能不使用全屏的屏幕后处理效果。

如果美术风格实在是需要使用类似Bloom、热扰动这样的屏幕特效,我们应该尽量使用fixed/lowp. 进行低精度运算(纹理坐标除外,可以使用half/mediump)。那些高精度的运算可以使用查找表(LUT)或者转移到顶点着色器中进行处理。

  • 尽量把多个特效合并到一个Shader中。
  • 尽可能不要使用分支语句和循环语句。
  • 尽可能避免使用类似sin、tan、pow、log 等较为复杂的数学运算。我们可以使用查找表来
    作为替代。
  • 尽可能不要使用discard 操作,因为这会影响硬件的某些优化。

3        根据硬件条件进行缩放

我们首先保证游戏最基本的配置可以在所有的平台上运行良好,而对于一些具有更高表现能力的设备,我们可以开启一些更“养眼”的效果,比如使用更高的分辨率,开启屏幕后处理特效,开启粒子效果等。

优化图像性能icon-default.png?t=M5H6https://docs.unity3d.com/Manual/OptimizingGraphicsPerformance.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值