本日は HoloToolkit の技術調査枠です。
前回、MMD プロジェクトを Holographic Remoting で動作させると背景が表示されてしまう問題がありました。
bluebirdofoz.hatenablog.com
HoloLens上で動作させていますが、背景が描画されているので VR のような見た目になります。
折角 HoloLens 上で動作させているので背景を透過させてみます。
やり方としては UnityEditor 上の動作か判定を行い、true の場合、背景と床の設定を HoloLens 向けの環境設定で動かすようにするだけです。
判定を行う HolographicSettings.IsDisplayOpaque 自体に手を加えたかったですが、アセンブリ参照のため断念しました。
調べてみると背景処理について修正すべき点は以下の2点でした。
・MixedRealityCameraManager.cs(カメラ背景の切り替え)
・BoundaryManager.cs(床描画の切り替え)
・MixedRealityCameraManager.cs:63行目
private void Start() { //if (!Application.isEditor) // --- ↓以下のように修正する --- if (Application.isEditor) { CurrentDisplayType = DisplayType.Transparent; ApplySettingsForTransparentDisplay(); if (OnDisplayDetected != null) { OnDisplayDetected(DisplayType.Transparent); } return; } // ------------------------------ (以下略)
・BundaryManger.cs:99行目
private void RenderFloorQuad() { //if (HolographicSettings.IsDisplayOpaque) // --- ↓以下のように修正する --- if (HolographicSettings.IsDisplayOpaque && !Application.isEditor) // ------------------------------ { // Defaulting coordinate system to RoomScale in immersive headsets. // This puts the origin 0,0,0 on the floor if a floor has been established during RunSetup via MixedRealityPortal XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale); } (以下略)
・BundaryManger.cs:114行目
if (FloorQuad != null && HolographicSettings.IsDisplayOpaque) // --- ↓以下のように修正する --- if (FloorQuad != null && HolographicSettings.IsDisplayOpaque && !Application.isEditor) // ------------------------------ { floorQuadInstance = Instantiate(FloorQuad); (以下略)
・BundaryManger.cs:152行目
public bool ContainsObject(Vector3 gameObjectPosition) { // Check if the supplied game object's position is within the bounds volume. //if (HolographicSettings.IsDisplayOpaque) // --- ↓以下のように修正する --- if (HolographicSettings.IsDisplayOpaque && !Application.isEditor) // ------------------------------ { return boundaryBounds.Contains(gameObjectPosition); (以下略)
厳密にやるならば、この他、InputManager などの最適化も必要ですが、今回は見た目の処理に限定しています。
ついでに NearClip の値を小さくしておくと、よりキャラクタに近寄って見ることができます。
以上の修正を実施し、再び Holographic Remoting を使って HoloLens 上で動作させてみます。
背景が透過できました……が、Holographic Remoting の映像をキャプチャした場合、黒色が発色されてしまうようです。
実際に HoloLens を通して見ると黒色は透過されているので、キャラクタが現実世界で踊っているように見えています。
後、前述の通り黒色は透過色になるので、全体的に明るい色彩のキャラクタの方が HoloLens 上では見栄えが良いかもしれません。