MRTK + Quest 2 / Pro でパススルー表示を行う

[追記]
Quest Proが届いたので実機で試したところ、下記手順で作成したアプリでパススルー表示ができました。

ツイート内にあるように、Unity2021.3.8fで、プラグインはOculus XR Pluginを使用しています(not OpenXR)
最初うまくいかなかったのですが、MSの手順書にある「Integrate Oculus Intagration」を再度実行したら動作しました。
Oculus Integrationは最新のv4.6を使っています。

================================

今日は2022年10月21日です。そして実感が沸かないですが、来週28日には注文したMeta Quest Proが届くはずです。
勝手にキャンセルされる現象が多発しているようで、僕の注文分も本当に届くのかわかりませんが。。

Quest Proは僕の中ではMRデバイスの位置づけなので、パススルーで外が見えることは最重要です。さらに、HoloLens 2開発で使い慣れたMRTKを使うことで短時間でアプリを作れると期待しています。
そこで、MRTKでのパススルーの設定方法をメモしておきます。MetaによるとQuest 2向けのアプリはQuest Proでも動作するということなので、Pro向けにも使える方法のはずです。

UnityにMRTKのインストールとAndroidのビルド環境を整えたら、下記手順を行いますが、必要なのは「シーンを設定する」という項目までです。

MRTK で Quest を構成するためのドキュメント

「シーンを設定する」項目まで終えたら、MRTKのProfileをカスタマイズしていきます。
・DefalutMixedRealityConfigrationProfileをclone
・Inputタブの、DefalutMixedRealityInputSystemProfileをclone
・Input Data ProvidersのXR SDK Oculus Device Manager以下の、OculusXRSDKDeviceManagerProfileをclone

Ovr Camera Rig Prefabに指定されている「MRTK-Quest_OVRCameraRig」を探して、Assets以下にコピーして編集できる状態にして、Profileに指定する。

Assets以下にコピーして編集できる状態になったPrefabに、OVR Passthrough Layerをアタッチ。
Opacityは0.5くらいにする。
Generalの Passthrough Capability Enabledと、その下の Enable Passthroughにチェックを入れる。

Player Settingsで、Scripting Backendを「IL2CPP」、Target Architecturesを「ARM64」にします。

この状態でビルドを行うとパススルー表示ができるはずです。

できなかったらTwitterにコメントくださいw

また、動的にパススルーのon/offや透過度を切り替えるサンプルスクリプトとなります。

using Microsoft.MixedReality.Toolkit.UI;
using UnityEngine;
 
public class MyOverrayPassthrough : MonoBehaviour
{
    OVRPassthroughLayer passthroughLayer;
 
    void Start()
    {
        var ovrCameraRig = GameObject.FindObjectOfType<OVRCameraRig>();
        if (ovrCameraRig == null)
        {
            Debug.LogError("Scene does not contain an OVRCameraRig");
            return;
        }
 
        passthroughLayer = ovrCameraRig.GetComponent<OVRPassthroughLayer>();
        if (passthroughLayer == null)
        {
            Debug.LogError("OVRCameraRig does not contain an OVRPassthroughLayer component");
        }
    }
 
    public void TogglePassthrough()
    {
        passthroughLayer.hidden = !passthroughLayer.hidden;
    }
 
    public void ChangeOpacity(SliderEventData data)
    {
        passthroughLayer.textureOpacity = Mathf.Clamp(data.NewValue, 0, 1f);
    }
}
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク