Google Cardboard App 开发指南(txt+pdf+epub+mobi电子书下载)


发布时间:2021-08-04 10:33:15

点击下载

作者:(美) 沃西耶 M.,帕萨莫尼克,波波夫比克霍夫 P.(Peter Bickhofe)

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Google Cardboard App 开发指南

Google Cardboard App 开发指南试读:

前言

谷歌魔镜简介

谷歌魔镜(Google Cardboard)是体验虚拟现实最廉价的方式之一,并且被人们称为体验虚拟现实的一种“先导药”。谷歌魔镜廉价且使用便捷,再加上它是通过与手机的协作(由手机负责画面渲染、传感器数据拾取与处理等方面的工作,谷歌魔镜负责将手机固定于双眼之前并负责近距离成像)来实现虚拟现实,这意味着几乎每个人都能通过它方便地进入虚拟现实的世界。谷歌魔镜于2015年的谷歌I/O大会上升级到能够与iPhone系列手机兼容,同时还开始支持YouTube与GoPro等许多公司的产品。这意味着,即便你不愿出门,也能通过虚拟现实技术以“身临其境”的方式体验世界各地的风情。阅读本书之前需要了解什么

本书面向具有Unity 3D开发经验的移动应用开发人员。如果你了解以下几种知识,将有助于更好地掌握本书涉及的内容。● 3D建模

你应该了解顶点、网格等与3D建模相关的基本概念,能熟练地使用Blender、Sketches或者其他类似的3D建模工具。● Unity

你应该已经学习了Unity的基本使用方法,并知道如何利用它建立一个简单的场景;你应该已经了解什么是预制件(Prefab)、什么是着色器(Shader),并且已经掌握如何将用Unity开发的应用部署到手机等移动设备上。● Android

你应该了解什么是Apk,并且知道如何利用adb来进行错误调试。作者简介● 迈克尔·沃西耶(Michael Vaissiere)

过去15年里,Michael Vaissiere(又被誉为VR领域的Ryan Conrad)一直从事IT行业,担任过开发人员、企业架构师和项目经理。曾作为谷歌魔镜应用程序的独立开发人员,开发了当前非常流行的外星公寓VR应用。他喜欢创新、听音乐、读书,并且对科学与天文学充满激情。● 迈克·帕萨莫尼克(Mike Pasamonik)

Mike Pasamonik是Glitcher VR的创造者,他不仅是一名计算机科学专业的研究生,还担任圣迭戈州立大学语言资源采集中心的全职工程师,负责编写和维护网络、移动应用程序,主要学习与研究人工智能、计算机视觉、机器人技术和虚拟现实技术。● 亚历山大·波波夫(Oleksandr Popov)

他是孔明灯(Lanterns)和村庄VR及其他众多应用程序的创作者之一。Oleksandr则担任ELEKS Software的产品经理与开发工程师。● 彼得·比克霍夫(Peter Bickhofe)

Peter Bickhofe是“哇!当心小行星!”(WAA! When Asteroids Attack!)的创作者,作为一名游戏开发者,他致力于Unity 3D、VR和基于位置的游戏等领域的学习与研究,现担任Highscore Brothers的CEO。本书技术顾问● Raka Mahesa

Raka Mahesa是一个小型游戏工作室的程序员,开发过游戏Chocoarts。他负责探索游戏开发过程中所需要的新技术,如实现联网功能、设计图形编辑器以及使程序支持虚拟现实。工作之余,他也开发自己的游戏,并且对VR技术很感兴趣,他相信VR将会在未来世界里扮演重要的角色。● Scott Harber

Scott Harber从事视频游戏产业将近12年,曾担任《横冲直撞3》《极品飞车14热力追踪》和《战地硬仗》等知名游戏的技术美工。从2014年开始,他成为一名从事移动手机端、PC、Mac和Wii U游戏开发的独立开发者,并对虚拟现实产生了兴趣,还发布了一款支持Oculus Rift(一种头戴式显示器)的游戏和一款支持谷歌魔镜的手机应用。

他是第一个公开分享能可靠支持谷歌魔镜磁性触控按钮(本书中后面将简称为磁钮)的可重用代码的Unity开发者。直至今天,许多在线商店中的游戏依然在使用这些代码。后来,随着谷歌魔镜开发包的整合,该应用成了谷歌的一项业务。2014年年底,他结束了独立开发者生涯,回到游戏产业工作。● Casey Borders

Casey Borders是一名拥有十几年开发经验的专业开发者,几乎在他的整个职业生涯中,他都在研究实时交互式3D软件与手机应用的开发。● Raul Acosta和Eduardo Acosta

Raul Acosta和Eduardo Acosta在Raiz专门从事创建和优化身临其境的环境以及更广泛的设备上增强现实的实现。他们喜欢创建、修饰画面以及探索在设计过程中加入虚拟现实的新方式。第1章初识VR迈克尔·沃西耶(Michael Vaissiere)

