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

ULCC2Component:LCC2 パイプラインのコンポーネント

LCC2 パイプライン専用の Component で、ULCCComponentBase を継承する。加えて球面調和の次数の制御、ライティングの法線のシステム、深度しきい値の制御を提供する。

モジュールLCC4UnrealRuntime
ヘッダーファイルLCC2Component.h
親クラスULCCComponentBase
保持するものALCC2Actor、ASogActor、ASpzActor、APlyActor
#include "LCC2Component.h"

インスタンスを取得する。

ULCC2Component* Comp = Cast<ULCC2Component>(LCC2Actor->GetLCCComponent());

このコンポーネントは 4 種類のデータ形式に同時に対応する。LCC2 のディレクトリ、.sog、.spz、.ply である。後の 3 つは仮想のメタ情報を構築して同じレンダリングパイプラインを再利用するため、取得できるのはいずれも ULCC2Component になる。

注:基底クラスの複数ビューポートのインターフェース(SetPlayerLoadMode、SetPlayerRenderMode、SetSceneCaptureLoadMode、SetSceneCaptureRenderMode、ModifyPlayerTransform、CancelModifyPlayerTransform)はLCC2 パイプラインには適用されない。呼んでもエラーにはならないが、期待した結果にはならない。詳しくは ULCCComponent を参照する。

Properties

プロパティ型既定値範囲説明
SHBandsint3231~3球面調和の次数。既定ではデータに格納されている次数を取り、それが上限にもなる
LightingScalefloat0.00~1シーンのライティングが介入する前の 3DGS の元のカラーの明るさ
AlphaThresholdfloat0.50.01~0.99中間深度の判定に使う累積不透明度のしきい値。上級者向けの項目
NormalModeELCC2NormalGenerationModeFixed—法線生成モード。3DGS がシーンのライトにどう応答するかを決める
FixedNormalFVector(0, 0, 1)—Fixed モードで 3DGS 全体が共有するワールド法線
NormalPoleFVector(1, 0, 1)—Hemispherical モードでの表面の向き
NormalHemiSpreadfloat0.50~4Hemispherical モードでの明暗の変化の強さ

法線関連のプロパティには EditConditionHides が付いており、Details パネルには現在の NormalMode で使う項目だけが表示される。

基底クラスと異なる点がもう 2 つある。

  • MetaInfo(型は FLCC2MetaInfo)は private メンバーで、C++ 側から外部からアクセスできず、Blueprint に対してのみ見える(Details パネルでは読み取り専用)。C++ では GetMetaInfo2 で完全なフィールドを取得する。
  • 構築時に Performance の全量読み込みの設定を「スイッチ有効、値は false」に書き換える。これは FRenderInfo の既定値とは逆である。つまり LCC2 は既定で全量読み込みを使わないので、必要なときに明示的にオンにする。

Spherical Harmonics

SetSHBands / GetSHBands

UFUNCTION(BlueprintCallable, Category = "XGrids")
void SetSHBands(int32 InSHBands);

UFUNCTION(BlueprintPure, Category = "XGrids")
int32 GetSHBands() const;

計算に参加する球面調和の次数を設定する。範囲は 1~3 である。このコンポーネントがレンダリングするすべての形式に効き、LCC2、SOG、SPZ、PLY を含む。

パラメーター型説明
InSHBandsint32次数。1 が最も軽く、3 が最も完全である。データが実際に格納している次数を超える値は効かない

使い方の要点:

  • 既定値は読み込んだデータから取得され、それが上限にもなる。データが 2 次までしか格納していない場合に 3 を設定しても追加の効果はない。
  • SetUseShcoef(false) で球面調和を完全にオフにするのに比べて、次数を下げるのはより細かいトレードオフになる。
  • 有効になる前提は bUseShcoef がオンでレンダリングモードが 3DGS であることで、そうでない場合この値は計算に参加しない。
  • 画質とコストのバランスは 画面調節 - SH の次数 を参照する。
ULCC2Component* Comp = Cast<ULCC2Component>(Actor->GetLCCComponent());
if (Comp)
{
    // 中スペックの端末では 2 次に下げる
    Comp->SetSHBands(2);
}

