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

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