XGRIDS文檔
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • 靈視 P 系列

    • 靈視 P1

      • 產品概述
      • 設備基本操作
      • 使用 LCC Scan App
      • 維護及保養
      • 常見問題
  • 靈光 K 系列

    • 靈光 K1

      • 產品概述
      • 設備基本操作
      • 設備激活與連接
      • 設備採集
      • 獲取絕對座標點雲數據
      • 地圖融合
      • 典型場景路線規劃建議
      • 注意事項
      • 常見問題
    • 靈光 K2

      • 產品概述
      • 設備基本操作
      • 設備激活與連接
      • 設備採集
      • 獲取絕對座標點雲數據
      • 地圖融合
      • 典型場景路線規劃建議
      • 注意事項
      • 常見問題
  • 靈光 L 系列

    • 靈光 L2 Pro

      • 產品概述
      • 設備基本操作
      • 設備激活與連接
      • 設備採集
      • 獲取絕對座標點雲數據
      • 實時測量功能
      • 附錄
      • 常見問題
    • 靈光 L3

      • 產品概述
      • 設備基本功能
      • 設備激活與連接
      • 設備採集
      • 獲取絕對座標點雲數據操作流程
      • 附錄
  • Lixel Studio

    • 版權
    • 安裝與激活
    • 界面說明
    • 文件
    • 工程處理
    • 工具
    • 平面繪製
    • 行業應用
    • 設置
    • 設備感知
    • 常見問題 / FAQ
  • Lixel CyberColor

    • LCC Studio

      • 入門
      • 版本與更新
      • 下載及安裝
      • 介面概覽及導覽
      • 重建前準備
      • 模型重建
      • 單模型重建
      • 地圖融合
      • 空地融合
      • 航拍重建
      • 我的模型
      • 其他功能
      • 設定與帳戶
      • 設置與賬號
      • Converter
      • 影片重建
      • 視頻重建
      • 常見問題
    • LCC Scene Editor

      • 版本與更新
      • 賬號與登錄
      • 產品概覽與主頁
      • 編輯器界面介紹
      • 三種場景漫游快捷操作
      • 文件
      • 設置
      • 編輯操作
      • 窗口
      • 全局工具欄
      • 資產與屬性
      • 左側工具欄
      • 視點
      • 跳轉點
      • 天空盒
      • 標注
      • 測量
      • 場景漫游
      • 場景報告
      • 智能戶型圖(3D Layout)
      • 小地圖
      • 預覽模式(Viewer)
      • 幫助
      • 常見問題 / FAQ
      • 出生點
    • LCC Model Editor

      • 版本與更新
      • 新手指引
      • 概覽與界面
      • 文件操作
      • 選擇器
      • 編輯操作
      • 測量
      • 調色
      • 資產管理
      • 設置與幫助
      • 常見問題 / FAQ
    • 採集指南

      • 概述
      • 採集設備總覽
      • 通用採集原則
      • 室內場景採集
      • 室外場景採集
      • 大場景採集(地圖融合)
      • 空地融合採集
      • 物體採集
      • 人物採集
      • 影片重建採集
      • 高清補拍
      • 控制點(靈視 P1)
      • 常見問題與排查
    • LCC Studio Linux

      • 產品概要說明
      • 基本架構說明書
      • 安裝部署說明書
      • 容器啟動參數說明書
      • CodeMeter離線授權部署說明書
      • API指令集說明書
      • 附錄-開發者數據說明書
      • 附錄-錯誤碼列表
      • 單機多卡集群部署QuickStart
    • 使用技巧

      • 多個大型 3DGS 模型融合工作流
    • 歷史版本
  • Plugin & SDK

    • Unreal

      • 介紹
      • 快速入門 - Windows
      • 快速入門 - Linux
      • 快速入門 - Quest3
      • 版本與授權
      • 渲染
      • Tiled 光柵化(實驗性)
      • 畫面調節
      • 法線與光照
      • 場景編輯
      • 性能參數說明
      • 性能優化指南
      • 第三方與引擎插件集成
      • 代理網格
      • 加載動畫
      • 碰撞
      • 尋路系統支持
      • 單層水支持
      • 本地化
      • 常見問題
      • 故障排查
      • 日誌與診斷
      • 聯繫我們
      • 最佳實踐

        • 用 LixelStudio 網格為 3DGS 重打光
      • API 參考

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

        • v3.4.0
        • 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
    • Unity

      • Unity SDK 簡介
      • 技術特性
      • 開發環境要求
      • PC 快速開發入門指南
      • 工程設置優化指南
      • Pico 4 Ultra 開發指南
      • Pico 4 Ultra PC 串流指南
      • Quest 3 開發指南
      • Quest 3 PC 串流指南
      • OpenXR 開發指南
      • Pico 4 Ultra 企業串流指南
      • 術語表
      • 常見問題
      • 聯絡我們
      • 功能開發指南

        • 多場景混合渲染開發指南
        • 陰影接收開發指南
        • 實時光照開發指南
        • 多相機渲染開發指南
        • 高清圖像渲染開發指南
        • LCC 與 LCC2 數據格式兼容開發指南
        • 加載特效開發指南
        • Mip 渲染模式切換開發指南
        • 邊角點吸附開發指南
        • 投影貼花開發指南
        • 視頻流投影開發指南
        • 高亮顯示開發指南
        • 實時裁剪開發指南
        • 調色開發指南
        • 獲取場景 Mesh 數據開發指南
        • 編輯器模式開發指南
        • 渲染性能參數設置指南
        • 應用與數據協同打包開發指南
        • 碰撞系統開發指南
        • macOS 開發權限問題操作指南
        • iOS 設備編譯打包開發指南
      • API 參考

        • LCCManager
        • Renderer
        • 數據類型
      • 更新日誌

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14
    • Web

      • 介紹
      • 渲染性能優化指南
      • 顯卡配置
      • 常見開發問題
      • API參考

        • LCCRender::clearIndexDB
        • LCCRender::dispose
        • LCCRender::load
        • LCCRender::setCamera
        • LCCRender::unload
        • LCCRender::update
        • LCCObject::checkRenderNextFrame
        • LCCObject::clearRenderNextFrame
        • LCCObject::ecef2Prj
        • LCCObject::getBounds
        • LCCObject::getEnvInstancedMesh
        • LCCObject::getInstancedMesh
        • LCCObject::getLodInfos
        • LCCObject::getOriginPosition
        • LCCObject::getProjectionCoordinateSystemInfos
        • LCCObject::hasCollision
        • LCCObject::hasEnvironment
        • LCCObject::hasShcoef
        • LCCObject::intersectsCapsule
        • LCCObject::intersectsRayExt
        • LCCObject::intersectsRayFromOriginExt
        • LCCObject::intersectsSphere
        • LCCObject::lowerToBottom
        • LCCObject::prj2Ecef
        • LCCObject::raiseToTop
        • LCCObject::raycast
        • LCCObject::raycastFromOrigin
        • LCCObject::setAlpha
        • LCCObject::setClipBox
        • LCCObject::setClipPlane
        • LCCObject::setEndLod
        • LCCObject::setLodAutoLevelUp
        • LCCObject::setMaxDistance
        • LCCObject::setMaxNodeSplats
        • LCCObject::setMaxSplats
        • LCCObject::setOriginPosition
        • LCCObject::setPointsColor
        • LCCObject::setRenderState
        • LCCObject::setRotation
        • LCCObject::setScale
        • LCCObject::setSemantic
        • LCCObject::setSemanticColor
        • LCCObject::setSmooth
        • LCCObject::setStartLod
        • LCCObject::setTranslation
        • LCCObject::setVisible
        • LCCObject::togglePointsDisplayMode
        • LCCObject::useEnvironment
        • LCCObject::useShcoef
      • 更新日誌

        • v0.6.3
        • v0.6.2
        • v0.6.1
        • v0.6.0
        • v0.5.5
        • v0.5.4
        • v0.5.3
        • v0.5.2
        • v0.5.1
        • v0.5.0
        • v0.4.1
        • v0.4.0
        • v0.3.1
        • v0.3.0
        • v0.2.0

