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

ULCCComponent:LCC 管线组件

LCC1 管线专属 Component,继承 ULCCComponentBase。除基类能力外,额外提供基于 Splat 位置的射线检测和接缝裁剪。

模块LCC4UnrealRuntime
头文件LCCComponent.h
父类ULCCComponentBase
由谁持有ALCCActor
#include "LCCComponent.h"

获取实例:

ULCCComponent* Comp = Cast<ULCCComponent>(LCCActor->GetLCCComponent());

Properties

属性类型默认说明
bEnableSeamCuttingboolfalse手动开启接缝裁剪,见接缝裁切。LCC 文件版本 5.0 及之后无需手动开启,会自动生效
LCCPerformanceFLCCRenderInfo—LCC1 专属性能参数,见下表

MetaInfo(类型 FLCCMetaInfo)是 protected 成员,C++ 侧外部访问不到,只对蓝图可见(细节面板只读)。C++ 里请用基类的 GetMetaInfo() 取基础字段。

LCCPerformance

同样是开关加数值的形式,开关关闭时使用项目设置里的默认值。

字段类型默认开关说明
SortFactorfloat1bCanSetSortFactor排序频率缩放因子,范围 0.2~5,见 Sort Factor
bAddExtraPreNodesbooltruebEnableExtraPreNodes追加额外预加载节点,见 Add Extra Preload Nodes
ULCCComponent* Comp = Cast<ULCCComponent>(LCCActor->GetLCCComponent());
if (Comp)
{
    // 排序降频省性能
    Comp->LCCPerformance.bCanSetSortFactor = true;
    Comp->LCCPerformance.SortFactor = 2.0f;

    // VR 里转头快,补预加载节点
    Comp->LCCPerformance.bEnableExtraPreNodes = true;
    Comp->LCCPerformance.bAddExtraPreNodes = true;
}

Methods

GetUseSeamCut

bool GetUseSeamCut() const;

着色器是否启用接缝裁剪。满足任一条件即返回 true:LCC 文件版本大于等于 5.0,或手动开启了 bEnableSeamCutting。仅 C++ 可用。

Multi-Viewport

多视口相关接口声明在基类 ULCCComponentBase 上,但只在 LCC1 管线上有效。SetPlayerLoadMode、SetPlayerRenderMode、SetSceneCaptureLoadMode、SetSceneCaptureRenderMode、ModifyPlayerTransform、CancelModifyPlayerTransform 这几个方法都要在 ULCCComponent 上调用才有意义。

原因是逐视口的渲染策略与节点调度由 LCC1 的渲染路径消费,LCC2 尚未接入。在 ULCC2Component(含 ALCC2Actor 与 .sog / .spz / .ply)上调用不会报错,但达不到预期效果。

需要主视口高画质、小地图低画质这类差异化渲染,或者传送前预加载,目前只能用 LCC1 数据。

Raycast

⚠️ 这组接口未经充分测试,可能无法按预期工作。 生产环境请改用「开启碰撞 + 引擎射线检测」的方案:先用 SetLCCCollisionEnable 加载碰撞数据,再用引擎自带的 LineTraceByChannel 等接口做检测。详见碰撞。

LCC1 提供四个针对 Splat 位置的射线检测函数,检测目标是点云数据本身,不需要碰撞文件。

四个函数分成两组,区别在于两个维度:

单个命中多个命中
默认半径(10 厘米)LineTraceSingleLineTraceMulti
自定义半径LineTraceSingleWithRadiusLineTraceMultiWithRadius

四者共有的调试参数:

参数类型说明
Startconst FVector&射线起点,世界坐标
Endconst FVector&射线终点,世界坐标
bDrawDebugLinebool是否画出调试线
Durationfloat调试线持续时间,单位秒
Thicknessfloat调试线粗细

注:这四个函数在 C++ 侧是 protected,蓝图侧可以直接作为节点调用。C++ 里需要在 ULCCComponent 的子类中使用,或改用引擎自带的射线检测。

选择建议

优先用碰撞体加引擎射线检测。 从 v0.6.0 起,数据带碰撞文件并开启碰撞后,LineTraceByChannel 能拿到完整的 FHitResult(法线、材质、命中的组件等),也能和引擎的物理、AI、导航体系无缝配合,且这条路径经过了充分验证。

这里的专用接口只在下面这些情况下才值得考虑,且需要自行充分测试:

  • 数据没有碰撞文件,也无法改用带碰撞的数据。
  • 必须拿到命中点所属的节点信息(FLCCSplat::NodeVector 给出 X、Y、Level)。

LineTraceSingle

UFUNCTION(BlueprintCallable, Category = "XGrids|Raycast")
bool LineTraceSingle(const FVector& Start, const FVector& End, FLCCSplat& OutHit,
                     bool bDrawDebugLine, float Duration, float Thickness) const;

