LWN: VR和AR的开源方案

Monado引擎开发:Monado基础入门_(1).Monado引擎概述 虚拟现实(Virtual Reality, VR)技术通过计算机生成的三维环境,让用户沉浸在其中并进行交互。渲染技术:生成逼真的三维图像,使用户感觉置身于虚拟世界中。交互技术:通过手柄、头部追踪等设备,实现用户与虚拟世界的自然交互。音频技术:提供立体声和空间音频,增强用户的沉浸感。性能优化:确保游戏在高帧率下运行,减少延迟,避免用户产生晕动症。 阅读详情

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等其他图形相关标准的组织。

640

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桌面就需要这个功能。

640

渲染是经过三个函数调用来完成的:先等前一帧完成渲染,开始渲染下一帧,然后完成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的数据,以及怎么使用各种显示模式,这些对他们来说都是很有趣的事。

640

接下来是演示了,上面的图片中可以看到,这是经典的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搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~

640?wx_fmt=jpeg

Monado引擎开发:Monado基础入门_(4).Monado引擎的安装和配置 在开始Monado引擎的开发之前,我们需要确保开发环境已经正确安装和配置。本节将详细介绍如何安装Monado引擎及其相关依赖,并配置开发环境,以便您可以顺利地进行引擎的开发和调试。 阅读详情

相关推荐

Monado引擎开发:Monado优化与性能分析_(1).Monado引擎基础与架构

Monado引擎通过其模块化设计、高性能渲染、跨平台支持、丰富的插件系统和易用的开发工具,为虚拟现实游戏开发提供了一个强大而灵活的平台。通过合理的初始化、主循环管理和性能优化技术,开发者可以确保游戏在多种平台和设备上运行高效、稳定。希望本文档能够帮助开发者更好地理解和使用Monado引擎,创建出色的游戏体验。

chenlz2007的博客 830

搭建Monado Runtime和OpenXR Sample Code编译环境

继上一篇ORB_SLAM3在Linux中的编译环境搭建完成之后 还需要搭建编译Runtime和OpenXR的环境

肖云鹤的博客 8686

Monado引擎开发:Monado基础入门_(12).Monado引擎的跨平台支持

Monado引擎通过抽象层、条件编译和平台特定模块等技术,实现了强大的跨平台支持。开发者可以在不同的操作系统和硬件平台上使用相同的代码库,从而减少重复工作,提高开发效率。通过配置文件,开发者可以轻松地切换不同的平台和图形API,进一步提升游戏在不同平台上的性能和用户体验。希望本文对理解Monado引擎的跨平台支持有所帮助,开发者可以根据自己的需求进一步扩展和优化引擎的功能。

chenlz2007的博客 685

OpenXR之monado吐槽

摄像头使用v4l2协议接入,通过看monado的代码,里面搞了很多c语言写的函数指针,想必是想用c的代码来实现c++吧,这么搞实在没有必要,回调函数很多,而且相互之间的逻辑混乱。monado里面有v4l2的驱动,2022年接触VR开发,想到VR的通用接口,首选OpenXR,看了很多文章,下载了很多开源代码。其中最著名的是OpenXR的monado实现,之所以要研究他,因为有开发任务在身。第一个开发任务是需要把usb摄像头,imu接入monado进行6DOF的算法测试。

zwj8848的专栏 1349

Monado引擎开发:Monado优化与性能分析_(6).跨平台性能优化

private:// 渲染代码// ...double在这个示例中,我们创建了一个类来记录性能事件。通过函数,我们可以记录渲染过程的时间,并将其写入日志文件。通过本节的学习,你已经掌握了在Monado引擎中进行跨平台性能优化的方法和技巧。性能分析工具的使用、常见性能问题的解决方法以及优化技巧的应用,都是确保游戏在不同平台上流畅运行的关键。希望这些内容能够帮助你在虚拟现实游戏开发中取得更好的性能表现。

chenlz2007的博客 1166

Monado引擎开发:Monado基础入门all

Monado引擎是一款专为虚拟现实游戏设计的高性能游戏引擎。它集成了多种先进的图形处理技术、物理模拟算法和音频处理模块,旨在为开发者提供一个强大且灵活的开发平台。Monado引擎支持多种平台,包括Windows、Linux和macOS,可以轻松地移植到不同的硬件设备上。Monado引擎的核心设计理念是模块化和可扩展性。开发者可以根据项目的具体需求,选择和组合不同的模块,从而实现高效的游戏开发。此外,Monado引擎还提供了一套完善的开发工具和文档,帮助开发者快速上手并解决开发过程中遇到的问题。

chenlz2007的博客 1273

