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

Structs:结构体类型参考

LCC4UnrealRuntime 模块对外公开的结构体类型。

模块LCC4UnrealRuntime
头文件Core/LCCStructure.h
#include "Core/LCCStructure.h"

标记 BlueprintType 的结构体可以在蓝图中用 Break / Make 节点拆装。

Performance

FRenderInfo

通用性能参数。用于 ULCCComponentBase::Performance。

这个结构体的设计特点是每个数值都配一个启用开关。开关关闭时使用插件内置默认值,打开后才用你填的值。Component 上对应的 Setter 会自动把开关置为 true。

字段类型默认配套开关说明
MaxDistanceuint32300bDistanceLimit最大渲染距离,单位米
MaxSplatNumuint323000bMaxSplatNumLimit每帧最大 Splat 数,单位万,上限 10000
LevelFactorfloat1bCanSetLevelFactorLOD 距离缩放因子,范围 0.01~20
PreloadDistanceuint32200bPreloadDistanceLimit预加载距离。实际取值为 MaxDistance + 35
StartLeveluint320bCanSetStartLevel起始 Level,范围 0~20
EndLeveluint3220bCanSetEndLevel结束 Level,范围 0~20
CollisionLoadMaxDistanceuint32300bCollisionDistanceLimit碰撞加载最大距离,单位米
bUseFullLoadbooltruebCanSetUseFullLoad小场景全量加载开关。ULCC2Component 构造时改写为开关启用、值为 false
FullLoadSplatNumuint321500bCanSetFullLoadNum全量加载阈值,单位万

辅助方法:

bool HasMaxDistanceLimit() const;      // 是否有距离限制
bool HasMaxNumLimit() const;           // 是否有数量限制
bool NeedPreload() const;              // 是否需要预加载
uint32 GetMaxDistance() const;         // 生效的最大距离
uint32 GetMaxSplatNum() const;         // 生效的最大数量
float GetLevelFactor() const;          // 生效的 LOD 因子
uint32 GetStartLevel() const;          // 生效的起始 Level
uint32 GetEndLevel() const;            // 生效的结束 Level
uint32 GetMaxCollisionDistance() const;
uint32 GetPreloadDistance() const;     // 返回 GetMaxDistance() + 35
bool GetIfUseFullLoad(uint32 SplatNum) const;   // 给定数量是否走全量加载
void Reset();                          // 只重置数值字段,不重置启用开关

两点容易踩的地方:

  • Reset() 只重置数值字段(距离、数量、Level、因子),不重置任何 b* 启用开关,也不重置 bUseFullLoad 与 FullLoadSplatNum。
  • FRenderInfo::GetPreloadDistance() 返回的是 GetMaxDistance() + 35;而组件上的同名函数 ULCCComponentBase::GetPreloadDistance() 返回的是原始字段值。两者结果不同。

Getter 返回的是生效值:开关关闭时返回内置默认值,不是你之前填过的值。这一点容易混淆,直接读字段和调 Getter 可能得到不同结果。

用法要点:

  • 通过 Component 的 Setter 修改最省事,不用手动管开关。
  • 直接改结构体字段时记得同时把开关置 true,否则不生效。
// 推荐:用 Setter,开关自动处理
Component->SetMaxDistance(200);

// 直接改字段则必须自己开开关
Component->Performance.bDistanceLimit = true;
Component->Performance.MaxDistance = 200;

FLCCRenderInfo

LCC1 专属性能参数。用于 ULCCComponent::LCCPerformance。

字段类型默认配套开关说明
SortFactorfloat1bCanSetSortFactor排序频率缩放因子,范围 0.2~5。值越大排序次数越少、性能越好
bAddExtraPreNodesbool由宏决定bEnableExtraPreNodes追加额外预加载节点,缓解快速转视角时屏幕边缘的空洞

辅助方法:

float GetSortFactor() const;
bool GetIfAddExtraPreNodes() const;
void Reset();

相关页面:ULCCComponent

Metadata

FMetaInfoBase

元信息基类,FLCCMetaInfo 与 FLCC2MetaInfo 都继承它。ULCCComponentBase::GetMetaInfo 的返回类型。

字段类型说明
NameFString数据名称
VersionFString数据版本字符串
DescriptionFString描述
SourceFString来源
DataTypeFString数据类型
FileTypeFString文件类型,对应 EFileType
OffsetTArray<float>坐标偏移,3 个元素
ShiftTArray<float>平移量
Epsgint32EPSG 坐标系编号,大于 0 表示有地理坐标信息
ScaleTArray<int>缩放,3 个元素
GUIDFString数据唯一标识
TotalLevelint总 Level 层数
TotalSplatsint总 Splat 数量
SplatsTArray<int>各 Level 的 Splat 数量

辅助方法:

bool IsValid() const;              // 元信息是否有效
void Reset();
bool IsRTK() const;                // 是否含 RTK 地理信息
FVector GetOffset() const;         // 偏移转 FVector,元素数不足 3 时返回零向量并警告
FVector3f GetScale();              // 注意:非 const,且不检查元素数量
EFileType GetFileType() const;     // 文件类型枚举
float GetVersion() const;          // 版本号转 float
uint32 GetLevel0SplatNum() const;  // Level 0 的 Splat 数,单位万

