XGRIDS文档
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • 灵视 P1

    • 产品概述
    • 设备基本操作
    • 使用 LCC Scan App
    • 维护及保养
    • 常见问题
  • 灵光 K 系列

    • 灵光 K1

      • 产品概述
      • 设备基本操作
      • 设备激活与连接
      • 设备采集
      • 获取绝对坐标点云数据
      • 地图融合
      • 典型场景路线规划建议
      • 注意事项
      • 常见问题
    • 灵光 K2

      • 产品概述
      • 设备基本操作
      • 设备激活与连接
      • 设备采集
      • 获取绝对坐标点云数据
      • 地图融合
      • 典型场景路线规划建议
      • 注意事项
      • 常见问题
  • 灵光 L 系列

    • 灵光 L2 Pro

      • 产品概述
      • 设备基本操作
      • 设备激活与连接
      • 设备采集
      • 获取绝对坐标点云数据
      • 实时测量功能
      • 附录
      • 常见问题
  • Lixel Studio

    • 版权
    • 安装与激活
    • 界面说明
    • 文件
    • 工程处理
    • 工具
    • 平面绘制
    • 行业应用
    • 设置
    • 设备感知
  • Lixel CyberColor

    • LCC Studio

      • 入门
      • 版本与更新
      • 下载与安装
      • 界面概览与导航
      • 重建前工作
      • 模型重建
      • 单模型重建
      • 地图融合
      • 空地融合
      • 航拍重建
      • 我的模型
      • 其他功能
      • 设置与账号
      • 转换工具
      • 视频重建
      • 常见问题 / FAQ
    • LCC Scene Editor

      • 版本与更新
      • 账号与登录
      • 产品概览与主页
      • 编辑器界面介绍
      • 三种场景漫游快捷操作
      • 文件
      • 设置
      • 编辑操作
      • 窗口
      • 视图工具栏
      • 资产与属性
      • 左侧工具栏
      • 视点
      • 跳转点
      • 天空盒
      • 标注
      • 测量
      • 场景漫游
      • 场景报告
      • 智能户型图(3D Layout)
      • 小地图
      • 预览模式(Viewer)
      • 帮助
      • 常见问题 / FAQ
      • 出生点
    • LCC Model Editor

      • 版本与更新
      • 新手指引
      • 概览与界面
      • 文件操作
      • 选择器
      • 编辑操作
      • 测量
      • 调色
      • 资产管理
      • 设置与帮助
      • 常见问题 / FAQ
    • 采集指南

      • 概述
      • 采集设备总览
      • 通用采集原则
      • 室内场景采集
      • 室外场景采集
      • 大场景采集(地图融合)
      • 空地融合采集
      • 物体采集
      • 人物采集
      • 视频重建采集
      • 高清补拍
      • 控制点(灵视 P1)
      • 常见问题与排查
    • 历史版本
  • Plugin & SDK

    • Unreal

      • 介绍
      • 快速入门 - Windows
      • 快速入门 - Linux
      • 快速入门 - Quest3
      • 版本与授权
      • 渲染
      • 画面调节
      • 法线与光照
      • 场景编辑
      • 性能参数说明
      • 性能优化指南
      • 第三方与引擎插件集成
      • 代理网格
      • 加载动画
      • 碰撞
      • 寻路系统支持
      • 单层水支持
      • 本地化
      • 常见问题
      • 故障排查
      • 日志与诊断
      • 联系我们
      • API 参考

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • SOG / SPZ / PLY Actors
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ULCCUtilLibrary
        • Enums
        • Structs
      • 更新日志

        • v3.3.1
        • v3.0.0
        • v2.2.1
        • v1.0.0
        • v0.9.0
        • v0.8.0
        • v0.7.1
        • v0.6.1
        • v0.5.2
        • v0.4.1
        • v0.4.0
        • v0.3.0
        • v0.0.5
        • v0.0.4
        • v0.0.3
        • v0.0.2
        • v0.0.1
    • X-Brain 系列

      • 产品概述
      • 快速开始
      • 核心概念
      • 集成指南
      • API 参考
      • 数据类型
      • ROS2 桥接
      • 示例程序
      • 部署与网络
      • 排障与 FAQ
      • 版本与发布