碰撞系統開發指南

LCC Unity SDK 內建了一套碰撞系統,重點解決碰撞體構建與碰撞檢測的加速問題,也就是碰撞性能問題。Unity Collider 系統無法應付超大場景下的實時檢測。

LCC Unity SDK 採用自建碰撞系統,不再借助 Unity 提供的 MeshCollider 組件及相關能力,因此不能直接對 Unity 場景中的 GameObject 產生作用。其域創新(XGrids)官方生成的 LCC 數據格式( LCC Studio )在重建時會同時生成用於碰撞的 Mesh 數據,SDK 利用這份碰撞數據快速高效地構建場景碰撞。由於是自建碰撞系統,使用碰撞功能需要調用 SDK 提供的相應方法來實現。

注意:

SDK 內建碰撞系統與 Unity Collider 碰撞系統不兼容,無法直接作用於 Unity 中的 Rigidbody 對象。數字人等角色的碰撞需要通過 SDK 的檢測方法自行驅動(見下文「數字人碰撞實現方式」)。

如果是固定場景,也可以將 Mesh 數據提取出來提前烘焙成 NavMesh ,可與 Unity Collider 碰撞系統實現兼容,詳見 NavMesh 指南。

數據前置條件

碰撞檢測功能生效的前提是場景帶有對應的碰撞數據。早期版本重建的數據可能不包含碰撞數據,此時調用 SetColliderEnable(true) 會返回 false,後續所有檢測方法都不可用。

