总览
Mass 的表现层解决的是一个现实问题:你希望世界里有很多实体,但不希望每个实体都常驻 Actor、SkeletalMeshComponent、AnimInstance、Collision 和 Tick。MassLOD 和 MassRepresentation 把“实体数据”和“画面表现”分离,近处实体可以是高精度 Actor,远处可以是低精度 Actor、SkinnedMeshInstance、StaticMeshInstance,甚至 None。
EMassRepresentationType 在 UE5.8 中包含 HighResSpawnedActor、LowResSpawnedActor、SkinnedMeshInstance、StaticMeshInstance 和 None。这不是单纯渲染枚举,而是预算策略:每种表现类型意味着不同的 CPU、内存、动画、网络和交互成本。
源码依据
MassLODFragments.h 定义 FMassHighLODTag、FMassMediumLODTag、FMassLowLODTag、FMassOffLODTag、FMassViewerInfoFragment、FMassVariableTickChunkFragment、FMassVisualizationChunkFragment 等。MassRepresentationFragments.h 定义 FMassRepresentationLODFragment、FMassRepresentationFragment、FMassRepresentationParameters、FMassVisualizationLODParameters。MassRepresentationTypes.h 定义 Representation 枚举、ISM 描述、StaticMesh/SkinnedMesh 描述句柄和 Processor Group Names。
架构分析
LOD 至少影响三件事:可见表现、模拟频率、同步频率。远处实体可以继续存在于 Mass 数据里,但表现切成 ISM 或 None;不可见 Chunk 可以降低 Visualization 更新频率;联网时低 LOD 实体可以更少同步或更低频同步。把 LOD 只看作“网格精度”会浪费 Mass 的最大收益。
Representation 的常见链路是:LOD Processor 计算实体相对 Viewer 的重要性;Representation Processor 根据 FMassRepresentationParameters::LODRepresentation 选择当前表示;Actor Management 负责请求、启用、禁用、回收 Actor;ISM/SkinnedMesh Processor 更新实例 Transform 和动画数据。
使用案例
一个城市路人推荐配置:
| LOD | 表现 | 行为频率 | 说明 |
|---|---|---|---|
| High | HighResSpawnedActor | 每帧 | 近处可交互、完整动画和碰撞 |
| Medium | LowResSpawnedActor 或 SkinnedMeshInstance | 10-20Hz | 保持较好动画,但减少逻辑 |
| Low | StaticMeshInstance 或 SkinnedMeshInstance | 2-5Hz | 远处只维持位置和基础动画 |
| Off | None | 低频或暂停 | 不可见、远距离,只保留必要状态 |
FMassRepresentationParameters 默认 LOD 表示类似“High 用高精 Actor,Medium 用低精 Actor,Low 用 StaticMeshInstance,Off 用 None”。项目可以按设备档位调整距离和最大数量。
项目落地
先确定“玩家能察觉什么”。如果远处路人只需要轮廓移动,用 ISM 就够;如果需要看到步态,考虑 SkinnedMeshInstance;如果要互动、碰撞、语音、精确动画,才切 Actor。再确定切换边界:距离阈值、数量上限、滞回比例、不可见更新间隔。最后做切换测试:快速转身、从远处冲到近处、网络延迟下出现/消失,都是最容易露馅的场景。
常见坑
不要让 Actor 表现和 Mass 数据互相抢权威。近处 Actor 移动时,要约定是 Actor 回写 Mass,还是 Mass 驱动 Actor。不要给所有 LOD 都开阴影和复杂材质。不要忽略 bKeepLowResActors、bKeepActorExtraFrame 这类切换参数,它们能减少闪烁,但也会增加短期预算。不要把 LODMaxCount 设太高,数量上限是防止镜头对准人群时爆预算的保险。
源码路径索引
MassLOD/Public/MassLODFragments.hMassRepresentation/Public/MassRepresentationFragments.hMassRepresentation/Public/MassRepresentationTypes.hMassRepresentation/Public/MassVisualizationTrait.h