本日はMetaQuest3の技術調査枠です。
MRTKv2.xを使ってMetaQuest3向けのUnityプロジェクト作成を行う手順を記事にします。
本記事はMetaXRSDKv67以降でTextMeshProのシェーダをオクルージョンに対応させる手順です。
前提条件
本記事では以下の記事で作成したUnity プロジェクトを基に設定を行います。
bluebirdofoz.hatenablog.com
TextMeshProのシェーダをオクルージョンに対応させる
独自のシェーダをオクルージョンで利用する場合、シェーダコードにいくつかの修正を加える必要があります。
シェーダの修正手順は以下のReadMeに解説されています。
github.com
TextMeshProのシェーダは以下のフォルダにインポートされています。
Assets/TextMeshPro/Shaders
今回はサンプルとしてTMP_SDF.shaderとTMP_SDF-Mobile.shaderを変更します。
TMP_SDF.shader
125行目と133行目に以下を追加します。
// DepthAPI Environment Occlusion #pragma multi_compile _ HARD_OCCLUSION SOFT_OCCLUSION
#include "Packages/com.meta.xr.sdk.core/Shaders/EnvironmentDepth/BiRP/EnvironmentOcclusionBiRP.cginc"
160行目と177行目に以下を追加します。
META_DEPTH_VERTEX_OUTPUT(6) // the number should stand for the previous TEXCOORD# + 1
// v.vertex (object space coordinate) might have a different name in your vert shader META_DEPTH_INITIALIZE_VERTEX_OUTPUT(output, input.position);
250行目に以下を追加します。
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
320行目を以下に変更します。
// Final lighting mix. fixed4 output = faceColor * input.color.a; // 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(input, output, 0.0); return output;
TMP_SDF-Mobile.shader
92行目と99行目に以下を追加します。
// DepthAPI Environment Occlusion #pragma multi_compile _ HARD_OCCLUSION SOFT_OCCLUSION
#include "Packages/com.meta.xr.sdk.core/Shaders/EnvironmentDepth/BiRP/EnvironmentOcclusionBiRP.cginc"
124行目と137行目に以下を追加します。
META_DEPTH_VERTEX_OUTPUT(5) // the number should stand for the previous TEXCOORD# + 1
// v.vertex (object space coordinate) might have a different name in your vert shader META_DEPTH_INITIALIZE_VERTEX_OUTPUT(output, input.vertex);
210行目に以下を追加します。
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
245行目に以下を追加します。
// 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(input, c, 0.0);
これでシェーダの改変は完了です。
TextMeshProシェーダを利用するテキストUIを作成して確認用のシーンを作成します。
ビルドと動作確認
これで設定は完了です。
以下の記事を参考にプロジェクトのビルドとQuest3へのデプロイを実行してください。
bluebirdofoz.hatenablog.com
TextMeshProのUIオブジェクトが以下の通り現実の物体でオクルージョンされます。