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

      • 入門
      • 版本與更新
      • 下載及安裝
      • 介面概覽及導覽
      • 重建前準備
      • 模型重建
      • 單模型重建
      • 地圖融合
      • 空地融合
      • 航拍重建
      • 我的模型
      • 其他功能
      • 設定與帳戶
      • 設置與賬號
      • Converter
      • 影片重建
      • 視頻重建
      • 常見問題
    • 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

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