Unity之OpenXR+XR Interaction Toolkit接入HTC Vive

一.前言

目前VR领域,最流行的设备要当属HTC VIVE了。以前在Unity端接入HTC VIVE设备时,都是通过SteamVR+VRTK来接入的。但是随着Unity的版本升级和OpenXR标准的流行,再加上VR设备的逐渐增多。SteamVR+VRTK的方式已经无法更好的满足大家的需求。

我今天为大家分享的就是,如何基于Unity2020或Unity2021,通过OpenXR标准来接入VR,可以同时适配所有的VR设备,包括HTC ViVE,Pico,Occlus等,今后不管什么设备只要API是符合OpenXR标准,我们就可以通过Unity的OpenXR方式接入,而且接入流程非常简单,使用起来也比之前SteamVR+VRTK的方式要简单方便,可谓是一举多得。

二.什么是OpenXR

OpenXR 旨在标准化各种 VR / AR 平台上的设备和应用程序之间的规范。它由 Khronos Group 制定,Khronos Group 是一个由 VR/AR 相关公司组成的组织。 微软、HTC,Valve等多家公司都参与了。

1.OpenXR出现的背景

随着VR和AR的热潮,越来越多的软件公司开始进入该领域,同时也有越来越多的VR/AR设备出现,在进行VR开发的时候,开发者们要根据不同的VR设备厂商来使用不同的SDK进行应用开发。如果没有跨平台的标准,高昂的开发成本一定会限制市场的增长。如下图所示:
在这里插入图片描述
OpenXR 工作组相信我们可以通过标准化来帮助解决这些问题。标准将允许应用程序开发人员将更多时间花在创造令人惊叹的体验上,而将更少的时间花在让体验在无数硬件组合上发挥作用上。它还将使设备供应商能够在其平台上提供更多内容,并将使其投资面向未来。

2.Khronos Group

Khronos Group 团队成立于 2000 年 1 月, 由包括 3Dlabs, ATI, Discreet, Evans & Sutherland, Intel, Nvidia, SGI 和 Sun Microsystems 在内的多家国际知名多媒体行业领导者创立,致力于发展开放标准的应用程序接口 API ,以实现在多种平台和终端设备上的富媒体创作。
OpenXR 提供跨平台、高性能的直接访问跨多个平台的各种 XR 设备运行时。
OpenXR 使应用程序和引擎(包括 WebXR)能够在任何公开 OpenXR API 的系统上运行。
在这里插入图片描述
总而言之,OpenXR 是VR领域的一个重要里程碑。这个API将允许游戏和其他应用程序在各种硬件平台上轻松运行,而无需专有的SDK。

三.Unity接入流程

我们可以使用UnityHub自带的VR模板来创建项目,我这里是通过创建空的3D项目来一步一步的完成VR项目的配置,并最终适配HTC Vive的VR项目

1.创建3D工程

创建一个3D的空项目,或者3D(URL)的空项目,因为2021其实官方是推荐搭建使用URL的渲染管线的,所以我么不如直接一步到位。
在这里插入图片描述

2.Install XR Plugin Manager

打开Edit->ProjectSettings-> XR Plugin Management面板,然后点击Install XR Plugin Management安装一下XR Plugin
在这里插入图片描述
安装完毕后,如下图所示:
在这里插入图片描述
勾选OpenXR,会提示OpenXR插件需要使用新的Input System系统,而项目创建时默认使用的是旧的输入系统,需要重启Unity编辑器,将输入系统升级为新的Input System。如下图所示:
在这里插入图片描述
Unity编辑器重启完后,我们会发现XR Plugin Management下面有一个OpenXR的子菜单。
我们在他的Interaction Profiles下面,添加几个开发HTC Vive必备的配置。如下图所示:
这里需要说明一下,我们想要兼容什么设备就添加什么Profile即可,我是使用HTCVive,理论上应该只添加HTC的Profile即可,但是似乎有点小问题,等我添加了Oculus Touch Controller Profile之后问题解决了。
Render Mode 的设置可以根据需求更改,我一般习惯把 Render Mode 中的 Single Pass Instanced 改为 Multi Pass。Multi Pass 会将场景渲染两次,分别显示在两只眼睛中,这种渲染方式虽然性能会差一点,但是具有高兼容性。
在这里插入图片描述