单次射线检测,返回最近的一个命中点。检测半径固定为 10 厘米。

参数类型说明
OutHitFLCCSplat&输出命中信息,含世界位置 Location 与节点信息 NodeVector

返回 bool:命中返回 true。

// 在 ULCCComponent 的子类中
void UMyLCCComponent::PickFromCamera(const FVector& CamLocation, const FVector& CamForward)
{
    const FVector Start = CamLocation;
    const FVector End = Start + CamForward * 10000.f;

    FLCCSplat Hit;
    if (LineTraceSingle(Start, End, Hit, true, 2.0f, 2.0f))
    {
        UE_LOG(LogTemp, Log, TEXT("Hit at %s, node %s"),
            *Hit.Location.ToString(), *Hit.NodeVector.ToString());
    }
}

文本蓝图,鼠标点击拾取:

[Input Action: Pick]
        │ Pressed
        ▼
[Get Player Camera Manager] ──▶ [Get Camera Location]  → Start
                            └─▶ [Get Actor Forward Vector]
                                        │
                                        ▼
                                [Multiply] (× 10000)
                                        │
                                        ▼
                                [Add] (Start + 上一步) → End
        │
        ▼
[Line Trace Single]
        Target = (LCC Component)
        Start = Start
        End = End
        Draw Debug Line = true
        Duration = 2.0
        Thickness = 2.0
        │ Return Value ──┐
        ▼                │
[Branch] ◀───────────────┘
        │ True
        ▼
[Break LCCSplat]  ← 连 Out Hit
        Location → 用于放置标记

LineTraceSingleWithRadius

UFUNCTION(BlueprintCallable, Category = "XGrids|Raycast")
bool LineTraceSingleWithRadius(const FVector& Start, const FVector& End, float Radius,
                               FLCCSplat& OutHit, bool bDrawDebugLine,
                               float Duration, float Thickness) const;

单次射线检测,检测半径可指定。

参数类型说明
Radiusfloat检测半径,单位厘米

用法要点:

  • 点云是离散的,半径太小容易从点与点的空隙间穿过去,明明对着物体却检测不到。这时候把半径加大。
  • 半径越大越容易命中,但精度下降,返回的点可能偏离你实际想指的位置。
  • 稀疏数据从 20~50 厘米起调,密集数据 5~10 厘米就够。
FLCCSplat Hit;
// 稀疏点云用大半径,提高命中率
if (LineTraceSingleWithRadius(Start, End, 30.0f, Hit, false, 0.f, 0.f))
{
    SpawnMarkerAt(Hit.Location);
}

LineTraceMulti

UFUNCTION(BlueprintCallable, Category = "XGrids|Raycast")
bool LineTraceMulti(const FVector& Start, const FVector& End,
                    bool bDrawDebugLine, float Duration, float Thickness,
                    TArray<FLCCSplat>& OutHits) const;

多重射线检测,返回路径上所有命中点。检测半径固定 10 厘米。

参数类型说明
OutHitsTArray<FLCCSplat>&输出所有命中点

用法要点:

  • 用于穿透式检测,比如测量一条线上穿过了多少层结构,或者做剖面分析。
  • 命中点数量可能很大,注意别在每帧调用。
TArray<FLCCSplat> Hits;
if (LineTraceMulti(Start, End, true, 3.0f, 1.0f, Hits))
{
    UE_LOG(LogTemp, Log, TEXT("Passed through %d splats"), Hits.Num());

    for (const FLCCSplat& Hit : Hits)
    {
        DrawDebugPoint(GetWorld(), Hit.Location, 8.f, FColor::Yellow, false, 3.f);
    }
}

LineTraceMultiWithRadius

UFUNCTION(BlueprintCallable, Category = "XGrids|Raycast")
bool LineTraceMultiWithRadius(const FVector& Start, const FVector& End, float Radius,
                              bool bDrawDebugLine, float Duration, float Thickness,
                              TArray<FLCCSplat>& OutHits) const;

多重射线检测,检测半径可指定。参数含义同上。

半径较大时命中点数量会显著增加,用于统计类需求(比如估算某个圆柱范围内的点密度)时比较合适。

FLCCSplat

USTRUCT(BlueprintType)
struct FLCCSplat
{
    FVector Location;         // 命中点的世界坐标
    FLCCVector NodeVector;    // 命中点所属节点
};

FLCCVector 的 X、Y、Level 三个字段定位节点在八叉树中的位置。Level 反映当前该处加载的细节层级,可以用来判断「我看到的是精细数据还是粗糙数据」。

完整字段见 Structs。

See Also

  • ULCCComponentBase:通用渲染与性能接口
  • ULCC2Component:LCC2 管线的对应组件
  • Structs:FLCCSplat、FLCCVector、FLCCRenderInfo 字段说明
上一页
ULCCComponentBase
下一页
ULCC2Component