主题: GDC2023:Grappling with Performance: Rendering Optimization Strategies in ‘Rumbleverse’
简介: Rumbleverse is a 40-player battle royale game built in Unreal Engine 4but using a general-purpose engine doesn’t stop Iron Galaxy Studios from making engine-level optimizations to push the game to look the best it can be, while running at 60 FPS across console generations. Jon Moore, the game’s lead rendering engineer, will share many optimizations made throughout the game’s development and how optimization opportunities arise when leveraging a specific game’s constraints. Ultimately, choice of engine doesn’t affect optimization potential.
材料/链接: Grappling with Performance: Rendering Optimization Strategies in ‘Rumbleverse’
学习记录: 这是一个介绍UE4上的优化经验的分享. 由于我们并未充分利用到UE5的新特性(Nanite与Lumen等), 所以其优化方法还是有不少值得借鉴的地方~
$\\$ 1. 反射, 次表面散射与Water Mesh
$\\$ 1) 这一部分其实看得不多, 因为主要是在介绍在TBR上的优化, 由于我们目前并没有移动端上的优化需求, 故先暂时跳过了这一部分.
$\\$ 2. 角色描边
$\\$ 1) 采用Custom Depth + 后处理材质的方式性能消耗较大.
$\\$ 2) 对引擎做一些小的改动, 使得能从Base Pass中得到角色的Stencil值, 从而避免无关的pixel绘制消耗.
$\\$ 3. 半透明光照
$\\$ 1) 当场景中存在大量能够投射半透明阴影的光源时, 对性能的压力是非常大的.
$\\$ 2) 当美术同学对这方面的光照效果没有需求时, 应尽可能地关掉投射半透明阴影的功能.
$\\$ 4. 粒子光照贴图
$\\$ 1) 将粒子的光照结果集中到一张Atlas上进行采样, 且美术同学可以控制粒子用于光照计算的LOD.
$\\$ 5. Mesh光照
$\\$ 1) 这一小节的标题虽然看起来与Mesh相关, 实则还是在介绍粒子相关的优化. 此处是把粒子相关的材质的Lighting Mode改为PerVertex NonDirectional ForwardShading, 降低粒子的PS的性能压力.
$\\$ 6. Distance Field
$\\$ 1) 目前我们也碰到了Distance Field相关的性能瓶颈, 不过主要是发生在Buffer Pool的分配上, 此处是优化了Distance Field对应的Tree Node的搜索逻辑, 将原本的时间复杂度O(N)降至O(log N), 值得一试的一个优化.
$\\$ 7. 过多的面数
$\\$ 1) 类似地, 目前我们也碰到了面数相关的性能瓶颈, 当场景面数太多时, 会直接影响到剔除的效率与GPU的性能.
$\\$ 2) 此处大篇幅介绍了利用ISM合并小物件的流程, 这也是我们后面需要推的一个流程, 但如何自动化地且在不增加美术同学负担的前提下构建ISM, 主讲人并没有介绍得特别清楚, 需要进一步摸索.
$\\$ 8. 贴花
$\\$ 1) 由于贴花使用的Texture总是以最精细的Mip进行流送, 故当场景内存在大量贴花时, 会极大地占用纹理的流送池, 导致不断地发生纹理流送.
$\\$ 2) 需要根据贴花与相机的距离, 计算贴花的Texture使用的Mip.
$\\$ 3) 对贴花并行执行视锥体剔除.
$\\$ 4) 上述方法都是值得尝试的优化方法.
讨论记录:
$\\$ Q: Rumbleverse团队是否使用了GPU Driven的管线?
$\\$ A: 应该是没有. UE4的GPU Driven的管线还不够成熟, 要想真正使用起来, 还需要魔改不少引擎的源码, Rumbleverse团队优化的初衷便是能够在少改引擎的情况下得到性能上的优化.
$\\$ Q: 在有了Mesh Batch的机制下, 为什么还要使用ISM?
$\\$ A: 两者分工不同, ISM是静态合批, 且能合批的Mesh范围更大, 限制更小, 同时能够有效地降低发起遮挡剔除的Draw Call.