随着 Meta Quest 3 的推出,开发人员社区开始向世界展示混合现实为何与众不同。我们相信,过去一年的创新比过去 10 年都要多,通过这种创新,许多开发人员已经能够创建全新的机制,准确展示为什么 MR 是吸引 Quest 用户的最佳方式。为了帮助您加快开发速度,我们一直在努力宣传这些广为人知的 MR 机制,这样您就不必在每次想要构建神奇的 MR 体验时都从头开始。
我们用“MR 主题”一词来创造这些机制,作为重复出现的功能的蓝图,我们希望其他开发人员在开始构建新的 MR 体验时会倾向于这些功能。Motif 不是完整的应用程序,而是可能需要特定技术功能和 API 集合才能实现的重复出现的方面。
我们在这篇博文中探讨的第一个主题是开发人员使用 Passthrough 从完全沉浸式体验过渡到混合现实体验,反之亦然。下面,我们将讨论什么是 Passthrough,在何处以及如何使用它,以及在 Meta Quest 商店上发布热门应用程序的其他开发人员如何利用当今 Passthrough 的魔力。在这篇博文的最后,您将能够通过操纵滑块来调整周围环境的可见性,该滑块调节 Passthrough 的级别,或者通过按一下按钮直接从一种模式切换到另一种模式。
透视技术利用设备的外部摄像头提供实时视频,使用户能够在了解真实环境的同时与虚拟元素互动。这也意味着用户将感到自由和安全,可以在他们的空间内四处走动。此外,Passthrough 不仅仅是作为背景元素,还允许创作者打造身临其境的体验,将用户的房间和家具融入游戏本身。我们将在未来的专用 Motifs 中解释这些类型的概念。
启用透视很容易,但存在一些陷阱和两个主要方案,其中在混合现实体验中使用透视需要单独的逻辑;上下文透视和条件透视。
如何在 MR 体验中使用透视
上下文透视
上下文透视是指应根据系统的建议启用 Passthrough 的场景。换句话说,如果有人在家庭环境中处于 Passthrough 模式,我们的操作系统可以检测到这一点,并在 Passthrough 中显示系统启动画面和 Unity 场景。在 VR 模式下,系统启动画面将以黑色背景显示。
在应用程序启动时使用上下文透视
Meta Quest 上 Unity 应用程序中的启动画面是应用程序启动时显示的初始屏幕,通常显示应用程序的徽标或品牌,然后过渡到主要内容或界面。默认情况下,启动画面以黑色背景显示,并显示 Unity 徽标和/或应用程序徽标。对于直接启动到 Passthrough 视图的 MR 应用,如果加载屏幕在后台显示 Passthrough,用户体验通常会更好。Meta OS 已经允许您开箱即用地执行此操作,方法是转到 Unity 中 OVR Manager 组件上的 System Splash Screen Background 选项,并将其更改为 Passthrough (Contextual)。
请务必确保未选中“Show Splash Screen”,并且没有在 Unity 项目设置中为虚拟现实启动画面选择纹理。请记住,目前此内置启动画面只能使用 Unity Pro 许可证关闭。最后,您需要更新项目中的 Android Manifest 文件。为此,您需要转到“Meta”,然后转到“Tools”并更新 Android Manifest 文件。
在应用程序中利用上下文透视
根据系统的建议,您可能希望部署 VR 或 Passthrough 背景。此建议可通过以下方式获得:
passthroughToggled = OVRManager.IsPassthroughRecommended();
您可能希望将此首选项保存在布尔变量中,这样以后可以更轻松地相应地启用或禁用透视图层。将此方法与上下文透视系统初始屏幕相结合,可提供不间断的用户体验。
使用上下文透视的常见示例
使用此技术的热门应用程序通常利用透视作为其核心体验的模式。
使用此技术的热门应用程序通常会在其核心体验期间部署透视后台。这方面的一个例子是 Cubism,这是一款益智游戏,在其 Meta Quest 主环境中,处于 Passthrough 模式的用户可以使用上下文 Passthrough 启动画面加载游戏,并继续在 Passthrough 中不间断地玩实际体验。下面的视频显示了如何使用 Passthrough 系统启动画面的主要示例。
条件透视
利用 Passthrough 的另一种方法是使用它在 MR 和 VR 游戏模式之间切换,或有条件地切换到 Passthrough(例如,打开菜单、双击设备、更改场景或有条件地淡入和淡出体验的某些部分,例如键盘、屏幕、墙壁或天花板)。所有这些用例都需要一种方法,在完全沉浸式 VR 和有条件地按命令切换。在选定时间显示整个环境或部分环境可以为玩家带来舒适感和沉浸感,从而提高留存率。
以简单的方式切换模式
在模式之间切换的最直接方法是简单地启用或禁用 Passthrough 图层并更改主相机的清除标志和背景颜色。您可能还希望实现一个切换方法并引入一个布尔变量,例如“passthroughToggled”,以便在运行时按需准确地切换模式。
passthroughLayer.enabled = passthroughToggled;
camera.clearFlags = passthrough切换 ?CameraClearFlags.SolidColor : CameraClearFlags.Skybox;
camera.backgroundColor = passthrough切换 ?Color.clear : 颜色.white;
虽然此解决方案提供了一种简单的交替模式方法,但如果您的应用体验在透视 MR 模式和沉浸式 VR 模式之间多次切换,您可能需要找到一种更优雅的过渡方式。
以推荐的方式切换模式
请务必记住,启用 Passthrough 是异步的。摄像机等系统资源可能需要几百毫秒才能激活,在此期间,系统尚未渲染 Passthrough。如果您的应用程序希望透视在启用后立即可见,这可能会导致黑色闪烁。您可以使用“PassthroughLayerResumed”事件来避免此打嗝,该事件在层完全初始化且 Passthrough 可见后发出。目标是在两种模式之间平滑过渡,而不是立即从 Passthrough 切换到 VR。
在 XR 应用程序中,在场景或模式之间淡化的一种常见方法是使用淡化屏幕,它通常由位于主摄像头前面的四边形组成。通常,开发人员会平滑地淡入和淡出四边形的材质,在透视和 VR 之间淡入淡出时,您可以使用类似的方法。我们提供了一个名为“SelectivePassthrough”的着色器,它是 Meta Core SDK for Unity 的一部分,可让您有选择地显示 Passthrough。您还可以在使用 Passthrough Window Building Block 时看到此着色器的用例。
该着色器允许您将屏幕上的像素变为透明并显示 Passthrough。这是您将用于 Passthrough Fader 着色器的内容。为了实现更平滑的淡入淡出,您需要在我们的 OVR 管理器上使用 OVRManager.eyeFovPremultipliedAlphaModeEnabled = false; 在 Awake() 方法中。
禁用 eyeFovPremultipliedAlphaModeEnabled 将从预乘 Alpha 混合切换到标准 Alpha 混合。预乘 Alpha 混合有时会导致视觉伪影,例如闪烁或光晕效果,尤其是在处理半透明像素或某些光照条件时。通过禁用它,您将使用标准 Alpha 混合,这可能会更好地处理这些情况并产生更流畅的视觉效果。
创建平滑过渡的逻辑
利用上述所有学习成果,您可以将所有内容放在一起,为您的受众实现平稳过渡。我们已经介绍了如何通过调整 _InvertedAlpha 属性来淡入和淡出材质;但是,如果您想实现渐变淡化(例如,从下到上,就像在 Meta Quest 主环境中一样),则需要在着色器中创建一个名为 _FadeDirection 的新属性。然后,在片段着色器 (frag) 中,您需要引入一个新变量来调整颜色的 alpha 值。
接下来,您需要从着色器创建材质,在主相机上创建一个球体,并将材质附加到此球体。淡化器逻辑应附加到我们的球体,以便它可以获取对 meshrenderer 的引用。该脚本应包括一个 FadeDirection 枚举,用于定义淡化效果的方向。逻辑的主要部分可以是切换方法,用于切换 Passthrough 图层并启动淡化效果。如果目标 Alpha 为 1,则开始淡出;如果目标 Alpha 为零,则启用 Passthrough 图层。您需要将此方法绑定到物理按钮或 UI 面板。
您可以在每次淡化完成时禁用和启用球体,并切换摄像机的清除标志和背景颜色。或者,如果您的游戏需要,您可以始终启用球体,这样就无需在每次切换模式时切换摄像机清除标志和背景颜色。这还有一个额外的好处,即能够设置一个固定的距离,即在 Passthrough 模式下可以看到虚拟内容的距离,而不是在禁用四边形的渲染器时,所有内容都可见。查看我们的 YouTube 教程,了解代码的更详细说明!
使用条件透视的常见示例
Wooorld 是一款以推荐方式使用条件透视模式的热门应用程序,它在一定程度上通过从透视 MR 模式切换到完全沉浸式 VR 模式来提供引人注目的用户体验。通过使用户能够在 Passthrough 中查看地图模型,然后以完全沉浸式模式跳转到某个位置,用户仍然可以了解周围的环境,并享受比始终处于全 VR 中更大的愉悦感。
额外提示:在 Passthrough 中移除边界
虽然边界是完全沉浸式应用程序所需的重要安全系统,但它可能会不必要地中断 MR 体验。边界 API 提供了一种通过上下文无边界禁用边界的机制,这允许您的应用程序在透视期间对部分或全部体验进行无边界运行。可以通过 Unity 中的 OVRManager 组件访问 Boundary API。
为了启用对 Boundary API 的支持,必须在 OVRManager 的 Quest 功能中选择“支持”或“必需”。Passthrough Support 不能选择为 “None”(无)。此外,您需要在“Insight Passthrough & Guardian Boundary”下勾选名为“Should Boundary Visibility Be Suppressed”的框。
要将这些更改应用于您的 APK,您需要转到“Meta”,然后转到“Tools”,然后更新 android 清单文件。值得一提的是,您将仅在透视模式下禁用边界,并且仅在使用 APK 的设备上运行应用程序时禁用边界,并且出于安全原因,您不会在完全沉浸模式下禁用边界。或者,您可以完全关闭边界。无边界应用会在整个体验中禁用边界,并且不得有任何沉浸式体验。确保您的应用程序可以安全地为整个应用程序体验禁用边界,这一点至关重要。
原文:https://developer.oculus.com/blog/mixed-reality-motifs-passthrough-transitioning-meta-quest-horizon/