UE5.8 Mass Framework 专题系列

UE5.8 Mass 专题(八):LOD、Representation、Actor 与 ISM 表现层

深入 FMassRepresentationFragment、FMassRepresentationLODFragment、FMassVisualizationLODParameters、EMassRepresentationType、Actor 管理、StaticMeshInstance 和 SkinnedMeshInstance。

总览

Mass 的表现层解决的是一个现实问题:你希望世界里有很多实体,但不希望每个实体都常驻 Actor、SkeletalMeshComponent、AnimInstance、Collision 和 Tick。MassLODMassRepresentation 把“实体数据”和“画面表现”分离,近处实体可以是高精度 Actor,远处可以是低精度 Actor、SkinnedMeshInstance、StaticMeshInstance,甚至 None。

EMassRepresentationType 在 UE5.8 中包含 HighResSpawnedActorLowResSpawnedActorSkinnedMeshInstanceStaticMeshInstanceNone。这不是单纯渲染枚举,而是预算策略:每种表现类型意味着不同的 CPU、内存、动画、网络和交互成本。

UE5.8 Mass 专题(八):LOD、Representation、Actor 与 ISM 表现层 配图
远处用实例,近处换 Actor 或 Skeletal 表现;LOD 不只是渲染选项,也是处理频率和同步成本的预算开关。

源码依据

MassLODFragments.h 定义 FMassHighLODTagFMassMediumLODTagFMassLowLODTagFMassOffLODTagFMassViewerInfoFragmentFMassVariableTickChunkFragmentFMassVisualizationChunkFragment 等。MassRepresentationFragments.h 定义 FMassRepresentationLODFragmentFMassRepresentationFragmentFMassRepresentationParametersFMassVisualizationLODParametersMassRepresentationTypes.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 都开阴影和复杂材质。不要忽略 bKeepLowResActorsbKeepActorExtraFrame 这类切换参数,它们能减少闪烁,但也会增加短期预算。不要把 LODMaxCount 设太高,数量上限是防止镜头对准人群时爆预算的保险。

源码路径索引

  • MassLOD/Public/MassLODFragments.h
  • MassRepresentation/Public/MassRepresentationFragments.h
  • MassRepresentation/Public/MassRepresentationTypes.h
  • MassRepresentation/Public/MassVisualizationTrait.h