上述图例中,不透明渲染开销高,对应的画面为打斗画面;
半透明物体的渲染:
整个半透明的渲染,包括树、草、UI;
如果使用的是NGUI,看下Mesh.CreateVBO是不是很高,因为有时候会达到3%、5%甚至百分之十几;如果比较高,说明NGUI出现问题,因为这块都是有UIPanel.LateUpdate引起的;说明NGUI在不停地重建UI的Mesh;
Unity4.X会有ParticleSystem.RenderSingle,是说粒子系统在CPU端的开销;
BatchRenderer.Flush:对应API的Flush,对模型进行渲染;(Unity5.3之后版本才有)
MeshRenderer.Render:与半透明网格的渲染相关(花花草草,特效及其面片、UI);
Mesh.CreateVBO:如果数值太高,说明UI存在很大的问题;
在使用NGUI时,UI网格发生重建,重建时创建一些新的网格,对应在渲染里面,会引起UIPanel.LateUpdate的调用;
ParticleSystem.ScheduleGeometryJobs:对粒子系统的计算与处理;
ParticleSystem.SubmitVBO:粒子系统渲染的Drawcall;
MeshRenderer.Render:场景模型的渲染;
BatchRenderer.Add(MeshSkinning.Render):蒙皮网格的渲染;
裁剪区域的渲染:
Culling:根据视锥体进行裁剪,一般耗时在15%~20%之间,MMO项目场景中GameObject数量越多,Culling耗时越多,一般优化空间不大;
Uniy4.X为Culling,Unity5.X是Scene Culling;
根据视锥体的锥状体和里面所有物体的包围盒进行求交,若果有交点,就会进入到渲染的PipeLine里面去;
XXX.OnPreCull 跟所做的图像的后处理相关;
找出骨骼数(BoneWeights)大于0的,一般降低面片数就可以降低Update以及渲染方面的开销;
1:减少Skinned Mesh面片数;
2:某些特定场合可以降低Draw Call(使用MeshBaker插件);
(将蒙皮网格合成大的网格,比如有15个同种的怪物或士兵,将15个怪物使用同一个骨架;
但是这种方式在动态增减Skinned Mesh时,会造成较大的开销;且只能带来Drawcall的下降,对于Animator、MeshSkinnedUpdate等CPU的开销无太大帮助)
粒子系统渲染:
Unity5.3.0版本之前,粒子系统的渲染在CPU的主线程中都会有一定开销,
Unity5.3之后粒子系统被Unity挪到了子线程进行渲染,不再卡主线程;
粒子系统使用越多,覆盖面积越大时,开销越大;
粒子系统渲染的优化建议:
1:简化粒子系统、减小屏幕的覆盖面积;
2:尝试升级到Unity5.3版本之后
图像后处理:
Camera.ImageEffexts:图像或屏幕的后处理;
RenderPipeline.OnRenderImage:在做图像的后处理;
MeshRenderer.RenderStaticBatch和MeshRenderer.Render:对场景中物体的渲染;
Shadows.RenderShadowmap:开启了实时阴影的渲染(只是画Shadowmap的耗时),其实还会在开启Shadowmap时,光源会作为另外一个Camera对场景进行第二次的渲染,这次渲染的耗时也会放到Shadows.RenderShadowmap中,实际的开销高于这里显示的;
优化方案:
1:使用Asset Store中Mobile Ready的插件(DOF、Blur等);
2:在中低端机器上适度使用复杂特效;(简化特别复杂的或直接进行关闭)
3:在安卓端开启多线程渲染功能(默认不开启);
但是开启后会带来新的问题,如下图所示(对不透明物体的渲染走势波动太大):
Q:开启多线程后,UI渲染不稳定的原因?
A:NGUI和UGUI的UI Mesh随着动静没有分离或其他因素会产生网格的重建,网格重建后,半透明会非常之高;修复网格重建后,半透明渲染就能降下来;
影响多线程渲染的有:
1:动静没有分离,导致网格重建;
2:Drawcall太高;
实时阴影:
两个地方会增大实时阴影的耗时:
1:Shadowmap的分辨率;2024*2048还是1024*1024等;
分辨率越高生成Shadow的效果越好,但带来的性能的开销就越大;
Built-in Shadow Map分辨率比较高时,耗时高;
推荐文章:ScreenSpaceShadowMask Blur推荐
2:Shadow Receiver网格的数据量:形成Shadow时,会有一个接触面,网格的数据量决定了渲染阴影时的开销;
Shadow Receiver接收阴影的网格面片,面片越多,CPU占用高;
(使用Fast Shadow Receiver插件(可以尽可能降低Shadow网格的数据量),同时支持Shadowmap和Projector)
推荐文章:Fast Shadow Receiver - 快速阴影投射计算插件
推荐网站链接:如何读懂UWA性能报告?—渲染篇