因此在開啟碰撞後,請務必檢查返回值:

bool ok = renderer.SetColliderEnable(true);
if (!ok)
{
    Debug.LogWarning("當前數據不含碰撞體,無法開啟碰撞檢測");
}

基本使用流程

碰撞功能的基本使用流程分三步:

  1. 通過 Load() 方法加載場景數據。
  2. 在加載完成回調中,通過 SetColliderEnable(true) 開啟碰撞。
  3. 通過各類檢測方法(RaycastMesh / IntersectsSphere / IntersectsCapsule)進行碰撞檢測。
// 1. 加載場景
renderer.Load(dataPath, onProgress: null, onComplete: () =>
{
    // 2. 加載完成後開啟碰撞
    if (renderer.SetColliderEnable(true))
    {
        colliderReady = true;
    }
});

void Update()
{
    if (!colliderReady) return;

    // 3. 每幀進行碰撞檢測
    var capsule = new Capsule(footPos, headPos, 0.3f);
    if (m_manager.IntersectsCapsule(capsule, out Vector3 delta))
    {
        characterController.Move(delta);
    }
}

說明:

SetColliderEnable() 是 Renderer 的方法,檢測方法(RaycastMesh / IntersectsSphere / IntersectsCapsule / Raycast)掛在 LCCManager 上。請分別在對應對象上調用。

碰撞系統基本使用流程:加載場景 → 開啟碰撞 → 碰撞檢測

碰撞系統基本使用流程

數字人碰撞實現方式

由於 SDK 碰撞系統不作用於 Unity 的 Rigidbody,數字人(角色)的碰撞需要用檢測方法自行驅動。常見做法有三種:

  • 雙射線檢測:使用 RaycastMesh() 向下、向前各發射一條射線,通過射線返回結果判斷能否行走(向下探地面、向前探障礙)。
  • 膠囊體檢測:使用 IntersectsCapsule() 檢測數字人所在的膠囊體與碰撞網格是否相交,判定能否行走。重載版本的 _delta 返回下一個可安全到達的點的偏移量。
  • 球體檢測:使用 IntersectsSphere() 檢測數字人所在的球體與碰撞網格是否相交,判定能否行走。重載版本的 _delta 同樣返回可安全到達點的偏移量。
數字人碰撞的三種實現方式:雙射線、膠囊體、球體檢測

數字人碰撞的三種實現方式

RaycastMesh 與 Raycast 的取捨

SDK 提供兩類射線檢測方法,用途不同:

方法檢測對象精度速度適用場景
RaycastMesh()碰撞網格(Collider 數據)相對較低快數字人碰撞、逐幀檢測
Raycast()高斯基元(不依賴碰撞網格)相對較高慢測量類應用

Raycast() 直接對高斯基元進行射線檢測,精度更高,但速度慢,不建議每幀調用,因此不適合做數字人碰撞,只適合做測量類使用。數字人碰撞應優先使用依賴碰撞網格的 RaycastMesh()。

相關 API

以下碰撞相關方法中,SetColliderEnable() 掛在 Renderer 上,其餘檢測方法掛在 LCCManager 上。所有檢測方法都需要在場景加載完成後、且成功調用 SetColliderEnable(true) 之後才可用。

SetColliderEnable

// 返回值:bool → true=設置成功,false=數據不含碰撞體或實例未激活
public bool SetColliderEnable(bool _enable)

開關碰撞體功能。啟用後 IntersectsSphere / IntersectsCapsule / RaycastMesh 才可用。

參數類型說明
_enablebool是否啟用碰撞體

調用示例:

bool ok = renderer.SetColliderEnable(true);
if (!ok) Debug.LogWarning("數據不含碰撞體");

說明:

  • 數據必須包含碰撞(Mesh)數據,否則返回 false。
  • 需要 Renderer 處於激活狀態。

RaycastMesh(屏幕座標)