远在YouTube支持360°全景视频之前,我就使用过类似的应用。开始我也想过自己制作VR眼镜,最后还是决定偷懒,买一个算了。之后我购入了一个谷歌魔镜,来进一步提高游戏体验。那天,包裹被送了过来,从打开包装到组装完毕,共花了5分钟。

接着,我下载了谷歌魔镜的官方应用,插入手机。但这个应用一直在循环播放视频,后来发现是因为手机应用需要检测到谷歌魔镜里NFC的信号才开始正常工作。我把NFC标签贴好,打开了手机的NFC功能并重新插入手机。此时,一切都恢复正常了。提示: 谷歌魔镜里的NFC标签通过与手机触碰发送信号可实现快速下载App、快速打开谷歌应用等便捷功能。1.1 令人惊叹的效果

你也许从很多人那里听说过,第一次观看谷歌魔镜所呈现的画面时,你会惊呼“哇”!对我而言,我认为这主要是因为谷歌魔镜所带来的令人惊叹的效果。我开始非常怀疑,仅有两个廉价镜片的谷歌魔镜再加上手机中的几个传感器能否真的将虚拟现实的世界呈现在我的眼前。

但谷歌魔镜确实做到了,你看到的风景会跟真实的景象一样是 360°全景的,会随着你头部的转动而变化。难以想象这就是真正的VR,所以大家都会惊叹“哇”。1.2 让人不满足的体验

接着15分钟过去了。在这15分钟里,我在YouTube上观看了3D电影,体验了几次虚拟世界里的雨天效果,在谷歌地球中欣赏了许多地方的风景。然后我对自己说:“这很棒,但是我还没看够,我要去探索更多东西,我想在其中实现互动,我想要如同在真实世界里一样行走。”

于是我开始这样想:谷歌的官方应用应该具有代表性,毕竟谷歌魔镜是如此酷炫,谷歌应用商店里应该有许多更好的应用。但事实并非如此,下载完应用商店里的所有 VR 应用后,我才发现应用商店中支持谷歌魔镜的应用基本都处在测试阶段。这些应用当中没有一个能够让我实现互动,或者是不使用蓝牙手柄就可以操作的。

短暂的失望过后,我就到架子上找出我的蓝牙手柄来实现与虚拟现实世界的交互。然而在感到眩晕后,我的想法就落空了。在虚拟现实世界里通过游戏手柄来控制移动会让我感到晕眩。真正的VR怎么可能让人如此失望呢?

接着我开始思考:虽然人类的头部并没有像手和腿那样灵活,但我们平时也经常用头部动作来进行简单的信息传递,如点头代表“是”、摇头代表“否”。为什么不能用头部动作来对应用进行操控呢?我开始进行这方面的尝试,同时还试验了许多其他方法,结果证明通过头部动作进行操控的方式更好一些。

这种操控方式甚至影响了谷歌应用商店里人们对应用的评价。除了一些蓝牙手柄的铁杆粉丝还在坚持VR应用一定要支持蓝牙手柄外,其他人群的反响非常好。于是最终我找到了一种能够同时支持这两种控制方式的方法,并且将来还会支持更多控制方式。

我为了测试我的头部控制方式而开辟的专区变得广受好评。我开始收到不少用户的来信,信中说应用里的音乐很棒并且令人感到舒适,他们通过享受专区里的应用缓解了一天的辛劳(后续的章节里我会分析为什么用户会有这样的体验)。我开辟的专区逐渐打破了仅通过蓝牙控制器进行VR应用操作的固有模式。

最重要的是,谷歌商店里的VR应用非常少。难以想象,在一个拥有数十亿用户的应用商店中,VR应用却如此之少。因此在VR类别的应用中,这是获得巨大下载量的绝佳方式。最终事实也证明我的确是对的,Alien Apartment(这是笔者开发的一款用头部动作进行操控的VR应用)在几周内达到了数千次的下载量。尽管不及Flappy bird,但还是比较可观的。同时,谷歌将继续推广这个平台。1.3 为什么要大力发展谷歌魔镜

我参与VR的开发纯属偶然,但这并不影响我参与的热情,因为VR像音乐一样能带给我乐趣。研究VR并不仅仅是为了开发游戏,也是在设计一个新世界。如同你可以变换音乐的旋律,聆听它、享受它一样,你可以设计自己的世界,并沉浸其中。这和Minecraft(我的世界)的高速成长十分相似,不禁让我想到了VR的市场前景以及什么样的机会将首先出现。1.4 进一步了解VR应用开发的市场

