/ Roadtovr / 0浏览

使用HTC Vive和Kinect开发远程共存的合作VR游戏

在展示了他们使用HTC Vive和微软Kinect将两名玩家的物理形象投射到远程虚拟世界的新实验后,我们希望更多地了解开发者Jasper Brekelmans和Jeroen de Mooij是如何完成这个实验的。为此,他们进行了一次自己采访,分享在使用HTC Vive和微软Kinect相机在VR中工作时的开发技巧、困难和快乐。

当Jasper Brekelmans和合作伙伴Jeroen de Mooij获得一套HTC Vive装备时,他们希望开发一款应用程序,满足他们的信念:“虚拟现实革命需要社交因素才能真正起飞”。因此,他们决定构建一款多人合作虚拟现实游戏,不仅允许将物理空间共享和映射到虚拟现实中,还将玩家的身体投射其中。结果是一种在虚拟现实中才可能实现的酷炫共享体验。

我们请这对二人分享他们的经验。以下是Jasper和Jeroen之间进行的采访,深入探讨了项目的起因、实施过程以及最终的执行情况。

Jasper Brekelmans(网站)
Jasper(@brekelj)约15年前开始成为动作捕捉专业人员和3D角色模型的制作者,从事商业广告、电视节目、电影和交互角色的工作。您也可能知道他是Brekel工具套件的创造者,该套件利用Kinect传感器实现了经济实惠且易于使用的无标记动作捕捉。
Jeroen de Mooij(网站)
Jeroen(@jeroenduhmooij)最初是2D交互设计师,但多年来他的重点转向了创建3D内容。首先是用于动画,现在主要用于交互目的。他曾参与商业广告、交互装置、大型视频投影映射、定制软件和工具等工作。

开始这个项目时你们的目标是什么?
Jasper:我们得到两套借用的Valve/HTC Vive头显后,我们首先想在假期期间开开心心地玩一玩。
我们很快就制定了一个小型黑客马拉松计划,试图看看我们是否可以实现多用户设置。由于我们只有一套Lighthouse(光感器),我们选择了在一个共享的物理和虚拟空间中使用两个用户。
我们想看看自己能否设计一个虚拟场景,让用户一起建造/操控某物,同时能够看到对方用户的表示以及他/她在虚拟场景中的贡献。我们还希望确保所有数据都能通过网络连接共享,以便我们将来可能进行扩展。
Jeroen:由于我们只有有限的时间可以使用两个HTC系统,我们的方法是在那段时间内尽可能做得更多。
首先,我们能否在两个光感器的范围内连接2个头显?我们验证了这一点。那么多用户环境怎么设置?因此,在整个过程中我们设定了新的目标。但我们一开始就追求的是多用户体验。

