Meta 发布了 Quest 3 的 Depth API 作为实验性功能,供开发人员测试混合现实动态遮挡。
虽然虚拟对象可以出现在房间设置扫描生成的原始场景网格后面,但它们始终显示在移动对象(例如用户的手臂和其他人)的前面,即使距离较远,这看起来很刺耳且不自然。
开发人员已经可以通过使用手部跟踪网格来为用户的手实现动态遮挡,但很少有人这样做,因为它会在用户的手腕处切断,因此不包括用户手臂的其余部分。
新的 Depth API 为开发人员提供了由头显从其角度生成的每帧粗略深度图。这可用于实现遮挡,既适用于移动对象,也适用于静态对象的更精细细节,因为这些对象可能尚未在场景网格中捕获。
动态遮挡应该会让 Quest 3 上的混合现实看起来更加自然。然而,头显的深度感应分辨率非常低,因此它不会拾取手指之间的空间等细节,并且用户会看到物体边缘周围的空白间隙。
深度图也仅建议使用到 4 米,之后“精度会显着下降”,因此开发人员可能还希望使用场景网格进行静态遮挡。
开发人员可以通过两种方式实现遮挡:硬遮挡和软遮挡。Hard 本质上是免费的,但有锯齿状边缘,而 Soft 则需要 GPU 成本,但看起来更好。看看 Meta 的示例片段,很难想象任何开发者都会选择 Hard。
但在这两种情况下,遮挡都需要使用 Meta 的特殊遮挡着色器或在自定义着色器中专门实现它。它远非一键式解决方案,并且可能需要开发人员付出巨大的努力来支持。
除了遮挡之外,开发者还可以使用 Depth API 在混合现实中实现基于深度的视觉效果,例如雾。
使用 Depth API 目前需要通过运行 ADB 命令在 Quest 3 上启用实验性功能:adb shell setprop debug.oculus.experimentalEnabled 1
Unity 开发人员还必须使用 Unity XR Oculus 包的实验版本,并且必须使用 Unity 2022.3.1 或更高版本。
开发者可以在此处找到 Unity的文档,在此处找到Unreal 的文档。
作为一项实验性功能,使用 Depth API 的构建尚无法上传到 Quest Store 或 App Lab,因此开发人员目前必须使用 SideQuest 等其他分发方法来分享其实现。Meta 通常会在后续 SDK 版本中将功能从实验阶段过渡到生产阶段。
参考:uploadvr