Unity3D中的渲染优化技术

影响性能的因素

CPU

过多的draw call

复杂的脚本或者物理模拟

GPU

1.顶点处理

过多的顶点

过多的逐顶点计算

2.片元处理

过多的片元(既可能是由于分辨率造成的,也可能是由于overdraw造成的)。

过多的逐片元计算

带宽

使用了尺寸很大未压缩的纹理

分辨率过高的帧缓存

优化技术

CPU优化

使用批处理技术减少draw call数目

无论是动态批处理还是静态批处理,都要求模型之间需要共享同一个材质。

1.动态批处理

动态批处理的条件:能够进行动态批处理的网格的顶点属性规模要小于900;

一般来说,所有对象都需要使用同一个缩放尺寸;一个例外情况是,如果所有的物体都使用了不同的非统一缩放,那么它们也是可以被动态批处理的。但在unity5中,这种模型缩放的限制已经不存了;

使用光照纹理(lightmap)的物体需要小心处理。需要保证它们指向光照纹理中的同一个位置;

多Pass的shader会中断批处理。

2.静态批处理

对于静态批处理来说,它的优点是自由度很高,限制很少;但缺点是可能占用更多的内存,而且经过静态批处理后的所有物体都不可以在移动了。


GPU优化

减少需要处理的顶点数目

1.优化几何体

2.使用模型的LOD(Level of Detail)技术

3.使用遮挡剔除(Occlusion Culling)技术

减少需要处理的片元数目

1.控制绘制顺序

2.警惕透明物体

3.减少实时光照和阴影

减少计算计算复杂度

1.使用Shader的LOD(Level of Detail)技术

2.代码方面的优化

a.通常来讲,游戏需要计算的对象,顶点和像素的数目排序是 对象数<顶点数<像素数 。因此,我们应该尽可能地把计算放在每个对象或逐顶点上。

b.尽可能使用低精度的浮点值进行运算。float/highp适用于存储诸如顶点坐标等变量,而half/mediump适用于一些标量,纹理坐标等变量,而fixed/lowp适用于绝大多颜色变量和归一化的方向矢量,在进行一些对精度要求不高的计算时,我们应该尽量使用这种精度的变量。

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

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

e.尽可能不要使用分支语句和循环语句。

f.尽可能避免使用类似sin,tan,pow,log等较为复杂的数学运算。我们可以使用查找表来做为替代。

g.尽可能不要使用discard操作,因为这会影响硬件的某些优化。

h.尽量避免在不同精度之间的转换,这有可能会造成一定的性能下降。

节省内存带宽

1.减少纹理大小

a.所有的纹理的长宽比最好是正方形,而且长宽值最好是2的整数幂

b.使用多级渐远纹理技术(mipmapping)

c.纹理压缩

2.利用分辨率缩放

猜你喜欢

转载自blog.csdn.net/yongshuangzhao/article/details/79368778