本节书摘来自华章出版社《unity虚拟现实开发实战》一书中的第3章,第3.1节虚拟现实设备集成的软件,作者[美] 乔纳森·林诺维斯,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
**第3章
虚拟现实的构建和运行**
很好,非常酷,但是我的虚拟现实在哪里?我要我的虚拟现实!
别急,孩子,马上就有。
本章中,我们将建立一个可以构建并运行于虚拟现实头盔显示器之中的项目,然后会详细讨论虚拟现实硬件技术的运行原理,将涉及下列话题:
虚拟现实设备集成软件的范围。
为虚拟现实设备安装和构建一个项目。
用于虚拟现实技术运行原理的细节和定义术语。
本书中的项目不需要按顺序实现,可以自由地跳章阅读,因为后一章并不依赖于前一章。然而本章例外,请在阅读余下章节之前先实现memyselfeye预制件和clicker类。
3.1虚拟现实设备集成的软件
在深入讨论之前,我们先了解几种将我们的unity项目集成进虚拟现实设备的方式。一般来说,unity项目必须包含一个摄像机对象,用于渲染两套立体视图,在虚拟现实头盔中为眼睛提供视图。
用于虚拟现实硬件中集成程序的软件范围很广,从内置的支持软件和设备特有的接口到不依赖于设备和平台的软件。
3.1.1unity对虚拟现实的内置支持
unity 从5.1开始,已经内置了对虚拟现实头盔的支持。写本书之时,它已经可以直接支持oculus rift和三星的gear vr(由oculus的软件驱动),对其他设备的支持也已经宣布了,其中包括索尼的playstation morpheus。你可以使用标准的摄像机组件,比如附加到main camera的和标准的人物角色资源预制件。当你构建的项目在player settings中开启virtual reality supported时,unity会将立体摄像机视图渲染并运行于头盔显示器上。
3.1.2设备特有的sdk
如果unity没有直接支持某款设备,这个设备商将有可能发布一个unity插件包。使用设备特有接口的一个好处是可以直接利用下层硬件的特性。
例如,steam valve和google就为vive和cardboard提供了设备特有的sdk和unity包。如果你正在使用上述的其中一款设备,那么你很可能需要使用它的sdk和unity包。(写本书之时,这些设备未被unity内置的虚拟现实支持。)而对于oculus,unity 5.1中直接支持,提供了sdk工具包以调用其接口。
设备特有的软件锁定其只能构建到指定的设备上,如果这对你来说是个问题,那么你要么写点聪明的代码,要么用接下来几条途径替代。
3.1.3开源虚拟现实项目
使用osvr可以为特定的操作系统(比如windows、mac和linux)构建unity游戏,并且可以让用户根据其使用的硬件来配置(下载之后的)应用程序。写本书之时,此项目还处于其早期阶段,快速发展中且尚不适用于本书,但是我鼓励你关注它的发展。
3.1.4webvr
webvr是一个javascript api,正在被集成进主流的网页浏览器。就像webgl(用于web的2d和3d图形api)对虚拟现实渲染和硬件的支持。现在unity 5 已经引入了对webgl的构建支持,我相信webvr的支持也会随之而来,不是unity就是第三方开发者。
我们知道,浏览器几乎运行于任何平台。所以,如果你的游戏的目标平台是webvr,那么你不需要关心用户的操作系统,更不必关心用户使用的是什么虚拟现实硬件了!总之,就是这个意思。新的技术,比如即将到来的webassembly,是一种新的用于web平台上的二进制格式,能够帮助获取你的硬件的最佳性能,并且能够让基于web的虚拟现实可行。
3.1.53d世界
有一些第三方的3d世界平台提供多用户在共享虚拟空间中的社交体验,你可以与其他玩家聊天,通过入口(portals)在不同房间中移动,甚至不需要成为专家就可以构建复杂的交互和游戏。
举个例子来说,vrchat让你可以在unity中开发3d空间和虚拟角色,用vrchat的sdk导出,然后加载进vrchat,其他人就可以在社交虚拟现实体验中通过互联网分享实时。我们将在第10章继续探究。