以前5.3的时候有一个命令Draw only VSM invalidating objects,升级到5.4之后就被移除了,看UE的Log上好像是有替代的方案,但是我没找到

我有两个问题

第一个问题​

以前5.3的时候有一个命令Draw only VSM invalidating objects,升级到5.4之后就被移除了,看UE的Log上好像是有替代的方案,但是我没找到。就是比如说场景里有一些物体设置是Movable的,就会使VSM的缓存失效,之前这个命令就是只绘制这些让VSM缓存失效的物体,这样比较容易找出来,其中有一些是美术不小心设置错了的。现在没有这个命令就很难找。

第二个问题

​因为我们现在是5.4.4版本的引擎,目前没有升级的打算,然后OcclusionQuery会阻塞RenderThread。

[Image Removed]

r.NumBufferedOcclusionQueries这个参数可以调整OcclusionQuery的GPU帧,但是5.4版本这个参数是无效的。

我从5.5版本Pick过来两个提交,恢复了这个参数的功能,然后通过获取N-2帧的OcclusionQuery结果(默认是N-1帧)把这个阻塞的问题给解决了。

[Image Removed]

[Image Removed]

但是带来了另一个问题,帧率变得非常不稳定。同样都是在静止的视角下,利用N-1帧的结果RenderThread和GPU的时间就很稳定,但利用N-2帧的话过一段时间就会有突刺产生。利用InitViews看OcclusionCulling的结果一直都是恒定的。

[Image Removed]

想知道这是什么原因。

您好,

我们推荐您在每个工单中只讨论一个话题/问题。建议您为第二个问题单独创建一个工单并附带相关信息或测试项目文件。

请将下面这些问题拆分成独立的工单:

- “Draw only VSM invalidating objects” 的替代品 - 当前问题(不需要新建工单)

- 在虚幻引擎 5.4.4 中 OcclusionQuery 会阻塞 RenderThread

我们可以继续在这个工单中讨论 DrawOnlyVSMInvalidatingGeo 相关的问题。

关于您的第一个问题:

DrawOnlyVSMInvalidatingGeo 在 CL 27578246 中被因为”长期失效“已经移除了。这个调试用的 Show Flag 基本功能是检查任何投射阴影的 Instance 是否被移动,或者材质中是否包含 WPO。您可以在 CPU 侧进行一些检查作为替代措施。

关于您的第二个问题:

OcclusionQuery 是一个 GPU 到 CPU 的同步点。在 GPU 存在较高负载时,OcclusionQuery 上的阻塞是正常行为。增大 r.NumBufferedOcclusionQueries 不一定能够解决这个问题,因为 CPU 永远领先于 GPU,在某个时间点 CPU 一定会被迫停止并等待 GPU 同步。

请问您目前有使用垂直同步吗?我们注意到您在使用 Unreal Insights,您可以尝试开启 GPU Trace Channel 后再进行 Trace 吗?