ニューラルネットワーク・モデルのプリロード( Neural Network Model Preloading)の使い方
メッシングやデプスなどの認識機能は、ARセッションで各ピクセルをどのように描画するかを知るためにニューラルネットワークモデルを使用します。 実行時のパフォーマンスを向上させるために、モデルのプリロードにより、前もってモデルファイルをダウンロードすることができます。これにより、インストールプロセスをフロントローディングし、ユーザーエクスペリエンスに悪影響を与えるジャストインタイムのロード遅延を回避することができます。

前提条件
- Lightship ARを有効にしたUnityのプロジェクトが必要です。 詳細については、 ARDK 3.0 のインストールを参照してください。
Neural Network Performance Modes
Lightshipのアウェアネス機能は、さまざまなパフォーマンスモードをサポートしており、開発者はパフォーマンス、品質、またはバランスの取れたミックスを選択することができます。 これらのモードは、 XROcclusionSubsystem
で使用される Unity EnvironmentDepthMode 値 に類似しています。
例えば、 Fast
は、品質を犠牲にして処理時間を短縮するように最適化し、 Smooth
は、最高のグラフィックを提供するために時間をかける。 各モードは、AR機能を使用する前にプリロードできる独自のニューラルネットワークモデルファイルを持っています。 独自のニューラルネットワークモデルファイルを提供したい開発者のために、RegisterModelは
定義済みのLightshipモデルをオーバーライドすることができます。
機能モードを要求するには、アウェアネス機能を開始する前に機能とモードを指定します:
DownloadModel(DepthMode.Medium);
DownloadModel(SemanticsMode.Smooth);
Runtime/Utilities/Preloading/Feature.cs
を参照してください。
ライトシップ・ニューラルネットワーク・モデルのプリロード
アウェアネス機能を開始する前に、ニューラルネットワークモデルファイルをプリロードします:
- アプリケーションのパフォーマンスと品質のニーズに基づいて、プリロードするモデルを決定します。
- プリロードのタイミングを決めます。 プリロードは、AR Foundation が Lightship ローダーを初期化した後(
XRGeneralSettings.Instance.Manager.isInitializationComplete
が true の場合)、アウェアネス機能が開始する前であればいつでも実行できます。 例えば、ARスクリプトがMonoBehaviour
の場合、プリロードはStart()
の間に行うことができます。 ::注意 注意!
プリロードAPIを使用するシーンにアクティブなAR Managerがないことを確認してください。 AR Managerが存在する場合、関連するモデルは自動的にダウンロードされます。 :::
モデルのプリロードAPIは、Lightship ARセッションが開始した後のランタイム中にのみ利用可能です。 モデルがプリロードされていない場合、アウェアネス機能が起動時に自動的に選択します。
-
UIオブジェクトで
キャンバスを
設定します:- ヒエラルキーで、メインシーンを右クリックし、UIメニューを開いてキャンバスを選択します。
- この作業をあと4回繰り返して、
Button
オブジェクトを2つ、Text
オブジェクトを2つ追加する。 好きなように見た目をカスタマイズできる。
-
プリロードが行われるべきシーンに、空の
GameObject
を作成する:- Hierarchyでシーンを右クリックし、 Create Emptyを選択します。 新しい
GameObject
ModelPreloader.
- Hierarchyでシーンを右クリックし、 Create Emptyを選択します。 新しい
-
新しいスクリプトコンポーネントを空に追加する:
- Hierarchy でModelPreloaderを選択し、Inspector でAdd Componentをクリックして新しいスクリプトを追加します。
-
スクリプトの一番上に、UI Objects用のシリアライズされたフィールドを追加する:
[SerializeField]
private Button _downloadButton;
[SerializeField]
private Button _clearButton;
[SerializeField]
private Text _progressPercentText;
[SerializeField]
private Text _statusText; -
GameObjectをInspectorでスクリプトにアタッチします:
-
プライベートなプリローダーフィールドを作成し、ダウンロードするモデル機能を設定し、状態を追跡するためにboolを追加します:
Start
メソッドでModelPreloaderFactoryを使って
オブジェクトをインスタンス化します:
private IModelPreloader preloader;
private DepthMode _depthMode = DepthMode.Medium;
private bool _isDownloading = false;
private void Start()
{
preloader = ModelPreloaderFactory.Create();
if (null == preloader)
{
// プリロードする前にXRの初期化を待つ必要がある。
// プリローダーのインスタンス化を後の関数に延期する。
}