转载请标明出处:http://blog.csdn.net/yunchao_he/article/details/61195801
所谓WebVR,就是VR on Web。它把虚拟现实这项酷炫的技术带到Web领域来,用JavaScrpit来写虚拟现实相关的应用,从而在浏览器或者Web runtime上跨平台运行。所以,谈到WebVR,必然离不开native VR,也就是大家耳熟能详的虚拟现实(Virtual Reality, 简称VR)技术。那么,笔者首先简单介绍一下native VR。熟悉native VR的读者可略过这部分。
1. 常见的产品
首先简单罗列一下native VR的一些热门产品或平台(其实部分产品可能是AR - Argumented Reality增强现实, 或者MR - Mixed Reality混合现实),它们是:
Occulus VR (Facebook),
Samsung Gear VR,
Google Daydream,
HTC Vive,
Google Cardboard,
Microsoft HoloLens
Sony PlayStation VR
2. 分类
这些产品或者平台,往往被分为几类:
Tethered: 比如Facebook Occulus VR, HTC Vive VR, Sony PlayStation VR等。Tethered,也就是wired, 即计算设备和头戴的显式设备(HMD - Head Mounted Device)分开,但需要用线把两者连接起来,从而将计算结果输出到显示设备上。这样的好处是主机的计算能力可以很强,比如主机可以配备高端游戏显卡,从而有很好的沉浸式虚拟现实体验。 只要有家用台式机或者笔记本电脑,就无需再单独花钱购买VR主机。缺点则是头戴的显示设备和主机需要用线相连,极大地限制了玩家的活动范围,缺乏灵活性。
All-in-one: 比如Microsoft Hololens, Intel Alloy等。就是计算设备和显式设备一体,都集成在头戴的显示设备上。它的优缺点正好和Tethered相反。比如价格昂贵,但比较灵活,便于移动、携带。
Mobile: 比如Google Daydream, Samsung Gear VR, Google Cardboard。Mobile VR使用普通手机作为计算设备(当然,手机需要支持相应的VR技术),外加头戴设备来现实VR效果,两者分开。这方面类似于Tethered VR。但手机体积小重量轻,可方便携带,所以可以把手机穿戴到头戴的显示设备里,从而有较好的灵活性。它在优缺点方面,相对来讲是个折中方案。不算手机的话价格不贵,且较为灵活。不过受限于手机的性能,Mobile VR可能在画质,延迟等方面表现稍微逊色一些。
当然,相对于Tethered VR,业界也通常把All-in-one VR和Mobile VR统称为Untethered VR, 也就是Wireless VR (很少有这种说法,但这里仅仅是方便中国人理解,毕竟Wired, Wireless这些单词更熟悉)。另外,相对于Mobile VR,业界也通常把Tethered VR和All-in-one VR统称为Mainstream VR。
3. 软件开发包,开发框架
关于native VR, 这里也简单介绍一下SDK, 这是开发人员比较关心的。这里仅仅简单罗列一下业界常见的SDK,具体如何使用,请自行搜索:
OpenVR,
OSVR,
HoloLens SDK,
Occulus Rift SDK4. Teams/Components in VR
最后简单聊一下整个VR产品从底层到上层的构架,或者团队。目前VR市场的生态系统还没有完整地建立好,没有细致而专业的分工。所以推出一款VR产品,往往需要构建从硬件到应用的整个软硬件栈:
HW team,负责设计硬件的团队,包括计算设备,头戴的显示设备,各种传感器来跟踪眼球或手势,以及游戏手柄,等等。
Driver team and OS kernel team,向下和HW team合作,向上提供API
SDK team,定义和实现VR相关的SDK, 比如如何跟踪人的位置,如何定义手势,如何定义眼球或视线的改变,如何跟手柄交互。
Application team ,基于SDK, 以及IDE,也可能还会用到Game engine,来编写VR程序、应用或游戏。当然,和常规程序开发类似,这个过程中也会用到程序开发的各种软件、库和工具。
下面来谈谈主题,WebVR。VR是一项新技术,WebVR就更是如此了。既然是VR on Web,首先需要在浏览器里支持。所以先看看浏览器的支持情况。
1. WebVR在浏览器里的支持情况
Firefox and Chromium: 可在Windows上支持HTC Vive和Occulus
Samsung Internet on Android / Occulus Carmel: 可在Android上支持Samsung GearVR
Chrome for Android: 可在Android上支持Google Daydream and Google Cardboard
Edge: 可在Windows上支持Microsoft HoloLens
这里似乎少了一个巨头。众所周知,无论是从操作系统或者系统生态的角度,还是从浏览器的角度,Apple都是重量级玩家。他家在desktop上有Mac,在Mobile上有iOS,在浏览器领域有Safari。但目前Mac/iOS/Safari,都看不到苹果公司对WebVR的支持。当然,苹果公司本身的作风也比较隐秘,然后突然宣布自己蓄谋已久的产品。哈哈...
2. 开发自己的Web runtime或者浏览器
如果你想基于现有的工具或者开源软件,开发自己的Web runtime或浏览器来支持WebVR,而不受制于现有的浏览器支持。甚至用PhoneGap之类的工具打包成Web APP,可以有这些选择。
VR Shell in Chromium (目前仅仅适用于 Android)
CEF (Facebook公司的Occulus Carmel 浏览器也是基于 CEF 3)
3. 支持WebVR的framework或Tool
开发WebVR程序不是一件简单的事情,如果从WebGL等底层代码写起,费时费力。所以好的framework或者tool有事半功倍的效果,无论是做个简单的demo还是真正的产品。 支持WebVR的比较出名的framework或者tool有:
aframe, 官方网站https://aframe.io/
three.js,
React VR,
Vizor,
PlayCanvas for VR,
WebVR emulator,
4. WebVR API / Specification
跨平台是Web的天然属性。所以在WebVR Specification里定义统一好用的API,对于WebVR非常重要。当然,WebVR目前还不成熟,开发者也可以关注最新的specification的发展情况。对于在国内外软硬件巨头工作的工程师或管理人员,还可以参与到spec的定制。通过在WebVR标准组织里积极推广有利于本公司的feature/API,为自己的公司谋福利,也推动整个WebVR技术的发展。目前和WebVR相关的specification有:
WebVR in W3C, 这个不用多讲,最基本的。
WebGL in Khronos, 因为WebVR是基于WebGL来绘制3D场景,所以对WebGL的了解也很重要。
OpenXR in Khronos, 这是native VR的标准组织,涵盖VR, AR, MR。
Gamepad extension in W3C, 游戏手柄相关的API。
Holographics, 微软看起来并没有积极参与W3C和Khronos社区,他家独树一帜,有自己的VR标准。
和标准相关的其它工作,则是致力于上文提到的framework/tool,甚至是开发新的好用的framework/tool,来推动WebVR的发展。另外也很重要的是,在Unity, Unreal, Cocos等游戏引擎或集成开发环境里添加最新的WebVR/VR的支持,从而推动WebVR/VR的应用和发展。
这是关于VR/WebVR的简单介绍,如果想亲自实践WebVR的效果或者开发demo,可以参考本文的<支持WebVR的framework或Tool>这一节里的framework/tool。笔者特别 推荐aframe,用它写个简单的demo非常方便。aframe的官方网站也有一些demo: https://aframe.io/。
笔者会撰文介绍VR/WebVR的技术难点,热点。敬请期待。