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

    • PortalCam P1

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

    • Lixel K1

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

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

    • Lixel L2 Pro

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

      • 製品概要
      • デバイスの基本操作
      • デバイスのアクティベーションと接続
      • デバイス収集
      • 絶対座標点群データの取得
      • 付録
  • アクセサリー

    • Stick Light

      • 取り付けガイド
      • 基本操作
      • よくある質問
  • 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 とトラブルシューティング
    • LCC Studio Linux

      • 製品概要説明
      • 基本アーキテクチャマニュアル
      • インストールと展開説明書
      • コンテナ起動パラメータ説明書
      • CodeMeter オフラインライセンス展開説明書
      • APIコマンドセット
      • 付録-開発者データマニュアル
      • 付録-エラーコード一覧
      • シングルノードマルチGPUクラスタ展開QuickStart
    • 活用テクニック

      • 複数の大規模 3DGS モデルの統合ワークフロー
    • バージョン履歴
  • プラグインと SDK

    • Unreal

      • 概要
      • クイックスタート - Windows
      • クイックスタート - Linux
      • クイックスタート - Quest3
      • エディションとライセンス
      • レンダリング
      • Tiled ラスタライズ(実験的機能)
      • 画面調節
      • 法線とライティング
      • シーン編集
      • パフォーマンスパラメーター
      • パフォーマンス最適化ガイド
      • サードパーティおよびエンジンプラグインとの連携
      • プロキシメッシュ
      • 読み込みアニメーション
      • コリジョン
      • ナビゲーションシステム対応
      • Single layer water 対応
      • ローカライズ
      • よくある質問
      • トラブルシューティング
      • ログと診断
      • お問い合わせ
      • ベストプラクティス

        • LixelStudio メッシュで 3DGS をリライティングする
      • API リファレンス

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • SOG / SPZ / PLY Actors
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enums
        • Structs
      • 更新履歴

        • v3.4.0
        • 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
    • Unity

      • Unity SDK の概要
      • 技術的特徴
      • 開発環境の要件
      • PC クイックスタートガイド
      • プロジェクト設定の最適化ガイド
      • Pico 4 Ultra 開発ガイド
      • Pico 4 Ultra PC ストリーミングガイド
      • Quest 3 開発ガイド
      • Quest 3 PC ストリーミングガイド
      • OpenXR 開発ガイド
      • Pico 4 Ultra Business Streaming ガイド
      • 用語集
      • FAQ
      • お問い合わせ
      • 機能開発ガイド

        • 複数シーン混合レンダリング開発ガイド
        • 影の受光開発ガイド
        • リアルタイムライティング開発ガイド
        • マルチカメラレンダリング開発ガイド
        • 高解像度画像レンダリング開発ガイド
        • LCC / LCC2 データ形式互換性開発ガイド
        • 読み込みエフェクト開発ガイド
        • Mip レンダリングモード切り替え開発ガイド
        • エッジ・コーナースナップ開発ガイド
        • 投影デカール開発ガイド
        • ビデオ投影デカール開発ガイド
        • ハイライト開発ガイド
        • リアルタイムクリッピング開発ガイド
        • カラー調整開発ガイド
        • シーン Mesh データ取得開発ガイド
        • エディターモード開発ガイド
        • レンダリングパフォーマンスパラメータ設定ガイド
        • アプリケーションとデータの同梱パッケージ開発ガイド
        • コリジョンシステム開発ガイド
        • macOS 開発の権限問題ガイド
        • iOS デバイスのコンパイル・パッケージ化開発ガイド
      • API リファレンス

        • LCCManager
        • Renderer
        • データ型
      • 変更履歴

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14
    • Web

      • はじめに
      • レンダリング性能最適化ガイド
      • グラフィックス設定
      • よくある質問
      • API リファレンス

        • LCCRender::clearIndexDB
        • LCCRender::dispose
        • LCCRender::load
        • LCCRender::setCamera
        • LCCRender::unload
        • LCCRender::update
        • LCCObject::checkRenderNextFrame
        • LCCObject::clearRenderNextFrame
        • LCCObject::ecef2Prj
        • LCCObject::getBounds
        • LCCObject::getEnvInstancedMesh
        • LCCObject::getInstancedMesh
        • LCCObject::getLodInfos
        • LCCObject::getOriginPosition
        • LCCObject::getProjectionCoordinateSystemInfos
        • LCCObject::hasCollision
        • LCCObject::hasEnvironment
        • LCCObject::hasShcoef
        • LCCObject::intersectsCapsule
        • LCCObject::intersectsRayExt
        • LCCObject::intersectsRayFromOriginExt
        • LCCObject::intersectsSphere
        • LCCObject::lowerToBottom
        • LCCObject::prj2Ecef
        • LCCObject::raiseToTop
        • LCCObject::raycast
        • LCCObject::raycastFromOrigin
        • LCCObject::setAlpha
        • LCCObject::setClipBox
        • LCCObject::setClipPlane
        • LCCObject::setEndLod
        • LCCObject::setLodAutoLevelUp
        • LCCObject::setMaxDistance
        • LCCObject::setMaxNodeSplats
        • LCCObject::setMaxSplats
        • LCCObject::setOriginPosition
        • LCCObject::setPointsColor
        • LCCObject::setRenderState
        • LCCObject::setRotation
        • LCCObject::setScale
        • LCCObject::setSemantic
        • LCCObject::setSemanticColor
        • LCCObject::setSmooth
        • LCCObject::setStartLod
        • LCCObject::setTranslation
        • LCCObject::setVisible
        • LCCObject::togglePointsDisplayMode
        • LCCObject::useEnvironment
        • LCCObject::useShcoef
      • 更新履歴

        • v0.6.3
        • v0.6.2
        • v0.6.1
        • v0.6.0
        • v0.5.5
        • v0.5.4
        • v0.5.3
        • v0.5.2
        • v0.5.1
        • v0.5.0
        • v0.4.1
        • v0.4.0
        • v0.3.1
        • v0.3.0
        • v0.2.0

