Free software support for virtual and augmented reality

By Jake Edge


XDC

在加拿大蒙特利尔近期举行的X.Org Developers Conference会议上,有一个话题介绍了自由软件中的XR解决方案。XR就是指VR(虚拟现实)和AR(增强现实)。Joey Ferwerda和Christoph Haag来自Collabora,他们共同介绍了XR的概况,以及能支持两种应用的Monado项目。

Ferwerda先定义了一下HMD,这是指head-mounted display,头戴式显示。简单来说就是在脸上贴上一个屏幕以及一些传感器。HMD是实现XR必不可少的设备。它通常包含一个跟踪系统用来确认HMD的位置和朝向。有很多种设备用来实现这个跟踪系统,包括IMU(inertial measurement unit),光敏器件,激光,摄像头等。

AR用来给现实世界增加一些额外信息。用户看到他们周围的真实世界的时候,可以看到各个物体上显示出状态信息或者标签。AR近来有些过热了。简单来说用户带上眼镜就能看到一些额外信息,不过目前大家一提到AR就想到Pokemon Go这个游戏。

VR会用到两个显示屏,每只眼睛一个,这样仿佛用户就看到身边是一个3D世界,也能与之进行交互。所以用户看到的不是真实世界,而是一个完全独立创建出来的世界。通常描述VR的感受有两个词:presence存在感和immersion沉浸感。这就意味着用户感觉好像真得存在于VR创建出来的环境中。

XR包含了VR和AR。Ferwerda也不是很确认X怎么来的。甚至大家对XR的念法都不一样,既有cross reality,也有mixed reality。Haag还听到第三种,extended reality。

Monado and OpenXR

他们在开发的项目名为Monado,是Linux下的OpenXR runtime方案,属于自由软件(free-software)。OpenXR是Khronos Group定义的标准,Khronos也是定义OpenGL, Vulkan等其他图形相关标准的组织。

Haag在介绍OpenXR之前提道,每个XR engine引擎都应该支持一个不同的XR runtime。XR runtime通常是设备相关的。这样就会导致出现无数种device -> engine的组合。利用OpenXR的话,device runtime就提供了一个应用程序接口,允许使用任意的XR engine来和任意符合标准的device runtime配合在一起。OpenXR标准效果上来说,就是在device runtime和硬件之间增加了一个device layer。

XR处理栈中,包含了3层。首先有个程序基于某个软件平台(负责渲染以及处理输入设备)来做VR或者AR的工作。这个平台会跟硬件(包括传感器以及输入设备,以及显示设备)交互。

Haag简要介绍了一下应用程序API,基本上有点类似3D graphics里的Vulkan API,详情参见他的ppt,或者查找OpenXR网站。这个标准还在制定中,所以还缺不少功能,例如尚未支持AR。

应用程序可以先创建一个XR实例,它的句柄后面会一直用到。根据所用到的设备类型不同,例如智能手机,HMD,或者单眼还是双眼显示设备,这些信息都可以被设定到这个实例上。针对某个特定的渲染类型还会创建Session,这里有多种渲染类型,例如OpenGL, OpenGL ES, Vulkan,几种不同版本的DirectED。目前还不能同时支持多个session,所以无法让两个应用程序的输出显示叠加在一起,后续会能够支持。VR桌面就需要这个功能。

渲染是经过三个函数调用来完成的:先等前一帧完成渲染,开始渲染下一帧,然后完成end操作。下一帧的位置信息会由OpenXR来预测,这样渲染场景的时候会针对下一帧显示时的预期方向以及位置。控制手柄的输入信息是由action相关的API来处理的。也很类似Valve在SteamVR平台上定义的OpenVR API。

Ferwerda接着演讲,他认为过去一两年在Linux里面对XR图形支持方面有了不少进展。kernel和显示驱动里面都有一些功能加进来。还有近来支持的Extended mode,在这个模式下,VR显示就作为第二显示器一样,windows都可以显示内容。虽然能工作,不过还是依赖很多手动配置才行,并且这也会引入更多的响应延迟。

