对于需要维持实时性能预算的项目,必须设置框架预算来实现这种目标框架比例。通常情况下,应该是每秒30或60帧(FPS)。通过调整内容或工作流,可以在很多地方优化项目的性能。
本指南介绍了一些可以开始优化虚幻引擎光线追踪功能的地方,以及多种通过调试场景和调查问题来解决困难领域的方法。
光线追踪成本概览
硬件光线追踪使用分成两层的包围体层级(Bounding Volume Hierarchy)(BVH)来加速光线遍历。顶层加速结构(Top Level Acceleration Structure) (TLAS)包含整个场景的所有网格体实例。这些实例引用的网格体是 底层加速结构(Bottom Level Acceleration Structure) (BLAS)。
下面的图表以可视化方式呈现了BVH实现光线遍历的方式。
光线追踪产生的成本主要有三个类别。
1、构建底层加速结构以便于动态地解构网格体,例如蒙皮网格体和毛发。
2、为场景和着色器绑定表(SBT)构建顶层加速结构。
3、每个使用光线追踪功能的光线遍历。
对于项目开发,可以使用控制台变量来测试特定几何体类型的光线追踪。这对于衡量光线追踪功能的成本或将其完全禁用非常有用。这些功能在 r.RayTracing.Geometry.* 下列出。
几何体类型 | 控制台变量 | 默认状态 |
---|---|---|
静态网格体 | r.RayTracing.Geometry.StaticMeshes | 启用 |
骨骼网格体 | r.RayTracing.Geometry.SkeletalMeshes | 启用 |
实例化静态网格体 | r.RayTracing.Geometry.InstancedStaticMeshes | 启用 |
地形地貌 | r.RayTracing.Geometry.Landscape | 启用 |
几何体缓存 | r.RayTracing.Geometry.GeometryCache | 启用 |
几何体集合 | r.RayTracing.Geometry.GeometryCollection | 禁用 |
Niagara网格体 | r.RayTracing.Geometry.NiagaraMeshes | 启用 |
Niagara条带 | r.RayTracing.Geometry.NiagaraRibbons | 启用 |
Niagara Sprite | r.RayTracing.Geometry.NiagaraSprites | 启用 |
流程性网格体 | r.RayTracing.Geometry.ProceduralMeshes | 启用 |
底层加速结构更新
虽然静态网格体的BLAS仅在加载时(或在控制台上烘焙时)构建一次,但动态地解构网格体时还必须重新构建每个帧,而这则可能产生极大的成本。BLAS重新构建是一种GPU操作,通常与要解构的三角形数量成正比。使用大量的骨骼网格体和大量的三角形可能很快就造成沉重的GPU成本。(Using a large number of Skeletal Meshes with a large number of triangles can quickly become a major GPU cost.)
BLAS重新构建成本可以在GPU分析器的以下区域中看到:
- Scene > CommitRayTracingGeometryUpdates
- Scene > CommitHairRayTracingGeometryUpdates
- Scene > RayTracingGeometry
重新构建每个帧的三角形类型包括:
- GPUSkinCache中的蒙皮网格体
- 重新构建地形以支持其持续变形的细节级别(LOD)。
- Chaos破坏系统的几何体集合
- 毛发
- 流程性网格体
- Niagara粒子系统
大量的多边形骨骼网格体通常都会导致较高的BLAS构建成本。骨骼网格体可以使用骨骼网格体编辑器中的 光线追踪最低LOD(Ray Tracing Min LOD) 属性,从而阻止为光线追踪功能使用最高的LOD。
在通过D3D12运行项目时,使用控制台命令D3D12.DumpRayTracingGeometries来获取转储到日志的动态BLAS重新构建的所有内存分类列表。此列表可以用于优化项目。
下一篇:光线追踪性能指南(二)
本文转自:UE4学习 UE5学习,转载此文目的在于传递更多信息,版权归原作者所有。如不支持转载,请联系小编demi@eetrend.com删除。