3.导入插件XR Interaction Toolkit

打开PackageManager,然后点击Unity Registry,搜索插件XR Interaction Toolkit,点击Install安装。
选择最新版本安装即可。安装完毕后。如果我们安装时显示版本不是最新的,我们可以通过名字来安装,点击左上角“+“号,选择Install package by name。然后输入:com.unity.xr.interaction.toolkit,即可导入最新版本。
在这里插入图片描述

4.导入Sample

导入Sample中的Starter Assets包。里面包含了一些Preset和Input System相关的东西,
导入Sample中的XR Device Simulator包,里面包含了XR模拟器先关的东西。
导入后如下图所示:
在这里插入图片描述

5.添加Preset

我们选择Starter Assets,然后分别选中下图中标出的Preset,然后点击Inspector面板的Add To ActionBasedContinuousMoveProvider default按钮。
这个功能是方便我们快速的自动给物体添加某个操作配置。不用手动一个一个配置了。如下图所示:
参考官方文档
在这里插入图片描述照 Starter Assets 中为我们准备好的 Preset 配置,可以大大简化我们后续的开发工作。因此,其他的 Preset 也是一样,我们都可以点击 Inspector 面板中的 Add 按钮。

6.设置PresetManager的Filter

我们点击 Edit -> Project Settings -> Preset Manager:我们看到刚才添加的几个Preset,我们给它的Filter设置对象的名字即可,如XRI Default Right Controller对应就是Right。XRI Default Left Controller就是Left。
在这里插入图片描述
Filter 的作用
Controller 一般指的是手柄,XR Interaction Toolkit 提供了 ActionBasedController 这个脚本用于跟踪手柄的姿态和处理手柄的输入动作。先看一下这个脚本在 Inspector 面板中长啥样【实际上在面板中会显示为 XR Controller (Action-based) 】
在这里插入图片描述
我们看到上面这个手柄的控制脚本中有大量的手柄动作Action比如选择,拿取,点击UI等,对应的是一个个的Reference的Input操作,比如trigger按键,grab按键等等,在XRI Default Input Actions中配置。
在这里插入图片描述
我们配置Filter的目的,就是在添加了Controller脚本后,不需要自己手动指定Preset了,系统会根据Filter自动识别对应的左手或者右手Preset。如果不设置Filter当然也可以,也可以手动指定左右手的Preset

四.运行Demo

1.官方demo

Unity给我们提供了XR Interaction Toolkit的demo,我们可以直接运行测试,并根据Demo学习如何修改VR场景
在这里插入图片描述

2.自定义Demo

接下来我们不使用官方提供的场景,我们自定义场景,然后添加VR相关脚本并运行起来。

1.创建场景

我们创建一个简单的场景,添加地面,添加几个简单的盒子作为环境。

2.添加XR Origin

XR Origin是我们的VR控制器,包含了VR头显和VR手柄的控制,我们可以在场景中,右键创建,如下图所示:
在这里插入图片描述
创建后,如下图所示:
在这里插入图片描述
我们看到,多了一个XR Interaction Mangaer,和一个XR Origin
XR Origin中又包含了Camera Offset以及下面的两个手柄控制。
我们可以看到创建出来的Hand Controlle上面已经帮我们自动创建了XR Controller(Action-Based)脚本,并自动帮我们绑定了左手的所有动作Preset。这是因为我们之前添加了控制器的Preset并设置了Filter。

好了,现在可以在模拟器运行一下试试了。如下图所示:
在这里插入图片描述
左下角的面板就是XR Device Simulator面板,用于VR控制在Unity编辑器的模拟。

猜你喜欢

转载自blog.csdn.net/qq563129582/article/details/130211641