Linux上的VR状态

2021-01-16 04:01:35

当我第一次了解虚拟现实的东西时,我还是一个孩子,那是通过像《割草机男人》这样的电影。我真的不明白这是什么意思:这很令人困惑,有些人在某个地方做事……但他们不在那个地方,而且那些事不是真实的。后来,在90年代我上大学的时候,我实际上了解了这个概念,并看到了一些消费产品的新闻(但从未亲自见过)。在那十年中,我也认识了Linux,到最后,我已经在专门使用Linux。这些昂贵的怪癖浮出水面。

…直到生活发生了一些变化,直到资金意外流入,并对有关《半条命》下一期(Alyx)和Valve自己的VR系统,Valve Index的所有新闻以及对它在Linux上受支持的说法感到好奇,我才接受暴跌并买了它。首次亮相后的2020年4月30日,我在房子上买了它。

接下来我发生的事情非同寻常。我遇到了新世界,感觉到了新事物,在禁运期最困难的几个月里,我去了很多地方。很难将其描述出来,因为它与感官联系在一起,既真实又抽象。在本文中,我将不费吹灰之力地描述自己的感受,并给出许多示例。但是,为此,我必须从无聊的事情开始。和我在一起,你不会后悔的。

所以。本文将尝试介绍Linux上的虚拟现实如何变得可行,它的挑战和局限性,在其上运行的应用程序和游戏,与之相关的术语和技术以及对未来的期望。并指出目前是否值得对该技术进行投资,而不是像大多数人必须思考的那样等待它成熟。

这里介绍的技术和设备不仅昂贵,而且在某些地区有时不切实际。例如,当我现在居住在欧洲时,在我的祖国巴西,Valve指数并未由Valve正式出售,并且很少有出售它的商店收取至少三倍的价格。因此,这目前是一种非包容性技术,就像区域锁定的Stadia或GeForce Now一样,这对某些人来说似乎很痛苦,并且与开源的精神背道而驰。在这种情况下,请把以下文字作为未来的前景,因为我相信这项技术将变得更加便宜,并可以遍及各地。

虚拟现实,或众所周知的VR,是计算机生成的三维环境模拟,可以通过使用特殊的设备来进行交互,该设备提供了逼真的和物理的方式进行操作,例如带有屏幕的封闭式眼镜而不是屏幕镜头和带有模拟触摸的压力节点的衣服。与VR相关的是增强现实(AR),它是在现实环境中的一种交互体验,通过计算机生成的感知信息增强现实世界中的对象的感知能力;例如,在您所在的真实房间中添加3D模型的可视化。在实践中,如今,AR的技术已经集成到VR中,因此,例如,几乎所有当前的头戴式耳机都具有可用于生成虚拟现实的摄像机。您在屏幕上看到的虚拟场景的背景。

自从80年代在研究实验室问世以来,VR已经走了很长一段路(早期的研究可以追溯到60年代),并且在90年代出现了第一批消费电子产品之后,VR似乎一直是一种利基技术。角落变得流行,但从未如此。

在经历了十多年的虚拟现实之后,2012年,在成功的Kickstarter活动之后,第一款现代虚拟现实头盔Oculus Rift首次亮相。当时它不是一个带有自己的运动控制器的套件,后来会出现。它带有Xbox One控制器。由于许多技术的融合,特别是MEMS传感器(用于陀螺仪,加速度计,位置检测器)的小型化和商品化以及便携式显示器的发展,使得有线耳机成为可能。头戴式耳机的采用速度缓慢,其中一些产品支持其专有的API。

其他公司也开始研究VR,Google于2014年特别尝试通过其“ Google Cardboard”计划推广VR技术,这是一种低成本的立体观看器(两个“屏幕”,每个眼睛一个),可与运行VR的应用程序配合使用在手机屏幕上。同年,Valve为Oculus Rift推出了SteamVR技术。

2015年,竞争对手HTC Vive推出了自己的运动控制器并支持SteamVR,Oculus在2016年推出了“ Oculus Touch Controllers”。 Playstation VR头戴式耳机也于当年推出,可与2010 Playstation Move控制器一起使用。 2018年,首款独立耳机Oculus Go出现了。

在2019年4月30日,我们出现了Valve Index,这是第一个正式支持Linux的VR工具包,而在撰写本文时,这是唯一一个这样做的工具。所有其他可用的VR设备都可以通过SteamVR或粗糙的反向工程驱动程序来实现。