假设你已经购买了这本书,也已经有一些开发谷歌魔镜和Oculus Rift(一种专用的VR头盔,价格较贵)上VR应用的经验,那么我们来比较一下基于上述两种平台开发VR应用的区别,具体情况如表1-1所列。表1-1  两个平台开发VR应用的区别项Oculus VR谷歌魔镜得出的结论目花这个头戴式显示器需需要买一2014年最后一个季度大约售出了4亿费要与一个高配置的电部性能和部手机和8000万台电脑。这个数据应脑协同工作(电脑负功能类似该可以帮助你从市场规模的角度得出责运行程序、处理图Nexus5的结论像,其价格在1000美手机元,Oculus VR则负责(300美元显示功能)左右)和谷歌魔镜(5~100美元)质具体最终性能怎样并中低端产如果你期望开发出像大卫雕像那样的量不知晓,但很明显品,低分顶级艺术画面,那你买错书了Oculus VR是高端产品辨率,低功耗,而且显示器并非特制的虚拟现实显示器体潜力无限潜力无限虽然通过Oculus不仅可以体验FPS类验型的游戏或应用,也可以更好地渲染更大数量的多边形以取得更好的视觉效果,但同时,当下人们也非常喜爱复古风格的像素游戏,这些游戏的体验和音乐的吸引力同样很大。对于VR领域而言,更是如此。相信你应该已经知道这一点,这就是你购买本书的原因发如果玩家已经拥有高个人认为我个人认为由于Oculus定价不菲,所展配置的能与Oculus VR 谷歌正在以目前还仅仅是骨灰级玩家案头的昂水协同提供流畅顺滑虚大力发展贵外设,仍然未被大众玩家所接受。平拟现实体验的主机,与谷歌魔而只要拥有安卓手机便可以轻松购得则不需要再购买新的镜相关的谷歌魔镜,通过其方便地进入虚拟现主机,因而总花销不业务,准实的世界太高(作者认为这仅备占领下仅是针对骨灰级玩家一代的大而言的)众市场

总而言之,如果谷歌拿出大力发展谷歌魔镜的战略计划,就会有更广阔的市场和更大的发展潜力。此外,Oculus 是一个正在高速发展的、性能更强劲的平台,其能够全速支持更丰富的VR理念。1.5 对未来几年的预测

近期Oculus推出的Gear VR(与三星合作研发)使得VR的市场路线更加模糊,前景也不很明朗。但可以确定,未来的VR设备不会仍只是骨灰级玩家案头的专有外设或者是仅有两个廉价镜片的纸板盒。

可以预见,性能优良、价格合理的VR设备必将出现。那时,肯定可以以一款中端智能手机的价格购得一套完整的VR设备。这些VR设备可以方便地与你拥有的智能手机、智能手表、平板电脑或笔记本电脑配合使用。时间会证明我在谷歌虚拟现实上下的赌注是正确的。1.6 开发工具和工作流

有过软件开发经验的开发人员都了解,开发工具是生产效率的基石。合理的工具链能够支撑合理的工作流,因此下面将介绍几种在开发谷歌魔镜VR应用时可以配套使用的几个工具。

1.6.1 Unity 5.1

Unity可以说是开发Android 3D应用最简便、最快捷的工具。这与其非常成熟以及完全支持用户自定义密不可分。此外,谷歌还提供了支持Unity平台的谷歌魔镜SDK,这为开发提供了极大的方便。到目前为止,Unity已经发布了很多版本,本书为什么选用5.1版呢?原因如下。● 完整版是可以免费使用的(但是有商业限制,如果你想用于商业

计划,请提前仔细阅读条款)。● 尽管Unity 4的稳定性很好,但由于其免费版本有一些功能上的限

制,实际使用时不如完整版好用。● Unity从5.1版本开始提供对VR设备(包括Oculus和Gear VR)的

原生支持,估计不久的将来也可能会原生支持谷歌魔镜。我认为

至少谷歌SDK将会和Unity子程序之间能够协同工作。下载网址

unity3d.com。

1.6.2 谷歌魔镜开发工具包(v0.5)

实际谷歌魔镜VR应用的开发中,尽管理论上可以有多种选择,你甚至可以选择创建自己的立体渲染框架,但我认为只有使用谷歌魔镜开发工具包进行开发是正确的,原因如下。● 支持触发器管理(谷歌魔镜在2014版增加了磁钮,在2015版增

加了按钮)。● 图像失真校正。由于使用谷歌魔镜体验虚拟现实的过程中需要通

过透镜观察屏幕,实际看到的画面是扭曲失真的(就像我们透过

玻璃碗看世界一样),通过这个开发工具包可以很快修复此问题(因为它是原生的)。● 符合Unity的一贯开发风格。● 良好地兼容iOS。● 谷歌原厂支持。● 可以方便地从“developers.google.com/cardboard/unity/”下载。

1.6.3 3D建模创作工具Blender

我不太擅长3D模型的创作,因此花了很长时间去选择合适的模型制作工具。在尝试了多种不同的工具后,最终我选择了Blender,主要原因如下。● 它是开源的解决方案。● 社区论坛很强大也很活跃,里面有免费的案例和教程。● 能很好地兼容Unity。● 其用户自定义能力很强,并且对于一款3D建模软件而言是非常

易用的了。● 可以从网站“www.blender.org”进行下载。

1.6.4 图像处理软件GMIP

