ニューラルネットワーク・モデルのプリロード( Neural Network Model Preloading)の使い方
メッシングやデプスなどの認識機能は、ARセッションで各ピクセルをどのように描画するかを知るためにニューラルネットワークモデルを使用します。 実行時のパフォーマンスを向上させるために、モデルのプリロードにより、前もってモデルファイルをダウンロードすることができます。これにより、インストールプロセスをフロントローディングし、ユーザーエクスペリエンスに悪影響を与えるジャストインタイムのロード遅延を回避することができます。
前提条件
- Lightship ARを有効にしたUnityのプロジェクトが必要です。 詳細については、 ARDK 3.0 のインストールを参照してください。
Neural Network Performance Modes
Lightshipのア ウェアネス機能は、さまざまなパフォーマンスモードをサポートしており、開発者はパフォーマンス、品質、またはバランスの取れたミックスを選択することができます。 これらのモードは、 XROcclusionSubsystem
で使用される Unity EnvironmentDepthMode 値 に類似しています。
例えば、 Fast
は、品質を犠牲にして処理時間を短縮するように最適化し、 Smooth
は、最高のグラフィックを提供するために時間をかける。 Custom
モードもあり、定義済みのLightshipモデルをオーバーライドすることなく、独自のニューラル・ネットワーク・モデル・ファイルを提供することができます。 各モードは、AR機能を使用する前にプリロードできる独自のニューラルネットワークモデルファイルを持っています。
機能モードを要求するには、アウェアネス機能を開始する前に機能とモードを指定します:
DownloadModel(DepthMode.Medium);
DownloadModel(SemanticsMode.Smooth);
Runtime/Utilities/Preloading/Feature.cs
を参照してください。
Lightship Neural Network Modelのプリロード
アウェアネス機能を開始する前に、ニューラルネットワークモデルファイルをプリロードします:
- プリロードが行われるべきシーンに、空の
GameObject
を作成する:- Hierarchyでシーンを右クリックし、 Create Emptyを選択します。
- 新しいスクリプトコンポーネントを空に追加する:
- 空の
GameObject
を Hierarchyで選択し、 Inspectorで、 Add Componentをクリックし、新しいスクリプトを追加します。
- 空の
- アプリケーションのパフォーマンスと品質のニーズに基づいて、プリロードするモデルを決定します。
- プリロードのタイミングを決めます。 プリロードは、AR Foundation が Lightship ローダーを初期化した後(
XRGeneralSettings.Instance.Manager.isInitializationComplete
が true の場合)、アウェアネス機能が開始する前であればいつでも実行できます。 例えば、ARスクリプトがMonoBehaviour
の場合、プリロードはStart()
の間に行うことができます。
モデルのプリロードAPIは、Lightship ARセッションが開始した後のランタイム中にのみ利用可能です。 モデルがプリロードされていない場合、アウェアネス機能が起動時に自動的に選択します。
ModelPreloader
オブジェクトをModelPreloaderFactory
でインスタンス化します:
private void Start()
{
IModelPreloader preloader = ModelPreloaderFactory.Create();
if (null == preloader)
{
// プリロードする前にXRが初期化されるのを待つ必要がある。
// プリローダーのインスタンス化を後の関数に延期する。
return;
}.
}
- カスタムニューラルネットワークファイルを使用している場合は、
ExistsInCache()
を呼び出して、モデルがすでにキャッシュに存在するかどうかをチェックします。
if (preloader.ExistsInCache(DepthMode.Medium))
{
// モデルはすでにキャッシュにある。 ダウンロードは不要。
}
DownloadModel(Feature, FeatureMode)
を呼び出し、ダウンロードを開始する:
preloader.DownloadModel(DepthMode.Medium);
- ユーザーにダウンロードの進捗状況を表示したい場合は、定期的に
CurrentProgress()
を呼び出す。progress
が1.0
の場合、モデルのプリロードは完了します。 使用例:
private void Update()
{
var statusCode = preloader.CurrentProgress(DepthMode.Medium, out float progress)
if (Mathf.Approximately(progress, 1.0f))
{
// The download has completed successfully, or the model was already in the cache
}
}
ローカルモデルファイルの登録
ARセッションを開始するときに、高価なダウンロードプロセスを実行するのを避けるために、モデルファイルを事前にダウンロードしておくとよいでしょう。 これをサポートするために、ModelPreloaderは、任意のフィーチャーモードに対してローカルモデルファイルを登録することができます。
ローカルモデルファイルをARDKに登録する:
- モデルファイルが、アプリケーションがアクセスできる場所にあることを確認してください。
- プリロードが行われるべきシ ーンに、空の
GameObject
を作成する:- Hierarchyでシーンを右クリックし、 Create Emptyを選択します。
- 新しいスクリプトコンポーネントを空に追加する:
- 空の
GameObject
を Hierarchyで選択し、 Inspectorで、 Add Componentをクリックし、新しいスクリプトを追加します。
- 空の
- アプリケーションのパフォーマンスと品質のニーズに基づいて、プリロードするモデルを決定します。
- プリロードのタイミングを決める。 プリロードは、AR Foundation が Lightship ローダーを初期化した後(
XRGeneralSettings.Instance.Manager.isInitializationComplete
が true の場合)、アウェアネス機能が開始する前であればいつでも実行できます。 例えば、ARスクリプトがMonoBehaviour
の場合、プリロードはStart()
の間に行うことができます。
機能モードにモデルを登録すると、ARセッションの残りの時間はそ のモデルが上書きされます。 これを避けたい場合は、 Custom
。
ModelPreloader
オブジェクトをModelPreloaderFactory
でインスタンス化する:
private void Start()
{
IModelPreloader preloader = ModelPreloaderFactory.Create();
if (null == preloader)
{
// プリロードする前にXRが初期化されるのを待つ必要がある。
// プリローダーのインスタンス化を後の関数に延期する。
return;
}.
}