Unity には、一般的にすべてのプラットフォームで一般的なケースである一連の既定のオプションが用意されています。 ただし、Unity には、プロジェクト設定で切り替えることができる Mixed Reality に固有のいくつかの動作が用意されています。
パフォーマンス環境の設定
低品質設定
特に HoloLens 開発では、アプリケーションが適切なフレームレートで実行および動作するように、Unity の品質設定を [非常に低] に変更することが重要です。 イマーシブ ヘッドセットでの開発の場合、VR エクスペリエンスを提供するデスクトップの仕様に応じて、最も低い品質パラメーターなしでフレームレートを実現できます。
Unity 2019 LTS+ では、[編集]>プロジェクト設定>品質に移動し、下向き矢印をクリックして既定値を **非常に低い品質レベルに設定することで、プロジェクトの品質レベルを設定できます。
照明設定
品質シーンの設定と同様に、Mixed Reality アプリケーションに最適な照明設定を設定することが重要です。 Unity では、通常シーンのパフォーマンスに最も大きな影響を与える Lighting 設定は Realtime Global Illumination です。 [Window>Rendering]>[Lighting Settings]>[Realtime Global Illumination] の順に移動して、グローバル イルミネーションをオフにすることができます。
別の照明設定、 ベイクされたグローバル イルミネーションがあります。 この設定は、イマーシブ ヘッドセットでパフォーマンスと視覚的に印象的な結果を提供できますが、HoloLens 開発には適用されません。 ベイク処理されたグローバル イルミネーション は、静的ゲームオブジェクトに対してのみ計算されます。未知の変化する環境の性質上、HoloLens シーンでは見つかりません。
詳細については、Unity の Global Illumination を参照してください。
注:
リアルタイム グローバル イルミネーションはシーンごとに設定されるため、開発者はプロジェクト内のすべての Unity シーンにこのプロパティを保存する必要があります。
単一パスインスタンス化レンダリング パス
Mixed Reality アプリケーションでは、シーンは 2 回 (片目ごとに 1 回) レンダリングされます。 従来の 3D 開発と比較して、これにより計算する必要がある作業量が実質的に 2 倍になります。 Unity で最も効率的なレンダリング パスを選択して、CPU と GPU の両方の時間を節約することが重要です。 シングル パスインスタンス レンダリングは、Mixed Reality アプリの Unity レンダリング パイプラインを最適化します。この設定は、すべてのプロジェクトで既定で有効にすることをお勧めします。
Unity プロジェクトでこの機能を有効にするには
- [OpenXR の設定] を開きます ([編集]>[プロジェクト設定]>[XR プラグイン管理]>OpenXR に移動します)。
- レンダリング モード(Render Mode) ドロップダウン メニューからシングル パスインスタンス化 (Single Pass Instanced) を選択します。
このレンダリング アプローチの詳細については、Unity の次の記事をお読みください。
注:
シングル パス インスタンス レンダリングに関する一般的な問題の 1 つは、開発者がインスタンス化用に記述されていない既存のカスタム シェーダーを既に持っている場合に発生します。 この機能を有効にすると、開発者は一部のゲーム オブジェクトが片目でのみレンダリングされることに気付く場合があります。 これは、関連付けられているカスタム シェーダーにインスタンス化に適したプロパティがないためです。
深度バッファー共有を有効にする
ユーザーの認識からのホログラムの安定性を向上させるには、Unity で深度バッファー共有プロパティを有効にすることをお勧めします。 これをオンにすると、Unity はアプリケーションによって生成された深度マップを Windows Mixed Reality プラットフォームと共有します。 その後、プラットフォームは、アプリケーションによってレンダリングされる特定のフレームのシーン専用のホログラムの安定性をより適切に最適化できます。
Unity プロジェクトでこの機能を有効にするには
- [OpenXR の設定] を開きます ([編集]>[プロジェクト設定]>[XR プラグイン管理]>OpenXR に移動します)。
- [Depth Submission Mode (深度サブミッション モード)] ドロップダウン メニューから [Depth 16 Bit (深度 16 ビット)] を選択します。
16 ビット深度バッファーの設定は、HoloLens 開発時に特に推奨されます。 24 ビットと比較して 16 ビットを選択すると、移動/処理するデータが少なくなるため、帯域幅要件が大幅に削減されます。 とはいえ、最適化には一定のコストが伴います。 以下の [重要な ] ボックスに記載されている影響を必ず理解してください。
Windows Mixed Reality プラットフォームでは、ホログラムの安定性を最適化するために、深度バッファーの精度を確保し、画面上のレンダリングされたホログラムと一致させる必要があります。 したがって、深度バッファーの共有がオンになっている場合、色をレンダリングするときに深度もレンダリングすることが重要です。 Unity では、ほとんどの Opaque または TransparentCutout マテリアルはデフォルトで深度をレンダリングしますが、透明オブジェクトとテキスト オブジェクトは深度をレンダリングしませんが、これはシェーダーやその他の要因に依存します。
Mixed Reality ツールキット Standard シェーダーを使用する場合、透明なオブジェクトの深度をレンダリングするには:
- MRTK Standard シェーダーを使用している透明マテリアルを選択し、インスペクター エディター ウィンドウを開きます。
- 深度バッファー共有警告内の [今すぐ修正 ] ボタンを選択します。 これは、 レンダリング モード を カスタムに設定することで手動で実行することもできます。次に 、[モード] を [透明] に設定し、最後に [深度書き込み] を [オン] に設定します。
重要
デベロッパーは、これらの値をカメラの近平面/遠距離平面の設定と共に変更するときに、Z ファイティングに注意する必要があります。 Z ファイティングは、2 つのゲームオブジェクトが同じピクセルにレンダリングしようとしたときに発生しますが、深度バッファーの忠実度 (z 深度) の制限により、Unity はどちらのオブジェクトがもう一方の前にあるかを識別できません。 開発者は、同じ z 深度値をめぐって 争 うときに、2 つのゲーム オブジェクト間のちらつきに気付くでしょう。 これは、24 ビット深度形式に切り替えることで解決できます。これは、カメラからの z 深度を計算する各オブジェクトの値の範囲が広がるためです。
ただし、特に HoloLens 開発では、代わりにカメラの近平面と遠距離平面を狭く変更し、16 ビット深度形式を保持することをお勧めします。 z 深度は、近距離カメラ平面と遠距離カメラ平面に沿った値の範囲に非線形的にマップされます。 これは、シーンで Main Camera を選択し、 Inspector の下で Near & Far Clipping Plane の値を変更して範囲を縮小することで変更できます (つまり、1000m から 100m またはその他の x 値など)。
重要
Unity は、16 ビット深度フォーマットを使用している場合、ステンシル バッファーを作成しません。 そのため、一部の Unity UI エフェクトやその他のステンシルを必要とするエフェクトは、8 ビット ステンシル バッファーを作成する 24 ビットの深度フォーマットが選択されていない限り機能しません。
IL2CPP 向けのビルド
Unity では .NET スクリプト バックエンドのサポートが廃止されたため、開発者が UWP Visual Studio ビルドに IL2CPP を利用することをお勧めします。 これにはさまざまな利点がありますが、Unity for IL2CPP から Visual Studio ソリューションをビルドする場合、以前の .NET メソッドよりも遅くなる可能性があります。 そのため、開発の反復時間を節約するために、 IL2CPP を構築するためのベスト プラクティスに従うことを強くお勧めします。
- 増分ビルドを活用するには、プロジェクトを毎回同じディレクトリにビルドし、そこで事前ビルド済みファイルを再利用します。
- プロジェクト & ビルド フォルダーのマルウェア対策ソフトウェアのスキャンを無効にします。
- Windows 10設定アプリでウイルス & の脅威防止を開きます
- ウイルス & 脅威の防止の設定で [設定の管理] を選択します
- [除外] セクションで [除外の追加または削除] を選択します
- [除外の追加] を選択し、Unity プロジェクト コードとビルド出力を含むフォルダーを選択します
- 建築には SSD を使用します。
詳細については、「 IL2CPP のビルド時間の最適化」 を参照してください。
注:
さらに、特に大量のアセット (スクリプト ファイルを除く) や絶えず変化するシーン/アセットを持つ Unity プロジェクトの場合は、キャッシュ サーバーを設定すると有益な場合があります。 プロジェクトを開くと、Unity は条件を満たすアセットを開発者マシン上の内部キャッシュ形式に保存します。 品目を修正した場合は、再インポート、したがって再処理する必要があります。 このプロセスは、すべての開発者が新しい変更の再インポートをローカルで処理する代わりに、一度実行してキャッシュ サーバーに保存し、その結果、他の開発者と共有して時間を節約できます。
公開プロパティ
ホログラフィック スプラッシュ スクリーン
HoloLens にはモバイル クラスの CPU と GPU が搭載されているため、アプリの読み込みに時間がかかる場合があります。 アプリの読み込み中は、ユーザーには黒だけが表示されるため、何が起こっているのか疑問に思うかもしれません。 読み込み中に安心させるために、ホログラフィック スプラッシュ スクリーンを追加できます。
ホログラフィック スプラッシュ画面を切り替えるには:
[ Edit>Project Settings>Player page] に移動します。
[ Windows ストア ] タブを選択し、[ スプラッシュ画像 ] セクションを開きます。
Windows Holographic > Holographic Splash Image プロパティの下にある画像を適用します。
- [Show Unity Splash Screen] オプションを切り替えると、Unity ブランドのスプラッシュ画面が有効または無効になります。 Unity Pro ライセンスをお持ちでない場合は、Unity ブランドのスプラッシュ画面が常に表示されます。
- ホログラフィック スプラッシュ イメージが適用されている場合、[Unity スプラッシュ画面を表示] チェックボックスを有効か無効かにするかにかかわらず、常に表示されます。 カスタム ホログラフィック スプラッシュ画像の指定は、Unity Pro ライセンスを持つ開発者のみが使用できます。
Unity スプラッシュ画面の表示 ホログラフィック スプラッシュ画像 動作 オン なし 既定の Unity スプラッシュ画面を 5 秒間またはアプリが読み込まれるまでの、どちらか長い方の間表示します。 オン Custom カスタム スプラッシュ画面を 5 秒間またはアプリが読み込まれるまでの、どちらか長い方の間表示します。 Off なし アプリが読み込まれるまで、透明な黒 (何も表示されません) を表示します。 Off Custom カスタム スプラッシュ画面を 5 秒間またはアプリが読み込まれるまでの、どちらか長い方の間表示します。
詳細については、Unity のスプラッシュ画面のドキュメントを参照してください。
トラッキング損失
Mixed Reality ヘッドセットは、周囲の環境を見て、ホログラムを所定の位置に留めることができるワールド ロック座標系を構築します。 ヘッドセットがワールド内で自分自身を特定できない場合、ヘッドセットは 追跡を失ったと言われます。 このような場合、空間ステージ、空間アンカー、空間マッピングなど、ワールドロックされた座標系に依存する機能は動作しません。
追跡の損失が発生した場合、Unity の既定の動作では、ホログラムのレンダリングを停止し、ゲーム ループを一時停止し、ユーザーの視線に合わせて追跡損失通知を快適に表示します。 カスタム通知は、追跡損失イメージの形式で提供することもできます。 エクスペリエンス全体をトラッキングに依存しているアプリの場合は、トラッキングが取り戻されるまで Unity にその処理を完全に任せるだけで十分です。 開発者は、損失の追跡中に表示されるカスタム イメージを指定できます。
トラッキングロスト画像をカスタマイズするには:
- [ Edit>Project Settings>Player page] に移動します。
- [ Windows ストア ] タブの [ス プラッシュ画像 ] セクションを開きます。
- Windows Holographic > Tracking Loss Image プロパティの下にある画像を適用します。
自動一時停止のオプトアウト
一部のアプリでは追跡が必要ない場合や (360 度ビデオ ビューアーなどの 向きのみのアプリ )、追跡が失われても処理を中断することなく続行する必要がある場合があります。 既定の追跡損失動作をオプトアウトすることはできますが、追跡損失シナリオでは適切にレンダリングされないオブジェクトを非表示または無効にする責任があります。 ほとんどの場合、その場合にレンダリングすることが推奨されるコンテンツは、メイン カメラを中心とした身体ロックされたコンテンツのみです。
自動一時停止動作をオプトアウトするには:
- [ Edit>Project Settings>Player ] ページに移動します。
- [ Windows ストア ] タブを選択し、[ スプラッシュ画像 ] セクションを開きます
- [損失追跡時の Windows Holographic > の一時停止と画像の表示] チェック ボックスを変更します。
損失イベントの追跡
追跡が失われたときのカスタム動作を定義するには、グローバル な追跡損失イベントを処理します。
機能
アプリで特定の機能を利用するには、アプリはマニフェストで適切な機能を宣言する必要があります。 マニフェスト宣言は Unity で作成できるため、今後すべてのプロジェクト エクスポートに含めることができます。
Mixed Reality アプリケーションの機能は、次の方法で有効にできます。
- [ Edit>Project Settings>Player page] に移動します。
- [ Windows ストア ] タブを選択し、[ 発行の設定 ] セクションを開き、[ 機能] リストを探します。
Holographic アプリで一般的に使用される API を有効にするための適用可能な機能は次のとおりです。
| 機能 | 機能を必要とする API |
|---|---|
| SpatialPerception | SurfaceObserver |
| WebCam | PhotoCapture と VideoCapture |
| PicturesLibrary / VideosLibrary | それぞれ PhotoCapture または VideoCapture (キャプチャされたコンテンツを格納する場合) |
| マイク | VideoCapture (オーディオのキャプチャ時)、DictationRecognizer、GrammarRecognizer、KeywordRecognizer |
| InternetClient | DictationRecognizer (および Unity プロファイラーを使用する) |