XGRIDSドキュメント
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • PortalCam

    • 製品概要
    • デバイスの基本操作
    • LCC Scan App の使用
    • メンテナンスとお手入れ
    • FAQ
  • Lixel K シリーズ

    • Lixel K1

      • 製品概要
      • デバイスの基本操作
      • デバイスのアクティベーションと接続
      • デバイス収集
      • 絶対座標のポイントクラウドデータを取得する
      • マップフュージョン
      • 典型的なシーンにおける経路計画の推奨
      • 注意事項
      • FAQ
    • Lixel K2

      • 製品概要
      • デバイスの基本操作
      • デバイスのアクティベーションと接続
      • デバイス収集
      • 絶対座標のポイントクラウドデータを取得
      • マップフュージョン
      • 典型的なシーンにおける経路計画の推奨
      • 注意事項
      • FAQ
  • Lixel L シリーズ

    • Lixel L2 Pro

      • 製品概要
      • デバイスの基本操作
      • デバイスのアクティベーションと接続
      • デバイス収集
      • 絶対座標のポイントクラウドデータを取得する
      • 実時計測機能
      • 付録
      • FAQ
  • Lixel Studio

    • バージョンと著作権
    • インストールとアクティベーション
    • ソフトウェアインターフェース
    • ファイル操作
    • プロジェクト処理
    • ツール
    • 2D 作図
    • 業界応用
    • 設定
    • デバイス接続
  • Lixel CyberColor

    • LCC Studio

      • はじめに
      • バージョンと更新
      • ダウンロードとインストール
      • インターフェース概要とナビゲーション
      • 再構築前の準備
      • モデル再構築
      • 単一モデル再構築
      • 地図合成
      • 空地融合
      • 航空撮影再構築
      • マイモデル
      • その他の機能
      • 設定とアカウント
      • Converter
      • 動画再構築
      • よくある質問 / FAQ
    • LCC Scene Editor

      • バージョンと更新
      • アカウントとサインイン
      • 製品概要とホーム画面
      • エディター画面
      • ナビゲーションモード
      • ファイル
      • 設定
      • 編集
      • ウィンドウ
      • グローバルツールバー
      • アセットとプロパティ
      • 左ツールバー
      • ビューポイント
      • ポータル
      • スカイボックス
      • アノテーション
      • 測定
      • フライスルー
      • シーンレポート
      • 3D レイアウト
      • ミニマップ
      • プレビューモード(Viewer)
      • ヘルプ
      • よくある質問(FAQ)
      • スポーンポイント
    • LCC Model Editor

      • バージョンと更新
      • ユーザーガイド
      • 概要とインターフェース
      • ファイル操作
      • セレクター
      • モデルの編集
      • 測定
      • カラーグレーディング
      • アセット管理
      • 設定とヘルプ
      • よくある質問
    • Capture Guide

      • 概要
      • 撮影デバイス概要
      • 一般的な撮影の原則
      • 屋内シーンの撮影
      • 屋外シーンの撮影
      • 大規模撮影(マップフュージョン)
      • 空地マップフュージョン撮影
      • オブジェクト撮影
      • 人物撮影
      • ビデオ再構築撮影
      • HD Enhancement
      • 制御点(Lixel P1)
      • FAQ とトラブルシューティング
    • バージョン履歴
  • プラグインと SDK

    • Unreal

      • 概要
      • クイックスタート - Windows
      • クイックスタート - Linux
      • クイックスタート - Quest3
      • エディションとライセンス
      • レンダリング
      • 画面調節
      • 法線とライティング
      • シーン編集
      • パフォーマンスパラメーター
      • パフォーマンス最適化ガイド
      • サードパーティおよびエンジンプラグインとの連携
      • プロキシメッシュ
      • 読み込みアニメーション
      • コリジョン
      • ナビゲーションシステム対応
      • Single layer water 対応
      • ローカライズ
      • よくある質問
      • トラブルシューティング
      • ログと診断
      • お問い合わせ
      • 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 の 3 つの Actor はそれぞれ .sog、.spz、.ply の 3 形式に対応し、単一の 3DGS ファイルを読み込むために使う。LCC のディレクトリ構造は不要である。いずれも ALCCActorBase を継承する。

