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 與 LCC2 數據格式兼容開發指南

LCC2 數據格式提供了更好的數據壓縮及 LOD 機制,原 LCC 格式後續會逐步被 LCC2 取代,原 LCC SDK(v1.x)也會逐步停止維護。由於新舊數據格式差異巨大,新版 LCC SDK(v2.x)不會向下兼容 LCC 格式。後續可通過以下兩種方式實現數據兼容:

  1. 使用官方提供的轉換器(LccConverter)exe/dll,將 LCC 數據格式轉換為 LCC2,再進入 SDK 使用;
  2. 在應用層進行 LCC 和 LCC2 數據格式的兼容。

本文主要說明在應用層進行數據格式兼容的流程及步驟,即在同一 Unity 工程中同時導入兩個版本的 SDK,根據數據格式自動選擇對應版本進行渲染和相應的處理。

步驟 1:Unity 版本與工程設置

Unity 版本與工程設置與獨立使用 SDK 時一致,無需額外配置。具體可參考 PC 快速開發入門指南 和 工程設置優化指南

步驟 2:導入兩個版本的 SDK

通過 Unity UPM 分別導入 SDK v1.4.8 及以上版本 ( 建議使用 v1.4.32 )和 SDK v2.0.1 及以上版本。導入後,v1.x 版本會顯示為 Legacy。兩個版本的 SDK 可以共存,互不影響。

說明:

  • SDK v1.4.32 可從 GitHub 下載:https://github.com/xgrids/LCC-Unity-SDK/releases
  • SDK v1.4.32 的命名空間為 LCCCore_Legacy,管理器組件為 LCCManager_Legacy;v2.x 的命名空間為 LCCCore,管理器組件為 LCCManager。

步驟 3:配置場景

在場景中新建一個空對象,命名為 LCCController,將 LCCManager_Legacy 和 LCCManager 兩個組件都掛載到該對象上。

在 LCCController 對象上掛載 LCCManager_Legacy 和 LCCManager 組件

在 LCCController 對象上同時掛載 LCCManager_Legacy 和 LCCManager 組件

注意:

LCCController 遊戲對象的 Transform 設置(Rotation.x = -90、Scale.x = -1)是與 LCC 數據座標系的對齊。關於座標系對齊的詳細說明,參見 Unity SDK 簡介 中的「LCC 數據座標系」。

步驟 4:編寫 MultiSDKController 腳本

新建一個 C# 腳本,命名為 MultiSDKController.cs,代碼如下:

using LCCCore;
using LCCCore_Legacy;
using System.IO;
using UnityEngine;

public class MultiSDKController : MonoBehaviour
{
    public LCCManager_Legacy m_managerLegacy;          // 用於 LCC SDK v1.4.8 及以下版本
    public LCCManager m_manager;                       // 用於 LCC SDK v2.0.0 及以上版本
    public string m_FilePath;                          // LCC 文件路徑
    private LCCCore_Legacy.Renderer m_rendererLegacy;  // 用於 LCC SDK v1.4.8 及以下版本
    private LCCCore.Renderer m_renderer;               // 用於 LCC SDK v2.0.0 及以上版本
    private DataType m_dataType;                       // 數據類型,用於判斷使用哪個 SDK

    void Start()
    {
        string extension = Path.GetExtension(m_FilePath);
        if (extension == ".lcc")
        {
            m_manager.Enable = false; // 禁用 v2.0.0 及以上版本的管理器
            m_dataType = DataType.LCC;
            m_rendererLegacy = m_managerLegacy.GetRender(this.transform);
            m_rendererLegacy.Load(m_FilePath, LCCCore_Legacy.PlatformType.PC, onLoadCallback);
        }
        else if (extension == ".lcc2")
        {
            m_managerLegacy.Enable = false; // 禁用 v1.4.8 及以下版本的管理器
            m_dataType = DataType.LCC2;
            m_renderer = m_manager.GetRender(this.transform);
            m_renderer.Load(m_FilePath, LCCCore.PlatformType.PC, onLoadCallback);
        }
    }

    private void onLoadCallback()
    {
        Debug.Log("data loaded !!!");
    }

    // 方法調用示例:通過數據類型判斷使用哪個 SDK 的渲染器進行操作
    public void onRenderPointClick()
    {
        if (m_dataType == DataType.LCC)
            m_rendererLegacy.SwitchRenderMode(LCCCore_Legacy.RenderMode.PointCloud);
        else if (m_dataType == DataType.LCC2)
            m_renderer.SwitchRenderMode(LCCCore.RenderMode.PointCloud);
    }

