Unity_Shader高级篇_16_Unity Shader入门精要_节省带宽

16.7 节省带宽
大量使用未经压缩的纹理以及使用过大的分辨率都会造成由于带宽而引发的性能瓶颈。
16.7.1 减少纹理的大小
之前提过,使用纹理图集可以帮我们减少draw call的数目,而这些纹理的大小同样是一个需要考虑的问题。需要注意的是,所有纹理的长宽比最好是正方形,而且长宽值最好是2的整数幂。这是因为有很多优化策略只有在这种时候才可以发挥最大效用。在Unity5中,即便我们导入的纹理长宽值并不是2的整数幂,Unity也会自动把长宽转换到离他最近的2的整数幂值。但我们仍然应该在制作美术资源时就把这条规则谨记在心,防止由于缩放而造成不好的影响。
除此之外,我们还应该尽可能使用多级渐远纹理技术(mipmapping)和纹理压缩。在Unity中,我们可以通过纹理导入面板来查看纹理各个导入属性。通过把纹理类型设置为Advanced,就可以自定义许多选项,例如,是否生成多级渐远纹理(mipmaps),如下图所示,当勾选了Generate Mip Maps选项后,Unity就会为同一张纹理创建出很多不同大小的小纹理,构成一个纹理金字塔。而在游戏运行中就可以根据离物体的远近,来动态选择使用哪一个纹理。这是因为,在距离物体很远的时候,就算使用精细的纹理,但肉眼也是分辨不出来的。这种时候,我们完全可以使用更小、更模糊的纹理来代替,这可以让GPU使用分辨率更小的纹理,大量节省访问的像素数目。在某些设备上,关闭多级渐远纹理往往会造成严重的性能问题。因此,除非我们确定该纹理不会发生缩放。
纹理压缩同样可以节省带宽。但对于像Android这样的平台,有很多不同架构的GPU,纹理压缩就变得有点复杂,因为不同的GPU架构有它自己的纹理压缩格式,例如,PowerVRAM的PVRTC格式、Tegra的DXT格式、Adreno的ATC格式。所幸的是,Unity可以根据不同的设备选择不同的压缩格式,而我们只需要把纹理压缩格式设置为自动压缩即可。但是,GUI类型的纹理同样是个例外,一些时候由于对画质的要求,我们不希望对这些纹理进行压缩。
这里写图片描述

结构类型。先进的( Advanced)
映射 Mapping
读/写启用 Read/Write Enabled
导入类型.DefaultImport Type .Default 默认)
从灰色α
α是Transpar
绕过sRGB萨尔
编码作为RGBM
雪碧模式
生成Mip地图
在线性空间
边境Mip地图
Mip地图过滤
渐隐Mip地图
包装方式.Repeat
过滤模式.Bilinear
Aniso水平
最大尺寸
格式

16.7.2 利用分辨率缩放
过高的屏幕分辨率也是造成性能下降的原因之一,尤其是对于很多低端手机,除了分辨率高其他硬件条件并不尽如人意,而这恰恰是游戏性能的两个瓶颈:过大的屏幕分辨率和糟糕的GPU。因此,我们可能需要对于特定机器进行分辨率的缩放。当然,这样可能会造成游戏效果的下降,但性能和画面之间永远是个需要权衡的话题。
在Unity中设置屏幕分辨率可以直接调用Screen.SetResolution。实际使用中可能会遇到一些情况,雨松MOMO有一篇文章(http://www.xuanyusong.com/archives/3205)详细讲解了如果使用这种技术。

猜你喜欢

转载自blog.csdn.net/qq_39710961/article/details/79881472
今日推荐