OSVR简介

来源:互联网 发布:java 链表 编辑:程序博客网 时间:2024/05/16 15:11

OSVR简介

官方英文介绍,建议查看官方英文文档,以下为个人翻译,如有出错,烦请指出,尽量以原文为准。

OSVR是什么?

OSVR™是一个为VR/AR而设计的开源软件平台。
OSVR提供一种简单而标准的方式来检测、配置和操作数以百计的外设,这些外设如:VR眼镜,位置追踪器,深度摄像头,游戏控制器等。OSVR支持多种操作系统,接入目前领先的游戏引擎,可以在Apache2.0许可下免费使用。
开源或闭源的插件都可以接入OSVR,以便扩展功能。插件可以用来支持新的设备或添加新功能,这些新功能包括:手势引擎,传感器融合,数据日志,以及眼球追踪等。
OSVR始于游戏和虚拟现实方面的专家,同时也被越来越多的硬件厂商、游戏工作室、高校和软件公司支持。
本白皮书从一个高层次的角度来介绍OSVR的目的,它的框架以及关键属性。

OSVR的作用

在20年前,如果你想要从WordPerfect(一个文档编辑软件)打印一个文档,你必须为你的打印机安装相应的WordPerfect驱动。随后,操作系统(例如windows)引进了打印机抽象层标准,使安装了windows驱动的所有windows应用都可以调用打印机进行打印。
OSVR为输入设备、输出设备、游戏提供了标准的接口。它为VR设备和外设提供了抽象层,以便游戏开发者不需要为特定的硬件编写特定的代码。游戏开发者连接到OSVR抽象层就像windows应用程序输出打印内容到windows打印服务上一样。如果一个新的VR眼镜生产与2016年,一个基于OSVR的游戏发行在2015年,它任然能够通过安装OSVR驱动的方式来支持这款新的VR眼镜。
对于游戏开发者,OSVR提供一系列的接口—数据管道,通过API的方式来访问特定的硬件。如果有一些多个提供相同类型信息的设备(例如:手的位置追踪) ,这些设备可以随意选择。今天,你从Mircrosoft Kinect获取手的位置。明天,你也许可以从Razer Hydra设备中获取手的位置。你可以重新配置OSVR数据通道,以便游戏可以很好的运行,而不需要去关注手位置的数据从哪里获得。在OSVR平台上,游戏开发者只要关注如何去使用这些数据,而不用纠结如何获得这些数据。
OSVR可以使你混合的方式来使用相应的软硬件包。例如,如果你使用一个眼球摄像头,你可以使用这个摄像头厂商提供的软件来计算视角的方向,也可以使用其他的视角方向组件。这意味这公司或研究小组把精力集中到特定的软件或硬件模组上,而无需关注生态圈之外的事情,它们的研究的成果可以与他人的组件相互连接。
对于游戏和应用开发者来说降低了风险:

  • 开发者不需要事先选择特定的硬件或操作系统。
  • 对未来的兼容性是十分友好的:目前创作的游戏可以直接运行在新的设备上。
  • 项目开发将会更加快速,因为开发者关注游戏本身,而不需要关于这些硬件接口,同时因为基于OSVR开发者可以使用广泛的分析工具来事先快速开发。

对于OSVR上的硬件制造商

  • OSVR驱动编写后,OSVR提供大量的有吸引力的应用,来运行在新的硬件设备上。
  • 解决了一个古老的鸡和蛋的困境:没有基础驱动制作,导致没有游戏可以运行;没有游戏可以运行,没有人愿意去制作驱动。
  • 不需要直接与游戏开发者做整合。编写一个OSVR插件往往就足够了。
  • 提供具有访问分析的插件,以便使硬件更加的容易使用,更加强大。

对于软件开发者,OSVR提供如下帮助:

  • 在已经存在的VR环境中测试和验证他们的软件模块,例如已经发行的游戏。例如:一个新的位置追踪算法开发完成,OSVR可以配置使用这个算法替代原先的算法,来测试和验证新算法。
  • 使他们的IP(例如手势引擎)更广泛的使用到传感设备和应用程序当中。
  • 支持开源或闭源的模块。

对于终端用户来说,OSVR提供自由选择的平台,促进创新开放式的设计,消除对单一供应商的依赖。

OSVR高层次框架

OSVR的概念框架如下图所示:
这里写图片描述
Applications: 游戏工程师创建应用程序,可以通过特定的游戏引擎插件来与OSVR进行交互。或者,应用程序可以直接访问OSVR的”clientKit”接口。
Analysis plugins:用做将从底层设备插件中获取到的数据转换为上层所需要的信息的软件模块。例如,一个手势引擎插件可以把一系列的XYZ坐标值识别出一个手势。
Device plugins:连接到物理设备,并且为上层提供数据接口。例如一个VR眼镜的插件可以暴露显示接口以及嵌入到头部追踪设备中的方向追踪接口。可以支持多种不同类型的设备。
adaptation layer:提供特定操作系统相关的现实(例如Android、windows、IOS),同时也支持通过网络(例如wifi/蓝牙)的方式来访问OSVR。
management layer :储存和加载系统以及用户相关的配置,可以存储到本地或云端。它还提供了许多服务,例如下载所需的插件,检测软件是否需要更新以及其他有用的功能。
为所有这些组件提供了源代码和定义了友好的接口。设备和分析插件很容易接入,并且在OSVR的源代码中提供了很多具体的实例。

OSVR技术概念

