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.5.0
        • 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

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

        • 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::setClipPrism
        • LCCObject::setEndLod
        • LCCObject::setLodAutoLevelUp
        • LCCObject::setMaxDistance
        • LCCObject::setMaxNodeSplats
        • LCCObject::setMaxSplats
        • LCCObject::setMipFilter
        • 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
        • LCCRender::clearIndexDB
        • LCCRender::dispose
        • LCCRender::load
        • LCCRender::setCamera
        • LCCRender::unload
        • LCCRender::update
      • 更新日誌

        • v0.6.4
        • 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
  • API

    • 空間結構化建模

      • 接入指南
      • 建模流程
      • 接口說明
      • 臨時上傳憑證
      • 錯誤碼

碰撞系統開發指南

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;請按實際字段名訪問。