MRが楽しい

MRやVRについて学習したことを書き残す

MixedRealityCameraParentのヘッドセット用の床と背景を差し替える

本日は HoloToolkit の技術調査枠です。
前回、Holographic Remoting実行時に MixedRealityCameraParent オブジェクトの床と背景を非表示にする対応を行いました。
bluebirdofoz.hatenablog.com

コードを直接修正しましたが、オブジェクトの Inspector に設定項目があり、これを操作する事でもヘッドセット動作時の床や背景を差し替えられそうです。
早速試してみます。因みにデフォルトだと以下のような水色の床と空色の背景が設定されています。
f:id:bluebirdofoz:20171129015753j:plain


初めに床の変更方法についてです。
MixedRealityCameraParent 内にある Boundary が床の設定を保持しています。
f:id:bluebirdofoz:20171129015802j:plain
ここの FloorQuad に設定されているオブジェクトが床として表示されます。

試しに色を変更した床オブジェクトを作成して差し替えてみます。
f:id:bluebirdofoz:20171129015811j:plain

作成した床オブジェクトを FloorQuad に設定します。
f:id:bluebirdofoz:20171129015819j:plain

ヘッドセットで再び起動してみると……。
f:id:bluebirdofoz:20171129015826j:plain
床が赤色になりました。変更が反映されています。


次に背景の変更方法です。
MixedRealityCameraParent 内にある MixedRealityCamera が背景の設定を保持しています。
f:id:bluebirdofoz:20171129015837j:plain
ここの Opaque Display Settings の設定が背景として表示されます。

試しに設定を変更してみます。
「skybox」の設定を「Nothing」に変更してみます。
f:id:bluebirdofoz:20171129015846j:plain

……が、動かしてみると背景が表示されました。
f:id:bluebirdofoz:20171129015855j:plain

どうもプロジェクト読み込み時に必ず Opaque Display Settings が以下の設定に上書きされてしまっているようです。
NearClip:0.1
ClearFlags:Skybox
QualitySetting:Ultra

何故?……と調べたらどうも以下が原因でした。
n-mattun.hatenablog.com

カスタムUIスクリプトを用いている場合、Inspectorの値がキャッシュされることがあるらしい……それはバグじゃないのか。
手順に従い、スクリプトの歯車アイコンから「Reset」を選択します。
f:id:bluebirdofoz:20171129015930j:plain

「Nothing」の値を再設定してみます。
f:id:bluebirdofoz:20171129015938j:plain

動かしてみると……。
f:id:bluebirdofoz:20171129015945j:plain
やっぱり駄目だった……何故だ。

しかし、以下のように NearClip にコード内のデフォルト値の 0.3 が設定されるようにはなりました。
NearClip:0.3
ClearFlags:Skybox
QualitySetting:Ultra

よって少々力技ですが、コード自体を以下のように修正してみました。
・MixedRealityCameraManager:27行目

[Tooltip("Values for Camera.clearFlags, determining what to clear when rendering a Camera for an opaque display.")]
//public CameraClearFlags CameraClearFlags_OpaqueDisplay = CameraClearFlags.Skybox;
// --- ↓以下のように修正する ---
public CameraClearFlags CameraClearFlags_OpaqueDisplay = CameraClearFlags.Nothing;
// ------------------------------

試してみたところ……。
f:id:bluebirdofoz:20171129020027j:plain
ようやく成功しました。Inspector の設定でおかしくなる場合はコードを修正した方が良さそうです。
カスタムUI自体がバグを含んでいるという可能性も無きにしも非ずですし。

因みに今回利用した「Nothing」は描画処理を行わないという意味合いのようで、色の残像が背景に残ってしまいます。
単純に黒塗りの背景を表示させたければ「SolidColor:Black」で実行した方がよいでしょう。