お題
「Meta Quest で壁や床はパススルーで現実の部屋を表示させつつ、天井だけは取っ払って Skybox の青空を見せたい」ってな表現をどうやって実現するか、が今回のお題です。
デフォルトの Skybox 表示のままだと、パススルーで表示される現実世界が全く見えなくなります。 なので通常はパススルーを表示させる場合にはわざわざ Camera の Clear Flags の設定を Solid Color にして Skybox を無効化します。 そうするとパススルー表示はできるのですが、今度は Skybox が表示されなくなる。 ということで今回は「そこをどうにかどっちも表示させたいんだよー」という要求に応えてみたいと思います。
解決策
一言でいうと「パススルー表示用マテリアルの Render Queue の数値を Skybox よりも小さく設定する」でどちらも表示できます。
具体的には以下の手順になります。
- OVRSceneManager に設定するプレハブで使用するマテリアルの Render Queue を 2000 未満に設定する。 詳細な手順はこちらの記事をご参照ください。
- OVRCameraRig - TrackingSpace - CenterEyeAnchor の Camera - Clear Flags の設定を Skybox に変更し、 Skybox コンポーネントを追加する。
- 追加した Skybox コンポーネントの Custom Skybox に Render Queue を 2000 に設定したマテリアルを設定する。
これを手っ取り早く作りたい場合は以下の手順でできます。Assets/Oculus/SampleFramework/Usage/SharedAssets/Skyboxes/Sky_01/Skybox01
をコピーして複製を作る。- 複製してつくったマテリアルの Render Queue を 2000 に変更する。
- 天井にはパススルー表示をさせたくない (Skyboxを見せたい) ので、メッシュを持たないプレハブを設定する。
具体的には以下のように Prefab Overrides で天井 (CEILING) だけ別のプレハブを設定します。
この例では、
Assets/Oculus/SampleFramework/Usage/SceneManager/Prefabs/InvisiblePlane
をそのまま使用しています。
この設定をすると天井が抜けて青空が見えるようになります。
実際の動作
まとめ
天井や壁の境界デザインを工夫してうまくなじませればかなりトリッキーで面白い見栄えになりそうです。
こういった表現ができるのはビデオパススルーの強みですね。