backing heap里的资产是否可以控制数量?

我们发现代码里有一个叫做backing heap的堆用来存放将来可能会被显存使用的资产。

[Image Removed]本意上应该是为了快速响应未来的资产分配,但是我们发现会存在多份没有被使用的显存资产,由于我们项目显存比较吃紧,希望能够释放这部分资产。比如Nanite.MainAndPostCandidateClustersBuffer有十一份拷贝没有被draw call使用。实际正在使用的只有三份。我们觉得没必要预留这么多份拷贝在heap里。有什么指令可以控制拷贝的数量吗?或者有什么资产标记可以让它在heap里预留显存吗? [Image Removed]

[Attachment Removed]

你好

您所引用的这段代码是关于 D3D12 RHI内部heap poo的逻辑,是引擎控制GPU内存布局的一部分。使用Heap的目的就是避免每个Resource都要单独分配显存,同时增加显存的复用率。它是区别于资产对象的。

您所提到的Nanite.MainAndPostCandidateClustersBuffer多份拷贝,应该是 多帧缓存(Frame buffering), Transient RDG缓存, Nanite异步计算 等多种机制叠加后的结果,。这里资源池的分配策略是可复用性优先,如果释放掉这些资源,则可能会导致由于频繁的显卡资源请求带来性能负担。通常来说,没被 drawcall 并不意味着引擎就可以释放掉,这是一个综合考量的结果。

对于解决项目显存吃紧问题,建议从项目的实际资源使用情况来优化。就以Nanite而言,可以考虑限制 Nanite Streaming Pool,控制 Nanite Mesh数据的规模,调整 Nanite Fallback Mesh,优化HLOD等等。

希望这能解答了您的问题​。如果您还有相关的问题,请随时和我联系。谢谢。

Henry Liu​

[Attachment Removed]