OpenXR+Runtime:Monado从ipc_server到device

今天来跟一下Monado Runtime从ipc_server启动到device端获取3DoF数据的源码, 个人理解,可能会有纰漏 1.src\xrt\targets\service-lib\service_target.cpp //runtime client端通过jni函数call runtime server extern "C" void Java_org_freedesktop_monado_ipc_MonadoImpl_nativeStartServer(JNIEnv *env, .

肖云鹤的博客 4877

Monado引擎开发:Monado物理引擎使用_(4).Monado物理引擎安装与配置

通过本节的介绍,您已经学会了如何在开发环境中安装和配置Monado物理引擎。无论是通过编译源代码还是使用预编译的二进制文件,您都可以轻松地将Monado物理引擎集成到您的虚拟现实游戏项目中。此外,我们还介绍了如何验证安装、优化性能以及配置物理引擎的各种参数。希望这些内容能帮助您在项目中实现逼真的物理效果。如果您在安装和配置过程中遇到任何问题,可以参考官方文档或社区支持。祝您开发顺利!

chenlz2007的博客 665

【亲测免费】 探索开放源代码的未来:libsurvive

![项目Logo](https://cloud.githubusercontent.com/assets/2748168/24084003/9095c98a-0cb8-11e7-88a3-575f9f4c7bb4.png) libsurvive是一个创新的开源项目,专注于为基于Lighthouse和Vive系统的设备提供六自由度追踪功能。这个强大的工具集不仅支持SteamVR 1.0和2...

gitblog_00044的博客 578

Monado引擎开发:Monado基础入门_(13).Monado引擎的社区和贡献指南

在开发Monado引擎的过程中,社区的支持和贡献是非常重要的。本节将详细介绍如何参与Monado社区,以及如何为社区做出贡献。

chenlz2007的博客 647

ViveTracker:使用libsurvive使用HTC VIVE跟踪器和Lighthouse进行本地化的ROS软件包

ViveTracker 使用HTC VIVE跟踪器和Lighthouse进行高速姿态估计的ROS软件包。 该解决方案为几乎精确的姿势和方向提供了一种经济的解决方案,而无需大面积计算多个摄像机的位置。 该模块已经在Odroid XU4上进行了测试,可以运行Kobuki机器人,而无需进行任何形式的通信,从而获得约300Hz的计算姿态估计率。 用法 克隆存储库 git clone --recurse-submodules https://github.com/abhijitmajumdar/ViveTracker.git ~ /ViveTracker cd ~ /ViveTracker 编译libsurvive 建议遵循原始存储库说明,并将其用于故障排除。 此处执行的指令摘要如下: cd ~ /ViveTracker/libsurvive cp useful_files/81-vive.r

Ubuntu22.04 安装和使用libsurvive和pysurvive教程

Libsurvive是一套开源的六自由度追踪工具库,支持SteamVR1.0/2.0设备及商用追踪对象。安装步骤包括克隆代码库、配置udev规则、编译项目。提供设备标定工具(survive-cli)和可视化界面(survive-websocketd)。通过Python包pysurvive可获取设备姿态数据,示例代码展示了如何初始化上下文并持续读取位置信息。

m0_50877346的博客 160

libsurvive:开源灯塔跟踪系统

自由生存 Libsurvive是一组工具和库,可在完全开源的,可在任何设备上运行的基于的系统上实现6自由度跟踪。 它目前支持SteamVR 1.0和SteamVR 2.0一代的设备,并且应支持任何市售的跟踪对象。 由于重点在于跟踪; 它不会独立运行HMD。 对于这是否看到一个开放的烃源栈 大部分开发都在Discord上讨论。 一个示例应用程序是libsurvive,它在Godot中运行控制器和HMD: 目录 快速开始 德比安 git clone git@github.com:cntools/libsurvive.git cd libsurvive sudo cp ./useful_files/81-vive.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules && udevadm trigger sudo apt-get install build-essential zlib1g-dev libx11-dev libusb-1.0-0-dev freeglut3-dev liblapacke-dev li

OpenXR+Runtime:Monado Realsense SLAM Tracker解析

Monado中设备衔接外部SLAM的代码还涉及到具体设备的驱动程序, 以及其他一些较为复杂的实现逻辑 目前看源码跟到的也只是其中很小的一部分, 后续还会持续跟踪,逐步完善补充

肖云鹤的博客 3297

Ansys Maxwell磁场仿真入门:无线传能线圈自感与互感计算全流程

本文详细介绍了使用Ansys Maxwell进行无线充电线圈磁场仿真的全流程,包括模型建立、求解器设置、电感参数提取及优化策略。通过实战案例,帮助工程师掌握线圈自感与互感计算技巧,提升无线充电系统设计效率与精度。重点解析了Maxwell在磁场仿真中的关键应用,适用于电磁场仿真初学者和进阶用户。

weixin_29047545的博客 436

使用moveit!控制真实机械臂(5)——编写真实机械臂节点中的action服务程序

上一篇文章中,我们简要介绍了ROS中action的基本知识,为了控制真实机械臂,我们已经修改了moveit配置文件,使得moveti启动后具备一个control_msgs::FollowJointTrajectoryAction类型的action客户端,接下来,我们完成该类型action的另一半,编写C++程序来实现action的服务端。由于底层机器人控制程序一般差别都很大,这里展示的只是编程要点...

爱学习的草莓熊 1万+

Monado结构体

Compositor的主要结构体 1、comp_compositor /*! * Main compositor struct tying everything in the compositor together. * * @ingroup comp_main * @implements xrt_compositor_native */ struct comp_compositor { struct comp_base base; //! Renderer helper.渲染帮助类

weixin_41607186的博客 582

免费,Python蓝桥杯等级考试真题--第10级(含答案解析和代码)

Python中蓝桥杯算是含金量和难度最大的比赛之一,网上可以找到不少真题,不过要么零零散散要么付费才能解锁,而且大都是没答案和解析的,给学习者造成很大困扰。因此本文档打算整理历年等级考试、STEMA、省赛、国赛真题卷和解析,供大家学习参考。

1576

openxr runtime Monado 源码解析 源码分析:源码编译 准备工作说明 hello_xr解读

openxr runtime Monado 源码解析 源码分析:源码编译 准备工作说明 hello_xr解读

xuer_07的专栏 2274

记录rk3588 在Linux 6.1内核版本声卡 bug。

rk3588 Audio bug

Yongheng6的博客 855

RK3568笔记十七:LVGL v8.2移植

若该文为原创文章,转载请注明原文出处。本文介绍嵌入式图形库移植到Linux开发板ATK-RK3568上的步骤。

4230

Python, C ++开发创新设计APP

该方案通过构建**量子-经典-光子混合计算基座**,实现跨维度的技术创新突破。| **交互模式** | 脑机接口(PyBrainFlow) | 触觉反馈引擎(LibSurvive) || **安全体系** | 同态加密(TF-Encrypted) | 可信执行环境(Intel SGX SDK) || **计算范式** | 量子机器学习(PennyLane) | 光子计算模拟(NVIDIA OptiX) |

2501_90802096的博客 690

YOLOv8交通管理 详细解释及代码完整示例

YOLOv8在交通管理中的应用及代码实现 摘要:本文详细介绍了YOLOv8在交通管理领域的应用场景,包括车辆检测、违规行为识别和行人安全预警等。文章提供了完整的Python代码示例,展示了如何使用YOLOv8进行交通对象检测和车辆计数统计。代码包含模型加载、对象检测、结果可视化等功能模块,并给出了性能优化和功能扩展建议。该实现基于Ultralytics框架,支持多种YOLOv8模型选择,可根据实际需求调整模型大小和检测参数。

u010117029的博客 153

Android上OpenXR SDK查找并加载runtime流程

本文主要讲解openxr应用如何选择monado runtime的主要流程。其完整流程图如下由于图太大,有的地方不清晰,故将某些部分截图重新展示CreateInstance流程如下查找runtime流程如下API layer load流程图如下以SDK中的hello_xr应用为例,其入口在main.cpp中。

weixin_41028555的博客 1389

raw (R/G, B/G) 色度域从白点筛选到 mired 直方图的完整构建流程

raw 域用draw​δraw​筛出白点后,。,与 CIE uv 域流程逐步对应。

大熊 39

【教程4>第6章>第15节】 基于I+jQ复数信号的LS信道估计和均衡实现1——matlab仿真分析,QPSK为例

在基于QPSK调制的通信系统中,LS信道估计和均衡是用于补偿信道失真、提高信号传输质量的重要技术。以下将详细介绍基于I+jQ复数信号的 LS 信道估计和均衡的实现原理与过程。可以看到,通过线性插值之后,QPSK信号的星座图可以模糊的看到四个星座点(图2),通过非线性插值之后,可以清晰的看到QPSK的四个星座点(图3)。可以看到,信道均衡显著提高了通信系统的可靠性和有效性。

FPGA/MATLAB学习教程/源码/项目合作开发 657
上一篇: LWN: core scheduling的多种应用场景
下一篇: LWN: 如何验证代码是否被编译器优化后出错?
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值