如果没有漂亮的纹理图,就不可能渲染出具有吸引力的场景,所以一款优秀的图像处理软件对应用中的所有3D场景都是非常关键的。我之所以喜欢用GIMP工具处理图像,是因为它简单且功能强大。GMIP 不断提供各种处理工具(包括色彩曲线、多参数调整、规格化、着色、色相/饱和度、色彩深度、alpha 通道处理、选择、图层、遮罩等)。这些处理工具正在迅速地发展,而且使用起来非常简便明了。当然,GIMP也是开源的,互联网上有大量的插件(诸如生成法向量贴图的工具等)。下载地址https://www.gimp.org。

1.6.5 音效创作

这里你说了算!无论你是不是一个拥有自己家庭工作室的专职音乐制作人,都可以从网络上海量的开源音效素材中找到你最需要的音效。除此之外,还有一点我不吐不快:Single Cell Software(一个软件开发商)开发的Caustic是一款非常值得使用的音效制作软件,它虽然很小但功能强大,可以说是过去10年中MOD音轨制作软件非常值得一提的继承者。说明: MOD是一种较为古老的用来存储计算机音乐的文件格式,也是第一个模块化的音乐文件格式,其文件以“.mod”扩展名结尾,一度非常流行。

Caustic同时兼容Android和iOS平台,可以随时将灵光一现飘过你耳畔的旋律制作出来。当然,通过Caustic,你也可以在台式机上(包括Windows和MacOS)导出.wav或.mid格式的音频。即使你从来没有制作过音乐,你也应该尝试一下!下载地址:singlecellsoftware.com/caustic。

1.6.6 3D人物角色建模软件Makehuman

虽然我还没有使用过这款软件,但是在这里我必须要提一下。Makehuman 是一款基于大量人类学形态特征数据开发的,且有大量可自定义选项的开源3D人物角色建模软件,还符合Unity rig模型标准。下载地址:www.makehuman.org。

1.6.7 关于工作流

我的建议很简单:开发中的模型、音效等最好使用对应制作软件原本的格式存储,使用时导出为Unity友好的格式。到目前为止,我认为最好的经验如下。● 三维模型采用.fbx格式(在Blender的输出菜单中选择FBX选项导

出即可)。● 一般纹理图采用.jpg格式,如果需要alpha通道的纹理图,则采

用.png格式。● 音效采用.wav格式并且使用Unity进行压缩。

1.6.8 硬件

如果你也是一位独立开发者,硬件拥有量是一个非常大的制约因素,因为很难有充裕的资金购买各种各样的手机和头盔来检查应用程序的兼容性。因此,实际的选择只能是“做能力范围内的事情”。以我为例,我最终只做了两种设备的测试,具体情况如下。● Nexus 4结合最初的谷歌魔镜(包括磁钮、NFC标签的版本)。

由于最初的谷歌魔镜本身没有提供头部固定装置,在测试时我使用了自己制作的绑带将其固定在我的头部。这对于检查我的场景对性能的要求和基本的平台兼容性(包括视野的范围、焦距、舒适度等)很有帮助。● Nexus 5结合Freefly VR头盔。

这种组合的首要目的就是使眼睛和身体更加舒适。因为在体验诸如Alien Apartment这样的场景时,一不留神就会花费很长的时间。而长时间佩戴使用松紧绑带的一些VR设备后,你的脸部会被压出很深的皱痕,那是令人十分郁闷的一件事!在这种情况下,Freely VR这类的设备是一个很好的选择。另外,对我的眼睛而言,Nexus 5的屏幕像素密度能达到的效果已经基本和最新的Oculus原型设备相同,这也是能良好体验大范围虚拟现实场景所需达到的最低要求了。1.7 VR能带来什么

其实这个问题没有标准答案,这取决于你自身的体会。我不可能一一列举,但可以给出一些帮助和提示。其实,最具革命性的是VR开创了新的纪元。从最早的游戏(Pong)到目前最新版的游戏(黑暗旅行)都可以被重新策划、制作,带来完全不同的体验!

对于传统屏幕而言,创作一款与市面上游戏类似的作品非常容易。但是如果让你开发一款VR游戏,估计你会无从下手。不要灰心!虽然我们刚刚登上这片新大陆,但是有足够的时间来慢慢开拓这片蕴含极大潜力的处女地。说明: Pong是世界上公认的第一款成功的商用计算机游戏,由Atari(阿塔里)在 20世纪70年代推出,可以说是计算机游戏的鼻祖了。

1.7.1 身临其境的氛围

试想一下这样的情景:你拥有一家能做出世界上最美味食物的餐厅,但是餐厅装修得非常糟糕而且坐落在偏僻的地方,生意应该十分惨淡。之后,你又开了一家新的餐厅,由于主厨辞职了,餐厅只能提供一些基本的食物。但是如果这家餐厅坐落在科罗拉多大峡谷的顶部,有着漂亮的玻璃屋顶,餐桌都是用周围的天然石材制作,用餐环境特色突出、新奇好玩,你将会赚得盆满钵满。说明: 科罗拉多大峡谷是一个举世闻名的自然奇观,位于美国亚利桑那州西北部的凯巴布高原上,大峡谷全长446千米。由于科罗拉多河穿流其中,风景优美,是联合国教科文组织选为受保护的天然遗产之一,也是美国的旅游胜地之一。

