Unity AR/VR开发:实战高手训练营
上QQ阅读APP看书,第一时间看更新

1.5 虚拟现实应用开发的基本流程和注意事项

虚拟现实应用与传统的3D应用有着很大的不同,其中最主要的不同就是视觉呈现和交互方式。VR应用往往希望呈现一种身临其境的感觉,AR/MR应用则希望将虚拟和现实融为一体。无论是哪一类型的应用,其视觉呈现和交互方式相比传统的3D应用都有着显著的区别。

本节将简单介绍VR/AR应用开发的基本流程和注意事项。

1.5.1 基本流程

在学习VR/AR应用开发之前,我们先了解一下开发的基本流程,如图1-11所示。

000

图1-11 VR/AR应用开发的基本流程

(1)选择合适的设备和平台

在开发任何一款VR/AR应用之前,我们都需要根据产品的实际应用场景选择合适的设备和平台。

如果要开发电脑上的VR游戏,HTC VIVE和Oculus Rift是首选。

如果要开发支持PS4游戏主机的VR游戏,PSVR是目前唯一的选择。

如果要开发混合现实应用,Microsoft HoloLens是目前唯一的选择。

如果要开发AR应用,就需要用手机配合类似Vuforia、EasyAR、ARKit和ARCore的AR SDK进行开发,或是使用特定的AR眼镜设备配合相关的SDK进行开发。

随着时间的推移,市场中逐渐出现新的设备和平台,我们需要根据实际的需要进行选择。

(2)选择恰当的交互方式和第三方工具

对于VR/AR应用的开发而言,传统的键盘、鼠标和游戏手柄通常不是很好的交互选择。

主流的VR设备都自带对应的交互设备,比如Oculus Rift对应的交互设备是Oculus Touch,HTC VIVE对应的交互设备是VIVE Controller,PSVR对应的交互设备是PS Move。

有些情况下,VR设备自带的交互方式还不够自然,我们可能会选择第三方交互工具,比如Leap Motion、Intel Realsense、Project Tango等。

(3)选择合适的开发引擎

对于VR/AR应用开发来说,目前主流的开发引擎包括Unity和UE4。在之前的内容中我们曾经提出,如果是开发对画面真实感要求很高的3A级别游戏或是地产展示项目,可能UE4引擎更加适合。而对于常规的VR/AR应用,为了追求高开发效率、短开发周期、低成本或是对更多平台的支持,Unity往往是最佳的选择。

(4)选择合适的插件

Unity提供了丰富的第三方插件,我们需要根据项目需要选择合适的第三方插件和工具。

(5)选择合适的产品发布平台

与手机平台类似,为了向大众普及,业内提供了特定的发布平台和渠道。比如HTC VIVE推出了自己专属的VivePort,类似于苹果的App Store,提供截图展示、视频展示、购买、下载、评价等功能,可以让玩家和开发者进行无缝沟通和连接。

Oculus Rift也有自己专属的Oculus Store,其功能类似于VIVE Port。

Steam平台作为主流的游戏发布平台之一,也支持HTC VIVE和Oculus Rift游戏应用的上传和发布。

PSVR依托PSN平台,早已渗透到数千万的PS游戏主机用户中。

1.5.2 注意事项

在开发VR/AR应用时,一个共同的注意事项就是在设计产品时应充分考虑各种设备的特点。

在开发VR/AR应用时,开发者需要注意以下几点。

(1)注意UI分辨率和画质

目前,VR设备的分辨率普遍在4K水平以内,因此对任何在宽度或高度上要占据几个像素的物体,都会出现比较明显的像素化现象。一个简单的原则是尽量使用粗体字,并且尽量不要使用在VR场景中容易变得像素化的细纹。

(2)考虑使用剧情型的UI

在传统的非VR项目中,UI元素通常显示在界面的顶部,包括生命值、得分之类的信息。用户界面与游戏世界没有关联,但是对玩游戏的玩家有一定的影响。这就是所谓的“非剧情型UI”。但这种UI界面对VR基本不适用,因为我们的眼睛无法聚焦在如此近的物体上,因此在VR项目中,我们需要更多考虑使用剧情型的UI。具体的形式可能是墙上的闹钟、电视、计算机屏幕、移动手机,或是未来枪械的全息展示。

(3)考虑UI元素的放置位置

将UI元素放在哪个位置也需要认真考虑,太靠近用户会导致眼部疲劳,离得太远会感觉聚焦在地平线上(这种情况可能发生在室外环境)。此外,我们还需要对UI元素的比例进行适当调整,具体要根据产品的实际需求来确定。

我们最好把UI元素放在一个舒适的可读距离,并进行相应的缩放。

很多开发者想要把UI元素关联到摄像机。当玩家移动的时候,UI元素会保持在一个固定的位置。这样做对小的UI元素可能会比较合适,不过对于比较大的UI元素,就好比把一张报纸放到你的脸上,很容易让用户感到不舒服,甚至是眩晕。

(4)提醒用户关注某个特定的方向

虽然VR可以让用户360°探索,但是有时候我们需要提醒用户关注某个特定的方向。在某些场景中,我们可以考虑使用箭头来引起用户的注意。这些箭头会根据用户的朝向淡入或淡出。

此外,我们也可以使用3D环绕音效来实现类似的效果。

(5)考虑舒适度

对于VR应用,最可怕的问题莫过于恶心眩晕,也就是所谓的“晕VR”。这个问题产生的根源是,在现实世界中玩家的身体可能处于静止状态,但是他们的视角却在虚拟环境中移动。

一个基本的原则是避免移动摄像机,除非需要使用它来复制玩家的运动,否则就会导致所谓的前庭觉问题发生。如果我们在游戏中需要玩家运动,需保证向玩家提供一个静态的参考物,比如飞船的驾驶座舱、汽车的内部座椅等。

对于较大距离的运动,我们可以考虑使用Teleport(传送)的方式。

总之,当用户在虚拟环境中运动的时候,不要破坏身体各个感官的平衡。

(6)使用淡入/淡出和闪烁渐变实现运动效果

在虚拟环境中实现运动的一个常用方法是使用淡入/淡出或闪烁渐变,比如快速淡出到黑色;将摄像机移动到期望的位置,然后再淡入。除此之外,我们还可以考虑更复杂的方法,也就是使用闪烁渐变。

(7)对项目进行持续优化

对于VR应用来说,如果想要让用户获得好的体验,特别是免除恶心眩晕的困扰,优化是必不可少的。对VR应用的优化应该在项目启动的前期就开始,而且应该贯穿始终。此外,在目标设备上进行实际测试也是非常有必要的。

相比非VR项目来说,VR项目的性能消耗是很高的。其主要原因是所有的画面都必须为每只眼睛单独渲染一次。我们在开发VR应用的过程中需要时刻想到这些问题,如果能在开发之前就想到这些问题,那么后期会节省大量的时间。

对于移动式VR来说,优化工作就显得尤为重要,这不仅仅是因为要运行VR应用,还因为移动设备的运算性能和散热性能相比电脑来说差距较大。

考虑到实现目标帧速的重要性,我们需要在所有可能涉及帧速的地方优化项目代码。关于优化代码,读者可以参考Unity官方提供的指南。