在解析应用程序如何使用OSVR接口以及如何编写OSVR插件之前,我们先介绍一些OSVR相关的技术概念:
device:是一个物理实体,例如方向传感器、Razer Hydra控制器。
interface:是一个数据管道。一个设备会暴露多个接口。例如,一个Razer Hydra控制器暴露如下接口:

  • 2个包含XYZ数据的接口(一个是左手,一个是右手)。
  • 2个方向接口(一个是左手,一个是右手)
  • 2套按键集(一个是左手,一个是右手。。。)
  • 一套模拟接口,用来提供位置移动触发器或操纵杆。

一个interface 是一个interface类的实例。一个接口类包含了需要属性值,这些属性值可以被设置或查询,以及这个类可以产生的事件。一个属性值可以是从XYZ坐标接口获取到的最新的XYZ坐标值。一个事件可以是一个按键设备按下后通过相应的接口上报的。
*plugin是一个软件模块,可以被动态识别,加载并连接到OSVR上。驱动包含在插件当中,实现多个接口类。在插件当中有两种类型的驱动:

  • 设备插件:实现一个或多个物理设备的接口。
  • 分析插件:提供实现的接口,例如手势引擎,这类插件并不直接连接到设备。例如:一个数据滤波插件从设备接口读取到数据,然后将数据转化成更加平滑的数据。一个面部识别插件从摄像头接口获取到多张图片然后产生一个脸部识别的事件。

对于OSVR而言,这2中类型的插件是完全相同的。这些差异只是存在于人们的观念中。

OSVR资源命名

OSVR保持“路径树”(类似于URL或文件系统路径那样),所有的路径字符都是有意义的。配置别名来访问特定系统的硬件细节与使用有语义的路径(路径名包含了有意义的信息)的路径名来访问时相同的。所以直接通过名字来访问硬件设备,是可以的,但是并不推荐。我们建议使用有语义的路径名来访问设备。此方式可以带来很多好处,当外设在启动时候没有被立即使用或则在操作过程中有所改变,不会影响到应用程序的开发者。例如:

  • 一个好的指向与左手相关联的位置、方向、姿态回调或访问状态路径名:/me/hands/left
  • Hydra的0控制器的位置,命名空间为:com.osvr.bundled.Multiserve,插件命名为:/com_osvr_bundled_Multiserver/RazerHydra0/position/0
  • 假设org.example.smoothing插件中的第一个滤波输出命名为:/org_example_smoothing/smooth_filter/0

如何游戏允许把不同的按键映射到游戏的不同的动作一样,OSVR允许定义接口,分析插件以及动作之间的联系。例如:

  • /joystick/button/1->/actions/fire:映射第一个控制杆按钮为开火的动作。游戏可以选择直接访问/joystick/button/1,但是建议访问/actions/fire,因为这允许改变从硬件输出的信息流, 而不用修改游戏本身。
  • /com_osvr_bundled_Multiserver/RazerHydra0/position/0—>org_example_smoothing/smooth_filter/0—>/me/hands/left,表示第一个Hydra控制器的坐标通过一个滤波器,然后映射到左手上。

接口之间的连接,可以是预先加载的或则动态变化的。
在JSON文件中指定的可以使用的资源列表作为OSVR发布版的一部分,也是OSVR文档的一部分。

同步和异步调用

一个应用程序可以通过2种方式与插件建立关联:

  • 同步(阻塞)调用。查询特定状态参数来实现。
  • 异步调用(回调)。一个应用程序可以注册一个用来接收特定事件的回调函数,这些特定事件包括:按键按下,一个人脸被识别等。

一个月应用程序可以使用以上方式中的其中一种,或两种都使用。例如,一些应用程序在主循环中以同步调用的方式查询追踪器的方向,也可以注册一些回调函数来响应游戏控制器的按键事件。可以在OSVR文档中找到相关实例。

OSVR游戏开发者

最小的应用程序包含3部分内容:

  • 初始化库,提供应用程序ID,以及获取一个”client context”,这个对象后续会使用到。
  • 在你的应用程序主循环当中,调用update方法,来触发回调函数或处理状态事件。
  • 在应用程序关闭期间,关闭库(为client context提供服务)。

这些如下面消息状态图所示:
这里写图片描述
当然,这样的应用并不是有效的使用OSVR。一个更现实的应用程序的实例流程还包含如下:

  • 在主循环之前:
    • 获得一些接口。
    • 注册接口对应的回调函数。
    • 获得现实参数数据。
  • 在主循环当中:
    • 处理从回调函数中获取到的数据。
    • 读取接口状态。
    • 在应用程序关闭时,关闭库(为client context提供服务)

这些如下面消息状态图所示:
这里写图片描述
##OSVR插件开发者
在OSVR上,设备和分析插件都是动态加载的。插件提供新的硬件特性或分析功能,例如手势引擎。
OSVR文档上包含示例插件。如果你是一个创建OSVR插件的硬件或软件的开发者,请联系我们获得更多信息。
支持一个新的游戏引擎,比支持OSVR更加复杂,从OSVR官方的观点来看,游戏开发者最好从”OSVR for game develops”章节开始,一个游戏引擎是一个使用OSVR的应用,而不是一个OSVR插件。

OSVR路线图

作为一个开源项目,OSVR社区对未来的发展方向有重大影响。目前,计划改进的地方包括如下:

  • 提高OSVR对多种类型的HMD和多种显示设备在渲染方面的支持。
  • 为新硬件创建更多的设备和分析插件。
  • 移植到更多的操作系统当中去,不仅仅是windows和android。
    我们很期待与你们一起合作,一起把OSVR做得更好。
0 0
原创粉丝点击