明白我的意思了么?这听起来确实有点荒谬,但也不是不可能。如果将餐厅比作一款游戏,食物可以看作画面的质量,餐厅的装修可以看作画面的吸引力,而地理位置可以看作游戏的可玩性。通常,高端的画面并不意味着一定受欢迎。这一点从最近一段时间游戏的流行情况就可以看出来,不管是像素化的游戏、黑白界面的游戏以及彩色画面的游戏都有流行的。

手机的GPU无论如何也不可能达到同时代PC显卡的处理能力,因此很难期望手机游戏通过渲染数以百万计的多边形组成的复杂场景来吸引玩家。但就像前面餐厅的例子那样,可以通过提高游戏的可玩性、创造良好的游戏氛围来吸引玩家。

我并不想假模假样地解释一下如何营造身临其境的氛围,但是我曾做过一些有益的尝试。其中很多做法是非常有效而且简单的,诸如利用云、极光、视角、背景音乐和音效增强游戏氛围等。身临其境的氛围对于一个游戏的成功来说十分重要,后面我还会回到这个话题。

1.7.2 沉浸式的体验

我们有必要确定一下讨论的是同一件事情,虚拟世界需要做到以下几点才能带来沉浸式的体验。● 你有在上面花费时间的欲望。● 能让你产生情感反应。● 一段时间内,你对现实世界中发生的事情不感兴趣。● 即便什么都不做,你也会感到很放松。

不过,想要让每个人都有完全沉浸式的体验是非常困难的。以我为例,当不需要手柄进行控制时,我很容易沉浸到游戏场景中,但是当我要思考应该按下哪个按钮时,我就会立刻回到现实中。对于需要使用磁钮的情况也是如此,我总是不断地在想:“磁钮在哪个位置啊?”再加上拨动磁钮时会带来那萦绕在耳边的糟糕声音,这就更难使我忘记现实世界而沉浸到虚拟世界中了。

然而,大部分人似乎并没有对这样的情况不满,我认为应该是有些人更容易融入虚拟世界中。值得高兴的是,如果你成功解决了某些人难以融入虚拟世界的问题,剩下的事情就会比较容易解决了。

1.7.3 真实感和依赖性

我觉得营造一个身临其境的氛围理解起来比较容易。沉浸式的体验已经有点抽象了,而真实感和依赖性是更复杂的沉浸式体验的延伸。让我们先来谈谈依赖性,如果你玩过Alien Apartment这款游戏,就会发现没有太大的可重玩性。虽然刚上手时有点小小的困难,可一旦你通关了这个游戏,短期内就不会有再玩一次的欲望了。不过这并没有对这个游戏产生任何负面影响,许多人都给我来信说他们非常喜欢这款游戏,每次完成游戏都能让他们的身心得以放松。

我很难轻易理解为什么会出现这种情况,于是我做了一个测试,比较一下现实世界的我躺在床上和虚拟世界的我躺在床上有什么不同,但并没有什么特别的感觉。有一次,我闲来无事打开了游戏,在选项中关闭了游戏的背景音乐,然后随便选择了一个关卡。当时我有一种灵光突现的感觉,我很难用语言来形容它,如果你也进行过相同的体验后就会明白我当时的感受了。

我真的在里面!就像我平时做的那样,站在窗前,风扇嗖嗖地转着,四周环绕着 Sade的歌《Sweetest taboo》,我沉浸在美好的回忆中,极光映在天空中显得格外美妙。从那时起,我去Alien Apartment的目的就变成了从起初的做测试到如今的享受音乐,这就是我所说的依赖性。

我觉得只有真实感才能带来依赖性,那么下面再来谈谈真实感。这个时刻我感觉现实世界的我真真正正在Alien Apartment里面。并不像传统的沉浸式体验完毕后回到现实世界时会有昏昏欲睡的感觉,而是现实世界中的你真的处在虚拟世界中。这很难用语言描述,最好是自己亲自去尝试、体验。以下方式可以帮助你更好地体会到这种感觉:● 把现实世界中你喜欢的东西放进虚拟世界中(如音乐、照片等)。● 做一些现实生活中常做的动作(如躺在床上、坐着等)。1.8 谷歌魔镜平台

谷歌魔镜的设计非常简单,这种设计能让每个人都很容易上手。通过谷歌魔镜能让更多的人开始接触虚拟现实,进而实现虚拟现实的大众化。

1.8.1 现实与虚拟现实

我非常喜欢虚拟现实,但我认为“虚拟现实”这个说法并不是十分恰当。因为虚拟现实不一定必须是真实的,同样也没有“真实现实”与之对应。那么我们应该称其为什么比较好呢?其实我也没有更好的命名,不过我想称其为“交互现实(intertwined reality)”等类似的名称。