没错,这很无聊。此外,为什么虚拟现实甚至有意义但不是时尚?

是的,这很无聊,但是您注意到这么小的细节吗? PSVR的运动控制器创建于2010年,比任何一款耳机都要早几年。突然之间,它们完美匹配了PSVR。而且,它们只是类似空间控制的悠久历史中的最新成果– Wii遥控器甚至Xbox Kinect相机都具有影响力。这是为VR提供物理性的输出。

耳机和控件完美互补。还记得Xbox在相机前跳舞的游戏吗?好吧,这令人信服,但是一旦您将头转向一边,您将再也看不到那台大电视了,对于第一人称格斗游戏(近战或射击),情况甚至更糟。在其他令人兴奋的技术方面,这是一个很大的缺点。

立体视觉可以说是一回事:即使进行精确,快速的头部跟踪,您也将沉浸在虚拟世界中,只能看到通过操纵杆或鼠标和键盘组合进行的狭窄动作来控制“手” ,其中许多甚至都不像您在该虚拟世界中所做的那样。

现在是时候提起了,就像控制器一样,也应该跟踪头戴式耳机的位置以感觉合法。当您仅了解耳机的旋转角度时,也就是说,您只知道耳机指向的位置时,这称为3DOF,即三个自由度,分别是旋转轴的俯仰,偏航和侧倾。当您还进行位置跟踪时,您将拥有6DOF,以及附加的平移轴X,Y和Z,该位置通常相对于称为“基准”或“灯塔”的设备,并且可以有多个。 Google Cardboard“ VR”只有3DOF。

由于价格低廉,许多人只通过Google Cardboard知道“ VR”,他们理应认为这只是it头,新颖或好奇。他们永远不会感觉到身体

这还不是全部。还有两点要考虑。首先,我们的眼睛与平面相机传感器大不相同。它们几乎是球形的,并且在中央凹(中央区域)中的视野比周围区域清晰得多,因此需要对看起来如此靠近眼睛的图像进行一些调整。您可以从游戏设置中了解到某种形式的超采样功能:以比物理分辨率更高的分辨率渲染场景,然后按比例缩小场景,通常使用某种形式的混叠来平滑拐角。使用耳机时,可以显着提高图像质量。调整的另一部分是通过对大约圆形视场进行变形和透视校正来完成的。

不过,这样做的成本并不便宜。对于每只眼睛具有两个1440×1600 LCD面板的Valve Index,默认的“分辨率”设置为130%,这意味着将渲染两个场景,每个场景的分辨率为1872×2080,然后重新缩放和变形以解决一帧。

第二点还算不错:在VR中,我们的眼睛对帧速率和延迟的敏感度要比屏幕上的敏感得多。当您移动头部时,即使在耳麦上看到的信息甚至稍有延迟,您大脑的更基本区域都会将其解释为某种疾病,并可能使您感到头昏眼花,恶心甚至激活呕吐反射(摆脱有毒食物)。这是一个实际的问题,使用时可能会比较温和,但是对于某些人来说,它也是一种阻碍因素,并可能导致健康问题。因此,没有低调游戏的空间,虽然60 Hz的显示器对大多数人来说非常适合,但对于VR,您不想保持在90 fps以下。对于Valve Index,默认频率是120Hz,可以超频到144Hz。除了帧速率外,这也是无线耳机仍处于实验阶段的原因–延迟是这些耳机的一大问题,您将至少需要“ Wifi 6”(Oculus Quest 2使用的802.11 ax 9.6 Gbps和更好的延迟处理能力) 。

我会坦率地说,我认为Linux上的VR不会成为问题……如果不是Valve的话。据我了解,有些人讨厌DRM,甚至不会接近Steam,但如果您想要VR,那么Valve的客户端之外几乎没有任何东西(包括驱动程序和应用程序)。考虑到我们的Linux用户只占台式机市场的一小部分。让我们乐观一点,说我们是台式机用户的2%(尽管在Steam中,它的波动幅度约为0.86%)。根据最新的硬件调查,Steam中的VR用户大约为1.9%,这些人是游戏玩家,他们不能代表台式机用户,但是假设2%的台式机用户使用某种VR设备。如果比例保持不变,Linux VR用户将是2%的2%,或PC用户的0.04%,或10,000人中的4个人,并且分布在世界各地。这个微小的市场甚至都不是任何理智的投资者的考虑因素。

