# 第33讲 | 热点剖析(六):AR和人工智能在游戏领域有哪些应用? 在2014年左右,VR、AR、人工智能开始逐渐火热起来,我也曾在它最火的时候深入接触过这几项技术。 如果你不是在这个领域从业的话,除了VR之外,有很多名词你可能都没有听说过,那我们就先来看一下这些名词是什么意思。通过这几个名词,我们来看一下它们究竟是如何在游戏领域应用的。 ## VR是什么? **VR**本身是**Virual Reality**的缩写,意思就是**虚拟现实**。VR相对于AR、MR等技术来说,在技术上是最为简单的。简单地说,它只需要将3D画面做成可以通过3D眼镜呈现的内容即可,那么VR眼镜是怎么播放VR画面的呢? VR基于不同视觉场,在局部空间中营造出对不同画面的深度感知,在用户的大脑视觉系统中形成一个虚拟现实视场,而决定虚拟现实视场的主要因素是透镜,而非我们人眼的瞳孔。因此,为了得到更宽广的视场,制作者需要缩短用户眼球与透镜间的距离,或增加透镜的大小。 VR眼镜的结构一般都是透镜加上屏幕成像的方式,透镜放置在眼前2~3厘米的地方,屏幕距离透镜3~6厘米,成像在眼前25~50厘米左右。 除此之外,在VR中,两个眼睛的立体视觉起的作用很大。用户双眼看到的不同图像是分别产生的,显示在不同的镜面上。用户带上VR眼镜后,一只眼睛只能看到奇数帧图像,另一只眼睛只能看到偶数帧图像,奇、偶帧之间的不同,也就因为视差产生了立体感。 人的眼睛有两方面用途,一个是判断左右距离,一个是判断前后深度距离。VR眼镜相当于通过透镜,欺骗了你的眼睛,让你的眼睛认为自己是在真实的场景下工作,而有些人对于距离和景深比较敏感,就会有眩晕的副作用出现,毕竟是模拟真实的效果,而非完全真实的场景。 ## 如何区分AR和MR? 随着VR的兴起,AR也逐渐进入了人们的视野。**AR**(**Augmented Reality**)**就是增强现实**。简单地描述,所谓增强现实,就是利用摄像头或者头盔,将现实世界外部影像结合内部3D计算的影像,将内容混合。 比如我们走在一个空旷的屋子里面,忽然在AR视觉效果里面,出现一个怪兽,向你扑过来,你需要拿起手柄,将手柄变成武器,将怪兽杀死,这里面就涉及AR,**它将现实中不存在的东西模拟出来,变成增强了效果的现实场景。** 至于**MR**,它是**混合现实**(**Mixed Reality**)。混合现实的意义和AR非常相似,比如将现实混合在视觉效果中,这是两者都在做的事情。同时,AR和MR中比较重要的一个技术是定位技术。 基于2D定位的是AR最成熟的技术。2D定位是基于平面的识别和定位,比如利用手机App拍摄图书中的某个图片,然后虚拟物件就会出现在手机中的对应位置。这种App可以识别一幅图片或者图形,作为定位点,随后手机生成的虚拟物体会围绕这个点,融入到被拍摄的现实环境中。 3D环境的动态实时解析是当前AR在技术中最活跃的功能,这其中不得不说的就是SLAM定位。所谓SLAM就是“同时定位与映射”(Simultaneously Localization And Mapping)。 AR中的SLAM比其他别的领域中的难度大很多,因为移动端的硬件计算能力和资源比起其他硬件平台来说弱很多,所以难度比资源充足的硬件平台更大,所以有一些做法是利用网络交互,到主服务器去计算SLAM场景,但是网络交互又有实时性无法保证的问题。计算SLAM最好是本地计算,这样才能保证随时随地都能计算,而如果通过网络交互的话,你可能需要等好久才会拿到计算结果。 SLAM的问题可以这么理解:打开摄像头,你要知道“我(摄像头)在哪”。然后进行定位,定位完后需要对周围的环境进行映射和虚拟环境的构建。然后一边走,一边对周边环境进行虚拟模型的构建,确定本身在所建地图中的定位。所以AR SLAM需要在走的过程中,一方面把所见到的地方连起来成模型图,另一方面找到自己在地图上的定位, 这就是SLAM的原理。 AR和MR的原理大致一致,不一样的是,MR是在AR的基础上将3D物件更精确地展现出来。那究竟该怎么区分AR和MR呢?有一个方法就是,看虚拟物件是否会跟着真实场景一起动。如果是的话,就是MR;如果不是的话,就是AR。 所以,MR比AR更“先进”的地方就是,它看起来更像现实,所以是“混合现实”。当然MR还有更多事情可以做,比如它可以让你听到、感受到来自虚拟世界的感受,这是混合现实的另一层含义。 ## AR在游戏开发中的应用 说完了这些名词,我们来看一下实际使用AR技术制作的游戏吧。 AR最出名的就是前些年的《PokeMon》和LBS结合版本的AR游戏,这款游戏风靡一时,可以说是AR领域一次比较成功的尝试。它利用SLAM技术,结合相机拍摄的真实场景,让虚拟小宠物出现在真实场景下,然后进行App端的操作。 VR就不用说了,现在Steam上拥有大量的VR游戏,比如前阵子非常火爆的《Beat Saber》,就是一款非常成功的VR音乐游戏。还有《刀剑神域》也是成功的VR游戏。 但是所谓的VR游戏,用到的VR头戴式设备,用的其实还是“MR”设备。因为所谓的混合现实头戴设备,就是将手中的手柄,眼里看到的内容进行混合,比如手柄变成剑或者手枪,这就是混合现实的一部分,所以使用MR设备也无可厚非。 所以在视觉效果的增强下,目前VR在游戏中的使用范围是最广的,其次是AR和MR。 ## 人工智能在游戏开发中的应用 至于人工智能,那也是最近比较火爆的一个行业风口。但是从理论讲,我觉得人工智能、AR、VR并不会像HTML5技术、Flash技术等一样变成全面颠覆产业的技术,而是会成为各个行业的辅助。 人工智能涉及的领域很多,每一个分支进行细分,都是一个研究课题和研究方向,比如导航当中的语音识别、手机的人脸识别、专家系统、大数据分析、机器学习等等。在游戏领域,能使用到人工智能的地方,或者说最能体现人工智能的地方,就是游戏中的NPC。 **NPC是最简单,但也是最难做好的**。如果做得简单,你随便写几行脚本语言,就可以完成一段NPC,或者一整个城市NPC的编写。但是如果要写得好,利用简易的人工智能,就能将NPC做的很真实。 比如《老滚》中的NPC,你可以看到他走向某个地方去和某人说话,或者你跟踪他一段时间会发现他会和森林里某些野兽战斗。在脚本语言里面,就是大量的事件绑定机制来实现人工智能的功能,比如A事件和B事件组合出现就可以决定某些NPC的行为,比如你可以利用类似代码来作为NPC的行为准则。 ``` def foo(): if npc.action == eat and player.action == talk: npc.action = talk ``` 早几年,我曾经想做一款只有NPC,没有玩家的游戏。你可以观察它们的生活起居,也就是所谓的“上帝模式”。这样的游戏要求游戏中的NPC足够智能,以至于这里面的人工智能需要做一些最基础的判断,类似“自动”的“模拟人生”。然而当我开始编写逻辑代码的时候,就发现事情并非想象得那么简单。 我们先抛开人工智能本身不说。我们首先从NPC入手,从编程角度讲,每个NPC一定有一个统一的身体和大脑的类,就像“模拟人生”一样。我们先要塑造这个NPC的躯壳,有了躯壳,才能填写数据进去,比如他累了要睡觉,饿了要吃饭,渴了要喝水,到达一定阀值就要去做某件事情。 单从一个NPC入手的框架都很难实现,就算真的完成了一个NPC的人工智能的框架,一个游戏中有这么多NPC需要交互和计算,一台普通的个人电脑估计很难运算过来,所以从这点来讲,这个游戏的编写计划就已经很难实现。 我们最常见的就是还有地图生成、人物运动控制等。 我们可以通过学习算法进行地图的随机生成,比如哪些是河流,河流旁边一定有树木,河流旁边不可能有飞机场等等;另一个领域是利用神经网络实现人物运动控制,你如果有兴趣也可以去这个网站看。 [http://theorangeduck.com/page/phase-functioned-neural-networks-character-control](http://theorangeduck.com/page/phase-functioned-neural-networks-character-control) 除此之外,也可以用在一些2D讲故事类的游戏中,开放式结局的游戏中,有了人工智能,我们就可以把开放式解决做得更生动和有趣,每个人物的结局都可以是不同的,也没有任何死的套路可言,但是从某方面讲,这个要实现起来也有一定的难度。 ## 小结 今天我们讲了VR、AR的知识以及人工智能在游戏中的应用。 AR和VR是对于人们在现实世界的一种增强技术,将现实和虚拟结合起来,做出更多优秀和好玩的游戏,而人工智能则能让人们在游戏中的体验能更好,比如智能的NPC行为,漂亮的随机地图的生成等等,这些技术的应用能使我们的游戏体验能变得更加丰富。 给你留个小问题,任天堂出的3DS,是最早的一款裸眼3D设备,这种技术是怎么实现的呢? 欢迎留言说出你的看法。我在下一节的挑战中等你!