はじめに
Mixed Reality Toolkit for Unity (以下、MRTK) を用いて開発、デプロイした HoloLens 2 アプリケーションを Mixed Reality Capture ( MRC ) を使って撮影したところ、下図ように全体にグレーのオーバーレイがかかってしまう現象について、原因を調査しました。本記事では、この問題の解決方法について、ご紹介したいと思います。
開発環境
- Unity 2020.3.8f1
- MRTK v2.7.2
なぜ MRC に灰色のオーバーレイが適用されるのか?
原因は、MixedRealityPlayspace > Main Camera の Camera Component > Background 設定の α値 が 1 (非透過) に設定されているからです。
解決方法
実は、この Camera > Background の値は、[ Mixed Reality ] > [ Project ] > [ Apply recommended scene settings for HoloLens 2 ] ボタンを押下して、HoloLens 2 用のシーン設定を適用すると、α値 が 0 になります。なので、この処理を実行し忘れていただけだったのか... と思っていたのですが、この状態でビルドを実行すると、元の α値 : 1 (非透過) に戻ってしまうことが検証をしているうちに判明しました。( HoloLens 2 実行時も灰色のオーバーレイが適用されたままの状態でした.. orz )
理由は簡単で、この Camera コンポーネントの設定が Mixed Reality Toolkit の Profile ( Camera ) で設定されている値に上書きされるからです。
Mixed Reality Toolkit > Camera > Display Settings を見てみると、Opaque (非透過) と Transparent (透過) の2種類のディスプレイ用の設定を保持する構造になっていることが分かります。実行時にこれらの値を利用して、カメラ設定を切り替える仕組みになっています。
例えば、Virtual Reality のようなデバイスの場合は Opaque (非透過)、HoloLens の場合は Transparent (非透過) の設定が使用されるようになっています。
ここで Display Settings > Transparent > Background Color を確認してみたところ、α値 : 0 (透過) の設定になっていました。この状態で、実機にデプロイしても問題は解消されず、Opaque (非透過) の方の設定が当たっているのではないかと、見てみたところ、Background Color の α値 が 1 (非透過) になっていました。当たり前と言えば、当たり前なのですが、試しに Opaque の Background Color (背景色) の α値 (透過度) を 0 (透過) に設定したところ、問題の事象を解消することができました。
公式ドキュメントの記載と実際の挙動が異なるので、MRTK の GitHub に新規 Issue として登録してみました。拙い英語なので、伝わるか不安もありますが、、ダメならスルーされて Close されるだけだと思うので、公式の回答を待ちたいと思います。