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
      • 版本与发布

SOG / SPZ / PLY Actors:单文件 3DGS 加载

ASogActor、ASpzActor、APlyActor 三个 Actor 分别对应 .sog、.spz、.ply 三种格式,用于加载单个 3DGS 文件,不需要 LCC 目录结构。它们都继承 ALCCActorBase。

模块LCC4UnrealRuntime
头文件SogActor.h、SpzActor.h、PlyActor.h
父类ALCCActorBase
内部 ComponentULCC2Component
#include "SogActor.h"
#include "SpzActor.h"
#include "PlyActor.h"

三者内部都通过构造虚拟的 FLCC2MetaInfo 复用完整的 LCC2 渲染管线。也就是说,LCC2 的能力对这三种格式同样可用,包括球谐阶数控制、光照法线模式、裁剪剖切、颜色调整。同理,LCC2 管线的限制也一并继承,比如多视口接口不生效。

Supported Formats

Actor扩展名适用场景
ASogActor.sog压缩格式,体积小,加载快
ASpzActor.spz压缩格式
APlyActor.ply通用点云 / 3DGS 交换格式,多数训练工具的原生输出

各格式的支持范围见介绍 - 支持格式。

Comparison with LCC Directory Formats

.sog / .spz / .plyLCC / LCC2 目录
文件组织一个文件元信息文件 + 多个数据分块
LOD 分层无有,按距离流式加载
适用规模中小场景大场景
碰撞数据无可有
分发便利性高,单个文件需要保持目录完整

选择依据:数据量不大、想快速验证效果、需要单文件分发时用这三种格式。大场景要靠 LOD 控性能,必须用 LCC / LCC2 目录格式。

Methods

三个 Actor 的公开接口全部继承自 ALCCActorBase,仅重写了下列方法。

SelectFile

// ASogActor
virtual void SelectFile() override;   // 对话框只列 .sog

// ASpzActor
virtual void SelectFile() override;   // 对话框只列 .spz

// APlyActor
virtual void SelectFile() override;   // 对话框只列 .ply

弹出文件选择对话框,各自过滤对应扩展名。细节面板上显示为 Load 按钮。

仅编辑器可用,打包后的运行时请用 Load。

Load(仅 APlyActor 重写)

// APlyActor
virtual void Load(const FString& String) const override;

加载 .ply 文件。扩展名不是 .ply 的路径会被直接拒绝,不会尝试解析。

ASogActor 与 ASpzActor 没有重写 Load,使用基类实现。

Examples

加载单个 .sog 文件

#include "SogActor.h"
#include "LCC2Component.h"

void AMyLoader::LoadSogFile()
{
    ASogActor* SogActor = GetWorld()->SpawnActor<ASogActor>(
        ASogActor::StaticClass(), FVector::ZeroVector, FRotator::ZeroRotator);
    if (!SogActor)
    {
        return;
    }

    SogActor->Load(TEXT("D:/Data/scene.sog"));

    // 内部是 ULCC2Component,LCC2 的能力都能用
    ULCC2Component* Comp = Cast<ULCC2Component>(SogActor->GetLCCComponent());
    if (Comp)
    {
        Comp->SetSHBands(2);
        Comp->SetSplatScale(0.9f);
    }
}

按扩展名自动选择 Actor

每种格式各有专用 Actor,实际项目里通常需要按扩展名分发。

注意不要依赖 DetermineFileFormat 来做这件事,它只识别 .lcc、.splats、.las、.ply,对 .lcc2、.sog、.spz 一律返回 None。直接判断扩展名更可靠:

#include "Tools/LCCUtilLibrary.h"
#include "LCCActor.h"
#include "LCC2Actor.h"
#include "SogActor.h"
#include "SpzActor.h"
#include "PlyActor.h"

ALCCActorBase* AMyLoader::LoadAnyFormat(const FString& Path)
{
    if (!ULCCUtilLibrary::CheckPathValid(Path))
    {
        UE_LOG(LogTemp, Error, TEXT("Path does not exist: %s"), *Path);
        return nullptr;
    }

    const FString Ext = FPaths::GetExtension(Path).ToLower();

    UClass* ActorClass = nullptr;
    if (Ext == TEXT("lcc"))       ActorClass = ALCCActor::StaticClass();
    else if (Ext == TEXT("lcc2")) ActorClass = ALCC2Actor::StaticClass();
    else if (Ext == TEXT("sog"))  ActorClass = ASogActor::StaticClass();
    else if (Ext == TEXT("spz"))  ActorClass = ASpzActor::StaticClass();
    else if (Ext == TEXT("ply"))  ActorClass = APlyActor::StaticClass();

    if (!ActorClass)
    {
        UE_LOG(LogTemp, Error, TEXT("Unsupported format: %s"), *Path);
        return nullptr;
    }

    ALCCActorBase* Actor = GetWorld()->SpawnActor<ALCCActorBase>(
        ActorClass, FVector::ZeroVector, FRotator::ZeroRotator);
    if (Actor)
    {
        Actor->Load(Path);
    }
    return Actor;
}

蓝图里没有直接取扩展名的节点,可以用字符串判断:

[Custom Event: LoadAnyFormat]
        Path (String)
        │
        ▼
[Check Path Valid]
        Path = Path
        │ Return Value ──┐
        ▼                │
[Branch] ◀───────────────┘
        │ True
        ▼
[Ends With]
        Source String = Path
        In Suffix = ".sog"
        Search Case = Ignore Case
        │ Return Value ──┐
        ▼                │
[Branch] ◀───────────────┘
        │ True
        ▼
[Spawn Actor from Class]
        Class = SogActor
        │ Return Value ──┐
        ▼                │
[Load] ◀─────────────────┘
        Target = (Return Value)
        String = Path

(False 分支继续用 Ends With 判断 ".spz"、".ply"、".lcc2"、".lcc")

Notes

  • 这三种格式没有 LOD 分层。加载时构造的是单层单节点的树(总层数为 1、根节点无子节点),因此 StartLevel、EndLevel、LevelFactor 这些 LOD 参数虽然仍会被读取,但没有可供选择的层级,实际不产生效果。控制性能主要靠 MaxSplatNum 与 SplatScale。
  • 这三种格式不带碰撞数据,替代方案见碰撞 - 单文件格式的替代方案。
  • 数据量大的文件会一次性全部加载,显存占用恒定,不随视角变化。加载上限与计算方式见渲染 - 单文件格式的加载上限。
  • 走的是 LCC2 渲染管线,因此基类上的多视口接口不适用。
  • 三者构造时都把 Component 的 bUseMipFilter 设为 false(基类默认 true),并把 Actor 旋转设为 (0, 0, 90)。
  • .ply 有多种子格式,插件支持的是含 3DGS 属性的变体。普通几何网格 .ply 加载会失败。

See Also

  • ALCCActorBase:继承来的全部接口
  • ULCC2Component:这三个 Actor 内部使用的组件
  • ULCCUtilLibrary:格式识别与路径校验
上一页
ULCC2Component
下一页
ALCC2ProxyMesh