トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

Questでのパススルー実装やMRサンプル遊び【Unity】

仮想空間の一部をパススルーモードに切り替えるのやろう~~

Building Blockのパススルー

Passthrough(全体)

Building BlockのPassthroughを入れたらデフォルトでパススルーになった。

でもなんか左端の視界がぐちゃっとなってる。ちょっと時間空けてやったらきれいに見えたから、QuestLinkの負荷とかそこらへんかな・・・?

ここら辺の設定変えても変わらない。Opacityは明るさ、Edge Renderingにチェックを入れたらパススルーで見えている物体に境界線がついた!

かっこいい!!

明るさ真っ黒でEdgeつけるとめっちゃサイバーでかっこいい

ドキュメントあった

developer.oculus.com

Overrayだと一番上に来るから、すべてのバーチャルなものを隠す。

ちなみにパススルーにするときカメラのSolidColorは黒のAlpha0にする必要がある。

それ以外の色だとその色がパススルーに乗ってきた。

Passthrough(平面)

視界の一部をパススルー出来るBlockもある

このメッシュがあるところだけ窓みたいにパススルーになった。

でも実際の方向とあっていない。正面位置がずれた・・・?

パススルー部分も立体感があるから、まじまじと見ていると仮想空間とパススルーの立体感があってなくてちょっと酔う

こういう表現どこかで見たような・・・と思ったら両手部分だけ丸くパススルーになるアプリが何かであったからあれか!

Passthrough(3D)

Windowもあった。こっちは立体なのか?

Quadだった

右目にはパススルーが表示されなかった・・・

Quad以外にも同じシェーダーを適当なオブジェクトに付けたらパススルー表示はされる。(右目表示されなかった)

切り替え

やりたいのは適当なボタンを押したら、VR内の背景の仮想空間が消えて、パススルーが表示されるという切り替え。

デフォルトでパススルー表示しておいて、仮想空間をオンオフするだけでもいいが、パススルー状態って重くないのかな?

パススルーのオンオフはOVR Passthrough Layerコンポーネントのオンオフでできた

 

ドキュメントに初期状態でパススルーにするかどうかのコードはあった

developer.oculus.com

やはりあのコンポーネントをオンオフするのが正解みたい

// Add this to any MonoBehavior
void Start()
{
   if (OVRManager.IsPassthroughRecommended())
   {
      passthroughLayer.enabled = true;

      // Set camera background to transparent
      OVRCameraRig ovrCameraRig = GameObject.Find("OVRCameraRig").GetComponent<OVRCameraRig>();
      var centerCamera = ovrCameraRig.centerEyeAnchor.GetComponent<Camera>();
      centerCamera.clearFlags = CameraClearFlags.SolidColor;
      centerCamera.backgroundColor = Color.clear;

      // Ensure your VR background elements are disabled
   }
   else
   {
      passthroughLayer.enabled = false;

      // Ensure your VR background elements are enabled
   }
}

こんな感じにしてボタンとかから呼び出せるようにした

    public OVRPassthroughLayer passthroughLayer;
    public GameObject vrbackground;
    void Start()
    {
        if (OVRManager.IsPassthroughRecommended())
        {
            OnPassthroughLayerActive(true);

            // Set camera background to transparent
            OVRCameraRig ovrCameraRig = GameObject.Find("OVRCameraRig").GetComponent<OVRCameraRig>();
            var centerCamera = ovrCameraRig.centerEyeAnchor.GetComponent<Camera>();
            centerCamera.clearFlags = CameraClearFlags.SolidColor;
            centerCamera.backgroundColor = Color.clear;

            // Ensure your VR background elements are disabled
        }
        else
        {
            OnPassthroughLayerActive(false);

            // Ensure your VR background elements are enabled
        }
    }

    public void OnPassthroughLayerActive(bool bl)
    {
        passthroughLayer.enabled = bl;
        vrbackground.SetActive(!bl);
    }

Meta MR Utility Kitのサンプル

6つある。一番下のは昔試した。現実空間にポイントライトをリアルタイムで反映するやつ

VirtualHomeはエラーが出たので消した。

他は動いたが、マテリアルエラーになっていたり片目だけでしか表示されないものもあった

Basicは自分の部屋がかっこいい輪郭エフェクト付きでパススルーで表示される

メニューでいろいろ表示とかを変えれる。このメニューの使い方はコントローラーの左手に表示されて、左手スティックで上下、トリガーで決定。(わかりにくいが、片方の手だけで全部完結するの面白い)

メッシュが張られたりいろいろ、ボール投げれたりした

NavMeshシーン二つのライトが動いていた。もしかしたら私の部屋が狭いせいでよくわからない感じになってたのかも

MultiSpawnはよくわからなかった。

FloorZone

AnchorPrefabSpawner

おもしろそう

Building BlockのAnchorColliderSpawnerのことみたい。なんで表記ブレがあるんだろう

このブロック置いて実行したら自分の部屋が出た

Wallなどのプレハブの設定ができるので同じ感じでドアも設定するのだろうか・・・

Cryptic Cabinet 

InteractionSDKのサンプルみたいなのにちょっと毛が生えたやつかと思ったら、結構ちゃんとしたゲームっぽい?すごいレビューがいっぱいある。マルチプレイもできる

www.meta.com

ストアにある動画見たけど楽しそう。自分の部屋で脱出ゲームできるのいいね

中身は公開されている

github.com

とりあえず起動した。

部屋のここにオブジェクトが出るよ~って事前に設定できる。

マルチプレイはコード入力形式

机に合わせて棚が置かれたりしてた。