在OSVR中加入新的HMD


  介绍

  OSVR创建一个抽象层可以用于许多类型的设备,包括HMD。这意味着,通过改变OSVR服务器运行进程中的配置文件,相同的应用程序可以很容易的在不同的HMD上运行。

  将您的HMD加入到OSVR平台,即刻让您的客户享受OSVR应用。该说明解释了添加HMD到OSVR关键步骤。 这些是:

  •创建一个显示描述。这指定了HMD的关键属性,如视觉场

  •提供有关失真信息。 OSVR可以为HMD申请失真校正。这个步骤是可选的。

  •支持直接渲染。当与支持的图形卡使用,OSVR为HMD提供直接的渲染支持,这部分讨论如何将这种功能通过OSVR添加到您的HMD。

  •通常情况下,头戴式显示器还包括外围设备,如定向跟踪。本章节教您在追踪的部分加入HMD跟踪器。

  创建基本的显示描述

  首先从OSVR开始,你所需的是最初将只是一个“显示描述”JSON文件。你可以用一个OSVR HDK 1.0-1.2并对其进行修改以满足您的显示屏,就这么简单。

  •设计文档: https://github.com/OSVR/OSVR-JSON-Schemas/blob/master/doc/display_descriptor_schema_v1/Structure%20of%20JSON%20descriptor%20file%20for%20HMDs.md

  •JSON模式:https://github.com/OSVR/OSVR-JSON-Schemas/blob/master/display_descriptor_schema_v1.json

  •对现有的介绍额外的参考:https://github.com/OSVR/OSVR-Core/tree/master/apps/displays - 特别是对HDK 1.0-1.2的具体描述符。

  必须修改的唯一域:

  •元数据域:

  Øhmd.device.vendor

  Øhmd.device.model

  Øhmd.device.Version

  Øhmd.device.Note

  •光学基本部分:

  Øhmd.field_of_view.monocular_horizo​​ntal

  Øhmd.field_of_view.monocular_vertical

  Øhmd.field_of_view.overlap如果屏幕无法对齐(总的概括)

  •基本的显示控制/输入数据:

  o分辨率入口,宽度和高度,并且,如果不是端对端水平输出,还有显示模式和潜在视频输出。

  要使用显示器描述符与OSVR服务器的配置文件,添加或编辑“显示”:“???.json”行。例如,一台服务器的配置用于指定Sensics dSight HMD的显示描述。( a server config that specifies the display descriptor for the Sensics dSight HMD.)(如果没有指定显示行,则使用默认值)。一个有用的最小的样值来测试你的显示器描述符(不测试失真)将在OSVR核心分布中OpenGLSample(需要SDL),这会使您处在一个立方体中。

  添加失真校正

  在许多情况下,显示有一定程度的失真,应提前通过预失真补偿。OSVR有一些参数化变形,适合不同类型的失真,并测量不同的工具。所有这些模式可以在服务器配置文件中指定并读取使用OSVR核心库并且其中一些是在OSVR-RenderManager接口实现的。

  一种畸变校正、投影和观看的关系理论的描述,可以在失真文档distortion document和程序的基础上,从角到屏幕坐标映射失真参数构造中发现。可以在anglestoconfig文档中找到。

  核心模式(在一个非rendermanager OSVR-Unity路径实现)包括:

  •基于K1参数的扭曲,基于红色,绿色,和蓝色的中心的二次失真。

  rendermanager模式,包括:

  •基于通用多项式色彩失真-基于围绕一个定义的绿色,和蓝色中心投影图的径向失真。在 Rendermanager.h看细节如何规定。

  •单色定点样本-基于一个任意的映射从各个角度到屏幕空间位置,往往从光学上进行的透镜模拟。查看失真文档distortion documen的描述。

  •色点样本-基于任意映射对于红色,绿色和蓝色从各个角度到屏幕空间位置,经常从光学上进行的透镜模拟。查看失真文档distortion documen的描述。

  建立一个配置文件,使用点取样失真校正过程描述附近的anglestoconfig文件。基本的方法是构造一个合适的服务器端的配置文件(与客户端文件匹配,如果需要的话),然后运行OSVR标准服务器配置文件。任何基于rendermanager客户端将在渲染过程中执行指定的失真校正。

  从一个指定一般基于多项式的变形配置文件代码段如下:

  {

  "display": {

  "hmd": {

  "distortion": {

  "type": "rgb_symmetric_polynomials",

  "distance_scale_x": 1,

  "distance_scale_y": 1,

  "polynomial_coeffs_red": [ 0, 1, 0.25 ],

  "polynomial_coeffs_green": [ 0, 1, 0.32 ],

  "polynomial_coeffs_blue": [ 0, 1, 0.40 ]

  }

  }

  }

  }

  支持直接渲染

  最后一步是直接到HMD渲染:绕过操作系统和窗口管理的,从扩展的桌面的一部分去除显示和绘图,直接使用显卡驱动。OSVR的rendermanager可处理非直接高级渲染(TimeWarp,先进的预失真,等),以及可选的直接模式的支持,一般只适用于一些组合的硬件厂商和软件平台。

  在一个新的HMD采用直接绘制需要三样东西:

  •指定供应商ID和建设一个与该供应商ID和屏幕分辨率和旋转匹配的一个由HMD支持的配置文件(最好、最快速的渲染模式)。在2016年6月14日,OSVR团队最终指定任意供应商ID格式;系统目前从供应商名称到IDS做内部映射。添加这样一个映射,你应该在rendermanagerbase.cpp添加另一个供应商名称映射来编辑createrendermanager()功能。供应商名称映射到你的产品的所有显示供应商ID(见OSVR HDK如何添加多个供应商ID实例)。

  •因为图形供应商保密协议,在directrender上的供应商特定的源代码不能被公开。他们已经同意让OSVR直接提供了一个通用的接口通过rendermanager接口,使用NDA的模式直接渲染。这意味着,我们现在需要与新的供应商ID重新编译rendermanager和发布一个新版本。一旦你的供应商的已被添加,请发出一个请求,使他们将出现在未来的版本。

  •显示必须是由供应商的驱动DirectMode显示。每个供应商的处理方式不同,你应该直接与他们联系,加入他们的白名单。你需要与NVIDIA让他们加入你的设备到驱动白名单中。要知道他们已经停止了对非兼容HDCP HMDS的笔记本和多GPU系统电脑上的直接支持。AMD已经获得设备注册一个不同的方法,所以你应该和他们接触。英特尔的卡需要在HMD添加特定注册表项来表明他们应该可用在DirectMode。

  截至2016年7月12日,有API通过微软升级,应该提供一个供应商的独立解决方案。我们跟踪它,并计划在她出现的时候释放一个新的驱动程序。在这个点上,整个渲染链应该是开源的,因为它将使用公共的API而不是特定的供应商。我们没有预计完成时间,其他比在去年八月应该已经出了。

  注意:所有非直接显示功能(包括时间翘曲预测跟踪,和失真校正)可在rendermanager使用资料库的开放源代码的部分使用。异步时间翘曲只在上DirectMode实现了。此外,有一些功能(如客户端预测),而不依赖于直接模式,只有从直接模式获得充分发挥功能的精确帧像定时信息。

  你的HMD(头盔式显示器)大概已经有集成或连接的跟踪器。如果它是一个现成的跟踪器,那它很有可能已经能通过VRPN来支持OSVR:兼容性页面可以看见更多。 如果你有一个自定义的跟踪系统,或者有一个控制和状态信息的界面,你可能会对在OSVR系统写入提供更多互动的装置插件感兴趣,而不仅仅是作为显示装置。跟踪器可以在OSVR跟踪查看器上进行测试(可以在http://OSVR.github.io/using/下载)。