你们分别负责了哪些工作?
Jasper:我专注于点云可视化,编写代码从我的Brekel Pro Pointcloud应用程序中压缩和流式传输实时数据,并在Unity DirectX11着色器中渲染。
重要的是要实现非常低的延迟时间,以每秒30帧的速度获取和渲染点云数据(Kinect的本机帧率),不减慢Unity的视口渲染(通常情况下,Unity在VR模式下的渲染速度为60-90帧/秒),不消耗超过当前互联网连接处理能力的带宽。
幸运的是,通过使用多线程的C++代码和使用DirectX11着色器直接访问GPU,我们成功实现了以上所有要求。Marald Bes还提供了一个Unity脚本,允许虚拟对象被抓取和操纵。
Jeroen:我一直在使用Unity3D,最近参与了一个涉及工作站<>GearVR网络连接的小型测试,所以我对Unet系统的一些基本知识有所了解。
基本上,我在Unity3D中完成了所有与Unet相关的网络工作,并设置了场景以进行游戏。Marald帮助编写脚本,使得可以用Steam控制器抓取一个盒子。
此外,我还使用了另一个我正在开发的研发项目中的头像形象。与Erwin一起。Jasper做他最擅长的事情,即所有与Kinect相关的东西(流媒体服务器、网络、Unity3D客户端)。
在实施过程中遇到了什么问题?
Jasper:问题?当然没有,一切都很顺利,我们第一次尝试就成功了,而且我们一次都没有咒骂过….. 哈哈,开玩笑的。
实施网络代码始终是困难和令人沮丧的工作,最初我为了性能原因打算用原始套接字来实现它。经过两次尝试,发现要使其稳定性很难,最后我决定在现有库的基础上构建,并从中获得了一些意外的性能好处。
幸运的是,对于Unity DirectX11着色器,我部分地依赖了一些我现有的代码,所以进展顺利。我在GPU上扩展了点云渲染,采用了以程序方式生成的网格渲染风格。
在实施过程中,我们意识到点云渲染实际上更美观,因为网格有时会遮挡视线。将点云和两个Vive校准对齐也证明是棘手的,但经过多次尝试,我们找到了一些实际的技巧,使其在我们的测试中得以实现良好的对齐。
Jeroen:时间,时间是一个巨大的因素,如果有最后期限的话,但另一方面,它使你非常专注于在那段时间内要完成的目标。
我在Unity3D中有建立单人体验的经验,但在网络或多用户项目上并不多,所以我真的需要时间来弄清楚Unet的设置和使用方式。所以这意味着很多次绕圈子,重新用不同的方法开始。此外,文档和教程非常有限,因为Unet系统刚添加到Unity3D中,而且,正如通常情况下一样,我想尝试的东西都不是“基本”功能的一部分。
除此之外,我还注意到有时控制器脱机,尽管它们电量还够。
Steam系统压缩程序有时会感到困惑。当意外将窗口拖到第二个屏幕(HTC Vive)上时,这种情况似乎会发生。

在使用这项技术时,你学到了什么?有什么事情你之前没有预料到的吗?
Jasper:首先,比我们预期的更有趣 🙂
也有很多事情是自然而然发生的,我甚至没有想到。比如能够把一个被拾起的物体从一只手传递到另一只手,把它扔给另一个用户并接住。
但即使是通过简单地看过去看看他在做什么,或者类似手势的非语言交流,也能够非常直观地进行沟通。
而且相互扔个方块到对方的脸上也很有趣(尽管我们可以预料到这一点),甚至在意外发生时会引发真实的躲避反应。
Jeroen:我学会了堆叠箱子 🙂
使用DK2和GearVR时,我知道大脑很容易被欺骗。
这次实验中给我的印象最深的是一切都感觉非常自然。点云不仅提供了对其他人的表征,还有一些环境点,所以对我来说,它并没有让我觉得与现实世界脱节。我之前没有预料到这一点,因为我之前做过SteamVR的演示,那时我真的沉浸在另一个世界中。这自然有其自己的魅力。
对我来说,线缆并不是个问题,我很快就习惯了它,但不再需要考虑这个问题会是一个很大的进步。
而且有机会在虚拟世界中真正地四处走动,尤其是围绕着一个3D物体走动,给人一种在虚拟世界中的自由感。这确实是与我做过的任何坐着体验的很大区别。

