<audio id="audio" title="第33讲 | 热点剖析（六）：AR和人工智能在游戏领域有哪些应用？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/37/e8/37742211093aeac9a0536259b958d1e8.mp3"></audio>

在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设备，这种技术是怎么实现的呢？

欢迎留言说出你的看法。我在下一节的挑战中等你！