// 返回值:bool → true=命中
public bool RaycastMesh(Vector3 mousePos, out HitResult _finalResult, float _distance= 70.0f)

從屏幕座標發射射線檢測碰撞網格。使用 Collider 數據檢測,比 Raycast 更快但精度較低。

參數類型說明
mousePosVector3屏幕座標
_finalResultout HitResult命中結果
_distancefloat最大檢測距離,默認 70.0

調用示例:

if (m_manager.RaycastMesh(Input.mousePosition, out HitResult hit))
{
    Debug.Log(hit.hitPos);
}

說明:

  • 需要先成功開啟碰撞。
  • 需先調用 SetColliderEnable(true)。

RaycastMesh(Ray + Bounds)

// 返回值:bool → true=命中
public bool RaycastMesh(Ray ray, out HitResult result, out Bounds hitBounds, float maxDist = 70.0f)

使用自定義 Ray 進行碰撞網格檢測,同時返回命中節點的包圍盒信息。

參數類型說明
rayRay射線
resultout HitResult命中結果
hitBoundsout Bounds命中節點的包圍盒(命中的 LOD 節點包圍盒)
maxDistfloat最大檢測距離,默認 70.0

調用示例:

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (m_manager.RaycastMesh(ray, out HitResult hit, out Bounds bounds))
{
    Debug.Log(bounds.center);
}

說明:

  • 需要先成功開啟碰撞。
  • 雙射線檢測(向下、向前)判斷數字人能否行走時常用此方法。

IntersectsSphere

// 返回值:bool → true=相交
public bool IntersectsSphere(Sphere sphere)

// 返回值:bool → true=相交
public bool IntersectsSphere(Sphere sphere, out Vector3 delta)

檢測球體與碰撞網格是否相交。第二個重載額外返回穿透向量 delta(推出方向與距離),可用於計算下一個可安全到達的點。

參數類型說明
sphereSphere待檢測的球體
deltaout Vector3穿透向量(推出方向和距離)

調用示例:

var sphere = new Sphere(transform.position, 0.5f);
if (m_manager.IntersectsSphere(sphere, out Vector3 delta))
{
    transform.position += delta;
}

說明:

  • 需要先成功開啟碰撞。
  • 需先調用 SetColliderEnable(true)。
  • 遍歷所有激活的 Renderer。

IntersectsCapsule

// 返回值:bool → true=相交
public bool IntersectsCapsule(Capsule capsule)

// 返回值:bool → true=相交
public bool IntersectsCapsule(Capsule capsule, out Vector3 delta)

檢測膠囊體與碰撞網格是否相交。常用於角色控制器碰撞檢測。第二個重載返回穿透向量 delta,可作為數字人下一個可安全到達的點偏移。

參數類型說明
capsuleCapsule待檢測的膠囊體
deltaout Vector3穿透向量

調用示例:

var capsule = new Capsule(footPos, headPos, 0.3f);
if (m_manager.IntersectsCapsule(capsule, out Vector3 delta))
{
    characterController.Move(delta);
}

說明:

  • 需要數據包含碰撞節點。
  • 需先調用 SetColliderEnable(true)。
  • 適合第一人稱 / 第三人稱角色碰撞。

Raycast

// 返回值:bool → true=命中
public bool Raycast(Ray _ray, out HitResult _finalResult)

使用自定義 Ray 對高斯基元進行射線檢測,遍歷所有激活的 Renderer 返回最近命中。不依賴碰撞網格,精度較高但速度慢。

參數類型說明
_rayRay射線
_finalResultout HitResult命中結果

調用示例:

Ray ray = new Ray(origin, direction);
if (m_manager.Raycast(ray, out HitResult hit))
{
    Debug.Log(hit.hitPos);
}

說明:

  • 不依賴碰撞網格,無需 SetColliderEnable。
  • 精度較高但速度慢,不建議每幀調用,適合測量類應用,不適合數字人碰撞。

HitResult

上述檢測方法的命中結果通過 HitResult 結構體返回:

public struct HitResult {
    public bool isHit;             // 是否命中
    public float distance;         // 距離
    public Vector3 hitPos;         // 命中點世界座標(字段名為 hitPos,非 position)
    public Vector3 normal;         // 命中法線
    public float hitAlpha;         // 被擊中橢球的 Alpha
    public float dist2Origin;      // 到射線源的距離
    public float scale;            // 橢球 scale
}

注意:

命中點世界座標的字段名是 hitPos,不是 position;請按實際字段名訪問。