LCC / LCC2 データ形式互換性開発ガイド

LCC2 データ形式は、より優れたデータ圧縮と LOD 機構を提供します。従来の LCC 形式は徐々に LCC2 に置き換えられ、従来の LCC SDK(v1.x)も徐々にメンテナンスされなくなります。新旧のデータ形式は大きく異なるため、新しい LCC SDK(v2.x)は LCC 形式と後方互換がありません。データ互換性は次の 2 つの方法で実現できます。

  1. 公式コンバータ(LccConverter)の exe/dll を使用して LCC データ形式を LCC2 に変換し、SDK で使用します。
  2. アプリケーション層で LCC と LCC2 のデータ形式互換性を実装します。

このガイドでは主に、アプリケーション層でデータ形式互換性を実装する流れと手順、つまり 2 バージョンの SDK を同じ Unity プロジェクトに同時にインポートし、データ形式に基づいて対応するバージョンを自動選択してレンダリング・処理する方法を説明します。

手順 1:Unity バージョンとプロジェクト設定

Unity バージョンとプロジェクト設定は SDK を単独で使用する場合と同じで、追加の設定は不要です。PC クイックスタートガイド と プロジェクト設定の最適化ガイド を参照してください。

手順 2:2 つの SDK バージョンをインポートする

Unity UPM を通じて SDK v1.4.8 以降(v1.4.32 を推奨)と SDK v2.0.1 以降 をインポートします。インポート後、v1.x バージョンは Legacy と表示されます。2 つの SDK バージョンは互いに影響せず共存できます。

注:

  • SDK v1.4.32 は GitHub からダウンロードできます:https://github.com/xgrids/LCC-Unity-SDK/releases
  • SDK v1.4.32 の名前空間は LCCCore_Legacy、マネージャコンポーネントは LCCManager_Legacy です。v2.x の名前空間は LCCCore、マネージャコンポーネントは LCCManager です。

手順 3:シーンを設定する