你们的未来计划是什么?
Jasper:我们肯定要扩展到两个用户在两个不同的办公室里,但不共享同一物理空间,而是使用互联网连接的设置。
不幸的是,我们不得不把租借的Vive归还给它们的所有者,所以可能要等到零售版本出来才能继续。 : (
我们也渴望将其适配到与混合现实设备一起使用就像微软的HoloLens一样,我们认为通过共享的3D物体进行协作可以在提高生产力方面发挥重要作用。
Jeroen: 希望能够扩大这个项目,或者开始类似的VR / AR / MR实验。
对于这个项目,我想增加一些东西,比如通过互联网实际操作,并看看这样的感觉。因此,在这种情况下增加位置语音是很重要的。
此外,我非常好奇在同一空间中有更多用户的情况下,分享和协作的情况。当然,我可以看到游戏的选择,但我认为还有很多其他目的的机会。叠放和扔箱子很有趣,就像任何物理沙盒一样,但我希望在这样的环境中拓展更多的功能。也许为每个用户提供一套工具,更能促进协作。
还有一个问题是在环境中流入更多的点云数据,还要确保Kinect的角度和范围设置正确,或者甚至可以看一下Jasper正在开展的另一个项目,即Multi Kinect云数据。

在设置中使用Kinect设备的目的是什么?
Jasper: 我们仅使用它进行点云处理,没有使用其骨骼追踪功能。
我已经尝试过在VR中渲染3D头像(使用Kinect和其他动作捕捉设备)。
这种方式很好,当然也有其用途,但由于3D头像始终是用户的抽象表达,它并没有带来很好的沉浸感。
尽管点云表示可能存在问题,但它包含了纹理、光照和细节,你能够知道这些都属于用户(自己或其他人),我们注意到你可以从中获得更多的细微线索,而不是抽象化的表达。
Jeroen: Jasper已经在小规模的流点云项目上工作了一段时间,所以这个时机完美地将其纳入了这个实验中。
它确实为整个实验增加了“真实”感。Vive可以跟踪手柄和头戴式显示器,但它并不是一个完整人身体的表示。通过将Kinect的坐标系与steamVR的坐标系相对应,在VR中就能够看到整个人。看起来很有趣,有一个点云身体和3D头像。
为什么我们使用了这个沙盒环境?(下次有更好的沙盒环境会是什么样?)
Jeroen: 扔东西不是很有趣吗?我们也这么认为。除此之外,物理学使得将物体组合在一起变得容易,因此支持协同工作。
周围的物体只是为了让我们可以扔箱子,以便我们可以看到网络同步是否正常工作。
下次我想更多地朝着某种协作目的发展。
例如,在地图上放置建筑并进行模拟,或者找到某个三维难题的解决方案。
可以详细介绍一下所使用的设置吗?
Jeroen: 我们使用了两台工作站,一台i5和一台i7,都配备有GTX970的Nvidia显卡。只使用了两个基站进行追踪。我们在Unity3D版本5.3中进行了项目开发。
Jasper: 哦,还有Kinect V2传感器。
那么,开发时间是多久?Jasper: 我们在办公室里坐了大约3天,并且我花了多达一周的时间编写网络类。
Jeroen: 我已经设置了一个完整的VR系统来进行另一个项目,所以在我们开始之前这个系统就是正常工作的。当我有另外一个Vive系统时,我首先要测试的是它们是否可以在同一空间中只使用两个基站正常工作。
当一切正常时,我们开始讨论我们可以构建的机会。我主要专注于设置Unet相关的事情,使用了几天时间不断试错,Jasper则为流点云的准备工作做了准备,然后我们用两天时间将它们组合在一起,再用一天进行微调和拍摄。
如果我们有更多时间与系统一起,我们可能会增加更多功能。但这个设置大约花了一周的时间。
这适用于Vive系统还是其他VR系统,比如移动设备(GearVR)?Jasper: 好吧,设置是可以迁移到其他VR系统上的。需要对手部进行追踪和拾取物品的能力,以及头戴显示器的位置追踪才能有一定的实用性。
所以,我想奥库拉斯的触控手柄和HoloLens的手势也可以实现这个目的。两者都应该能够在Unity中运行带有DirectX 11着色器的点云。鉴于GearVR缺少这些功能,它对于我们这个特定的设置来说变得不那么有趣。
Jeroen:实际上,这只是一个多人环境,’玩家’可以在其中进行各种活动。因此,如果输入是Vive + 光标或一个控制角色的Kinect骨骼或有机运动追踪解决方案,这些都是可行的。
即使使用Wi-Fi在GearVR上查看,也可以通过外部位置追踪实现。但是,我们的目标是HoloLens 🙂

感谢Jasper Brekelmans和Jeroen de Mooij与我们分享他们的经验。我们将与他们保持联系并跟踪他们的进展,以便及时向您汇报。

0

  1. This post has no comment yet

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注