在 3DGS 场景中生成导航网格

Navigation System Support

适用范围

本篇针对使用 LCC 碰撞数据构建导航的场景,因此只适用于 ALCCActor 与 ALCC2Actor——只有 .lcc 与 .lcc2 格式自带碰撞数据,详见碰撞。

.sog、.spz、.ply 不含碰撞数据,需要自行用 Blocking Volume 或近似网格搭建可行走区域。这类几何体是标准的 UE 对象,导航配置按 Unreal Engine 官方流程处理即可,不涉及本篇的特殊事项。

概述

Unreal Engine 的 Navigation System 通过 NavMesh 为 AI 角色提供可行走区域。NavMesh 的生成依赖场景中可影响导航且具有有效碰撞的几何体。

LCC 碰撞是分块动态加载的:只加载相机周围一定范围内的碰撞块,并随相机移动换入换出(机制详见碰撞:加载机制)。这一点直接决定了导航的配置策略:

  • 碰撞块在运行期换入换出会触发 NavMesh 重建,造成卡顿
  • 因此应让目标区域的碰撞一次性全部加载完成,再用 Static 模式构建导航

对于 LCC 场景,Runtime Generation 推荐使用 Static。Dynamic 会持续响应碰撞变化并重建 NavMesh,配合分块加载的碰撞会频繁触发重建,在大场景中造成明显的 CPU 开销与卡顿。

前提条件

条件说明
数据包含碰撞文件.lcc 需要 collision.lci(旧版本为 collision.bin);.lcc2 需要 data/mesh/ 下的 .ply 文件。详见碰撞:前置条件
碰撞已启用Actor 的 bEnableCollision = true
碰撞数据已加载在视图模式中选择玩家碰撞或可视性碰撞,可以看到已加载的碰撞体
Actor 可影响导航Actor 的 CanEverAffectNavigation = true
碰撞加载范围足够Max Load Collision Distance(m) 覆盖需要构建导航的目标区域,默认 300 米
NavMesh 构建边界足够场景中已放置 NavMeshBoundsVolume,并覆盖需要 AI 活动的目标区域

碰撞加载距离和 NavMeshBoundsVolume 控制不同范围:前者决定哪些区域有碰撞数据,后者决定引擎在哪些边界内构建 NavMesh。要让目标区域生成可用 NavMesh,二者都必须覆盖该区域。

使用步骤

1. 启用并检查 LCC 碰撞

选中 ALCCActor 或 ALCC2Actor,在 Details 面板中启用 Enable Collision(bEnableCollision),或通过代码启用:

LCCComponent->SetLCCCollisionEnable(true);

同时确认 Actor 的 CanEverAffectNavigation = true,使其碰撞能够参与导航构建。

加载 LCC 数据后,在视图模式中选择玩家碰撞或可视性碰撞,检查目标区域内是否已经出现碰撞体。碰撞使用异步物理烘焙,3DGS 画面开始渲染后仍可能需要等待几秒才能就绪。

在 Unreal Engine 视图模式中检查 LCC 碰撞体是否已加载

使用玩家碰撞或可视性碰撞模式,确认目标导航区域内的 LCC 碰撞体已加载

2. 配置碰撞加载范围

LCC 碰撞仅在 Max Load Collision Distance(m) 指定的范围内加载,默认 300 米。

配合导航时应把这个值调大到覆盖整个 AI 活动区域,让碰撞一次性全部加载完成。否则运行期碰撞块随相机移动不断换入换出,会持续触发 NavMesh 重建,造成明显卡顿。范围足够大时,运行期不再有碰撞变化,导航也就不会重建。

代价是启动时加载时间变长、内存占用增加。可通过 stat xgrids 的 Collision Data Usage 确认全量加载后的内存是否可接受,详见碰撞:一次性加载全部碰撞。