段階ごとに設定する書き方:

void ConfigureSH(ULCC2Component* Comp, EQualityTier Tier)
{
    if (!Comp || !Comp->CanSetShcoef())
    {
        return;   // データ自体に球面調和がないので何もしない
    }

    switch (Tier)
    {
    case EQualityTier::High:
        Comp->SetUseShcoef(true);
        Comp->SetSHBands(3);
        break;
    case EQualityTier::Medium:
        Comp->SetUseShcoef(true);
        Comp->SetSHBands(2);
        break;
    case EQualityTier::Low:
        Comp->SetUseShcoef(false);   // 直接オフにする
        break;
    }
}

Lighting

LightingScale

UPROPERTY(Interp, EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
    meta = (UIMin = "0.0", UIMax = "1.0", ClampMin = "0.0", ClampMax = "1.0"))
float LightingScale = 0.0f;

シーンのライティングが介入する前の 3DGS の基本のカラーの明るさ。範囲は 0~1、既定値は 0 である。0 は完全にシーンのライティングで駆動することを、1 は元の明るさを完全に保持することを意味する。

値の影響と調整方法は 法線とライティング - LCC2 のライティング輝度 を参照する。

使い方の要点:

  • LightMode が Lit のときにのみ意味を持ち、Unlit では効かない。
  • BlueprintReadWrite のプロパティなので直接代入すればよく、Setter 関数はない。
  • Interp が付いているため、Sequencer で昼夜の変化のキーフレームを作れる。
Comp->SetLightMode(ELightMode::Lit);
Comp->LightingScale = 0.3f;    // 元の明るさの 3 割を残し、残りはシーンのライトに任せる

NormalMode

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting")
ELCC2NormalGenerationMode NormalMode = ELCC2NormalGenerationMode::Fixed;

3DGS の表面がシーンのライティングにどう応答するかを制御する。3DGS のデータ自体はジオメトリ法線を持たないため、最初の 3 つのモードはいずれも近似的な手段で法線を作り、ProxyMesh だけが実際の法線を提供する。

4 つのモードの効果の比較、適する場面、パラメーターの調整方法は 法線とライティング を、値の定義は Enums を参照する。

// Fixed モード。法線を上向きに指定する
Comp->NormalMode = ELCC2NormalGenerationMode::Fixed;
Comp->FixedNormal = FVector(0.0, 0.0, 1.0);

// Hemispherical モード。ライティングが動く方向とコントラストを調整する
Comp->NormalMode = ELCC2NormalGenerationMode::Hemispherical;
Comp->NormalPole = FVector(1.0, 0.0, 1.0);
Comp->NormalHemiSpread = 1.2f;

FixedNormal

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
    meta = (EditCondition = "NormalMode == ELCC2NormalGenerationMode::Fixed", EditConditionHides))
FVector FixedNormal = FVector(0.0, 0.0, 1.0);

Fixed モード専用。3DGS 全体が共有するワールド空間の法線で、既定は上向きである。正規化は不要である。

使い方の要点:

  • 全体で 1 つの法線を共有するということは、全体の明るさが同じ値になるということで、dot(法線, ライティングの方向) に等しい。
  • 光が法線の裏側から当たると全体が暗くなり、真っ黒になることもある。屋外のシーンで法線が上向き、光源が上方にある場合は通常問題ない。
  • シーンの主体が 1 枚の壁である場合は、法線を壁の向きに変更するほうが妥当である。

NormalPole

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
    meta = (EditCondition = "NormalMode == ELCC2NormalGenerationMode::Hemispherical", EditConditionHides))
FVector NormalPole = FVector(1.0, 0.0, 1.0);

Hemispherical モード専用。表面がどの方向を向いているものとして扱うかを決め、ディレクショナルライトを回したときに明暗の境界が 3DGS 上をどう移動するかを決める。正規化は不要である。

調整方法:まずディレクショナルライトを配置し、そのうえでこのベクトルを調整して、明暗の境界線の走り方が期待どおりかを観察する。