VR图形的Direct mode近来也加进来了。主要靠Keith Packard的工作来支持了KMS驱动进行渲染,而不依赖X或者Wayland。在生成帧率低于设备支持的帧率时,很容易出现恶心头晕现象,为了能减轻这个问题,利用了reprojection来复制一帧,或者对现有的帧根据预计的移动方向来做一点点改变。

VR硬件目前多数是基于Vulkan的,所以目前主要用Vulkan来做渲染。如果应用程序是基于OpenGL的,那么就可以利用Vulkan-OpenGL interoperability mode。不过只有部分硬件能支持这个功能。显示纠正(Display correction)是另一个问题,镜头通常都不是完美的,会有扭曲和色差,需要纠正。

Hardware support

Monado仅支持作者们能找到的硬件设备。包括Open Source Virtual Reality (OSVR) Hacker Developer Kit (HDK),目前没有得卖了,不过仍然可以支持。Monado也做了很多反向工程的工作来支持更多设备。除此之外,在OpenHMD项目中还有一个C library,能够部分支持非常多的硬件。

此项目也支持了Razer Hydra游戏手柄的一些基本功能。PlayStation VR和PlayStation Move手柄的支持和刚刚合入。这是首次能完整支持一个人们能轻易买到(不多于300欧元)的设备。

还有其他一些值得注意的自由软件或开源软件项目。首先是libsurvive,可以支持HTC Vive HMD使用的lighthouse tracking(灯塔式跟踪定位机制)。还有一个maplab,能支持SLAM定位方式(simultaneous mapping and tracking)。在使用SLAM tracking的时候,头戴设备能够把当前所在的房间对应起来,这是XR中今后非常重要的一点。

尽快XR还是很年轻的技术,现在相应的开源社区已经存在不少时间了。人们拿到硬件设备之后看到没有对应的驱动,会觉得非常烦恼,然后开始反向工程进行分析。他从2013年开始就加入相应的开源社区,参加了FOSDEM等集会,跟很多志同道合者一起来让硬件能支持各种不同操作系统。还有一位OpenBSD开发者也花了很多时间来支持VR,目前进展比Linux这边还要领先。

反向工程在硬件支持方面是很重要的工作,不过大家都希望今后情况能得以改变。有很多人在做open platform(开源硬件平台),不过都还没有非常成功的。不同设备中用到了很多相同模块,因此开发过程中会容易一点,不过还是会经常需要分析Wireshark数据来试图从IMU里面找到重力传感器和陀螺仪等信息。还有需要搞清楚如何拿到camera的数据,以及怎么使用各种显示模式,这些对他们来说都是很有趣的事。

接下来是演示了,上面的图片中可以看到,这是经典的glxgears在VR环境下运行的样子。显示内容是由Vulkan渲染生成的,按照VR头戴式设备的燕子来展示出来,其中图像都针对VR设备进行了旋转和校准。

Ferwerda认为开发Monado的过程中非常又去,目前这个项目可以同时发布specification(规格书)以及OpenXR的实现代码。目前只有Monado和微软能够发布一个可用的版本,这个感觉很酷。他们希望能继续在Monado里面增加更多OpenXR和XR硬件,希望在座诸位有兴趣的话能参与进来。

