Hey Epic Team,
We are currently investigating Nanite Landscape performance within Ray Tracing (RT) scenes and noticed that its behavior deviates from standard Nanite static meshes. We have a few questions regarding its implementation:
1. Dynamic vs. Static Ray Tracing Proxies Unlike typical static meshes, Nanite Landscape appears to be treated as dynamic. We noted that bFastBuild and bAllowUpdate are set to true in FLandscapeRayTracingImpl::FindOrCreateRayTracingState. Additionally, FLandscapeComponentSceneProxy::GetDynamicRayTracingInstances updates the proxy dynamically as the camera moves, leading to frequent BLAS updates. Given that landscape geometry is static, what was the design rationale behind making it dynamic for ray tracing?
2. BLAS Compaction and Memory Footprint Our analysis via D3D12.DumpRayTracingGeometries shows that Landscape BLAS is unable to be compacted (Compaction flag is 0), resulting in a substantial memory footprint. When we manually forced bAllowUpdate and bFastBuild to false, the memory usage dropped by approximately 50% due to successful compaction. In your view, is disabling these dynamic updates a viable path for optimizing memory, or are there hidden risks we should be aware of?
3. Nanite Landscape Data Storage Could you clarify how Nanite Landscape geometry is stored? When Nanite is enabled for a landscape, and then we hit the “Build” button in the editor, does the engine generate and store a static Nanite mesh, or is it still fundamentally a heightfield map that generates mesh data on the fly?
[Attachment Removed]