モジュールLCC4UnrealRuntime
ヘッダーファイルSogActor.h、SpzActor.h、PlyActor.h
親クラスALCCActorBase
内部の ComponentULCC2Component
#include "SogActor.h"
#include "SpzActor.h"
#include "PlyActor.h"

3 つはいずれも内部で仮想の FLCC2MetaInfo を構築して完全な LCC2 のレンダリングパイプラインを再利用する。つまり LCC2 の機能はこの 3 形式でも同様に使える。球面調和の次数の制御、ライティングの法線モード、クリッピングと断面、カラー調整を含む。同様に LCC2 パイプラインの制限も一緒に継承する。たとえば複数ビューポートのインターフェースが効かない点である。

Supported Formats

Actor拡張子適する場面
ASogActor.sog圧縮形式。サイズが小さく読み込みが速い
ASpzActor.spz圧縮形式
APlyActor.ply汎用の点群 / 3DGS の交換形式。多くの学習ツールのネイティブな出力

各形式の対応範囲は 概要 - 対応形式 を参照する。

Comparison with LCC Directory Formats

.sog / .spz / .plyLCC / LCC2 のディレクトリ
ファイルの構成1 つのファイルメタ情報ファイル + 複数のデータブロック
LOD の階層なしあり。距離に応じたストリーミング読み込み
適する規模中小規模のシーン大規模なシーン
コリジョンデータなしありうる
配布のしやすさ高い。単一のファイルディレクトリを完全に保つ必要がある

選択の基準:データ量が大きくない、素早く効果を検証したい、単一ファイルで配布したい場合はこの 3 形式を使う。大規模なシーンで LOD によってパフォーマンスを制御する必要がある場合は、LCC / LCC2 のディレクトリ形式を使わなければならない。

Methods

3 つの Actor の公開インターフェースはすべて ALCCActorBase から継承しており、次のメソッドのみをオーバーライドしている。

SelectFile

// ASogActor
virtual void SelectFile() override;   // ダイアログは .sog のみを一覧に出す

// ASpzActor
virtual void SelectFile() override;   // ダイアログは .spz のみを一覧に出す

// APlyActor
virtual void SelectFile() override;   // ダイアログは .ply のみを一覧に出す

ファイル選択ダイアログを表示し、それぞれ対応する拡張子でフィルターする。Details パネルでは 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;
}

Blueprint には拡張子を直接取得するノードがないので、文字列で判定できる。

[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

  • この 3 形式には LOD の階層がない。読み込み時に構築されるのは単層で単一ノードのツリー(総階層数が 1、ルートノードに子がない)なので、StartLevel、EndLevel、LevelFactor といった LOD のパラメーターは読み取られはするが、選択できる階層がないため実際には効果を生まない。パフォーマンスの制御は主に MaxSplatNum と SplatScale で行う。
  • この 3 形式はコリジョンデータを持たない。代替手段は コリジョン - 単一ファイル形式の代替手段 を参照する。
  • データ量が大きいファイルは一度にすべて読み込まれるため、ビデオメモリの使用量は一定で視点によって変化しない。読み込みの上限と計算方法は レンダリング - 単一ファイル形式の読み込み上限 を参照する。
  • LCC2 のレンダリングパイプラインを通るため、基底クラスの複数ビューポートのインターフェースは適用されない。
  • 3 つはいずれも構築時に Component の bUseMipFilter を false に設定し(基底クラスの既定は true)、Actor の回転を (0, 0, 90) に設定する。
  • .ply にはいくつかのサブ形式がある。プラグインが対応するのは 3DGS の属性を含む派生形式である。通常のジオメトリメッシュの .ply は読み込みに失敗する。

See Also

  • ALCCActorBase:継承してくるすべてのインターフェース
  • ULCC2Component:この 3 つの Actor が内部で使うコンポーネント
  • ULCCUtilLibrary:形式の識別とパスの検証
前へ
ULCC2Component
次へ
ALCC2ProxyMesh