【Oculus Quest2開発】HMDの視界に枠をつける

実現したこと

HMDで全天球映像を見る際に、あえて視界を狭くしたかったので、視界に黒い枠を固定でつけることを考えました。

f:id:nubonubo:20210621022359g:plain

周囲が黒い枠で囲まれているのがお分かり頂けるでしょうか。 PCで見るとそうでもないのですが、VRで見るとさらに周囲の枠が太くなり視界が狭まっています。

どうやったか

やっていることは簡単で、VRカメラの子オブジェクトとして黒枠を配置すればいいだけです。 詳しく見ていきましょう。

まずillustratorなどで真ん中を抜いた黒枠を作り、Unityに読み込んでおきます。(結構黒枠を太めに作らないと枠が見えません。。)

f:id:nubonubo:20210621023222p:plain

VRカメラ(ここではXR Interaction Toolkitを利用しているため、XRRigDemo > CameraOffset > Main Camera)を右クリックし子オブジェクトとしてCanvasを追加します。

f:id:nubonubo:20210621023407p:plain

Canvasのインスペクターから、Render Modeを「Screen Space - Camera」、Render Cameraに先程のMain Cameraをドラッグ&ドロップして設定します。

f:id:nubonubo:20210621023518p:plain

下部の「Add Component」からImageコンポーネントを割り当てます。Source Imageに黒枠の画像をドラッグ&ドロップでセットします。セットできない場合、黒枠の画像のインスペクターからTexture Typeを「Sprite(2D & UI)」に変更してください。

f:id:nubonubo:20210621023703p:plain

するとエディタ上ではこうなります。

f:id:nubonubo:20210621023900p:plain

これで設定は完了です。

f:id:nubonubo:20210621022359g:plain

Render Modeの「Screen Space - Camera」は他のオブジェクトとの前後関係が考慮されるため、今回はUIを黒枠より手前に配置しており、UIは黒枠の中からはみ出ても見えるようになっています(これがいいか悪いかは別として)。

(7/16追記)実際にどこまで見えるのか検証

実はHMDで見ると枠は見えづらいです。

HMDでの見え方を検証するために、3Dモデリングによく使われるグリッドと、枠を重ね合わせた画像を作り検証してみました。

上で使用しているグリッドより少し見える範囲を広くしたものを利用しています(単純に間違えました)

f:id:nubonubo:20210717070152p:plain

f:id:nubonubo:20210717064825p:plain

これをHMDで見ると…

f:id:nubonubo:20210717065336j:plain

HMDの視野は、正方形に近いです。一方で枠は長方形のため、横はあまり視野が狭まっていません。 その代わり縦には狭くなっているので、ちゃんと「枠がある」ことは認識できます。

ちなみに、グリッドは歪まず綺麗に見えていました。


参考