因为这不仅能说明虚拟世界中的体验是和现实生活紧密相连的,还能体现出你在虚拟世界中的感受和在现实世界中是一模一样的。此外,我可以告诉你,迄今为止你所有的体验都是真实的。不论这些体验是在虚拟世界还是在真实世界中。只不过一种是机器产生的体验,而另一种是现实生活产生的体验。这也正是虚拟现实最大的缺点:机器产生的体验效果远远没有现实生活产生的体验效果好。

1.8.2 移动平台

之前一直在讨论虚拟现实和现实世界的问题,下面我们来说说一个虚拟现实实践中存在的现实问题。最近许多PC端游戏的场景做得十分逼真,但我们很难直接将这些逼真的场景融入谷歌魔镜进行应用,主要原因如下。● 尽管最新的手机GPU性能已经十分强劲,但手机的续航问题制

约了其性能的全部发挥。● 新款手机往往都有着很高的屏幕分辨率(如 Quad HD)。尽管这

一点对虚拟现实十分有利,但由于需要对大量像素点进行渲染和

处理,会消耗GPU较多的渲染能力。● 虽然为了支持虚拟现实已经不需要对场景进行二次渲染,但是只

要Unity不能原生支持谷歌魔镜,任何预料之外的事情都有可能

发生。● VR 游戏中,性能是首先要考虑的问题,因为较大的延迟会严重

影响虚拟现实使用者的体验。无论视觉上多么细腻真实,只要有

较大的时延,真实感就无从谈起了。

我并不是说不能渲染非常逼真的场景,只要你的场景足够简单就可以(笔者这里的意思应该是场景中组成3D物体的多边形总量不能很多)。例如,你的场景中可以使用应用恰当纹理的天空穹作为背景,再包含数量不多的3D物体,这样不仅视觉效果良好,时延也较小,可以带来良好的用户体验。反之,如果你使用由大量3D模型组成的城市作为虚拟现实的场景,整体效果可能就远远达不到预期了。

1.8.3 移动平台的VR用户

依我拙见,大多数移动平台的用户都可以归为以下三类。● 初级玩家:偶尔玩一下游戏。● 中级玩家:把手机作为游戏的平台。● 骨灰级玩家:但凡有空闲,都要玩游戏。

我并没有关于谷歌魔镜用户的准确数据,我接触的大部分用户都是一些游戏开发者、电脑朋克族或者仅仅是出于好奇才接触谷歌魔镜的人。但对于Alien Apartment这款游戏,还有其他两类用户:全景影院应用爱好者以及类似过山车那种非手动操控游戏的爱好者。因此开发VR应用时应该注意满足不同用户的各种需求,如游戏的操控方式、耗电程度等方面。

1.8.4 硬件

接着值得一提的是硬件,你可能想知道谷歌魔镜的用户都使用什么样的手机,答案是有很多种。出现在谷歌游戏开发后台的各种设备类型和数量是惊人的(约有1700种不同的设备)。尽管数据不完整,但我还是想和你分享在Alien Apartment中被频繁使用的手机种类。

图1-1所示的数据可能对你的项目计划有所帮助。图1-1 不同型号手机的使用情况

实际开发时,不要总想着高配置的专用头盔能够良好运行你的VR应用就满足了。我的建议是,要充分考虑低端组合的设备能否顺利运行你的VR应用。每当我的游戏需要更新时,我总是用最低配置的设备组合(Nexus 4+谷歌魔镜)来测试场景。因为这样的组合很可能由于屏幕范围的缩小(被纸盒挡住了屏幕的一部分)而难以完整显示游戏中的菜单项或HUD项目(一种将玩家需要实时获悉的与游戏直接相关的信息显示在游戏画面上的方式),这非常有助于调试以提高游戏的设备兼容性。

现在面临的问题是不知道有多少用户拥有独立的操控设备(比如游戏手柄或蓝牙键盘),但从谷歌应用商店我了解到以下信息。● VR应用程序若只能靠外部控制器控制,会有差评。● VR应用程序若不支持外部控制器,会有差评。● VR应用程序若不支持低端VR设备,也会收到差评。

你明白我的意思吗?你应该为应对不同的情况做好准备!我曾试图在Google+发布调查来收集更多信息,但只收到80个回复,统计结果如下。● 25%的玩家使用磁钮。● 30%的玩家使用控制器。● 45%的玩家不使用手。

根据项目的具体情况,你可以得出自己的结论。在我的项目中,用户更倾向于用游戏手柄操控的实现,同时这些用户也喜欢能够通过目光触发动作的设计。对于使用磁钮操控的应用,用户也希望射击类的动作能够通过目光来操控。

1.8.5 制约因素及局限性

