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

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

      • 产品概述
      • 硬件接口
      • 快速开始
      • 核心概念
      • 集成指南
      • API 参考
      • 数据类型
      • ROS2 桥接
      • 示例程序
      • 部署与网络
      • 排障与 FAQ
      • 版本与发布
    • 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
    • Lixel OpenAPI

      • 概述
      • 连接与鉴权
      • 消息模型与编解码
      • 接口清单
      • 实时数据
      • 项目文件访问
      • 错误码
      • Python

        • 快速开始
        • 客户端封装与工具
        • 常见问题
      • C++

        • 快速开始
        • 客户端与示例
        • 常见问题

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)时调用。