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

Structs:構造体のリファレンス

LCC4UnrealRuntime モジュールが公開する構造体である。

モジュールLCC4UnrealRuntime
ヘッダーファイルCore/LCCStructure.h
#include "Core/LCCStructure.h"

BlueprintType が付いた構造体は Blueprint で Break / Make ノードで分解と組み立てができる。

Performance

FRenderInfo

共通のパフォーマンスパラメーター。ULCCComponentBase::Performance に使う。

この構造体の設計上の特徴は、各数値に有効化のスイッチが付いていることである。スイッチがオフのときはプラグイン内蔵の既定値を使い、オンにして初めて入力した値が使われる。Component の対応する Setter はスイッチを自動的に true にする。

フィールド型既定値対応するスイッチ説明
MaxDistanceuint32300bDistanceLimit最大レンダリング距離。単位はメートル
MaxSplatNumuint323000bMaxSplatNumLimit1 フレームの最大 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();                          // 数値のフィールドのみをリセットし、有効化のスイッチはリセットしない

踏みやすい点が 2 つある。

  • 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データの一意な識別子
TotalLevelintLevel の総階層数
TotalSplatsintSplat の総数
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() は先頭の 3 要素を直接インデックスするため、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());
    }
}

テキスト形式の Blueprint:

[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

引数付きのコンストラクターとコピーコンストラクターは 3 つのフィールドを非負にクランプするが、直接代入する場合(既定のコンストラクターの後にフィールドを書く、または 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セマンティクスのデータのファイルの一覧
Sh0FLCC2SogSh00 次の球面調和。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>量子化のコードブック。Blueprint からは見えない

補助のメソッド:bool HasShN() const。

FLCC2SogImageData

SOG の画像データ。

フィールド型説明
PixelDataTArray<uint8>ピクセルのデータ。RGBA 形式で 1 ピクセル 4 バイト
Widthint32幅
Heightint32高さ

その他のサブ構造体

以下の構造体はいずれもファイルの一覧のみを含み、一部は量子化のコードブックを持つ。

構造体フィールド
FLCC2SogInstancesFiles
FLCC2SogSemanticsFiles
FLCC2SogQuatsFiles
FLCC2SogMeansMins、Maxs、Files
FLCC2SogScalesCodebook(256 項目)、Files
FLCC2SogSh0Codebook(256 項目)、Files

Codebook は TStaticArray<float, 256> で UPROPERTY ではないため、Blueprint からは見えない。

Octree Nodes

このグループの構造体は LCC2 の八分木を記述する低レベルのデータで、通常の開発では直接操作する必要はない。

FTreeNode

八分木のノード。

フィールド型説明
IdFStringノードの識別子
XMin / YMin / ZMindoubleAABB の最小点
XMax / YMax / ZMaxdoubleAABB の最大点
ChildNumint32子ノードの数
ChildrenTArray<FTreeNode>子ノードの配列。UPROPERTY ではない
DataFTreeNodeDataノードのデータ

補助のメソッド:

void ClearIterative();

幅優先ですべてのノードを収集した後に逆順でクリアし、ツリーが深いときに再帰的なデストラクトでスタックオーバーフローが起きるのを避ける。FTreeNode を手動で保持している場合は、スコープを抜ける前に呼ぶ。

FTreeNodeData

ノードのデータのコンテナで、各種のデータが存在するかをブール値でマークする。

フィールド型説明
bHas3DGSbool3DGS のデータを含むか
_3DGSFTreeNodeData3DGS3DGS のデータ
bHasMeshboolメッシュのデータを含むか
MeshFTreeNodeDataMeshメッシュのデータ
bHasBVHboolBVH のデータを含むか
BVHFTreeNodeDataBVHBVH のデータ

FTreeNodeData3DGS

フィールド型説明
Nameint32ファイルのインデックス
Startint32開始のオフセット
Countint32数量

FTreeNodeDataMesh

フィールド型説明
Nameint32ファイルのインデックス
Vertexint32頂点数
Faceint32面数

FTreeNodeDataBVH

フィールド型説明
Nameint32ファイルのインデックス

See Also

  • ULCCComponentBase:FRenderInfo と FMetaInfoBase の使い方
  • ULCCComponent:FLCCSplat と FLCCRenderInfo の使い方
  • ULCCUtilLibrary:SOG のメタ情報の解析関数
  • Enums:これらの構造体で使う列挙型
前へ
Enums