Unity VR 开发教程:Meta Quest 一体机开发 (二)混合现实 MR 透视 Passthrough 环境配置

文章目录

  • 📕教程说明
  • 📕配置透视的串流调试功能
  • 📕第一步:设置 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 编辑器中的运行按钮,在头显中看到透视的场景。这样就更加方便调试,不用每次打包到头显中运行。

配置步骤很简单:

  1. Quest 的系统版本要在 v37 及以上。
  2. Oculus 电脑客户端软件的版本要在 v37 及以上,并且确保设置-> Beta 测试版中的 “开发者 Runtime 功能” 和 “通过 Oculus Link 透视” 选项是开启的。
    在这里插入图片描述

📕第一步:设置 OVRManager

首先我们新建一个场景,删除场景中的 Main Camera。然后搜索 OVRCameraRig 这个 Prefab,将它拖到场景中。这个物体就相当于 XR 中的相机。

在这里插入图片描述

找到 OVRCameraRig 中的 OVR Manager 脚本,接下来需要做的步骤是:

  1. 在 Quest Features 的 General 选项中,将 Passthrough Support 设为 Supported 或者 Required ,这样打包的应用就能开启透视功能。
  2. 勾选 Insight Passthrough 下的 Enable Passthrough。这样在应用启动时就会初始化透视的功能。如果不想在程序启动时就初始化,可以取消勾选 Enable Passthrough,然后在自己的脚本中通过代码设置 OVRManager.instance.isInsightPassthroughEnabled = true/false 来控制透视的开启和关闭。在这里插入图片描述
  3. 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 编辑器中无法看到透视场景,但是在头显里是能正常显示的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/33407.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

系统架构设计师 5:软件工程

一、软件工程 1 软件过程模型 软件要经历从需求分析、软件设计、软件开发、运行维护,直至被淘汰这样的全过程,这个全过程称为软件的生命周期。 为了使软件生命周期中的各项任务能够有序地按照规程进行,需要一定的工作模型对各项任务给予规…

JavaScript进阶----《getter 和 setter 是什么》

前言: 这两个属性在学习前端的时候看到过,但是由于项目中没有用到过,所以一直没有细致的了解。今天 review 同事代码的时候,遇到了这个写法,看了半天也不知道如何处理。再不学习真的以后连别人的代码都不知道什么意思了…

spring Cloud使用Skywalking搭建笔记

skywalking支持dubbo,SpringCloud,SpringBoot集成,代码无侵入,通信方式采用GRPC,性能较好,实现方式是java探针,支持告警,支持JVM监控,支持全局调用统计等等,功…

uniapp 中 引入vant组件 和 vant 报错Unclosed bracket 的问题解决

在uniapp 中引入vant组件,遇到一个报错,所以在此记录一下完整过程 一、引入vant组件 方式一:前往 GitHub官网 Vant 下载压缩文件,获取下载中的dist 文件 方式二:通过npm install 方式引入 npm i vant/weapp -S --pr…

Android Studio 找不到 uploadArchives 入口