对于谷歌魔镜平台而言,你需要注意几点。首先是帧速率(FPS),专家建议FPS应该在60到120之间,这样才能带来良好的体验。实际在手机平台上运行时最高也就是60FPS,最低会到45~50FPS——这远远达不到专家建议的水平。当然,这很大程度上依赖于玩家手机的硬件情况。能够维持较低的延迟对于保持用户的舒适性是非常重要的,否则用户在体验了几分钟后就会感觉非常糟糕。对于某些人群来说,即使是保持在60FPS,游戏体验仍然不佳。值得庆幸的是,这类人群是小众群体。提示: 并不是说智能手机的硬件能力肯定达不到60FPS以上,而是出于续航等方面的考量,大部分厂商都将智能手机等移动设备的最高FPS限制在60FPS。就笔者了解到的情况而言,目前没有一部智能手机的垂直同步设置高于60FPS。

其次,需要注意避免产生晕动症。我有过类似的经验,可以通过特定的场景画面在几秒钟内让所有人体验到晕动症的感觉。因此,在实际应用的开发中,下面的一些情况需要避免。● 无法预测的头部姿态跟踪。

我曾有过一次这样的体验:我刚刚连上了手机,准备体验支持游戏手柄的新版Alien Apartment应用。由于代码的逻辑错误,将场景中的Y轴和Z轴倒置了。仅仅30ms后,我就有了晕动症的感觉,真的很难受。● 画面迟滞或丢帧

偶尔丢掉几帧画面一般不会被用户注意到,但如果这种情况持续几秒后,情况就不容乐观了。● 参照物

大家都有这样的经历,在平稳行驶的火车上我们很难意识到火车的运动,这种情况在VR体验中更加突出。研究建议在VR场景中的摄像机前面绘制一个虚拟的鼻子可以帮助解决这个问题,我也认为这种策略的确能起到一定的作用。但我认为基本没有这个必要,重要的是要确保离用户较近物体的运动符合经典的物理学并选择恰当的参照物。● 用户交互界面

最后一点也很重要,要注意用户交互界面的设计。我的意思是,即使你的游戏在使用过程中并不需要设置菜单,但在游戏开始之前总会有一些选项需要供用户选择。而当这些选项呈现于触控屏幕上时,会迫使用户摘下VR设备进行选择。总是辗转于虚拟世界与现实世界一般会引起用户的反感。好消息是,最近发布的谷歌魔镜SDK提供了一个通过目光进行输入的模块用以解决此类问题(这个模块的发布晚于我的应用,因此我还没有进行测试)。

对于点击类游戏(如打蚊子、打地鼠)的操控而言,鼠标并不是最好的选择。而智能手机采用的屏幕触控的交互方式在此类游戏中表现更佳。但鼠标具有精准定位、点击、拉动与拖曳等能力,对于没有触控屏幕的情况而言,用于玩此类游戏也是一个不错的选择。现在我们面对的是类似的情况,对于虚拟现实和谷歌魔镜而言最佳的操控方式还没有出现。然而,基于头部运动的控制可以完成很多操作,如通过点头、注视、倾斜头部等进行游戏操控和菜单选择。

到这里为止,读者应该对虚拟现实技术有了大体的了解。下一章将通过介绍如何创建Alien Apartment虚拟现实应用带领读者真正进入VR的世界。第2章VR应用——Alien ApartmentAlien Apartment运行效果● 开发者迈克尔·沃西耶● 应用名称Alien Apartment● 下载地址https://play.google.com/store/apps/details?

id=com.software.mick.fargods.wip.demo● 开发工具Unity2.1 我为何会制作Alien Apartment

如果读者没有阅读前言以及出于其他需要,请先了解如下概要。● 从小我就知道VR很强大并且前景广阔。● 目前市场不大,内容碎片化较为严重,大的公司基本还没有参与

进来。● 尽管磁钮的设计很聪明,但很难通过它流畅地控制你在虚拟世界

中的化身去完成很多动作,无法做到沉浸式的体验。

初步使用过谷歌魔镜后,我很快就从最开始的觉得VR很有潜力变为对于技术不成熟的失望了。一段时间后,我再次进入应用商店,重新尝试我曾看好的应用。我发现了如下所列的现状:● 目前还没有一个应用程序可以做到不使用控制器就能真正使用。● 的确有一些非常有创意的应用出现。● 从应用商店的评论里可以看到,的确有些人喜欢使用游戏手柄进

行操控。

本章案例中的代码是使用C#开源工具Mono进行编辑的,但语言是相通的,只要会Java、C++等就足够了,因为本章内容并不会涉及C #特有的技术。2.2 构建自己世界的相关基础知识

现在打开Unity,我们来了解一下需要关注的内容。本章的目的是先来熟悉一下Unity,并使用Alien Apartment中的头部移动技术实现一个可以行走于其中的虚拟场景。最后一点也相当重要,尝试着去感受一下Alien Apartment身临其境般的现场感和代入感。

2.2.1 相关的设置

开始学习代码和案例之前,先来进行Unity的相关准备工作。我将会提供所有的基础步骤,并且为了便于突出重点,其间只会使用一些基本的操作与要素。

对初学者的提示: 可以通过鼠标右键单击Hierarchy面板在Unity中创建物体。当我使用术语transform时,指的是一个空的GameObject。开发者可以通过在Hierarchy面板中单击鼠标右键,然后选择Create Empty菜单项来创建空的GameObject。● 首先创建一个新的Unity项目。要注意的是:Unity场景中一般默