GetScale() 与 GetOffset() 的健壮性不同:GetOffset() 会检查元素数量,不足 3 时返回零向量并输出警告;GetScale() 直接索引前三个元素,Scale 不足 3 个元素时会越界。

IsRTK() 的判断依据是 Epsg > 0 且偏移非零,只看数据本身。它与 CanUseGeoPlace() 不等价,后者还额外要求 bEnableGeoPlace 已开启且地理参考系统已创建。

用法要点:

  • 加载完成后再读,未就绪时字段都是零值。
  • TotalSplats 是数据总量。ULCCComponentBase::GetSplatNumber() 返回的就是这个字段,两者是同一个值。
if (Component->CheckIfLoaded())
{
    const FMetaInfoBase Meta = Component->GetMetaInfo();

    UE_LOG(LogTemp, Log, TEXT("Name: %s"), *Meta.Name);
    UE_LOG(LogTemp, Log, TEXT("Levels: %d, total splats: %d"),
        Meta.TotalLevel, Meta.TotalSplats);
    UE_LOG(LogTemp, Log, TEXT("Level 0 splats: %u (ten thousand)"),
        Meta.GetLevel0SplatNum());
    UE_LOG(LogTemp, Log, TEXT("Has SH: %s"),
        Meta.GetFileType() == EFileType::Quality ? TEXT("yes") : TEXT("no"));

    if (Meta.IsRTK())
    {
        UE_LOG(LogTemp, Log, TEXT("EPSG: %d, offset: %s"),
            Meta.Epsg, *Meta.GetOffset().ToString());
    }
}

文本蓝图:

[Get Meta Info]
        Target = (LCC Component)
        │ Return Value ──┐
        ▼                │
[Break FMetaInfoBase] ◀──┘
        Name → [Print String]
        Total Splats → [Print String]
        Total Level → [Print String]

FLCCMetaInfo

LCC1 完整元信息,继承 FMetaInfoBase。

附加字段类型说明
CellLengthXfloat网格 X 方向尺寸
CellLengthYfloat网格 Y 方向尺寸
AttributesTArray<FBoundingBoxInfoWithName>各属性的包围盒,按名称索引
IndexDataSizeint索引数据大小
EncodingFString编码方式
BoundingBoxFBoundingBoxInfo整体包围盒

IsValid() 的条件比基类严格:TotalLevel、TotalSplats、CellLengthX、CellLengthY、IndexDataSize 都必须大于 0。

包围盒相关方法(均返回 FBox,仅 C++):

FVector2f GetCellLength() const;
int32 GetXNum() const;                    // X 方向网格数
int32 GetYNum() const;                    // Y 方向网格数
FBox GetVisibleBoundingBox() const;       // 可见包围盒
FBox GetScaleBox() const;
FBox GetEnvironmentScaleBox() const;
FBox GetEnvironmentVisibleBox() const;
FBox GetShcoef() const;                   // 球谐取值范围
FBox GetEnvShcoef() const;
FBox GetNormal() const;
FBox GetEnvNormal() const;
FBox GetColor() const;
FVector2f GetOpacity() const;

FLCC2MetaInfo

LCC2 完整元信息,继承 FMetaInfoBase。ULCC2Component::GetMetaInfo2 的返回类型。

附加字段类型说明
WorkPathFStringLCC2 目录路径
SplatTypeEDataSourceType数据源格式,SOG / SPZ / PLY
SHBandsint32该树中最高球谐阶数,0 表示无,取值 1/2/3
EnvNameint32环境文件索引,-1 表示无
RootFTreeNode八叉树根节点
FilesTArray<FString>Splat 数据文件列表
MeshFilesTArray<FString>网格文件列表
BVHFilesTArray<FString>BVH 文件列表

IsValid() 的条件是 Files 非空。

辅助方法:

FBox GetBounds() const;    // 根节点包围盒,已换算为厘米

关于 SHBands:它决定球谐槽位的步长,因此同一个球谐缓冲里的所有数据源必须一致。混合了不同阶数的树取最宽的那个。单文件格式(.sog / .spz / .ply)从解码器头部读取精确阶数;LCC2 没有逐文件阶数概念,由 FileType 决定,Portable 无球谐,Quality 为 3 阶。

Raycast Result

FLCCSplat

射线检测的命中结果。用于 ULCCComponent 的射线检测函数。

字段类型说明
LocationFVector命中点的世界坐标
NodeVectorFLCCVector命中点所属的节点信息
FLCCSplat Hit;
if (LineTraceSingle(Start, End, Hit, false, 0.f, 0.f))
{
    // 命中位置
    const FVector HitPos = Hit.Location;
    // 该处当前加载的细节层级
    const int32 Level = Hit.NodeVector.Level;
}

相关页面:ULCCComponent 射线检测

FLCCVector

节点坐标,定位节点在八叉树中的位置。

字段类型说明
Xint32节点 X 索引
Yint32节点 Y 索引
Levelint32节点所在 Level

