本日はHoloLens アドベントカレンダー2021二日目の記事になります。
〇HoloLens Advent カレンダーとは?
HoloLens Adventカレンダーは技術関連投稿サイトのQiita上で毎年12月に開かれているイベントの一つです。
あるテーマに沿って12月1日から25日までの間毎日誰かしらが情報共有を行うというイベントになっています。
HoloLens Advent カレンダーは初代HoloLensがリリースされた2016年より毎年開かれ今年で5年目となっています。
〇HoloLensで最新のURPの開発環境をまとめる。
URP(UniversalRenderPipeline)とはUnityのレンダーパイプライン(描画システム)をC#でスクリプト可能としたScriptableRenderPipeline(SRP)でUnityから提供されるテンプレートです。
筆者は今年(21年)の春以降ほぼすべてのHoloLensプロジェクトで使用しており、本ブログでも紹介していますが情報と記事が散乱しているので改めて本記事中でまとめてきます。
〇URPとは?
前述のとおりURP(UniversalRenderPipeline)はUnityの描画回りをC#でカスタマイズできるパッケージであるSRP(ScriptableRenderPipeline)のテンプレートの一つです。
Unityでは従来レンダーパイプライン(描画システム)は固定されており簡単にカスタマイズすることはできませんでした。
そのためハイエンドなデバイスも、ローエンドなデバイスも同一のレンダーパイプラインを用いていました。
SRPを用いることでハイエンドなデバイス向けにレンダーパイプラインで用いる情報を細かくすることや、逆にローエンド向けに必要ない情報を省くことなどが可能となりよりデバイスごとに個別化した最適な設定を行うことができるようになりました。
C#でカスタマイズ可能といってもどうカスタマイズできるのかという点に対しUnityでは二つのテンプレートが提供されています。
・URP
こちらは従来レンダーパイプライン(ビルドインレンダーパイプライン)と同じようにあらゆるデバイスでの動作を想定したテンプレートです。
HoloLensはもちろんOculus Quest(Meta Quest)やPCなどあらゆるデバイスで正しく動作します。
Unityでは将来的にURPをデフォルトのレンダーパイプラインにするという方向性があるようです。
・HDRP
こちらはデスクトップPCアプリなどのハイエンドデバイスで高精細なグラフィックを実現できるレンダーパイプラインです。
残念ながらHoloLensでは満足に動かすことができません。
〇URPプロジェクトの作成方法
URPをプロジェクトに導入するためには2種類の方法があります。
〇プロジェクト作成時にテンプレートを選択
Unityではプロジェクト作成時にURPのプロジェクトを選択することができます。
現在最新版であるUnityバージョン2021.2.4f1では[UniversalRP]
それ以前のバージョンでは[UniversalRenderPipeline]を選択します。
これによって最初からURPが適応されたプロジェクトを作成することができます。
デメリットとしてAssetsいかにサンプルパッケージが入ってしまいます。気にしない方はこちらの方法で始めるほうが良いです。
〇すでにあるプロジェクトにURPを導入する場合
URPはUnityのパッケージとして提供されていますので[PackageManager]を用いて任意のタイミングで導入することができます。
[PackageManager]から導入後は[Project]ウィンドウで右クリック、[Create→Rendering→URPAssets]を選択します。
[ProjectSettings]の[GraphicsSettings]の[Scriptable RenderPipelineSettings]に作成したアセットをドラッグ&ドロップします。
これによってUnityのレンダーパイプラインがURPへ切り替わります。
〇HoloLensでのURPのメリット
URPを使用することでグラフィック周りの最適化が行いやすいです。
その他ShaderGraphが使用できるようになります。
HoloLensで使用することでより直感的なグラフィック開発が可能です。本ブログでは過去にHandTrackingを用いた[**ATfield**]を作成しました。
最後にUnityでは将来的にURPをUnityのデフォルトのレンダーパイプラインにする方針があります。
〇HoloLensでのURPデメリット
ビルドインレンダーパイプラインに比べ情報が圧倒的に少ないです。
ビルドインレンダーパイプラインとの比較としてShader関連の互換切り以外にカメラ関連のコンポーネントの変更があります。
カメラ関連をいじるアプリケーションの場合注意が必要です。
〇URPで使用できなくなるShader
URPでは主に以下のShaderが使用できなくなります。
・SurfaceShader
・UnityCG.cgincでライトを使用しているShader
こちらに関してはCore.hlslの機能と一部ネームスペースが同一であるためエラーが発生するようです。
〇MRTKStandardShaderのアップグレード
MRTKを導入している場合のShaderエラーに関しては上部ワールドタブから[MixedReality]→[Toolkit]→[Utilites]→[Upgarade MRTK Standard Shader to Universal Render Pipeline]を選択することでShaderのアップデートが行われます。
〇URPでのトラブルシューティング
URP使用時にMRCでの背景が黒くなってしまい透明度が反映されない問題があります。
こちらは[URPAssets]の[PostProcessing]にチェックが入り有効化されている場合発生します。
これはポストプロセス(後処理)の処理過程でα値が反映されていないことが原因と思われます。
回避するためにポストプロセスを無効化しますが、Bloomなどポストプロセス使用時は有効な解決策が見つかっていません。
半分以上URP自体のネタになってしまいましたが本ブログでは今後もURPでHoloLensアプリを開発する予定なので知見などを共有できればと思っています。