お題

「Meta Quest で壁や床はパススルーで現実の部屋を表示させつつ、天井だけは取っ払って Skybox の青空を見せたい」ってな表現をどうやって実現するか、が今回のお題です。

デフォルトの Skybox 表示のままだと、パススルーで表示される現実世界が全く見えなくなります。 なので通常はパススルーを表示させる場合にはわざわざ Camera の Clear Flags の設定を Solid Color にして Skybox を無効化します。 そうするとパススルー表示はできるのですが、今度は Skybox が表示されなくなる。 ということで今回は「そこをどうにかどっちも表示させたいんだよー」という要求に応えてみたいと思います。

解決策

一言でいうと「パススルー表示用マテリアルの Render Queue の数値を Skybox よりも小さく設定する」でどちらも表示できます。

具体的には以下の手順になります。

  1. OVRSceneManager に設定するプレハブで使用するマテリアルの Render Queue2000 未満に設定する。 詳細な手順はこちらの記事をご参照ください。
  2. OVRCameraRig - TrackingSpace - CenterEyeAnchor の Camera - Clear Flags の設定を Skybox に変更し、 Skybox コンポーネントを追加する。 CenterEyeAnchorの設定
  3. 追加した Skybox コンポーネントの Custom SkyboxRender Queue2000 に設定したマテリアルを設定する。
    これを手っ取り早く作りたい場合は以下の手順でできます。
    1. Assets/Oculus/SampleFramework/Usage/SharedAssets/Skyboxes/Sky_01/Skybox01 をコピーして複製を作る。
    2. 複製してつくったマテリアルの Render Queue を 2000 に変更する。
  4. 天井にはパススルー表示をさせたくない (Skyboxを見せたい) ので、メッシュを持たないプレハブを設定する。 具体的には以下のように Prefab Overrides で天井 (CEILING) だけ別のプレハブを設定します。 Prefab Overrides この例では、Assets/Oculus/SampleFramework/Usage/SceneManager/Prefabs/InvisiblePlane をそのまま使用しています。

この設定をすると天井が抜けて青空が見えるようになります。

実際の動作

部屋から青空に飛んでいくアバター

まとめ

天井や壁の境界デザインを工夫してうまくなじませればかなりトリッキーで面白い見栄えになりそうです。

こういった表現ができるのはビデオパススルーの強みですね。

Meta Quest の Mixed Reality 機能に関連する記事

  1. Oculus Quest のパススルー API を試す
  2. Oculus Quest のパススルーでARものさしを作る
  3. Meta Quest の Mixed Reality 機能
  4. Meta Quest の パススルーとオクルージョン
  5. Meta Quest の パススルー表示とSkyboxの共存
  6. Meta Quest 3 の Global Mesh を試す
  7. バーチャル3Dコントローラによるドローン操作
  8. Tello仮想コックピットTyDroneリリース

かわかみしんいち。島根県津和野町在住のフリーランスエンジニア。複合現実(Mixed Reality)と3DUXでおもちゃを作るのが趣味。 https://github.com/ototadana