敲黑板!揭开“VR APP开发”的神秘面纱
导语:2016作为VR虚拟现实的元年,各大VR厂商纷纷推出自己的硬件设备,巨头们建立自己的VR生态圈,推出各自的设备-平台-sdk为一体的闭环,随着VR硬件设备以及各大平台的推出完善,VR内容将成为下一阶段的需求爆点,VR开发也将成为IT热门职位。
本文旨在为各路希望进军VR的开发者们提供VR的开发指引。
Step1 了解VR app依赖的运行环境和硬件设备
VR APP代码的运行环境(不包括显示环境)包括PC端、移动端、浏览器端和VR头显端,运行环境主要依赖于VR头显(Head-mounted Display,缩写HMD)类型。
目前主要市场上主要有以下 3 种VR头显(HMD) 设备:
滑配式头显
入门级HMD,价格便宜。这种设备由一个盒子和两块凸透镜组成,与智能手机相连接,将 2D 显示变成 3D VR 显示。滑配式头显设备性能依赖于主机系统(智能手机),智能手机是提供 VR 效果的必备部分,因此为移动端VR native app以及移动端浏览器的WebVR网页运行提供硬件支持。
厂商:滑配式 HMD 设备包括谷歌 Cardboard 和三星 Gear VR。
cardboard插入智能手机体验VR,主要交互形式是凝视触发事件,新一代的cardboard提供手柄分离式头显
分离式 HMD 设备较滑配式 HMD 设备复杂,内置多种电子零部件。两者的主要不同是,分离式 HMD 设备拥有自己的显示屏,计算和处理模块主要还在电脑或者主机。因此主要支持运行在PC端的APP或者WebVR网页。
厂商:分离式 HMD 设备包括 Facebook Oculus Rift、HTC Vive 和 PlayStation VR。
整合式头显
整合式 HMD 设备拥有强大的计算能力和追踪系统。作为一款独立的计算设备,整合式 HMD 设备将处理器和显示器合为一体,配备一整套零部件,价格高昂,app的运行环境主要是头显的操作系统,因此现在应用还不是很广。
厂商:微软 HoloLens(AR)
Step2 认识VR app项目产出流程
一个VR app项目从落地到可运行大致需要经历三步:产品设计、UI设计和3d建模、开发编程。
1.产品设计
产品经理向来都把握着app的第一环,在这个阶段VR产品经理需要定位产品是面向移动端用户、还是使用onculus或者HTC vive头显的用户,还需要对用户行为和产品功能进行多方面考虑,比如需要设计用户在裸眼下点击菜单和VR环境下凝视菜单的交互流程。同样,如果开发的是VR游戏,我们需要VR游戏产品经理对整个游戏进行策划。产品经理在第一环主要是输出原型交互图和prd。
谷歌VR资源平台daydream app2.UI设计与建模
产品原型出来之后,设计师就可以根据交互原型进行VR场景设计了(大部分的VR菜单设计都是采用弧形化的metro瓷片风格),游戏的设计师还需要对场景进行3d建模,现在主流的建模工具是c4d、3dmax、maya等,一些依赖于视频资源为内容的app还需要专业的360摄像机和录音器进行全景录制。
3.开发编程
当所有资源都准备完之后,就是VR开发者发挥了,与其他app开发相比,VR 开发者需要考虑更多的是3d场景的开发以及VR设备的事件触发,下文将进行主要介绍。
Step3 理解VR开发要点
1) VR场景开发
开发阶段我们需要根据设计师的3d模型开发360°虚拟场景,这个阶段有点像web前端开发的编写html和css布局。
一个静态的VR场景主要包含三个要素:场景、相机、实体。
VR场景的坐标轴VR开发空间主要由 场景、相机、对象实体组成
场景scene:即用户所处的虚拟环境,VR场景的中心坐标轴x、y、z分别代表3d环境里的宽度、高度以及深度,我们可以将开发的场景分成由多个三维网格组成的世界,所有的VR元素如相机和实体都要被包含在内。
相机camera:代表用户的眼睛所在的位置,相机的位置代表用户在VR场景所在的位置。
实体entity:代表虚拟世界里的所有物体,这些实体一般具有四个基本属性为大小、位置、角度和材质,按照实体在场景里的功能分类,我们还可以分成:地面、天空、灯光和其它物质,我们可以通过设置实体的位移、大小、旋转等属性来布局用户的虚拟环境。
阿里buy+虚拟商店静态场景开发完之后,我们需要为场景元素增加动画,VR的动画产生主要是两个方式:1.页面初始化完成时触发;2.用户事件触发。
VR动画其实主要是通过编程来控制相机或者实体的属性来实现,比如控制相机的位移来模拟用户角色在场地里的移动,又比如我们给砍刀这个实体注册监听,用户挥动手柄来触发场景里砍刀的位移等,这点跟其他app开发方式是相同的,都是需要给组件注册事件监听函数,不同的是VR的事件触发类型。
2)事件触发类型:
用户在VR场景的事件类型主要为:初级模式:凝视触发、手柄触发;高级模式:体感手势触发、语音识别触发、行走触发。
凝视触发是VR头显支持的基本功能,VR按钮监听到用户凝视行为即可触发事件;
手柄触发类型依赖于VR设备配套的手柄所持支持手势类型,一般手柄都配置了水平陀螺仪、加速计等传感器,主要用于move平移、rotate转动、press按压按钮的触发事件;
玩家使用Oculus Rift手柄进行瞄准 用户使用手柄射击方式触发按钮体感手势触发:这是个人比较支持的交互方式,它让双手进入VR世界,如leap motion。
利用装在VR HMD的leap motion实现体感手势交互语音识别触发:通过语音识别发送指令,是VR社交较为认可的交互方案。
行走触发:比较高级的触发事件,市面较少见,一般需要万向跑步机传感输入用户的位移信息。
KAT-WALK万向跑步机可以输入用户行走、跳跃、坐等事件3)开发技术与框架:
主要有三个方向:VR大型游戏开发、VR移动端应用开发、WebVR网页开发
VR游戏开发
目前开发VR游戏最主流的框架是Unity 3D和Unreal Engine 4。
其中,Unity3D开发语言主要使用C#或者JavaScript,所以对于web开发者来说比较容易入门。而且Unity支持上述三种类型的头戴显示器,是跨平台支持最好的开发框架和渲染引擎,这使得我们开发的VR游戏可以是运行在浏览器网页、移动端上以及PC端的app。
UE4和Unity3D是VR游戏开发主流框架移动端VR开发
Google VR SDK主要用来开发运行在ios、Android手机上的原生app,适用于滑配式头显。
浏览器端的WebVR网页开发
VR模式浏览网页如果我们希望将vr场景应用在网页浏览器上,WebVR API允许使用分离式头显来观看运行在PC端上的网页(草案阶段),也支持使用滑配式头显观看移动端浏览器的网页,这提供了另一个开发模式,即使用开发web前端网页的方式开发VR。
在 Web 上开发 VR 应用,有下面三种方式:
1.JavaScript, WebGL 与 监听设备方向(Device Orientation)
2.JavaScript, Three.js 与 WebVR
3.火狐WebVR框架A-Frame
A-Frame是一个通过 HTML 创建 VR 体验的开源 WebVR 框架。通过该框架构建的 VR 场景能兼容智能手机、PC、 Oculus Rift 和 HTC Vive所有使用到浏览器的场景。
关于WebVR的知识,这里就不细说啦,具体将在下一篇进行详细介绍。
社区资源:
2016中国VR研究报告:VR概论介绍以及国内VR情况描述
Unity 3D for VR:使用U3D开发VR教程
Google VR SDK:VR移动端App开发者网站
WebVR API:MDN关于WebVR API描述
Chrome Experiments for Virtual Reality:Chrome 团队提供的 6 个 VR 案例
腾讯VR官网:腾讯建立的VR开发者社区