シーンに LCCController という名前の空のオブジェクトを作成し、LCCManager_Legacy と LCCManager の両方のコンポーネントをアタッチします。

LCCController オブジェクトに LCCManager_Legacy と LCCManager コンポーネントをアタッチ

LCCController オブジェクトに LCCManager_Legacy と LCCManager コンポーネントの両方をアタッチ

注:

LCCController GameObject の Transform 設定(Rotation.x = -90、Scale.x = -1)は、LCC データ座標系にアライメントするためのものです。座標系アライメントの詳細は Unity SDK の概要 の「LCC データの座標系」を参照してください。

手順 4:MultiSDKController スクリプトを書く

MultiSDKController.cs という名前の新しい C# スクリプトを以下のコードで作成します。

using LCCCore;
using LCCCore_Legacy;
using System.IO;
using UnityEngine;

public class MultiSDKController : MonoBehaviour
{
    public LCCManager_Legacy m_managerLegacy;          // LCC SDK v1.4.8 以前用
    public LCCManager m_manager;                       // LCC SDK v2.0.0 以降用
    public string m_FilePath;                          // LCC ファイルパス
    private LCCCore_Legacy.Renderer m_rendererLegacy;  // LCC SDK v1.4.8 以前用
    private LCCCore.Renderer m_renderer;               // LCC SDK v2.0.0 以降用
    private DataType m_dataType;                       // データ型。どの SDK を使うか判断するために使用

    void Start()
    {
        string extension = Path.GetExtension(m_FilePath);
        if (extension == ".lcc")
        {
            m_manager.Enable = false; // v2.0.0 以降のマネージャを無効化
            m_dataType = DataType.LCC;
            m_rendererLegacy = m_managerLegacy.GetRender(this.transform);
            m_rendererLegacy.Load(m_FilePath, LCCCore_Legacy.PlatformType.PC, onLoadCallback);
        }
        else if (extension == ".lcc2")
        {
            m_managerLegacy.Enable = false; // v1.4.8 以前のマネージャを無効化
            m_dataType = DataType.LCC2;
            m_renderer = m_manager.GetRender(this.transform);
            m_renderer.Load(m_FilePath, LCCCore.PlatformType.PC, onLoadCallback);
        }
    }

    private void onLoadCallback()
    {
        Debug.Log("データが読み込まれました !!!");
    }

    // メソッド呼び出し例:データ型で操作対象の SDK レンダラーを判断
    public void onRenderPointClick()
    {
        if (m_dataType == DataType.LCC)
            m_rendererLegacy.SwitchRenderMode(LCCCore_Legacy.RenderMode.PointCloud);
        else if (m_dataType == DataType.LCC2)
            m_renderer.SwitchRenderMode(LCCCore.RenderMode.PointCloud);
    }

    void OnDestroy()
    {
        if (m_dataType == DataType.LCC)
            m_rendererLegacy?.Dispose();
        else if (m_dataType == DataType.LCC2)
            m_renderer?.Dispose();
    }

    public enum DataType { LCC, LCC2 }
}

注:

  • スクリプトファイル名はクラス名と一致させる必要があります(MultiSDKController.cs は class MultiSDKController に対応)。一致しないと GameObject にアタッチできません。
  • 2 つのバージョンは名前空間が異なります(LCCCore と LCCCore_Legacy)。Renderer、PlatformType、RenderMode など同じ名前の型を使用する場合は、名前空間を前置して区別する必要があります。
  • 例ではファイル拡張子(.lcc / .lcc2)でデータ形式を判定し、対応する SDK バージョンを選択します。

手順 5:スクリプトをアタッチしてプロパティを設定する

  1. MultiSDKController.cs スクリプトをシーンの LCCController オブジェクトにもアタッチします。
  2. Inspector ウィンドウで、LCCManager と LCCManager_Legacy コンポーネントを対応するスクリプトプロパティへドラッグします。
  3. スクリプトの File Path プロパティに LCC / LCC2 ファイルパスを入力します。
MultiSDKController スクリプトをアタッチしてプロパティを設定

