[UnrealCircle北京]仙剑7的性能优化经验与教训 | 万新琪

仙剑7性能优化经验和教训笔记
1.阴影
用比正常低一个级别的LOD来优化阴影和光追。
可以关闭投影贡献少的材质部分的投影以及一些动态阴影,用CastShadow弥补。
看不到方向光的时候可以关闭方向光。
注意点:关闭动态阴影可能会丢失距离场效果,所以最好是使用固定光的场景。
2.半透明
看不见的半透明物体依旧会参与渲染造成性能浪费,可以通过DistanceCull、流关卡、程序逻辑优化。
压缩粒子顶点减少OverDraw。
3.内存
将粗糙度、金属、AO等贴图放一张贴图的RGB通道中,能够减少纹理采样次数、包体和内存。
将贴图尺寸减小。
合并相同物体成Instance能够减少显存压力,但instance过多会造成巨大的CPU开销,需要将其拆分到子关卡中。
4.管理不用区域不同的渲染参数
用蓝图脚本来管理CvaR,而不是写入ini文件中。根据UI中的画质选项设置自动切换渲染参数。
每个区域的地图都要有自己的参数配置,可以用触发盒切换。
5.光追
尽量消除BVH重叠。
尽量提高BoundingBox的填充率。
BLAS:针对BVH的加速结构,用于储存场景中每个物体的BVH,可以实现更高效的光效物体相交测试。
世界中空白空间过多时考虑拆分BLAS。
AABB(世界空间轴对齐边界框)重叠较多考虑合并BLAS。
松散几何体的Actor考虑从光追中剔除。
合并的Actors会使用一个非常大的BoundingBox,很容易扼杀性能。
SupportRayTracing标志可以非常方便的组织光追场景。
限制几何体更新距离:r.RayTracing.DynamicGeometryLastRenderUpdateDistance。
仙剑7的物体加入光追与否表格

大量水面场景处理思路:
1.复杂模型移除光追
2.水面反射附近减少BVH复杂度过高的模型
3.性能达到目标后再添加
4.Instances Foliage的WPO物体应该和Evaluate WPO的静态网格物体在光追中区别对待:在一定范围内才做光追计算。
光追材质尽可能简单。