デモ
まずはデモです。手やコントローラーがオクルージョンされていることがわかります。ハードオクルージョンとソフトオクルージョンをボタンで切り替えています。
Depth API
Metaの提供するDepth APIを利用してオクルージョンを実現します。開発者が何か特別な実装をする必要はないので便利で助かります。
参考リンク:Depth APIの概要
以下に公式サンプルが用意されています。
バージョン情報
| ツール/SDK | バージョン | 
|---|---|
| Unity | 2022.3.3f1 | 
| Meta XR All in one SDK | 71.0.0 | 
準備
以下をmanifest.jsonに追加します。(URPを想定)
    "com.meta.xr.depthapi": "https://github.com/oculus-samples/Unity-DepthAPI.git?path=/Packages/com.meta.xr.depthapi",
    "com.meta.xr.depthapi.urp": "https://github.com/oculus-samples/Unity-DepthAPI.git?path=/Packages/com.meta.xr.depthapi.urp"
PackagesにShaderが追加されるので、オクルージョン処理を行いたいオブジェクトに対して適用すればOKです。

サンプルコード
ボタン押下でShaderのオクルージョン状態を変更するサンプルです。EnvironmentDepthOcclusionController.csはMetaの提供するコードです。
using System;
using Meta.XR.Depth;
using TMPro;
using UnityEngine;
public class OcclusionToggle : MonoBehaviour
{
    [SerializeField] private EnvironmentDepthOcclusionController _occlusionController;
    [SerializeField] private TextMeshProUGUI _currentOcclusionsModeText;
    private int _currentOcclusionTypeIndex = (int)OcclusionType.NoOcclusion;
    void Update()
    {
        if (OVRInput.GetDown(OVRInput.RawButton.A))
        {
            SwitchToNextOcclusionType();
        }
    }
    private void SwitchToNextOcclusionType()
    {
        _currentOcclusionTypeIndex = (_currentOcclusionTypeIndex + 1) % Enum.GetValues(typeof(OcclusionType)).Length;
        var newType = (OcclusionType)_currentOcclusionTypeIndex;
        _occlusionController.EnableOcclusionType(newType);
        if (_currentOcclusionsModeText)
        {
            _currentOcclusionsModeText.text = $"Occlusion mode: {newType.ToString()}";
        }
    }
}

