已归档 - 探索英特尔® 实感™ SDK 和 Oculus Rift* DK2项目开发

英特尔® 实感™ SDK 已停产。 不再继续提供支持或更新。

简介

本文探讨了开发人员在创建集成了面向 Windows 的英特尔® 实感™ SDK* 和 Oculus Rift* 头盔式显示器 (HMD) 时需要注意的技术细节,以及会面临的技术挑战。 我们首先概述一下 Oculus Rift 开发套件 2 (DK2),然后分析您在开发组合了基于红外 (IR) 摄像头的多个传感器的应用时会遇到的一些问题(图 1)。 本文还演示了如何将英特尔实感 SDK 和 Oculus Rift 集成在 Unity* 5 项目中。

Intel® RealSense™ SDK and Oculus Rift* Apps

图 1. 英特尔® 实感™ SDK 和 Oculus Rift* 演示应用并发运行。

范围与要求

本文中的信息仅适用于前置英特尔® 实感™ 摄像头 F200 的应用。 如欲按照演示操作,您需要Oculus Rift DK2, 英特尔实感摄像头 (F200)以及满足下列要求的开发系统:

  • 第四代智能英特尔® 酷睿™ 处理器(或更高版本)(以支持英特尔实感 SDK)
  • 150 MB 可用硬盘空间
  • 4 GB RAM
  • 一个面向外设 F200 摄像头的 USB3 端口及两个面向 Oculus Rift DK2 的 USB 2.0 端口
  • Windows* 8.1
  • 专用显卡、NVIDIA GTX* 600 系列或 AMD Radeon* HD 7000 系列(或更高版本),支持 DVI*-D 或 HDMI* 图形输出。

支持 Oculus Rift* DK2 和英特尔® 实感™ 摄像头 (F200) 所需的软件组件如下:

  • 英特尔实感 SDK(v6.0.21.6598 或更高版本)
  • 英特尔实感景深摄像头管理器 F200(v1.4.27.41944 或更高版本)
  • 面向 Windows 的 Oculus SDK*(v0.7.0.0-beta 或更高版本)
  • 面向 Windows 的 Oculus Runtime(v0.7.0.0-beta 或更高版本)
  • 面向 Unity 5 的 Oculus Utilities(v0.1.2.0-beta 或更高版本)

对于本文中的 Unity 演示,您可以使用免费的个人版本(v5.2.2 或更高版本),点击此处

Oculus Rift* DK2

Oculus Rift DK2 是一款硬件和软件工具套件,支持开发人员创建有趣的虚拟现实 (VR) 游戏和用户体验。 除 HMD 设备外,该套件还包括用于跟踪用户头部动作的低延迟位置跟踪摄像头。

该位置跟踪摄像头基本上是一颗标准网络摄像头,带有安装在镜头上的红外滤光片。 耳机带有多个排成一列的隐藏式红外 LED,供位置跟踪摄像头用于在 3D 空间内确定用户头部的位置。 有趣的是,在 Raw Streams SDK 示例中查看红外摄像头视频流时,这些隐藏式光源则显示在英特尔实感摄像头面前。

Oculus Rift* IR LEDs visible to Intel® RealSense™ Camera

图 2. Oculus Rift* IR LED 为英特尔® 实感™ 摄像头可见。

Oculus Rift HMD 包括陀螺仪、加速计和磁力仪,它们通过传感器融合进行组合时可以确定用户头部的方向,并报告摇晃、倾斜和旋转等信息。 该位置跟踪摄像头还可提供有关用户头部位置的其他信息(即 x、y 和 z 空间坐标)。

更好了解 DK2 位置跟踪摄像头为虚拟现实 (VR) 增添了什么新优势的一个方法是,运行可从 Oculus Configuration Utility(图 3)启动的演示场景。

Oculus Configuration Utility

图 3. Oculus Configuration Utility。

将位置跟踪摄像头插入 USB 端口查看演示场景时,您会发现,通过将头部靠向摄像头或从摄像头移开,虚拟桌上的对象似乎会变近或变远。

Oculus Rift* demo scene

图 4. Oculus Rift* 演示场景。

如果随后在拔出位置跟踪摄像头 USB 接口的情况下运行演示场景,您会发现 Oculus Rift 耳机的传感器仍会提供摇晃、倾斜和旋转等方向数据,但您在 z 轴方向移动头部时不会再感到深度变化。

对前置摄像头的干扰

