本日はHoloLensAdventカレンダー3日目の記事です。
〇HoloLens Adventカレンダーとは?
HoloLens Adventカレンダーは技術関連投稿サイトのQiita上で毎年12月に開かれているイベントの一つです。
あるテーマに沿って12月1日から25日までの間毎日誰かしらが情報共有を行うというイベントになっています。
HoloLens Advent カレンダーは初代HoloLensがリリースされた2016年より毎年開かれ今年で5年目となっています。
〇MRTK OptimizeWindowの使い方
MRTKではUnityにおいて最高のパフォーマンスを発揮できるようにOptipmize Windowsが提供されています。
これはMRTKを導入しているプロジェクトで上部ワールドタブから[MixedReality]→[Utilites]→[Optimize Windows]で使用することができます。
筆者はMRTK Optimize Windowに関して全く使用したことが無く、また知識が無かったため今回ドキュメントを読みながらまとめていきます。
※記事内ではURPを使用していますが、URPに最適にされていないようです。(要確認)
〇ビルドターゲット
最上部には現在のビルドターゲットおよび[PerformanceTarget]が表示されます。
プラットフォームターゲットは以下の種類に分けられます。
・AR Headsets
HoloLensをはじめとしたモバイルARデバイスを指します。
・VR Standalone
Oculus QuestなどスタンドアロンVRデバイスを指します。
・VR Tethered
VIVE,Varjo等のPCVRを指します。
ここまでの設定ではターゲットとしているデバイスを指定しています。この設定が実機とずれている場合適切な最適化が行われません。
〇Setting optimizations
このタブでは、レンダリング設定をチェックすることができ、パフォーマンスを得るためにどの設定を変更すべきかを自動化して通知することができます。
それぞれの項目に対して緑のアイコンは、その設定に対してプロジェクトやシーンで最適な値が設定されていることを意味し、黄色の警告アイコンは現在の設定が改善可能であることを示します。
各セクションの関連ボタンをクリックすると、Unityのプロジェクト/シーンでその設定がより最適な値に自動設定されます。
〇Single Pass Instanced レンダリング
シングルパスインスタンスレンダリングはXRデバイスのように左右二つのディスプレイを持つデバイスなどで、レンダリング時の描画処理をある程度共有化し左右のディスプレイの描画においても負荷軽減を行うレンダリング方式です。
MRアプリケーションでは有効にすることが最適解ですが、Shaderが対応していない場合片目だけ描画されるなどの問題が発生する可能性があります。
〇Depth buffer sharing / Depth Buffer format
[Depth buffer]は3Dオブジェクトを描画する際の2つのオブジェクト同士の奥行を指します。 この精度を変えることで処理を軽くすることができます。
[24bit]と[16bit]があり、16bitのほうが処理が軽いですが、精度が劣ります。
[Depth buffer sharing]はこの深度情報を複数のオブジェクト間で共有することでレンダリング時にホログラムを安定させることができます。
〇Real-time global illumination
グローバルイルミネーションは光源からの直接光だけではなく間接光も考慮することでリアルなグラフィックを実現する手法です。
しかし光源処理はMRアプリでは処理コストが高いため無効化することが推奨されています。
〇Scene Analysis
[Scene Analysis]タブは現在開いているシーンの描画最適化を実行します。
実行するためには[Analyze Scene]をクリックします。
〇Light Analysis
シーン上のライト数とシャドウを無効にする必要があるライトを確認できます。
通常シャドウ(影)を描画するためにはテクスチャに影を落としこむという手法がとられます。
この対象は影を落とすオブジェクトの[Renderer]で[CastShadow]が有効になっているオブジェクトに入っています。
〇Polygon count Analysis
実行中のシーンのポリゴン数を計測します。 HoloLensでは最大10~20ポリゴン以下にしなければならないと一般的に言われています。
〇Unity UI Laycast Analysis
Unityで提供されるUIの数を表示します。
余分なレイキャストを外すことなどに使用されます。
〇ドキュメント
今回はこちらのドキュメントを訳しながら自分のUnity画面で確認していきました。