文章目录
- 📕教程说明
- 📕配置透视的串流调试功能
- 📕第一步:设置 OVRManager
- 📕第二步:添加 OVRPassthroughLayer 脚本
- 📕第三步:在场景中添加虚拟物体
- 📕第四步:删除场景中的天空盒
- 📕第五步:设置相机
📕教程说明
前期需要的一体机开发的环境配置可以参考这篇教程:Unity VR 开发教程: Meta Quest 一体机开发 (一) 环境配置
电脑操作系统:Windows
使用的 VR 设备:Meta Quest 2
使用的 Unity 版本:2021.3.5 LTS (这里推荐使用 2021 及以上的 LTS 版本)
Oculus Integration 版本:v54 (目前 v54 以上也适用)
官方文档:https://developer.oculus.com/documentation/unity/unity-passthrough/
注:本篇教程可能具有时效性,因为 Oculus 的 SDK 更新迭代得比较快,如果大家使用的 SDK 版本比我的新,在不方便查看官方文档的情况下也可以先试试本篇教程的配置步骤,如果发现教程过时,欢迎大家进行反馈,我也会及时进行更改说明,一切以官方文档为主。
最终实现效果:在透视下的现实场景中看到虚拟物体。
📕配置透视的串流调试功能
开启了这个功能后,就可以在设备与电脑串流的条件下运行支持透视的软件。这时候可以直接通过点击 Unity 编辑器中的运行按钮,在头显中看到透视的场景。这样就更加方便调试,不用每次打包到头显中运行。
配置步骤很简单:
- Quest 的系统版本要在 v37 及以上。
- Oculus 电脑客户端软件的版本要在 v37 及以上,并且确保设置-> Beta 测试版中的 “开发者 Runtime 功能” 和 “通过 Oculus Link 透视” 选项是开启的。
📕第一步:设置 OVRManager
首先我们新建一个场景,删除场景中的 Main Camera。然后搜索 OVRCameraRig 这个 Prefab,将它拖到场景中。这个物体就相当于 XR 中的相机。
找到 OVRCameraRig 中的 OVR Manager 脚本,接下来需要做的步骤是:
- 在 Quest Features 的 General 选项中,将 Passthrough Support 设为 Supported 或者 Required ,这样打包的应用就能开启透视功能。
- 勾选 Insight Passthrough 下的 Enable Passthrough。这样在应用启动时就会初始化透视的功能。如果不想在程序启动时就初始化,可以取消勾选 Enable Passthrough,然后在自己的脚本中通过代码设置 OVRManager.instance.isInsightPassthroughEnabled = true/false 来控制透视的开启和关闭。
- OVR Manager 中有个 Tracking Origin Type 需要注意一下,它相当于头部高度相对的参考系,可以理解为设置头部的初始高度。如果选择 Floor Level,运行程序后头部高度会以地面作为参考点,初始高度相当于摆放在场景中的眼部相机的高度加上现实中玩家头显到安全区地面的距离;如果选择 Eye Level,头部的初始高度和摆放在场景中的眼部相机的高度是一样的,不会额外加上现实中头显到地面的距离;最后一个 Stage 目测效果和 Floor Level 差不多,具体区别还在研究,大家可以切换这三种类型进行调试,感受它们的不同,我会在下面展示它们的区别。
Eye Level:
Floor Level / Stage:
📕第二步:添加 OVRPassthroughLayer 脚本
接下来,我们在 OVRCameraRig 物体上添加 OVRPassthroughLayer 脚本,然后把 Placement 设为 Underlay:
Quest 中透视的现实场景相当于单独的一个图层,而我们的虚拟场景和虚拟物品相当于另外的图层。
当 Placement 设置成 Underlay 的时候,相当于透视的现实图层置于虚拟图层之下,也就是现实场景充当背景,然后虚拟的物体叠加在现实背景之上,这样我们就能在透视的现实世界中看到虚拟物体。
当 Placement 设置成 Overlay 的时候,则反之。相当于现实图层置于虚拟图层之上,这个时候现实场景会把虚拟场景覆盖掉。
因为我们想要在透视下的现实场景中看到虚拟物体,所以我们要选择 Underlay。
📕第三步:在场景中添加虚拟物体
我这里在 OVRCameraRig 物体前面添加了一个 Cube 方块:
📕第四步:删除场景中的天空盒
在 Unity 菜单栏选择 Window -> Rendering -> Lighting ,点击 Environment 选项,将 Skybox Material 设为 None。因为根据需求,我们想要在完全透视场景下,所以不需要渲染天空盒。
📕第五步:设置相机
在 Hierarchy 面板中找到 OVRCameraRig/TrackingSpace/CenterEyeAnchor 这个子物体,它相当于我们的相机。
然后在 Inspector 面板中,将 Camera 组件的 Clear Flags 设为 Solid Color,然后将 Background 的 alpha 值设为 0,也就是将背景的透明度设为0。Background 的颜色决定了透视场景的颜色,如果设为黑色,则看到的是默认的透视颜色。因为我使用的是 Quest 2,所以如果我将 Background 设为黑色,我看到的就是 Quest 2 默认的黑白透视,如果是 Quest pro 或者之后拥有彩色透视的 Quest 设备,那么看到的应该就是彩色透视的场景。
现在,透视的环境配置已经完成了。
最终效果:
注:因为 Meta 的隐私政策,在 Unity 编辑器中无法看到透视场景,但是在头显里是能正常显示的。
同时,在 Oculus/SampleFramework/Usage/Passthrough/Scene 文件夹下有官方提供的一些透视 Demo,大家可以研究一波。
但是需要注意的是,OVRCameraRig 的 OVRManager 脚本中的 Passthrough Support 需要确认选择了 Supported 或者 Required,才能在打包出来的程序中看到透视场景。