但是话又说回来,我们有一些本地VR Linux游戏,而且每天都有更多。严肃的Sam游戏,Talos Principle VR,半条命:Alyx,Groove Gunner,ASTROKILL,Allspace等。当然,大多数具有Linux构建功能的具有VR功能的游戏甚至在其Linux二进制文件中都没有VR,但是有些游戏甚至具有非常笨拙且没有支持的功能,例如Everspace。对于基于Proton的游戏而言,这听起来可能令人惊讶,但是支持VR或仅VR的游戏在Linux上运行的可能性要大于非VR游戏。顺便说一句,这可以称为“煎饼”游戏。

尽管它们不如煎饼游戏那么全面,但VR游戏被闷的可能性要低得多:

这不奇怪吗?这是SteamVR的优点,它可以跨平台无缝运行,而Proton可以与其无缝集成。但这并不全是玫瑰。也有一些刺。尽管SteamVR十分复杂,但在Linux上却存在一些奇怪的长期基本错误,例如耳机摄像头无法正常工作(尽管已通过Cheese和guvcviewer等流行的摄像头软件检测到并查看了耳机摄像头),但屏幕截图的控制器按钮组合并未触发(F12可以,但是您不能将其映射到组合),最后,是灯塔的电源管理(可以通过一个小的python脚本来工作-如果不关闭它们,它们将花费所有时间进行旋转和穿戴关闭(请参见动画)如果SteamVR是开源的,则此类漏洞将立即得到修补,但由于是专有和非协作的,我们只能耐心等待Valve修复。当然,有一些开源缓解措施因为它就像steamvr-utils一样,在启动SteamVR来控制灯塔和音频时将其作为脚本添加,但是它们仍然是外围设备,而不是固定在内核中。

另一方面,与此同时,SteamVR可以完成复杂的事情,就所有事情和目的而言,甚至都不需要。例如,使用“ Vive追踪器”(一种可连接到身体的设备告知其所在位置)扩展VR集不仅是可能的,而且容易且无缝的,并且您可以轻松地玩支持全身追踪的游戏。您还可以在设置中添加其他灯塔,SteamVR会很好地检测到它们。

在某些情况下,甚至不该怪Valve,而是GPU Maker等外部供应商。 Podiki在他自己的文章中已经进行了解释,但让我们回想一下:重投影是一种技术集合,其中,如果场景帧在其预期的屏幕频率时隙还没有准备就绪,则是头部旋转和平移运动的简化版本。而是改为呈现(最简单的形式就是将渲染的屏幕移动以说明头部移动)。异步重投影与渲染同时且在帧时间结束之前准备简化版本,而较早的交错重投影通过复制帧以半帧速率运行应用程序。

重新投影很大程度上取决于GPU,并且必须由GPU驱动程序支持。当前的Linux NVIDIA驱动程序没有异步重新投影,而开源AMD GPU驱动程序却没有异步重新投影,这不足为奇。顺便说一下,这就是Valve建议半条命的AMD GPU的主要原因:Linux而不是NVIDIA的Alyx。作为RTX 2070 SUPER的先前所有者(现在是Radeon RX 6800 XT的所有者),我可以说AMD对于VR感觉好多了-包括以下事实:某些在NVIDIA下不适用于我的游戏现在可以与Radeon一起使用,门户网站故事:以VR和Borderlands 2 VR为例。这并不意味着它对您不起作用,我有NVIDIA GPU的朋友向我报告说这些游戏在其装备上可以正常工作。

但是,值得注意的是,如果游戏性能良好且丢帧很少发生,那么重新投影就不是什么大问题。在SteamVR上,可以根据具体情况(针对每个游戏)配置要使用的重投影类型,并且NVIDIA用户必须费力地将其许多游戏更改为“旧版”重投影,以减轻帧丢失的令人不快的影响。

Windows用户可以在其NVIDIA驱动程序上进行异步重新投影,因此他们无需依靠传统的重新投影。他们的经验因此减少了迷惑。曾尝试向Nvidia询问该功能,但没有得到他们的回应。

如果您使用官方支持的Valve Index工具包或SteamVR支持的HTC Vive或Vive Pro,那么您的体验应该是无缝的。对于可能不具备所有功能或具有稀疏找到的反向工程驱动程序的其他头戴式耳机(例如PSVR或Oculus Rift DK1),实际上,您将无法在游戏或严肃的应用程序中使用它:这些驱动程序不适合正确的API和VR集(控件,灯塔,头戴式显示器等)不能整体使用。它们将是用于修补的讨厌的设备,不幸的是很少有实际用途。

SteamVR于2015年正式启动,当时Valve创建了OpenVR API,以支持多个供应商对VR设备的支持。尽管SDK的大多数部分都是根据BSD-3条款许可开放的,但驱动程序本身却不是。因此,该技术的一些早期采用者开始开发OpenVR的替代实现,称为“开源虚拟现实(OSVR)”,它甚至具有开源硬件项目。可悲的是,它的开发停滞了,直到今天它的主站点都处于离线状态。

但最终,这种方式似乎更好,因为半封闭的OpenVR让位给了OpenXR,后者是Khronos Group领导的VR API,于2019年7月29日首次亮相。如果您不记得这个名字的话,Khronos Group就是负责OpenGL的委员会,尤其是Vulkan,这是最近对Linux游戏成功至关重要的图形API。 OpenXR是免版权费的,有充分的文档记录,可与Vulkan同步,并受浏览器和多家供应商的支持。 SteamVR beta已经支持OpenXR(除了其本机OpenVR),还有Windows VR标准Windows Mixed Reality。甚至Oculus PC平台也支持它,因此也许它将充当这些平台的专有游戏/应用程序与Linux上的日常工作的桥梁。

以这种方式开放,OpenXR允许竞争性的实现,除了SteamVR之外,我们还有一个名为Monado的多平台实现,与OSVR不同,它似乎正在快速发展,支持更现代的设备,并且已经在其之上构建了应用程序,其中之一是XRDesktop,该库用于将传统的桌面界面带入VR。现场或VR / AR界面中还有其他计划,例如带有SafeSpaces Desktop的Arcan,但这将是将来的另一篇文章。目前,您可能需要查看Collabora关于XRDesktop的工作原理的出色解释。

但是,Monado只是OpenXR实现。不是底层驱动程序,它可以识别并驱动已插入PC的操纵杆,头戴式显示器,跟踪器等。为此,在SteamVR之外,有一个名为OpenHMD的开源项目。不过,目前似乎仍处于起步阶段,目前仅日本跟踪器NOLO支持位置跟踪。

实际上,在Linux上,要使用VR(在插入所有设备之后),您将通过Steam并安装SteamVR工具。然后,要在VR中使用任何东西,您将有多种方式:

您可以在SteamVR应用程序上单击“播放”。它会启动SteamVR(这时您的HMD会打开,并且会出现一个简单的无限风景并响应您的头部运动),并且默认情况下还会加载SteamVR Home,这是一个3D环境界面,您可以在其中行走,与对象互动,更改设置并启动受VR支持的游戏和应用程序。某些不受官方VR支持的应用程序可能不会出现在其启动器小部件上,从而迫使您通过pancake steam窗口启动。您还可以更改3D环境(有Workshop支持),甚至可以在那里与您的朋友进行语音聊天和所有聊天。

在某些发行版(例如与Ubuntu高度集成的发行版)上,当您打开控制器时,它将自动启动SteamVR。请注意,由于控制器使用专有驱动程序,因此它们不会像xinput列表中的命令那样显示为常规Linux设备,因此没有在Steam外部进行自定义的机会。

在Steam窗口的一角,“大图片”小部件旁边将出现“ VR”小部件。如果您按此小部件,它也会调用SteamVR。

通过Steam上的“播放”按钮调用具有VR支持的游戏。如果它是SteamVR游戏中的“支持VR”而不是“仅VR”,它将询问您是否要使用VR模式。 Steam会自动将参数-HmdEnable 1添加到游戏命令调用中。这样,游戏将与SteamVR动态库进行通信并在耳机屏幕中启动。这里的时机并非总是完美的,作为一种新兴技术,它有时可能会失败,但是这种情况一直在稳步改善。另外,有一些游戏和应用程序(例如Blender,City Car Driving)在正常的桌面模式下启动,但内部具有“ VR切换”控件,可以将显示切换到耳机。

请注意,除了SteamVR Home,您还可以通过单击触觉控制器上的“系统”按钮来调用3D VR叠加层。该覆盖层类似于显示在桌面上的SteamVR窗口,但更具可配置性,甚至允许您使用“虚拟桌面”模式来控制XRDesktop之类的桌面。在这里可以配置每个游戏的设置,特别重要的设置如运动平滑和重新投影。在撰写本文时,覆盖层仍然存在一些奇怪的间歇性错误:

......