UE5.3 Lightmass 崩溃 (GetTriangleIndices 越界) 解决笔记
UE5.3 Lightmass 崩溃 (GetTriangleIndices 越界) 解决笔记报错症状LightingResults: Error: None Lightmass crashed: Assertion failed: (Index 0) (Index ArrayNum) Array index out of bounds: XXX from an array of size YYY UnrealLightmass.exe!FStaticMeshStaticLightingMesh::GetTriangleIndices() UnrealLightmass.exe!FEmbreeGeometry::FEmbreeGeometry()烘焙静态光照时 Lightmass 进程崩溃None表示崩溃日志不直接点名元凶网格报错是确定性的每次同一个 index/size崩溃点一致根本原因某个 StaticMesh 的 RenderData 数据损坏NumTriangles 与 NumIndices 不匹配导致 Lightmass 循环处理到某处时索引数组越界。相关源码UE5.3Engine/Source/Programs/UnrealLightmass/Public/MeshExport.h数据结构FStaticMeshLODData { NumTriangles, NumIndices, NumVertices }Indices[NumIndices]就是GetTriangleIndices访问的越界数组核心解法最快、最准原理用崩溃指纹反推元凶崩溃日志里的 size NumIndices索引数组大小 NumIndices / 3 元凶网格的三角形数LOD0示例报错Array index out of bounds: 372 from an array of size 372→372 / 3 124→ 在场景里找三角形数 124的 StaticMesh操作步骤从崩溃日志读 size 值例如array of size 372计算size / 3 元凶三角形数例如124用 UE 自带的 Asset Audit 找出该三角形数的网格顶部菜单Window → Asset Audit或 Developer Tools → Asset Audit新建一个 Filter按Triangle Count三角形数筛选设置数值为size / 3例如 124得到候选网格列表找到引用该网格的 Actor在内容浏览器右键该网格 → Asset Actions → Select Actors Using This Asset大纲会选中场景里所有引用它的 Actor设置移动性为 Movable选中这些 Actor → Details 面板 →Mobility→ 改成Movable重新 Build Lighting Only验证 → 崩溃消失即解决为什么有效Movable 网格不走 Lightmass绕过了损坏的静态光照管线。在 Lumen 项目里几乎无视觉差异。注意事项⚠️ 改 Movable 的影响类型影响✅ Movable/Stationary 光源照常照亮无差异✅ Lumen GI间接光正常处理实时间接光✅ 实时阴影正常❌ Static Light纯静态光不再影响 Movable 网格Lumen 项目里这种光很少⚠️ 性能开销Movable 阴影实时计算。少量网格无所谓几十上百个要评估⚠️ 常见误区误区真相用 Outliner 眼睛图标隐藏 Actor 做二分❌ 隐藏的 Actor仍然进 LightmassHide In Game能排除 Build❌ 仍然烘焙ForceLOD0 能救崩溃❌ Lightmass 不读 ForcedLodModel编辑器显示 3 个 UV 通道 LCI2 合法⚠️ 不一定Lightmass 读的是 RenderData 层可能只有 2 个⚠️ 只有这几种能真正排除 LightmassMobility 改 Movable推荐可逆删除 ActorCtrlZ 可恢复但别中间保存移到子关卡 UnloadComponent 取消注册⚠️ Python API 局限UE5.3✅mesh.get_num_triangles(lod)可用✅mesh.get_editor_property(light_map_coordinate_index)可用❌mesh.get_num_vertices不暴露❌StaticMeshEditorSubsystem.set_lightmap_coordinate_index不暴露❌get_num_uv_channels读的是错误的层不可信→优先用 Asset Audit可视化、可靠不要依赖 Python 读底层几何数据⚠️ 治本方向如果元凶很多StaticMesh Editor 重新导入网格 / 重建 RenderData检查合并工具Merge Actors输出的网格是否系统性损坏考虑启用Force No Precomputed Lighting如果项目纯 Lumen备用方案当核心解法不适用时关卡级二分法Unload 所有子关卡 → Build → 逐个 Load 定位坏关卡Actor 级二分法Mobility 切换批量改一半 Actor 为 Movable → Build → 二分缩小手动重生 UVStaticMesh Editor → Details → Build Settings → Generate Lightmap UVs → Rebuild一句话总结崩溃日志size N→N/3 元凶三角形数 → Asset Audit 筛出该网格 → Find in Level → 改 Movable → Build 验证。