    void OnDestroy()
    {
        if (m_dataType == DataType.LCC)
            m_rendererLegacy?.Dispose();
        else if (m_dataType == DataType.LCC2)
            m_renderer?.Dispose();
    }

    public enum DataType { LCC, LCC2 }
}

注意:

  • 腳本文件名必須與類名一致(MultiSDKController.cs 對應 class MultiSDKController),否則無法掛載到遊戲對象上。
  • 兩個版本的命名空間不同(LCCCore 與 LCCCore_Legacy),使用 Renderer、PlatformType、RenderMode 等同名類型時需帶上命名空間前綴以區分。
  • 示例通過文件後綴(.lcc / .lcc2)判斷數據格式並選擇對應 SDK 版本。

步驟 5:掛載腳本並設置屬性

  1. 將 MultiSDKController.cs 腳本也掛載到場景中的 LCCController 對象上。
  2. 在 Inspector 窗口中,將 LCCManager 和 LCCManager_Legacy 組件分別拖動到腳本對應的屬性上。
  3. 在腳本的 File Path 屬性中填寫 LCC / LCC2 文件的路徑地址。
掛載 MultiSDKController 腳本並設置屬性

掛載 MultiSDKController 腳本並在 Inspector 中設置屬性

此時運行代碼,即可根據 LCC 數據格式自動使用對應的 SDK 版本進行渲染,實現數據格式兼容。

關鍵步驟

在應用層實現 LCC 與 LCC2 數據格式兼容的關鍵步驟:

  1. 通過 UPM 同時導入 v1.x(Legacy)與 v2.x 兩個版本的 SDK,二者可共存。
  2. 在同一對象上掛載 LCCManager_Legacy 與 LCCManager 兩個管理器組件。
  3. 根據數據格式(文件後綴 .lcc / .lcc2)選擇對應版本的管理器創建渲染器並加載數據。
  4. 確定使用某一版本後,禁用另一版本的管理器(Manager.Enable = false)。
  5. 切換數據或銷毀時,通過 Renderer.Dispose() 卸載當前渲染的數據。

數據格式兼容注意事項

  • 不支持同時渲染 LCC 和 LCC2。 因此切換所用數據時,需要先將當前正在渲染的數據卸載(調用 Renderer.Dispose()),否則可能導致內存和顯存泄露。

  • 禁用未使用的 Manager。 在確定使用某一個 SDK 版本後,最好將另一個 SDK 版本的 Manager 對象取消使能(Manager.Enable = false),否則可能導致一些無效的性能損耗。

  • API 接口一致,但需調用正確的 Render。 兩個 SDK 版本的 API 接口完全一致(v2.x 版本很多API已遷移到Manager類,請參閱API手冊),但使用時需確保調用正確版本的 Renderer(m_rendererLegacy 或 m_renderer)。另外,v2.0.0 及以上版本不再支持調色和裁剪數據保存功能,其他部分 API 也已失效,請查閱對應版本的開發者文檔。

相關 API

本方案主要涉及兩個版本 SDK 的管理器與渲染器 API。以下以 v2.x(LCCCore)為例說明,v1.x(LCCCore_Legacy)接口一致,僅命名空間不同。

LCCManager.Enable

// 屬性
public bool Enable { get; set; }

管理器的使能開關。設為 false 可禁用該版本 SDK 的管理器,避免與另一版本同時工作產生無效性能損耗。

調用示例:

// 使用 LCC2 數據時,禁用 Legacy 管理器
m_managerLegacy.Enable = false;

說明:

  • 在確定使用某一版本後,建議禁用另一版本的管理器。

GetRender

// 返回值:Renderer → 渲染實例,失敗返回 null
public Renderer GetRender(Transform _transform)

創建一個渲染實例並綁定到指定的 Transform。

參數類型說明
_transformTransform渲染實例掛載的 Transform

調用示例:

m_renderer = m_manager.GetRender(this.transform);

說明:

  • 需通過對應版本的管理器創建,確保渲染器與數據格式匹配。

Renderer.Dispose

// 返回值:void
public void Dispose()

銷毀渲染實例,釋放所有 GPU 資源和內存。銷毀後實例不可再使用。

調用示例:

m_renderer?.Dispose();

說明:

  • 切換數據前必須先卸載當前數據,否則可能導致內存和顯存泄露。
  • 調用後自動通知 Manager 移除引用。
  • 建議在對象銷毀(OnDestroy)時調用。