MRが楽しい

MRやVRについて学習したことを書き残す

MRTKv2.xを使ってMetaQuest3向けのUnityプロジェクト作成を行う その4(MRTKを用いたサンプルシーンの作成)

本日はMetaQuest3の技術調査枠です。
MRTKv2.xを使ってMetaQuest3向けのUnityプロジェクト作成を行う手順を記事にします。

全体の流れ

以下の流れでMRTKv2.xを使ってMetaQuest3向けのUnityプロジェクト作成を行う手順を記事にまとめます。

1.Unityプロジェクトの作成とMRTKのインポート
2.Oculus XR PluginとOculus Integrationのインポート
3.プロジェクトの基本設定
4.MRTKを用いたサンプルシーンの作成
5.MetaQuest3へのデプロイ

本記事は 4.MRTKを用いたサンプルシーンの作成 です。

前回記事

前回記事は以下になります。
bluebirdofoz.hatenablog.com

シーンの作成

MRTKを使ってサンプルシーンを作成します。

MRTKのシーンの基本構成を行う

メニューから[Mixed Reality -> Toolkit -> Add to Scene and Configure..]を選択します。

するとシーンの Hierarchy に以下のゲームオブジェクトが追加されます。
・MixedRealityToolkit
・MixedRealityPlayspace
・MixedRealitySceneContent

Mixed Reality Toolkit:フレームワーク全体の中央構成エントリポイントを提供するツールキットの本体。
MixedRealityPlayspace:ヘッドセットの親オブジェクト。ヘッドセット/コントローラーおよびその他の必要なシステムを管理します。メインカメラはプレイスペースの子オブジェクトとして移動します。
MixedRealitySceneContent:デバイスごとに適切にスケーリングするシーンコンテンツの配置場所。


プロファイルを設定する

次に利用シーンや plugin に合わせたシーン構成を設定するため、プロファイルを変更します。
MixedRealityToolkit オブジェクトを選択し、Inspector ビューを開きます。

プルダウンからMRTKが提供するいくつかのデフォルト設定のプロファイルを選択できます。
今回はそのまま[DefaultMixedRealityToolkitConfigurationProfile]を利用します。

他のプロファイルを選択する場合は[Input]タブの[Input Data Providers]を確認します。
Questデバイスの入力を処理する[XR SDK Oculus Device Manager]を利用しているプロファイルを選択する必要があります。

コンテンツの配置

アプリのコンテンツとして、シーンに掴んで操作できる立方体を配置してみます。
Hierarchy上で右クリックから[3D Object -> Cube]でCubeオブジェクトを追加します。

Cubeオブジェクトをカメラの正面に移動して丁度良い大きさに調整します。
HierarchyからCubeオブジェクトを選択し、Inspectorビューから[Transform]を以下の通り、変更します。

Position X:0, Y:0.3, Z:1
Rotation X:0, Y:0, Z:0
Scale X:0.2, Y:0.2, Z:0.2

Cubeオブジェクトを掴んで操作できるようにします。
Inspectorビューの[Add Component]から[Object Manipulator]コンポーネントを設定します。


Oculus Integrationの統合とハンドトラッキングの設定

メニューから[Mixed Reality -> Utilities -> Oculus -> Integrate Oculus Integration Unity Modules]を実行します。
これにより、関連するQuestコードが機能するために必要な定義と参照でasmdefが更新されます。

実行後、マルチスレッドレンダリングの無効化を促すダイアログが表示されますが、本設定は実行しなくても問題ありません。

次にOculus Integrationの設定を変更してハンドトラッキングを有効にします。
Assets/Oculusフォルダ配下にあるOculusProjectConfig.assetファイルを開き、[Hand Tracking Support]を[Controllers And Hands]に変更します。

MRTKStandardShaderのAndroidの対応

MRTKで使用するシェーダをAndroidプラットフォームに対応させる必要があります。
以下のフォルダにあるMixedRealityStandard.shaderを開いて直接編集します。

Assets/MRTK/Shaders/MixedRealityStandard.shader

シェーダの編集箇所は以下の通りです。

1.775行目、fixed facing : VFACE を bool facing : SV_IsFrontFace に変更する。

fixed4 frag(v2f i, bool facing : SV_IsFrontFace) : SV_Target

2. 956行目と959行目、* facing を * (facing ? 1.0 : -1.0) に変更する。

worldNormal = normalize(worldNormal) * (facing ? 1.0 : -1.0);
worldNormal = normalize(i.worldNormal) * (facing ? 1.0 : -1.0);

本修正を行わない場合、ビルド実行時に以下のエラーが発生します。

Shader error in 'Mixed Reality Toolkit/Standard': Non system-generated input signature parameter () cannot appear after a system generated value. at line 775 (on vulkan)


シーンの動作確認

シーンを再生してシミュレーション上で動作を確認します。
左Shift + 左クリックでシーン上に左手を表示してCubeオブジェクトを掴む操作を確認できます。

次回はMetaQuest3へのデプロイです。
bluebirdofoz.hatenablog.com