不要把 Runtime Generation 改为 Dynamic 来解决碰撞距离不足。 Dynamic 不会扩大碰撞加载范围,超出该距离的区域仍然没有碰撞可用于导航构建。

3. 放置并调整 NavMeshBoundsVolume

在场景中放置 NavMeshBoundsVolume,移动并缩放它,使其覆盖希望 AI 活动的完整区域。

在 LCC 场景中放置并缩放 NavMeshBoundsVolume

放置并缩放 NavMeshBoundsVolume,使导航构建边界覆盖完整的 AI 活动区域

再次确认两个范围同时满足要求:

  • Max Load Collision Distance(m):决定目标区域内是否存在已加载的 LCC 碰撞;
  • NavMeshBoundsVolume:决定 Unreal Engine 在哪些边界内构建 NavMesh。

仅增大其中一个范围不足以解决另一个范围未覆盖的问题。

4. 配置 Navigation System

设置推荐值说明
Runtime GenerationStatic首选设置。导航只在编辑器构建时生成,避免运行时持续重建造成性能开销
Cell Size默认值值越小,NavMesh 越精确,但构建时间、内存和运行开销越大

何时才使用 Dynamic

只有确实需要 NavMesh 在运行期随几何体变化自动重建时才考虑 Dynamic,例如运行时会改变可行走区域的交互场景。

配合 LCC 碰撞使用 Dynamic 尤其要谨慎:碰撞本身就是分块动态加载的,每次碰撞块换入换出都会被判定为几何体变化并触发导航重建,在大场景中可能持续产生 CPU 开销与卡顿。确实需要 Dynamic 时,应同时把碰撞加载范围调大到覆盖整个活动区域,避免运行期出现碰撞变化。

不要仅为了增加碰撞距离或导航覆盖范围而启用 Dynamic。

5. 等待碰撞就绪并构建 Static NavMesh

使用推荐的 Static 模式时,按以下顺序操作:

  1. 加载 LCC 数据,确认 3DGS 画面已经显示;
  2. 等待异步碰撞烘焙完成;
  3. 使用玩家碰撞或可视性碰撞模式,确认目标区域内的碰撞已经加载;
  4. 确认 Collision Load Max Distance 和 NavMeshBoundsVolume 都覆盖目标区域;
  5. 在 Unreal Engine 主菜单中执行 Build → Build Paths;
  6. 等待导航构建完成;
  7. 保存关卡和导航数据。

验证与排查

按 P 键在视口中显示 NavMesh:

  • 绿色区域:已生成可行走 NavMesh;
  • 无绿色区域:该位置未生成 NavMesh,需要按下方顺序排查。
按 P 键显示 LCC 场景中的绿色 NavMesh 可行走区域

按 P 键验证 NavMesh;绿色覆盖表示对应区域已经生成可行走导航数据

如果目标位置没有绿色 NavMesh,请依次检查:

  1. 数据是否包含碰撞:确认使用的是 .lcc 或 .lcc2,且数据目录下有对应的碰撞文件;单文件格式不含碰撞,无法用本篇流程;
  2. 碰撞是否启用并已加载:确认 bEnableCollision = true、CanEverAffectNavigation = true,并在玩家碰撞或可视性碰撞模式下看到目标位置的碰撞体;
  3. 碰撞加载范围是否足够:如果目标位置超出加载范围,增大 Max Load Collision Distance(m) 并等待碰撞重新就绪;
  4. NavMeshBoundsVolume 是否覆盖目标位置:移动或缩放 Volume,使导航构建边界完整覆盖目标区域;
  5. Static NavMesh 是否重新构建:碰撞和范围确认无误后,执行 Build → Build Paths,等待完成并保存关卡和导航数据;
  6. 再次按 P 检查绿色覆盖。

以上均正确但仍无法生成时,可进一步检查 Output Log 中的 Navigation、Recast 和碰撞相关错误,并确认当前关卡已经保存。

上一页
碰撞
下一页
单层水支持