Cesium for Unity を MR モードの Apple Vision Pro アプリで利用する方法

Cesium for Unity を MR モードの Apple Vision Pro アプリで利用する方法について記載します。
Window モード、VR モードでの利用については以下をご覧ください。
(2024/9/12 追記)
タイルの端の色がおかしくなってしまい、つなぎ目が目立ってしまう問題への対処について追記しました。
(2024/12/19 追記)
Cesium for Unity v1.12.0 以降で手順に少し変更があったため追記しました。

公式ドキュメントの Step 1 を参考に、Cesium for Unity を Unity プロジェクトにインポートする

Library/PackageCache/com.cesium.unity@x.x.x
フォルダを Packages
フォルダ内に移動する
(Cesium for Unity パッケージ内のコードを変更できるようにするため)

Packages/com.cesium.unity@1.11.0/Runtime/generated/Reinterop/Reinterop.RoslynSourceGenerator
内にあるスクリプトの
#if !UNITY_EDITOR && UNITY_IOS
を #if !UNITY_EDITOR && (UNITY_IOS || UNITY_VISIONOS)
に書き換える
sed を用いる場合は以下のコマンドで書き換えられる
cd Packages/com.cesium.unity@1.11.0/Runtime/generated/Reinterop/Reinterop.RoslynSourceGenerator
sed -i '' 's/UNITY_IOS/(UNITY_IOS || UNITY_VISIONOS)/g' *.cs
(コマンド内の Cesium for Unity のバージョン番号は利用しているバージョンに合わせて変更してください)
(2024/12/19 追記)
Cesium for Unity v1.12.0 以降では Reinterop フォルダがなくなり、コードのパスが以下のように変わりました。
Packages/com.cesium.unity@x.x.x/Runtime/generated/Reinterop.RoslynSourceGenerator
sed の場合は以下のようにしてください。
cd Packages/com.cesium.unity@1.12.0/Runtime/generated/Reinterop.RoslynSourceGenerator
sed -i '' 's/UNITY_IOS/(UNITY_IOS || UNITY_VISIONOS)/g' *.cs

Packages/com.cesium.unity@1.11.0/Runtime/generated/Reinterop/Reinterop.RoslynSourceGenerator
内にあるスクリプトの makeNoLongerReadable != 0
を false
に書き換える
sed を用いる場合は以下のコマンドで書き換えられる
sed -i '' 's/makeNoLongerReadable != 0/false/g' ReinteropInitializer.cs
(2024/12/19 追記)
Cesium for Unity v1.13.1 以降の場合、追加で以下の変更を行ってください。
Cesium for Unity/Runtime/CesiumRuntime.asmdef
を選択し、visionOS にチェックを入れて Apply ボタンを押す。

Cesium for Unity/Runtime/Resources
内の CesiumSelectTexCoords.shadersubgraph
にて MaterialX への変換エラーが起こるため、画像のように変更する
変更前
変更後
(2024/9/12 追記)
また、Cesium for Unity/Runtime/Resources
内の CesiumRasterOverlay.shadersubgraph
にて Sampler State
を追加し Wrap
を Clamp
に設定する
変更前
変更後

CesiumUnlitTilesetShader.shadergraph
についても以下の変更を行う
Graph Settings にて以下を変更
- Built-In の Material を Unlit に
- Built-In の Alpha Clipping にチェックを入れる
- Universal の Alpha Clipping にチェックを入れる
Fragment から Smoothness を Delete する
(2024/9/12 追記)
さらに、Sampler State
ノードを作成し Sample Texture 2D
ノードにつなぎ、Wrap
を Clamp
にする
(CesiumRasterOverlay.shadersubgraph
と同様の操作)
また、CesiumDefaultTilesetShader.shadergraph
についても Sampler State
ノードを作成し Sample Texture 2D
ノードにつなぎ、Wrap
を Clamp
にする操作を行う
(CesiumDefaultTilesetShader.shadergraph
内の 5 箇所の Sample Texture 2D
ノードすべてに対して行う)

上記リンクのコードを Unity プロジェクトに入れる。
また、Tileset の面の向きが反転するという問題があるため、シーン上に配置する Cesium3D Tileset に以下のコンポーネントをアタッチする

以上で完了です。
動作確認は Photorealistic 3D Tiles の表示で行っています。
他の Tileset の表示では問題が起こる可能性があるためご了承ください