在4.2之前版本的 Android Studio 中想要module 打包arr,上传Maven 我们只需要 在对应module的build.gradle文件顶部添加 apply plugin: maven然后每一次修改记得要修改版本号,相同版本号提交失败,是不会覆盖的 defaultConfig {......versi…

2022年12月份青少年软件编程Python等级考试试卷六级真题(含答案)

一、单选题(共25题,共50分) 1.数据文件“abc.txt”中包含若干个英文单词,如图所示: 读取文件“abc.txt”中数据的Python程序段如下: file abc.txt word_b [] for word in open(file):if word[0:1] a and len(word)>4:wo…

工具系列之wireshark使用说明

简介 工具下载: https://www.wireshark.org/官方FAQ: https://www.wireshark.org/faq.html 过滤器设置 通常情况下,将.pcap 数据拖拽至 wireshark中即可打开。通过: 导航栏–》分析 --> 显示过滤器 即可找到对应的筛选器,筛…

优维低代码实践:数据加工/转化详解

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…

自然语言处理(概念)

1、 RNN模型简介 1.2传统RNN模型 2、LSTM模型 3、GRU模型 5、注意力机制 6、人名分类器 7 、BERT 8、Transformer 的结构是什么样子的? 各个子模块有什么作用? 8.1 Encoder模块 8.2 Decoder模块 8.3 Transformer 结构中的Decoder端具体输入是什么&#…

期末复习【网络安全】

期末复习【网络安全】 前言推荐期末复习重点第1章 引言1.1 计算机安全概念 21.2 OSI安全体系结构 61.3 安全攻击 71.3.1 被动攻击1.3.2 主动攻击 第2章 对称加密和消息机密性2.1 对称加密原理 232.1.3 Feistel密码结构 25 2.2 对称分组加密算法 272.2.1 数据加密标准2.2.2 三重…

【强化学习】常用算法之一 “Q-learning”

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

如何看待低级爬虫与高级爬虫?

爬虫之所以分为高级和低级,主要是基于其功能、复杂性和灵活性的差异。根据我总结大概有下面几点原因: 功能和复杂性:高级爬虫通常提供更多功能和扩展性,包括处理复杂页面结构、模拟用户操作、解析和清洗数据等。它们解决了开发者…

Spring基础知识(四)

目录 1.Spring包含的模块主要有什么 2.Core Container的作用 3.Data Access/Integration模块的作用 4.AOP模块的作用 5.Spring Web模块的作用 6.Test模块的作用 7.如何将一个类声明为Bean 8.Component和Bean的区别 9.能够注入Bean的注解有什么 10.Resource注解 1.Spr…

《微服务实战》 第三十二章 微服务链路跟踪-sleuth zipkin

系列文章目录 第三十二章 微服务链路跟踪-sleuth zipkin 第三十章 分布式事务框架seata TCC模式 第二十九章 分布式事务框架seata AT模式 第十二章 Spring Cloud Alibaba Sentinel 第十一章 Spring Cloud Alibaba nacos配置中心 第十章 SpringCloud Alibaba 之 Nacos discover…

APP外包开发中的第三方工具

APP外包开发过程中需要用到各种的第三方服务平台和工具,这些平台和工具可以提高开发效率和更规范的管理项目,今天和大家分享常见的一些平台和工具,从UI设计、开发、测试到上线覆盖APP开发的整个流程,希望对大家有所帮助。北京木奇…

Solr框架 02.Solr操作(document操作和query查询)

菜单项目Documents使用办法 其中的document选项&#xff1a; 以XML格式举例 1新增/修改 当id不存在时新增&#xff0c;当id存在修改。 <doc> <field name"id">8</field> <field name"name">明天更大卖</field> <field n…

CVE-2023-34541 LangChain 任意命令执行

漏洞简介 LangChain是一个用于开发由语言模型驱动的应用程序的框架。 在LangChain受影响版本中&#xff0c;由于load_prompt函数加载提示文件时未对加载内容进行安全过滤&#xff0c;攻击者可通过构造包含恶意命令的提示文件&#xff0c;诱导用户加载该文件&#xff0c;即可造成…

Spring Boot 中的 @SendTo 注解

Spring Boot 中的 SendTo 注解 在 Spring Boot 中&#xff0c;SendTo 注解是一个非常有用的注解&#xff0c;它可以用于实现 WebSocket 的消息转发功能。本文将介绍 SendTo 注解的原理、使用方法和示例代码。 什么是 SendTo 注解 SendTo 注解是 Spring Boot 中用于将消息发送…

【MOOC 测验】第4章 网络层

1‌、下列关于路由算法描述错误的是&#xff08; &#xff09; A. 链路状态算法是一种全局路由算法&#xff0c;每个路由器需要维护全局状态信息B. OSPF 是一种域内路由协议&#xff0c;核心是基于 Dijkstra 最低费用路径算法C. RIP 是一种域内路由算法&#xff0c;核心是基…

docker网络

一、docker网络概述 1、docker网络实现的原理 Docker使用Linux桥接&#xff0c;在宿主机虚拟一个Docker容器网桥(docker0)&#xff0c;Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c; 同时Docker网桥是 每个容器的…