如何使用UE5新功能“打包型关卡蓝图”实现场景性能优化
文章目录
内容分为:
- 简介
- 实操
- 优化结果展示
看不懂原理看看实操就大概就能明白
什么是“打包型关卡蓝图”
“打包型关卡蓝图”是UE5新功能 世界分区(World Partition) 的一部分
但 不依赖于项目是否启用了世界分区
优化的原理
官方文档:
这个功能的原理是将场景中的 静态网格体 资产合并以创建 进行了渲染优化的单一 蓝图Actor 。
将静态网格体替换为链接到打包型关卡Actor(Packed Level Actor) 的 打包型关卡蓝图(Packed Level Blueprint) 实例。
人话:
将 “模型” 放入 “关卡资产” ;
“关卡资产” 放入 “Actor”-;
“Actor” 则直接放在 “真正的关卡” 中;
优化的核心:
“Actor” 自动将关卡内部模型收集,全部优化为 实例化静态网格体 InstancedStaticMesh
演示如何使用
我准备了这个场景作为演示
- TestMap为主关卡(蓝色标识)
- 关卡中摆放有很多的Mesh(红色标识)
1.创建打包关卡Actor
1. 选中要打包的全部模型(上图1)
注意,包括场景中的 模型 ,Actor 内部的模型 ,甚至 构建函数中生成的模型
都可以参与优化,都可以选上
2. 右键模型创建打包关卡Actor(上图2)
3. 打包设置(下图)
枢纽点类型,字面意思,就是指合并以后得Actor轴应该在哪
这里因为Mesh是场景模型,所以使用世界原点。例如你打包的是一辆车,你可以选择actor原点等,方便复制
4. 保存Map和Actor
确认后会分别创建一个 Map 和 Actor( BBP_ )
2. 到这一步,整个优化流程就已经结束了!
创建完成就会是这样的状态,
- Mesh在关卡MapA里
- MapA在BPP_MapA里(蓝色标识)
- Actor在主关卡TestMap里(红色标识)
结束后会是这样的状态,箭头是他们的关系
可以看到此时全部模型已被优化合并为4个实例网格体
要注意的是,只有 同模型+同材质+同属性(例如可移动属性) 才被引擎认为可以做为一个实例网格体
如何继续编辑
是不是看到这里,害怕自己辛苦摆的模型,到这一步是不是被合并就不可逆了?
( 合并模型优化法 给人留下了心理阴影)
不要怕,我们继续讲解如何编辑
1.进入编辑
选择MapA,并点击编辑
BBP_的actor将会在主关卡中展开!
可以看到红框处,所有信息都回来了!
你可以继续在这里尽情编辑场景,且由于此外的场景环境均为灰色,更加直观了
修改完成后就可以点击提交
提交后将会对模型重新优化
2.编辑完成后提交
提交时需要注意(写文时为UE5.1),你可能在编辑完成后找不到提交按钮
按如图步骤,双击1回到主关卡,这样2的Actor才会是外部显示,此时点击2,就可以在细节中看到3提交按钮
附一个DrawCall前后对比,不损失任何细节的情况下优化出200倍而已
什么情况用这个最爽:
你有3个超级无敌好看的砖头,你使用这个砖头拼了一个长城!
你现在有几千万个Draw Call!
使用这个优化后,你仅有3个Draw Call*,整个长城仅仅是3个实例网格体
一些提示
- 可逆可编辑可还原,因为优化过程中所有信息会被保存。例如按照往常合并的方式,模型坐标会因为不可逆的合并而消失。
- 如果你想还原,只需进入编辑,把里面的东西再复制出来就可以了。
- Datasmith插件导入场景可以智能的把建模软件的同模型导入为一个资产,结合这种优化很强[ 官方Datasmith文档(查看实例化章节)]
- 此功能对多人协同项目十分友好,可以按个人负责区域划分多个关卡Actor,只需迁出自己场景的Actor,而不用迁出整个关卡
- 关卡Actor是可以移动和复制的。例如你拼好一栋楼并打包,你可以复制为多栋楼。
- 编辑关卡Actor,也理所当然的会同步到所有复制的关卡Actor
- 如果使用流关卡或世界分区等,应按照流送区域合并Actor
- 求求你们看官方文档吧
- 当前版本(UE5.1)样条网格在合并后只会是默认样条线形态(一小节)
后续版本新加入功能
这里更新一些后续版本新加入的功能或调整
5.3
关卡实例Actor过滤器
Actor筛选器在世界分区关卡内允许每个关卡实例采用变体。
它们包含数据层实例和/或本地数据层,设置为支持通过纳入用户定义的默认筛选器来筛选Actor。
根据每个关卡实例中设置的筛选器默认值、覆盖和激活状态,将在流送生成时纳入或排除与这些预配置的筛选器关联的所有Actor。
筛选掉的数据将完全从游戏中删除。