Hi,
这属于一个目前我们已知的问题,应该是因为Windows平台会根据当前运行中的应用去分配vram,每个应用能分到多少是系统决定的。另外Windows也会根据情况,将vram的资源evict到nonlocal的地方(内存或者磁盘),即使当前的vram没有超过windows分配的大小。不过资源是可以设置常驻优先级的(SetResidencyPriority),引擎应该在大部分需要的地方设置了,比如RenderTarget,UAV,transient buffer,但是好像有些地方没有设置到(可能是Nanite和Raytracing相关的buffer),因为没有设置优先级,这些大的显存资源跟一些小的资源都有可能被evict出去。所以因为evict出去后,想读回时,因为显存的碎片,导致没有连续显存,就会无法读回,导致性能下降。
应该有两个方向可以考虑解决,一个是尽可能找到哪些资源没有设置高优先级,根据需要设置一下。另一个可能是在那些大的资源创建的时候,用Reserved(TexCreate_ReservedResource)的方式创建,这样可以减缓这种情况。
不过目前暂时还没有针对性的优化,所以目前只能自己想办法调整。我们有一个内部的jira UE-305620去追踪这个问题。希望能在下个版本中有一定的优化。