NormalHemiSpread

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XGrids|Lighting",
    meta = (UIMin = "0.0", UIMax = "4.0", ClampMin = "0.0",
        EditCondition = "NormalMode == ELCC2NormalGenerationMode::Hemispherical", EditConditionHides))
float NormalHemiSpread = 0.5f;

Hemispherical モード専用。明暗の表面上での変化の強さで、範囲は 0~4、既定値は 0.5 である。

値が小さいほど明暗が平坦で均一になり、値が大きいほど受光部と影の部分のコントラストが強くなる。

AlphaThreshold

UPROPERTY(Interp, EditAnywhere, BlueprintReadWrite, Category = "XGrids", AdvancedDisplay,
    meta = (UIMin = "0.01", UIMax = "0.99", ClampMin = "0.01", ClampMax = "0.99"))
float AlphaThreshold = 0.5f;

中間深度の判定に使う累積不透明度のしきい値。範囲は 0.01~0.99、既定値は 0.5 である。上級者向けの項目に当たる。

近い側から遠い側へ不透明度を累積し、累積値がこのしきい値に達した時点の深度をそのピクセルの代表深度として記録する。値が小さいと深度がカメラ側に寄り、大きいと遠い側に寄る。

3DGS と従来のメッシュのオクルージョンの関係、影の投影、後処理に影響する。既定値がほとんどの場合に適する。値の説明は 画面調節 - 深度しきい値 を参照する。

GetEffectiveNormalGenerationMode

UFUNCTION(BlueprintPure, Category = "XGrids")
ELCC2NormalGenerationMode GetEffectiveNormalGenerationMode() const;

ライセンスの検証を経て実際に有効になっている法線モードを返す。

戻り値:ライセンス済みの場合は NormalMode の元の値を返す。ライセンスの制限を受ける ProxyMesh を選んだが未ライセンスの場合は Fixed を返す。

使い方の要点:

  • 保存されている NormalMode プロパティは変更されず、レンダリング時にフォールバック後のモードで動くだけである。したがって NormalMode を読んだ結果とこの関数の結果は一致しないことがある。
  • UI で通知するときにこれを使う。ユーザーが ProxyMesh を選んだのに実際には Fixed で動いている場合は、画面上で説明を出すべきである。
const ELCC2NormalGenerationMode Requested = Comp->NormalMode;
const ELCC2NormalGenerationMode Effective = Comp->GetEffectiveNormalGenerationMode();

if (Requested != Effective)
{
    UE_LOG(LogTemp, Warning,
        TEXT("ProxyMesh mode requires a license, fell back to Fixed"));
}

テキスト形式の Blueprint:

[Get Effective Normal Generation Mode]
        Target = (LCC2 Component)
        │ Return Value ──┐
        ▼                │
[Equal (Enum)] ◀─────────┘
        A = (Return Value)
        B = Proxy Mesh
        │
        ▼
[Branch]
        │ False
        ▼
[Print String]  In String = "ProxyMesh にはライセンスが必要なので Fixed にフォールバックした"

Other Methods

GetMetaInfo2

FLCC2MetaInfo GetMetaInfo2();

LCC2 の完全なメタ情報を返す。C++ からのみ利用できる。

基底クラスの GetMetaInfo() より、作業パス、データソースの種類、球面調和の次数、八分木のルートノード、ファイルの一覧などのフィールドが多い。フィールドの説明は Structs を参照する。

GetLccVersion

virtual ELCCVersion GetLccVersion() const override;

常に ELCCVersion::LCC2 を返す。

See Also

  • 法線とライティング:法線モードとライティング輝度の完全な説明
  • 画面調節:SH の次数、深度しきい値などのパラメーターの値
  • ULCCComponentBase:共通のレンダリングとパフォーマンスのインターフェース
  • ALCC2ProxyMesh:ProxyMesh 法線モードに対応する Actor
  • SOG / SPZ / PLY Actors:これら 3 つの形式もこのコンポーネントを使う
  • Enums:法線モードの値
前へ
ULCCComponent
次へ
SOG / SPZ / PLY Actors