带参构造和拷贝构造会把三个字段钳制为非负数,但直接赋值(默认构造后写字段、或用 operator=)不做钳制。

辅助方法:

FString ToString() const;     // 格式为 "X:%i,Y:%i,Level:%i"
void Reset();
static double Dist2D(const FLCCVector& A, const FLCCVector& B);

相等判断只比较 X、Y、Level,不比较内部的摄像机信息等运行时字段。

Level 可以用来判断当前看到的是精细数据还是粗糙数据,数值越小越精细。

Bounding Box

FBoundingBoxInfo

包围盒信息。

字段类型说明
MinTArray<float>最小点坐标
MaxTArray<float>最大点坐标

FBoundingBoxInfoWithName

带名称的包围盒,用于元信息中的属性列表。

字段类型说明
NameFString属性名
BoundingBoxInfoFBoundingBoxInfo包围盒

相等判断只比较 Name。

SOG Metadata

这组结构体用于描述 .sog 文件的元信息,由 ULCCUtilLibrary 的 SOG 解析函数输出。

FLCC2SogMeta

SOG 元信息主结构。

字段类型说明
Versionint32格式版本
Countint32Splat 数量
bAntialiasbool是否启用抗锯齿
InstancesFLCC2SogInstances实例文件列表
MeansFLCC2SogMeans位置数据,含最小值、最大值与文件列表
ScalesFLCC2SogScales缩放数据,含 256 项码书与文件列表
QuatsFLCC2SogQuats旋转数据文件列表
SemanticsFLCC2SogSemantics语义数据文件列表
Sh0FLCC2SogSh0零阶球谐,含 256 项码书与文件列表
ShNFLCC2SogShN高阶球谐,含阶数、码书、数量与文件列表

辅助方法:

bool HasShN() const;    // 是否含高阶球谐,等价于 ShN.Files 非空

用法要点:

  • 用 ParseSogMetaFromFile 在不加载渲染数据的前提下读取,开销很小。
  • 可以据此在加载前判断点数与球谐情况,提前决定画质配置。
FLCC2SogMeta Meta;
if (ULCCUtilLibrary::ParseSogMetaFromFile(Path, Meta))
{
    UE_LOG(LogTemp, Log, TEXT("Version: %d, count: %d, high-order SH: %s"),
        Meta.Version, Meta.Count, Meta.HasShN() ? TEXT("yes") : TEXT("no"));
}

FLCC2SogShN

高阶球谐数据。

字段类型说明
Bandsint32球谐阶数
Countint32数量
FilesTArray<FString>文件列表
CodebookTStaticArray<float, 256>量化码书,非蓝图可见

辅助方法:bool HasShN() const。

FLCC2SogImageData

SOG 图像数据。

字段类型说明
PixelDataTArray<uint8>像素数据,RGBA 格式,每像素 4 字节
Widthint32宽度
Heightint32高度

其他子结构

以下结构都只含文件列表,部分带量化码书:

结构体字段
FLCC2SogInstancesFiles
FLCC2SogSemanticsFiles
FLCC2SogQuatsFiles
FLCC2SogMeansMins、Maxs、Files
FLCC2SogScalesCodebook(256 项)、Files
FLCC2SogSh0Codebook(256 项)、Files

Codebook 是 TStaticArray<float, 256>,不是 UPROPERTY,蓝图中不可见。

Octree Nodes

这组结构体描述 LCC2 的八叉树,属于底层数据,常规开发不需要直接操作。

FTreeNode

八叉树节点。

字段类型说明
IdFString节点标识
XMin / YMin / ZMindoubleAABB 最小点
XMax / YMax / ZMaxdoubleAABB 最大点
ChildNumint32子节点数量
ChildrenTArray<FTreeNode>子节点数组,非 UPROPERTY
DataFTreeNodeData节点数据

辅助方法:

void ClearIterative();

用广度优先收集所有节点后逆序清理,避免树很深时递归析构导致栈溢出。手动持有 FTreeNode 时,在它离开作用域前调用。

FTreeNodeData

节点数据容器,用布尔标记各类数据是否存在。

字段类型说明
bHas3DGSbool是否含 3DGS 数据
_3DGSFTreeNodeData3DGS3DGS 数据
bHasMeshbool是否含网格数据
MeshFTreeNodeDataMesh网格数据
bHasBVHbool是否含 BVH 数据
BVHFTreeNodeDataBVHBVH 数据

FTreeNodeData3DGS

字段类型说明
Nameint32文件索引
Startint32起始偏移
Countint32数量

FTreeNodeDataMesh

字段类型说明
Nameint32文件索引
Vertexint32顶点数
Faceint32面数

FTreeNodeDataBVH

字段类型说明
Nameint32文件索引

See Also

  • ULCCComponentBase:FRenderInfo 与 FMetaInfoBase 的使用
  • ULCCComponent:FLCCSplat 与 FLCCRenderInfo 的使用
  • ULCCUtilLibrary:SOG 元信息解析函数
  • Enums:这些结构体中用到的枚举类型
上一页
Enums