总体性能——渲染模块性能

总体性能——渲染模块性能_第1张图片


上述图例中,不透明渲染开销高,对应的画面为打斗画面;


总体性能——渲染模块性能_第2张图片


总体性能——渲染模块性能_第3张图片


半透明物体的渲染:

总体性能——渲染模块性能_第4张图片

 

整个半透明的渲染,包括树、草、UI

 

如果使用的是NGUI,看下Mesh.CreateVBO是不是很高,因为有时候会达到3%5%甚至百分之十几;如果比较高,说明NGUI出现问题,因为这块都是有UIPanel.LateUpdate引起的;说明NGUI在不停地重建UIMesh

Unity4.X会有ParticleSystem.RenderSingle,是说粒子系统在CPU端的开销;

BatchRenderer.Flush:对应APIFlush,对模型进行渲染;(Unity5.3之后版本才有)

MeshRenderer.Render:与半透明网格的渲染相关(花花草草,特效及其面片、UI;

Mesh.CreateVBO:如果数值太高,说明UI存在很大的问题;

在使用NGUI时,UI网格发生重建,重建时创建一些新的网格,对应在渲染里面,会引起UIPanel.LateUpdate的调用;

ParticleSystem.ScheduleGeometryJobs:对粒子系统的计算与处理;

ParticleSystem.SubmitVBO:粒子系统渲染的Drawcall


不透明物体的渲染:

总体性能——渲染模块性能_第5张图片

MeshRenderer.Render场景模型的渲染;

BatchRenderer.AddMeshSkinning.Render:蒙皮网格的渲染;


裁剪区域的渲染:



Culling:根据视锥体进行裁剪,一般耗时在15%~20%之间,MMO项目场景中GameObject数量越多,Culling耗时越多,一般优化空间不大;

Uniy4.XCullingUnity5.XScene Culling;

根据视锥体的锥状体和里面所有物体的包围盒进行求交,若果有交点,就会进入到渲染的PipeLine里面去;

XXX.OnPreCull 跟所做的图像的后处理相关;


蒙皮网格渲染

总体性能——渲染模块性能_第6张图片

找出骨骼数(BoneWeights)大于0的,一般降低面片数就可以降低Update以及渲染方面的开销;

蒙皮网格渲染如何解决:

1:减少Skinned Mesh面片数;

2:某些特定场合可以降低Draw Call(使用MeshBaker插件);

(将蒙皮网格合成大的网格,比如有15个同种的怪物或士兵,将15个怪物使用同一个骨架;

但是这种方式在动态增减Skinned Mesh时,会造成较大的开销;且只能带来Drawcall的下降,对于AnimatorMeshSkinnedUpdateCPU的开销无太大帮助)


粒子系统渲染:

总体性能——渲染模块性能_第7张图片

Unity5.3.0版本之前,粒子系统的渲染在CPU的主线程中都会有一定开销,

Unity5.3之后粒子系统被Unity挪到了子线程进行渲染,不再卡主线程;

粒子系统使用越多,覆盖面积越大时,开销越大;

粒子系统渲染的优化建议:

1:简化粒子系统、减小屏幕的覆盖面积;

2:尝试升级到Unity5.3版本之后



图像后处理:

总体性能——渲染模块性能_第8张图片

Camera.ImageEffexts:图像或屏幕的后处理;

RenderPipeline.OnRenderImage:在做图像的后处理;

MeshRenderer.RenderStaticBatchMeshRenderer.Render:对场景中物体的渲染;

Shadows.RenderShadowmap:开启了实时阴影的渲染(只是画Shadowmap的耗时),其实还会在开启Shadowmap时,光源会作为另外一个Camera对场景进行第二次的渲染,这次渲染的耗时也会放到Shadows.RenderShadowmap中,实际的开销高于这里显示的;

优化方案:

1:使用Asset StoreMobile Ready的插件(DOFBlur等);

2:在中低端机器上适度使用复杂特效;(简化特别复杂的或直接进行关闭)

3:在安卓端开启多线程渲染功能(默认不开启);

但是开启后会带来新的问题,如下图所示(对不透明物体的渲染走势波动太大):

总体性能——渲染模块性能_第9张图片

Q:开启多线程后,UI渲染不稳定的原因?

A:NGUIUGUIUI Mesh随着动静没有分离或其他因素会产生网格的重建,网格重建后,半透明会非常之高;修复网格重建后,半透明渲染就能降下来;

影响多线程渲染的有:

1:动静没有分离,导致网格重建;

2Drawcall太高;



实时阴影:

总体性能——渲染模块性能_第10张图片


两个地方会增大实时阴影的耗时:

1Shadowmap的分辨率;2024*2048还是1024*1024等;

分辨率越高生成Shadow的效果越好,但带来的性能的开销就越大; 

Built-in Shadow Map分辨率比较高时,耗时高;

推荐文章:ScreenSpaceShadowMask Blur推荐

 

2Shadow Receiver网格的数据量:形成Shadow时,会有一个接触面,网格的数据量决定了渲染阴影时的开销;

Shadow Receiver接收阴影的网格面片,面片越多,CPU占用高;

(使用Fast Shadow Receiver插件(可以尽可能降低Shadow网格的数据量),同时支持ShadowmapProjector

推荐文章:Fast Shadow Receiver - 快速阴影投射计算插件


推荐网站链接:如何读懂UWA性能报告?—渲染篇






你可能感兴趣的:(Unity,性能精讲)