MultiSDKController スクリプトをアタッチして Inspector でプロパティを設定

これでコードを実行すると、LCC データ形式に基づいて対応する SDK バージョンが自動的にレンダリングに使用され、データ形式の互換性が実現されます。

重要な手順

アプリケーション層で LCC / LCC2 データ形式互換性を実装するための重要な手順は以下のとおりです。

  1. UPM を通じて v1.x(Legacy)と v2.x の両方の SDK バージョンをインポートします。2 つは共存できます。
  2. 同じオブジェクトに LCCManager_Legacy と LCCManager の両方のマネージャコンポーネントをアタッチします。
  3. データ形式(ファイル拡張子 .lcc / .lcc2)に基づいて、対応するバージョンのマネージャを選択してレンダラーを作成し、データを読み込みます。
  4. 使用するバージョンを決定したら、他方のバージョンのマネージャを無効化します(Manager.Enable = false)。
  5. データの切り替えや破棄時は、Renderer.Dispose() で現在レンダリング中のデータをアンロードします。

データ形式互換性の注意事項

  • LCC と LCC2 の同時レンダリングはサポートされていません。 したがって、データ切り替え時は現在レンダリング中のデータを先にアンロードする必要があります(Renderer.Dispose() を呼び出します)。さもないとメモリやビデオメモリのリークを引き起こす可能性があります。

  • 未使用の Manager を無効化する。 使用する SDK バージョンを決定したら、他方の SDK バージョンの Manager オブジェクトを無効化するのが最善です(Manager.Enable = false)。さもないと、いくらかの無駄なパフォーマンスオーバーヘッドが生じる可能性があります。

  • API インターフェースは一貫していますが、正しい Renderer を呼び出す必要があります。 2 つの SDK バージョンの API インターフェースはまったく同じです(v2.x では多くの API が Manager クラスへ移動しています。API マニュアルを参照)。ただし、正しいバージョンの Renderer(m_rendererLegacy または m_renderer)を呼び出すことを確認する必要があります。また、v2.0.0 以降はカラー調整とクリッピングデータの保存をサポートしなくなり、他の一部 API も非推奨になっています。対応するバージョンの開発者ドキュメントを確認してください。

関連 API

このソリューションは主に 2 つの SDK バージョンのマネージャとレンダラー API を使用します。以下では v2.x(LCCCore)を例に説明します。v1.x(LCCCore_Legacy)は名前空間が異なるだけでインターフェースは同じです。

LCCManager.Enable

// プロパティ
public bool Enable { get; set; }

マネージャの有効化スイッチです。false に設定すると、その SDK バージョンのマネージャが無効化され、他方のバージョンと同時に動作することによる無駄なパフォーマンスオーバーヘッドを回避します。

使用例:

// LCC2 データを使用する場合、Legacy マネージャを無効化
m_managerLegacy.Enable = false;

注:

  • 使用するバージョンを決定したら、他方のバージョンのマネージャを無効化することを推奨します。

GetRender

// 戻り値: Renderer → レンダリングインスタンス。失敗時は null
public Renderer GetRender(Transform _transform)

レンダリングインスタンスを作成し、指定した Transform にバインドします。

パラメータ型説明
_transformTransformレンダリングインスタンスがアタッチされる Transform

使用例:

m_renderer = m_manager.GetRender(this.transform);

注:

  • レンダラーがデータ形式に一致するよう、対応するバージョンのマネージャを通じて作成する必要があります。

Renderer.Dispose

// 戻り値: void
public void Dispose()

レンダリングインスタンスを破棄し、すべての GPU リソースとメモリを解放します。破棄後のインスタンスは再使用できません。

使用例:

m_renderer?.Dispose();

注:

  • データ切り替え前に、現在のデータを先にアンロードする必要があります。さもないとメモリやビデオメモリのリークを引き起こす可能性があります。
  • 呼び出し後、自動的に Manager に参照の削除を通知します。
  • オブジェクト破棄時(OnDestroy)に呼び出すことを推奨します。