【Oculus Quest2開発】HMDの視界に枠をつける
実現したこと
HMDで全天球映像を見る際に、あえて視界を狭くしたかったので、視界に黒い枠を固定でつけることを考えました。
周囲が黒い枠で囲まれているのがお分かり頂けるでしょうか。 PCで見るとそうでもないのですが、VRで見るとさらに周囲の枠が太くなり視界が狭まっています。
どうやったか
やっていることは簡単で、VRカメラの子オブジェクトとして黒枠を配置すればいいだけです。 詳しく見ていきましょう。
まずillustratorなどで真ん中を抜いた黒枠を作り、Unityに読み込んでおきます。(結構黒枠を太めに作らないと枠が見えません。。)
VRカメラ(ここではXR Interaction Toolkitを利用しているため、XRRigDemo > CameraOffset > Main Camera)を右クリックし子オブジェクトとしてCanvasを追加します。
Canvasのインスペクターから、Render Modeを「Screen Space - Camera」、Render Cameraに先程のMain Cameraをドラッグ&ドロップして設定します。
下部の「Add Component」からImageコンポーネントを割り当てます。Source Imageに黒枠の画像をドラッグ&ドロップでセットします。セットできない場合、黒枠の画像のインスペクターからTexture Typeを「Sprite(2D & UI)」に変更してください。
するとエディタ上ではこうなります。
これで設定は完了です。
Render Modeの「Screen Space - Camera」は他のオブジェクトとの前後関係が考慮されるため、今回はUIを黒枠より手前に配置しており、UIは黒枠の中からはみ出ても見えるようになっています(これがいいか悪いかは別として)。
(7/16追記)実際にどこまで見えるのか検証
実はHMDで見ると枠は見えづらいです。
HMDでの見え方を検証するために、3Dモデリングによく使われるグリッドと、枠を重ね合わせた画像を作り検証してみました。
上で使用しているグリッドより少し見える範囲を広くしたものを利用しています(単純に間違えました)
)
これをHMDで見ると…
HMDの視野は、正方形に近いです。一方で枠は長方形のため、横はあまり視野が狭まっていません。 その代わり縦には狭くなっているので、ちゃんと「枠がある」ことは認識できます。
ちなみに、グリッドは歪まず綺麗に見えていました。
参考
- Unity5.3のVR機能(ユーザーインターフェース) | TaoVisor:黒枠の実装方法は固定UIの実装方法から考えました。
- 【Unity】uGUIのCanvasとRenderModeについて:Render Modeについて詳しく書かれていて大変参考になりました。