未开启 Occlusion Culling 下 数秒间隔出现的 CULLING 卡顿(CPU 峰谷)

未开启 Occlusion Culling 下 数秒间隔出现的 CULLING 卡顿(CPU 峰谷)

晚风撩人 发布于 2020-09-01 字数 2097 浏览 1012 回复 2

各位好,

我在做的一个项目是第三人称尾随视角的射击类,场景以室内外建筑为多,因为互相遮蔽非常频繁,摄像机高度一般也在人眼的高度附近,显然使用OC应该是比较合适的。然而,前一段时间发现在开启了OC后,性能不佳,PROFILER看一下,发现OC造成的尖刺(峰谷 spikes in profiler)非常频繁,后随即尝试着关闭了OC,并且清除了烘焙数据,同时关闭了摄像机的OC开关。(场景内有三个相机,一个主相机,另外两个平常关闭的,开启瞄准镜才打开用于模拟瞄准镜视角。)

9358d109b3de9c82cff9b3ec6681800a19d84330.gif

问题来了,虽然关闭了OC,可是CPU尖刺仍然存在,只是频率降低了些,但大约平均1-5秒钟就会出现一次,每次一帧耗时150毫秒左右,这显然是很严重的。 在PROFILER中查看,截图如下:

Screen Shot 2017-08-02 at 10.52.59 PM.png

或者

Screen Shot 2017-08-02 at 10.49.59 PM.png

或者

![Screen Shot 2017-07-18 at 9.23.38 PM.png](https://uwa-public.oss-cn-beijing.aliyuncs.com/answer/image/public/103777/1501788261158.png) 

主要的就是这三种分类,但基本都是OC相关。看起来和阴影及动态物体的非umbra方式剔除有关,估计是内置的摄像机视野剔除?补充一下场景配置:shadowmap光照贴图,8.0米阴影距离,一个方向光源,若干非重要的动态点光源平常都不开启(枪口火焰亮光),场景中大多数物体都用一个基于标准SHADER的改动版,有几千个variants,但profiler中看渲染速度都没有发现问题。

GOOLE了一下,发现有三个UNITY社区的帖子在讨论这个问题,有很多人表示遇到这个问题,并且有一个TICKET在处理,在最新的2017.2.0.B5测试版的KNOWN ISSUES里发现了这个描述,但是对应的TICKET上显示已经在2017.2.0版本中修复。

非常想了解一下,是否有人遇到过这个问题,以及是否解决,是否和多个摄像机有关?另外对于OC,在默认参数下,一般多少毫秒的帧内用时是正常的?大家用OC有哪些特别的体验么?

UWA这个社区看起来比较专业,WNSB少了很多,希望越办越好,谢谢先。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(2

偏爱自由 2020-06-12 2 楼

开启Occlusion Culling后,在移动设备上,确实会出现频繁的莫名其妙的峰值(主要体现在Camera Culling下的WaitingForJob中),这个问题我们在Unity 5.1以后就有所发现。不过在关闭Occlusion Culling后,该问题是会明显好转的。通过你的描述,我们认为两点不太合理:

(1)你的Occlusion Culling开销(在关闭OC功能后)确实过大,一般来说,即便是低端机上开启了Occlusion Culling功能,其CPU耗时峰值也应该在10~30ms区间,除非场景中烘焙的Cell过大。而关闭OC后,确实不能排除峰值的出现,但确实应该有效缓解才对;

(2)1~5s的频率依然过于频繁。关闭OC后,这么高的峰值出现应该有效缓解才对。当然,你提供的截图中,有两张是和Shadow的实时渲染相关,因为在渲染时一样会进行Culling,所以很可能会增加高CPU开销的出现频率。

一般来说,无论是否开启OC,CullingDynamicObjects的性能一般需要控制在平均3ms以下。下图是几个跟你目前情况较为类似(开启OC后又关闭OC)的Culling开销,有一些开销峰值,但基本上10ms左右也就差不多了。

image.png

image.png

image.png

另外,关于OC开启的持续耗时建议,也可以查看 这个帖子

泛泛之交 2018-01-18 1 楼

更新一下进度,问题已经得到解决,这个问题看来只是存在于EDITOR中,通过连接设备进行PROFILER,结果发现设备中运行并没有出现SPIKES,使用默认参数的OC后,每一帧的CULLING消耗非常小,在IP 6S上基本都在5毫秒以内,而OC后,因为渲染的多边形和材质减少了至少一半,性能提高很多,在开启DISTANCE SHADOWMAP模式,阴影距离10米,FXAA全屏抗锯齿,FULL PIXEL贴图MIPMAP,外加一个全局STANDARD SPECULAR的SHADER的情况下,PROFILER帧率在60,如果使用最低配置,帧率可稳定在100-60之间,XCODE中CPU占有率在60%以下。所以OC还是很重要的,如果你的游戏类型合适的话。希望苦手这个部分的同学可以看到这个帖子