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

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++ 側から外部からアクセスできず、Blueprint に対してのみ見える(Details パネルでは読み取り専用)。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 の位置を対象にしたレイキャストの関数を 4 つ提供する。検出の対象は点群データ自体であり、コリジョンファイルは不要である。

4 つの関数は 2 つのグループに分かれ、違いは 2 つの軸にある。

単一のヒット複数のヒット
既定の半径(10 センチメートル)LineTraceSingleLineTraceMulti
カスタムの半径LineTraceSingleWithRadiusLineTraceMultiWithRadius

4 つに共通するデバッグ用のパラメーター:

パラメーター型説明
Startconst FVector&レイの始点。ワールド座標
Endconst FVector&レイの終点。ワールド座標
bDrawDebugLineboolデバッグ用の線を描画するか
Durationfloatデバッグ用の線の持続時間。単位は秒
Thicknessfloatデバッグ用の線の太さ

注:この 4 つの関数は C++ 側では protected である。Blueprint 側からは直接ノードとして呼び出せる。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;

単一のレイキャストで、もっとも近いヒット地点を 1 つ返す。検出半径は 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());
    }
}

テキスト形式の Blueprint。マウスクリックでピックする。

[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>&すべてのヒット地点を出力する

使い方の要点:

  • 貫通する検出に使う。たとえば 1 本の線が何層の構造を通り抜けたかを測る、断面の分析を行うなど。
  • ヒット地点の数がとても多くなることがあるので、毎フレーム呼ばないよう注意する。
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 の 3 つのフィールドがノードの八分木内の位置を特定する。Level は現在その場所に読み込まれているディテールの階層を示すので、「見ているのが精細なデータか粗いデータか」を判断するのに使える。

完全なフィールドは Structs を参照する。

See Also

  • ULCCComponentBase:共通のレンダリングとパフォーマンスのインターフェース
  • ULCC2Component:LCC2 パイプラインの対応するコンポーネント
  • Structs:FLCCSplat、FLCCVector、FLCCRenderInfo のフィールドの説明
前へ
ULCCComponentBase
次へ
ULCC2Component