有兴趣创建集成前置英特尔实感摄像头 F200 的 VR 应用的英特尔实感 SDK 开发人员目前需要担心的是,3D 景深摄像头和 Oculus Rift 的位置跟踪摄像头有可能相互干扰。 图 5 所示为一台 2 合 1 联想 ThinkPad* Yoga 15 超极本™,它配备了一颗英特尔实感摄像头 F200 及一颗位于其旁边、安装在屏幕边框上的 Oculus Rift 位置跟踪摄像头。

Forward-facing cameras

图 5. 前置摄像头。

英特尔实感 F200 摄像头使用编码光技术将红图案投影到用户身上,并通过红外摄像头接收不可见的反射图像。 Oculus Rift 耳机通过将一系列红外 LED 投影至自身的被动式红外摄像头(经过滤光处理,仅可接收红外光谱区的光线),部分实现其跟踪头部的目的。 Oculus Rift 耳机的红外 LED 对英特尔实感摄像头的作用可视为深度数据流中的不同干扰图,如图 6 所示。

IR Interferences to the Depth Data

图 6. 对深度数据的红外干扰。

相对于英特尔® 实感™ 摄像头对 DK2 位置跟踪摄像头进行一定角度的偏置,可能在一定程度上减少红外干扰效应;然而,Oculus 耳机本身是一种红外发射源,因而会在使用 DK2 位置跟踪摄像头时对前置英特尔实感摄像头产生一定影响。

为更好地了解干扰效应,我们运行了 SDK Hands Viewer 示例应用,同时将 DK2 位置跟踪摄像头连接至 USB 端口并运行 Oculus Rift VR 演示应用。 如图 7 所示,帧速下降明显。 尽管这可归因于多个因素(如该特定测试使用的欠规范的 NVIDIA GeForce* 840M 显卡),但有趣的是,英特尔实感摄像头上的手部跟踪和手势识别仍然运行正常。

Gesture recognition in the presence of Oculus Rift’s IR LEDs

图 7. 配备 Oculus Rift 红外 LED 时的手势识别。

Unity 5 演示

如前所述,英特尔实感摄像头和 DK2 位置跟踪摄像头系统可能会相互干扰,但如果将这两种技术整合在一个真实项目中会怎样? 在以下各部分中,我们将快速演示支持英特尔实感摄像头的基础 Unity 5 项目的创建,然后使用它提供简单的 VR 体验。

创建新的 Unity 项目

  • 双击 Unity 桌面图标,创建新的 Unity 项目。 选择 New,然后选择项目名称和位置。
  • 如果 Unity 编辑器已打开,从菜单栏中选择 FileNew Project 以创建新项目,然后选择项目名称和位置。

导入 RSSDK Unity Toolkit

  • 从菜单栏中选择 AssetsImport PackageCustom Package…,导入 RSSDK Unity Toolkit。
  • 在 Import Package 屏幕中,导航至包含 Unity Toolkit 包的 SDK 文件夹。 位置可能有所不同,具体取决于 SDK 的安装位置。 在本示例中,该工具套件位于 C:\Program Files (x86)\Intel\RSSDK\framework\Unity 下。
  • 选择 UnityToolkit,然后点击 Open

    注: 该文件夹中包含两个 Unity 包文件: UnityToolkitUnityCSharp。 导入 UnityCSharp,将仅会添加所需的托管和非托管 DLL,以在 Unity 应用中支持英特尔实感 SDK。 或者,导入 UnityToolkit,将所需的 DLL 及许多其他资产添加至项目中,以帮助简化支持英特尔实感 SDK 的项目的开发。)

  • Importing Package 屏幕将会显示已选择的所有插件、操作和预制件。 选择所有复选框,并点击 Import
  • 在 Project 屏幕中,注意许多资产已添加至项目中,并位于下列文件夹中:
    • Plug-ins。包含 libpxccpp2c.dll 和非托管 C++ P/Invoke DLL。
    • Plugins.Managed。包含 libpxcclr.unity.dll 和托管 C# interface DLL。
    • RSUnityToolkit。包含 Actions、Internals、Prefabs 和 Samples 文件夹。

添加游戏对象

  • 该项目开始包含 Main Camera 和 Directional Light。 在 Hierarchy 屏幕,点击 Create,然后选择 3D ObjectCube, 从而添加一个原始的 Cube 游戏对象至 Scene。
  • 在 Assets 下 Project 文件夹中,展开 RSUnityToolkit 文件夹,然后选择 Actions
  • Actions 文件夹包含多个可应用于游戏对象的脚本。 点击 TrackingAction 脚本,然后在 Hierarchy 屏幕的 Cube 游戏对象上拖放它。
  • 在 Hierarchy 屏幕中选择 Cube,然后您会看到 Inspector 屏幕显示 Tracking Action (Script)