[I would like to thank the X.Org Foundation and LWN's travel sponsor, the Linux Foundation, for travel assistance to Montréal for XDC.]

全文完

LWN文章遵循CC BY-SA 4.0许可协议。

长按下面二维码关注:Linux News搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~

LWN: VR和AR的开源方案相关推荐

  1. 继北极星项目后,又一款低成本AR眼镜开源方案:OpenAR

    2018年的时候,Leap Motion(Ultraleap前身)曾开源了一款低成本.简易的AR头显方案:Project North Star(北极星项目).该方案主要用来帮助爱好者.开发者们快速上手 ...

  2. 【开源方案共享】ORB-SLAM3开源啦!

    ​点云PCL免费知识星球,点云论文速读. 标题:ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and M ...

  3. 盘点热门的目标检测开源方案(附论文+代码下载)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 在2020年中,目标检测领域出现了许多优秀的工作,今天我们来聊一聊在当前热门的五大目标检测开源方案. ...

  4. VR 与 AR 开发实战

    内容简介 从虚渺的膨胀到实质的沉淀,本期 VR 与 AR 开发实战专题我们汇聚一线技术开发者,围绕性能优化.人机交互技术.新平台开发等话题,分享实践中心得与体验. HoloLens 开发与性能优化实践 ...

  5. (汇总篇)语义SLAM相关开源方案| 全球优秀作者与实验室 | SLAM学习资料整理

    目录 1 开源方案 1.1 Geometric SLAM (26项) 1. PTAM 2. S-PTAM(双目 PTAM) 3. MonoSLAM 4. ORB-SLAM2 5. DSO 6. LDS ...

  6. 【开源方案共享】VDO-SLAM:基于视觉的动态SLAM感知系统

    点云PCL免费知识星球,点云论文速读. 标题:VDO-SLAM: A Visual Dynamic Object-aware SLAM System 作者:Jun Zhang , Mina Henei ...

  7. gitter 卸载_最佳Gitter频道:VR和AR

    gitter 卸载 by Gitter 通过吉特 最佳Gitter频道:VR和AR (Best Gitter channels on: VR & AR) Virtual reality is ...

  8. 无人驾驶、VR、AR时代即将开启,中国电信2018年将完成5G商用版本

    来源:36氪 概要:中国5G基础研发测试分为三个阶段,第一阶段5G关联技术试验,第二阶段5G技术方案验证,第三阶段5G的系统验证.目前,已经到了第三个阶段. 中国5G基础研发测试分为三个阶段,第一阶段 ...

  9. 开源方案搭建可离线的精美矢量切片地图服务-3.Mapbox个性化地图定制入门

    系列文章目录 开源方案搭建可离线的精美矢量切片地图服务-1.开篇(附成果演示地址) 开源方案搭建可离线的精美矢量切片地图服务-2.PostGIS+GeoServer矢量切片 开源方案搭建可离线的精美矢 ...

最新文章

  1. ASP.NET Core 上传多文件 超简单教程
  2. linux下设置mysql不区分大小写
  3. 循环服务器,并发服务器模型以及I/O多路转接模型
  4. R语言基础入门(6)之向量下标和子集
  5. IDEA 编译时 报 “常量字符串过长” 解决办法
  6. linux过滤某个mac的包,macOS 下使用 tcpdump 抓包
  7. Samba配置文件常用参数详解
  8. 设置某一个行列的颜色和写保护属性
  9. 时间管理之番茄工作法
  10. 计算机ps基础知识大全,全国计算机ps一级考试题型
  11. Sqoop--全量/增量、导入/导出
  12. 乔纳森 刘易斯 oracle,阿泰刘易斯都是幻想 专家点火箭引援之真命天子
  13. 项目管理软件怎么选?只需要关注4点
  14. 聊聊什么是对象存储?
  15. 【数学分析】数列的上极限与下极限
  16. Java高级开发0-1项目实战-青鸟商城-Day02
  17. skywalking数据链路追踪
  18. python打折简单程序每满_丰满Python程序设计基础【实境编程】_高校邦_答案
  19. throw new JSONException(JSONObject[ + JSONUtils.quote(key) + ] is not a number.);
  20. fixed计算机术语,fixed是什么意思

热门文章

  1. 简单网页版的年会抽奖程序,设计个界面套上就可以了,抽奖员工编号姓名改改代码就可以了,很简单的
  2. 分享:大讲台在线学习平台怎么样,靠谱吗?
  3. JavaSE 知识学习
  4. 2023凉陌ChatGPT付费创作系统V4.6+功能强大/有后台
  5. ng-content、ng-template、ng-container使用及区别
  6. 看了《我的白大褂》才明白,原来平安是福
  7. 使用Typora列表嵌套列表,回车无法返回上一级列表的状态
  8. 九世轮回篇电子计算机乐谱,mc九局九世轮回篇的歌词
  9. DEJA_VU3D - Cesium功能集 之 070-编辑3Dtiles(平移+旋转)
  10. 2022.1.9 力扣-周赛-统计追加字母可以获得的单词数