认包含摄像机和环境光,但本案例中摄像机是作为玩家的视野来

使用的,所以需要先删除场景中的主摄像机(Main Camera),

然后导入谷歌魔镜的开发包(从Unity菜单中依次选择

Assets>Import Package>Custom Package进行导入)。● 创建一个平面(plane),设置其位置(Position)为[0,0,0],缩放

值(Scale)为[100,1,100],然后在“Mesh Renderer”组件中将“Cast Shadows”选项设置为“Off”。(创建的Plane尺寸太大的

话,其投射阴影无用并且会影响性能,因此要关闭此选项。)● 创建一个空的transform,修改其名称为“player”。然后右键单

击其添加一个摄像机,命名为“Camera”,最后将“Camrea”

作为“player”的子对象。此摄像机将作为玩家的“眼睛”,为

玩家提供观察的视野。● 将“player”对象移动到近似人类的身高,如[0,2,0]。最后在运

行时的构建设置(Build Setting)中选择Android或iOS平台,然

后保存场景。

说明: 此时各位读者的屏幕可能看起来和图2-1中的界面有所不同,此截图中的窗口对应的是我的首选布局,读者也可以将首选布局设置成此截图中的组合。图2-1 笔者开发时的Unity界面

2.2.2 管理坐标轴

有时开发者可能希望混合使用头部运动和游戏手柄(或鼠标)来实现相关的控制。开始的时候,我认为在谷歌魔镜的 Demo 中实现这样的控制很简单。后来发现事情远远没有开始时想得那么简单,问题一遍一遍地重复,逐渐变得一团糟。对我而言,这是在有控制器支持的情况下发生的。在VR模式下,一些开发者想要使用游戏手柄来控制替身在虚拟环境下的左右旋转。我也曾经在将游戏手柄控制的坐标轴与头部运动控制的坐标轴混合时遇到了很大的困难。但是,大多数时候可以用一个简单的方法来解决这个问题。那就是在每一次输入的时候进行相应的虚拟变换,下面是具体的步骤。● 在场景中创建一个空的transform对象,并命名为Framework。接

着再创建另一个空的transform对象(命名为AxisManager)作为

其子对象。● 创建两个空的transform对象并分别命名为AlternagerAxis和

CardboardAxis,然后将这两个对象拖动到刚刚创建的

AxisManager下,作为AxisManager的子对象。● 创建一个C#脚本并命名为“AlternateAxisControl.cs”,然后将其

挂载到AlternateAxis对象上。● 双击打开脚本,稍后将介绍该脚本的编写。

图2-2中给出的是经过上述步骤后的Unity界面。图2-2 经过几个操作步骤后的Unity界面

接着给出的是MonoDevelop中的情况,如图2-3所示。

首先删除AlternateAxisControl.cs脚本中的Start()方法和Update()方法。这是因为在该脚本中实际并不需要使用这两个方法,出于性能考虑推荐删除它们。接着创建一个新的方法LateUpdate(),其在每次渲染摄像机视图(也就是屏幕上用户看到的画面)之前被调用(关于MonoBehaviour相关方法的细节将在后面的章节中给出),作用为管理运行时的输入(若在开发环境中运行则是鼠标的输入,若在Android中运行则是游戏手柄的输入)。该脚本的代码如下。图2-3 MonoDevelop中的情况1 using UnityEngine;2 public class AlternateAxisControl : MonoBehaviour {3 protected float y;4 void LateUpdate(){5 #if UNITY_EDITOR6 y=Input.GetAxis("Mouse X"); //若在开发环境中运行,则使用鼠标输入信息进行旋转7 #else8 y=Input.GetAxis("Horizontal"); //若不是在开发环境中运行,则使用游戏手柄进行旋转9 #endif10 transform.Rotate(0,y,0);11 //SimpleController.updatePlayer(); //现在先注释掉此行代码,将留在后面使用12 }13 }

单击Unity中的“运行”按钮,然后可以观察到AlternateAxis对象下transform对象中的y角度值会随着鼠标位置的变化而改变,接着再次单击“运行”按钮停止运行。

水平坐标轴的相关信息可以在Unity的Input中进行配置(Edit>Project Setting>Input),默认情况下为游戏手柄的坐标轴。

接着需要通过挂载的C#脚本来实现谷歌魔镜坐标轴的相关功能。首先创建一个新的C#脚本并将其挂载到CardboardAxis对象上,然后将脚本命名为“CardboardAxisControl.cs”。编写此脚本的代码之前,需要先创建一个代理类——APIProxy(在Unity中的asset目录下单击鼠标右键,然后选择Create>C# Script命令)。通过一个代理类来组织SDK相关API的调用可以帮助我们在未来更容易地集成新版本的谷歌魔镜SDK。代码如下。1 using UnityEngine;2 public class APIProxy{3 public static void CardbboardUpdateState() {

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载