配置手部跟踪

  • 在默认情况下,Tracking Action 设置为 HandTracking,Virtual World Box Dimensions 的 X、Y 和 Z 值设置为 100。如果您此时玩游戏,您会看到 3D 景深摄像头的 LED 开启,这表明摄像头已激活。
  • 如果在摄像头前面抬起手,您可能会看到 Cube 游戏对象使屏幕关闭。 这是因为 Virtual World Box Dimensions 的值设置过高。 将 Virtual World Box Dimensions 的 X、Y 和 Z 值设置为 10
  • 在 Scene 视图中,注意游戏对象周围用红色标示的 Virtual World Box 现在更为狭小(请参见图 8)。
  • 再次运行游戏。 Cube 游戏对象现在应该在更狭小的虚拟空间内跟踪您的手部。
  • 您可能会注意到,Cube 游戏对象在移动时会有所抖动。 将平滑系数提高至 10 可减轻这种抖动。

Unity* Editor – Tracking Action Settings

图 8. Unity* 编辑器 – Tracking Action 设置。

在 Unity 项目中启用 VR

如 Oculus Rift DK2 网站所述,Unity 5.1+ 开发人员可选择 Player Settings 中的 Virtual Reality Supported 复选框,为其主摄像头设置内置方向和位置跟踪,以取代立体 VR 摄像头。 按照下列步骤在项目中启用 VR。

  • 选择菜单栏中的 Edit – Project Settings,然后点击 Player
  • Inspector 窗口,选择 Virtual Reality Supported 复选框。

点击 Play 按钮,并戴上 Oculus Rift 耳机;您很快就会看到,主摄像头转换被 Oculus Rift 耳机的方向跟踪所覆盖。 该立方体仍然可通过面向 Unity TrackingAction 脚本的英特尔实感 SDK 工具套件跟踪您的手部,但您现在查看场景时 Unity 摄像头可跟踪 HMD 的动作。

Unity Virtual Reality Enabled

图 9. Unity 虚拟现实已启用。

导入面向 Unity 的 Oculus Utilities 包

该 Utilities 包是一种可选的补充项,包括用于支持 VR 应用开发的预制件、场景和脚本。 下面的步骤说明了如何将该包导入您的项目中。

  • 首先从菜单栏中选择 AssetsImport PackageCustom Package…
  • Import Package 屏幕中,导航至包含 OculusUtilities Unity package 文件的文件夹。 选择 OculusUtilities,然后点击 Open
  • Importing Package 会显示所有已选择的 Oculus 资产。 选择所有复选框,并点击 Import

注:在本示例中,我们将把 OculusUtilities 中的 OVRCameraRig 预制件添加至场景。 因此,您在使用 OculusUtilities 包时无需选择 Inspector 窗口中的 Virtual Reality Supported 复选框。

  • OVRCameraRig 预制件拖动至场景。
  • 关闭场景中的主摄像头,确保只有 OVRCameraRig 被使用。
  • 点击 Play,戴上 Oculus Rift 耳机;您会看到 OVRCameraRig 正在跟踪 HMD 动作,而立方体转换仍然被手部动作所控制。

注:如欲完整了解如何使用 Oculus Utilities 包,请访问在线文档,网址:http://static.oculus.com/documentation/pdfs/game-engines/latest/unity.pdf

添加 VR 至用于 Unity* 示例的英特尔® 实感™ SDK 工具套件

借助 Unity 5.1+ 中的 VR 内置支持,轻松启用用于 Unity 示例(如 Sample 1 – Translation)的英特尔实感 SDK 工具套件以配合 VR 运行。 尝试按照以下步骤操作:

  • 在 Project 文件夹中,展开 RSUnityToolkit – Samples – Scenes,然后双击 Sample 1 - Translation (请根据需要保存上一步操作)。
  • 选择菜单栏中的 Edit – Project Settings,然后点击 Player
  • 确保选择 Inspector 窗口中的 Virtual Reality Supported 复选框。
  • 点击播放进行尝试吧!

结论

在本文中,我们探讨了您在使用 Oculus Rift 位置跟踪摄像头的项目中组合前置英特尔实感摄像头可能会遇到的传感器干扰问题。 我们还探讨了一些将英特尔实感摄像头手部跟踪用于简单 VR 体验的基础场景。 立即尝试,看看您能创建多么有趣的体验!

关于英特尔® 实感™ 技术

如要开始使用,了解更多有关面向 Windows 的英特尔实感软件开发套件的信息,请访问:https://software.intel.com/zh-cn/intel-realsense-sdk

关于作者

Bryan Brown 是英特尔开发人员关系部门的软件应用工程师。

有关编译器优化的更完整信息,请参阅优化通知