MRが楽しい

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

MRTKv2.xを使ってMetaQuest3向けのUnityプロジェクト作成を行う その24(MRTKv2.xのシェーダをオクルージョンに対応させる MetaXRSDKv67以降)

本日はMetaQuest3の技術調査枠です。
MRTKv2.xを使ってMetaQuest3向けのUnityプロジェクト作成を行う手順を記事にします。
本記事はMetaXRSDKv67以降でMRTKv2.xのシェーダをオクルージョンに対応させる手順です。

前提条件

本記事では以下の記事で作成したUnity プロジェクトを基に設定を行います。
bluebirdofoz.hatenablog.com

MRTKv2.xのシェーダをオクルージョンに対応させる

独自のシェーダをオクルージョンで利用する場合、シェーダコードにいくつかの修正を加える必要があります。
シェーダの修正手順は以下のReadMeに解説されています。
github.com

MRTKv2.xのシェーダは以下のフォルダにインポートされています。

Assets/MRTK/Shaders

今回はサンプルとしてMixedRealityStandard.shaderを変更します。

186行目と194行目に以下を追加します。

// DepthAPI Environment Occlusion
#pragma multi_compile _ HARD_OCCLUSION SOFT_OCCLUSION
#include "Packages/com.meta.xr.sdk.core/Shaders/EnvironmentDepth/BiRP/EnvironmentOcclusionBiRP.cginc"

325行目に以下を追加します。

META_DEPTH_VERTEX_OUTPUT(8) // the number should stand for the previous TEXCOORD# + 1

592行目に以下を追加します。

// v.vertex (object space coordinate) might have a different name in your vert shader
META_DEPTH_INITIALIZE_VERTEX_OUTPUT(o, v.vertex);

778行目に以下を追加します。

UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);

1103行目に以下を追加します。

// Third field is for environment depth bias. 0.0 means the occlusion will be calculated with depths as they are.
META_DEPTH_OCCLUDE_OUTPUT_PREMULTIPLY(i, output, 0.0);

これでシェーダの改変は完了です。MixedRealityStandardシェーダを利用するマテリアルを作成します。
Assetsフォルダ上で右クリックから[Create -> Material]で新規マテリアルを作成します。

作成したマテリアルを選択し、Inspectorビューの[Shader]から[Standard(Mixed Reality Toolkit)]を選択します。
これでMixedRealityStandardシェーダを利用するマテリアルが作成できました。

作成したマテリアルを新規作成したSphereオブジェクトにドラッグして反映します。

ビルドと動作確認

これで設定は完了です。
以下の記事を参考にプロジェクトのビルドとQuest3へのデプロイを実行してください。
bluebirdofoz.hatenablog.com

MixedRealityStandardシェーダを利用するSphereオブジェクトが以下の通り現実の物体でオクルージョンされます。

過去バージョンの利用手順

MetaXRSDKのv67以降ではDepthAPIの利用シェーダファイル(cginc)がSDKに含まれています。
v66以前は以下のGitHubからライブラリをインポートする必要がありました。
github.com

過去バージョンでの利用手順の詳細は以下の記事を参照ください。
bluebirdofoz.hatenablog.com