关于游戏寻径设计的思路解构分析

寻径方法的现状

当前所有电子游戏AI模块都是使用数年前的模型制作而成的。相对于当今电子游戏其他软件的飞速发展来说,这其中有些模块已经算是历史悠久了。

例如,我甚至没有找到任何详细说明人们何时开始首次执行Navigation Mesh(或Navmesh),我只能说这一模式至少从2004年时就开始使用了。它与Bavigation Grid这一使用最普 遍实际上也是最先进的方法一样含有为电子游戏制作路径的图表。

尽管如此,Waypoint Natigation仍然、运用于大量简单的游戏,甚至年代比Navmesh还要久远。如果我们比较AI模块与图像模块(这里是指渲染游戏的图像模型)的进步,就会发 现当人们首次使用路径点导航时,图像已处于CGA技术的水平。这些年来图像模块方面的进步甚为惊人。

你可能会说计算机图像的进步很大程度上得益于硬件的进化。但这里仍然存在一个问题:在过去10年中,如果我们不提OCC模型(与智能代理相关的心理方法)以及其他基于代理的 方法,实际上仍然未被电子游戏所用,我们也无从见识到可以称这真正新颖或者强大、可共享的进步。

原因?大部分是因为,尽管认知科学兴起,对于内行人而言,关于人工智能话题的方法在过去数十年几乎从未发生变化。未来电子游戏的寻径方法将是什么模样?它有没有可能是 在我们过去数十年的模型上制作模块?

我个人认为,未来电子游戏将与当代电子游戏截然不同。对于开发者来说,这里的问题并不在于这些游戏将呈现什么面貌,而是如何建设AI来支持新功能。我有一个关于“智能” 话题的不同方法。我这一方法始于人类并非从天降落的物种,完全不同于大自然其他物种这个意识开始。这促使我去了解进化心理学,我相似它有助于AI开发首个真正的虚拟人类 。

AI in Blood Bowl(from bloodbowlgame)

AI in Blood Bowl(from bloodbowlgame)

问题:什么是智能?

对电子游戏来说,什么是智能?智能不过是一个用于提升人类管理世界的能力的工具。它是地球自然选择的一个最强大的工具,但仍然只是同象牙,或者我们与其他灵长动物共享的对生拇指一样的工具。进化心理学将称为进化适应。这方面有许多研究和发现,神经科学和心理学领域已经指出情感会影响人类(动物)智能,如果没有它单纯的逻辑就是无用之物。

这种对于智能的思考极大改变了你在电子游戏,以及任何其他人类或动作模拟物中所发现问题的解决方法。例如,我对于寻径问题的解决方法就是考虑人类(动物)拥有自己的记 忆地图这个现实。但这种记忆的结果通常不会与实际的地图对应起来。

即便是创建图表的导航方法也是截然不同的。在我看来,这应该考虑到我们如何向一个实体目标前进。这个方法带有相对于当前所采用方法的数个新功能和表现性能提升。

首个话题——-创新游戏导航

请先想想《I am alive》、《Spiderman》、《古墓丽影》、《波斯王子》、《刺客信条》或其他需要玩家角色攀爬、跳跃以及做出其他不寻常动作的游戏。在这类题材几乎所有的 游戏中,都有一些由NPC所做的不自然行为。最明显的一个证据就是当NPC想抓住/杀死玩家时,“决定”不攀爬追随玩家。他们只想让玩家完成攀爬动作以便攻击他,或者在攀爬过程中从可行走的区域将其击毙。

这并不是一个符合逻辑和生物学行为,因为除非所有NPC都像了解自己的鞋子一样了解周围的建筑,他们不能确定玩家能够从自己手上逃脱。为了重制一个正确的人类行为,NPC应 该使用类似钳子的策略:有些NPC追随攀爬的小偷/敌人/玩家,而有些NPC则试图跑去阻断玩家的出路。但要如何实现这种操作呢,如果寻径导航系统无法将墙体视为“可用区域呢?电子游戏程序员很少赋予NPC攀爬和追随爬行的玩家这种能力。这是因为要实现这一操作,他们必须定制寻径模块,令其更复杂,而这一模块通常不可用于其他只需要玩家行走 和奔跑的电子游戏。

我所谓的“生物寻径”(BPF)这个新方法可以从根本上解决这个问题。游戏中只能在两个微场景相接的地方含有焦点(自然生成)。即使前进的路发生变化(因为它是一堵墙或者 其他“可攀爬”的表面时)也要有一个焦点。每个来自某个节点的线段都有相应权重(与一个A*方法对话),而这个权重可以根据每个“NPC类型”穿越这条路(游戏邦注:例如通 过攀爬、游泳、行走等)的能力来计算。这个解决方法包含一个更普遍的NPC管理方式,它要求对NPC进行“物种”分类。

好消息在于,使用这一方法,你可以为每种NPC选择不同的最佳路径,而每个NPC又能够根据自己的能力在平面上行动。相对于当前方法,它使用的节点数量较少,这就在路径设计 上有了更大的进步。除非游戏使用大量不同类型的NPC(我还没有见过这种游戏),否则其线下的路径设计所需投入时间应该不会超过当前的方法,但会给予我们更多功能和更广泛的解决方案。

没错,这远比一个纯粹的路径那般系统更复杂。尽管如此,现在的电子游戏已经远比《太空入侵者》或《吃豆人》更先进了,我们可以确定地说所有RPG、MMORPG、射击和战略题材 的主流游戏本身就非常复杂了,所以也应该毫不犹豫地为NPC采用新功能。

节省运行时间

在过去数年中,越来越多电子游戏包括大型关卡。很显然关卡越大,就越难以保持NPC计算其到达目标的可接受表现,以并且NPC数量也更多了。

我知道有些电子游戏开发者已经意识到这个问题是开发过程中最消耗时间的环节之一。实际上,我们对于涉及人类模拟的问题的思考还是太逻辑性了。如果我们用人类来取代NPC, 会从人类角度去想寻径问题,从心理学角度来考虑。

当人类尝试思考一个更大的区域,以及如何到达目标地时,他通常会在脑中形成一些最重要的图像,场景的部分环节(例如城市的模块),然后将每个区域想象成一个黑匣子。这 种方法甚至对我们的寻径问题来说都很有帮助,因为它可避免计算最大程度的细节。Lynch已经在1960年做过关于更好地分析路径问题的人类心理研究。

有些游戏已经使用了二维寻径方法。事实上,作为直接源于人类行为心理研究的工具之一,它适用于整个生物寻径方法。

这个方法允许你仅执行自己所需的计算,并以此来节省时间。实际上,你确定NPC会穿过所有路径呢?NPC在半路上被杀死,或者说找到一个新路径,做出一些不寻常之举的机率有 多大?在这些情况下,大型关卡中的整体路径计算都是无效的。应该广泛使用将大型计算分解成数个更小的由NPC执行的计算,因为它是有利于强化表现性能的好方法。这可以让 NPC更具“人性化”而无需执行大量的整体运行表现。

BPF使用了寻径的两个层面:District和Zone寻径方法。前者是我在之前章节解释过的内容,后者就用于解决在更短的路径穿行,以便到达更近的目标,或者通过由District寻径方 法所发现的“正确”(未必是最佳!)大路径退出区域。

即便在这个层面上,这个方法也与寻常方法截然不同。它尽量最小化人们需要考虑的微路径数量。人类实际上会通过查看目标(或者它的方向),并检查最近的首个焦点上的路径 来决定要使用哪条路径,以便向较近的目标前进。

创造图表

NavGrid或者NavMesh模型已经够用和够好了,在某些情况下无需任何定制选项。如果你想一次创造一款电子游戏,即那种与他人相似的电子游戏,那么它们就很适合你。如果你的 游戏中没有多少NPC,你也不介意他们有时候(或者经常)做出一些人们在行走时根本不会出现的奇怪举动,那么你就没有必要寻找更好的解决方案了。

但是,未来的电子游戏不会使用含有不具有人类行为的NPC。更新的模型应该提供无需定制的新功能,从而实现更好的表现效果。

当前的Navgrid和Navmesh模型具有优势,但劣势则更明显。这两者在某些情况下的离线计算时间都过长了。如果你的游戏中含有多名一起活动的NPC那就不可以使用这两种模型了。

除此之外,针对更宏大并且需要建设高度的3D关卡,我也不建议使用Navgrid。在这种情况下使用Navgrid会增加关联性,导致路径计算更为复杂,从而产生明显的运行问题。

现实中的路径点:焦点

现实中的路径点是否存在相似之物呢?要知道路径点,或者任何形成导航地图的多边形都是NPC在关卡内移动的必需要素。也许你从来没有想过人类和动物在现实中移动都有相似的 参照。真正的人类,会根据自己的需求在一条路上采用数量有点的“战略性”位置。

请注意真正的路径。例如,一栋建筑内的路径。你知道没有任何人能够真达自己的目标,除非他身处一个户外区域。他需要更改方向。你是否认为我们能够找到重制真正的人类必 须更改方向的位置这一规则呢?

其目标仅考虑人类通常需要更改方向的关键点。这些点可能与走廊相近,介于两个相邻柱子之间,或者靠近一个门柱。

微场景

如果你看一眼某个场景,尤其是人造的场景,你就会看到走廊窄于该场景相邻环节(见图1)。两个墙体形成一个走廊从而创造了一个微场景,门柱是一个狭小的微场景,靠近另一 个柱子或墙体的柱子也形成了一个微场景。

我们有不同的Mental Map创造方法来区分微场景。其中一个更简单(也更快)的方法可能就是场景中确定的一系列关键点所产生的线段。第一件事就是检查相关点是否处于一个对 象内部 。此时只需要考虑位于外部的相关点。

这里每X个衡量单位都会有一个点。这里的X是与NPC类型范围相兼容的值。我将这一方法称为Radar Node Generation,因为它模拟移动雷达创建其环境表现的方式。

这个解决方案会模拟我们首次踏上一条新路径,记录位置等一系列行为。在现实中,我们的大脑并不会记录下我们所经过的所有位置。另一方面,我所提议方法还会模拟我们大脑 计算混乱局面之间的空间这种原始行为(拥有眼睛的所有动物也有这个特点)。

该算法会从每个点发射两条线段:一条在左,一条在右,这两者都指向最远的点。这个方法的执行方式多种多样。例如图2。我们之后就可以查看其中是否存在与更近对象,或者该 系列追随点的碰撞。如果之前一个点没有在右侧找到更接的对象,并且找到了当前的一个点,我们就会清楚有个对象更接近这个点。

我们应该能够长度、宽度和高度上制作这个行为。但尽管如此,它还是要取决于关卡复杂度以及开发者。

图1(from gamedev.net)

图1(from gamedev.net)

焦点

什么是焦点?这种点是人类需要改变方向的战略位置。实际上,这个点是人类改变方向的最后一个有用的位置。人类事实上会很自然地更改方向,它始于焦点之前。

焦点对于人类来说有另一个重要性。因为我们的大脑不能像视频一样持续记录一条路径,它只能记录一些重要的地点。Kevin Lynch曾在其著作中提到心理地图(对于某城市的心理 地图)的研究:“我们对于一座城市的认知通常不是持续性的,而是局部性,分裂式的,会混杂其他考虑因素。几乎会运用到每种感官,而该图像却是与所有感官相反的。”

他在对于城市心理表征的研究中提到,心理地图应该包含以下类型的数据:

*路径:街道,人行道,轨道以及其他人们会行走的通道。

*边缘,例如墙体、建筑和海岸线等边界物。

*地区,由一些标志或特点所区分出的较大城市部分。

*节点、焦点和交叉点。

*地标,可以作为外部参照点的可辨识性物体。

一个极为可靠的模拟物应该考虑到Lynch所提到的所有数据。当然,这样就会创造出无法在任何游戏中执行的庞大算法。一个好方法就是针对模拟人类和动物采用最重要的标识。

我们应该将焦点布置在微场景中的哪个地方?我们应该将其布置于微场景的每个入口。这些位置是一条真正路径的节点,也将成为我们心理地图的节点。每个微场景必须拥有一两 个入口。准确的位置应该是介于创造了微场景的物体之间的中心点。

我们有不同焦点定义的关卡。例如,像图1左半部分,就仅针对每个内部物体的单个维度定义焦点。或者像图1右半部分那样,同时针对宽度和长度定义焦点。而开发了高度的关卡 还需要通过查看高度来找到焦点。

前提

根据我在执行BPF方面的一点经验,这里必须定在一些前提条件,即你要很好地执行这个模型所需用到的规则。鉴于文章篇幅所限,我无法在些描述我所搜集到的所有前提条件。以 下仅简述我认为比较重要的前提条件:

1.入口

我们在每个微场景中可以有1至2个入口。

2.可视性

微场景的焦点在其局限或者内部中形成并且可以彼此相见。例如,由两个大物体组成的走廊,置至一个更广阔场地的中间,从而创造了两个焦点,每个都位于走廊起点或终点。而 在微场景焦点无法彼此相见的地方,我们应该添加一个或更多新焦点。这样每个焦点至少都可以看到另一个焦点。

3.两者合一

如果微场景很小,涉及一个中间NPC(例如介于两根柱子之间)的垂直或纵向维度,而不是创造两个焦点时,算法就只会创造一个焦点。最终两个被删除的焦点中间区域就会产生一 个焦点。例如,看看图1中的两个门柱,你就可以看到这种前提的结果。

4.静态物体的半径距离

要考虑关卡中静态物体和表面局限性之间由用户定义的半径距离。这有助于避免产生与静态物体碰撞的焦点之间产生的线段。

5.追随最后一个可视的焦点

焦点只是人类和动物在路径上需要更改方向时所考虑区域的一部分。但是,在路径上行进的过程中,BPF不会让代理走向路径上的下一个焦点,而是其所能“看到”的“最后一个焦 点”。这是一个进一步提升代理可信度的创新,也是真正的人类替换成代理时所出现的行为。

看看上图。位于建筑左部的绿色圆圈就是NPC出现的位置,而橙色圆圈则是它的目标。更粗的绿线是NPC所会使用的路径,而较细的紫色线段则是被选择的路径。紫色线段标识着可行的变化,只有能够跳跃的NPC能够看到它们。

正如你所见,NPC会考虑的第二个焦点并非所选择路径上的第二个,而是第三个焦点。NPC会使用的第三个焦点则是其所选择路径上的第五个。这是因为之前所提到的规则。在这个规则中,运行时间会要求NPC不可因为跟随所选择路径上的焦点而浪费时间。NPC会使用所选择路径,而NPC在当前焦点只能看到“最远但仍具可视性”的焦点。

这个例子的结果就在于,NPC将使用的焦点只会有两个而不是五个,这就是心理地图所能提供的焦点。这类解决方案不只是创造更少的路径节点,甚至还会提升人类行为模拟度。

想象一下在身处于NPC相同的情境中真正人类的行为。抛弃所有的路径和节点,想象他在这种情况下是何表现。如果他决定跟随我们的NPC会用到的路径,他当然就会直走,直到碰到建筑中的障碍为止。之后他会开始转向并再次直走,直到建筑又出现障碍,或者到达他的目标为止。

创新游戏的寻径模式应该是怎样的?

回到关于这个话题的普遍讨论,我们可以说创新游戏在不久的将来将拥有更多功能和更好的性能。此外,我们还应该在无需向(并不提供这些功能的)AI模型叠加过多复杂性的前 提下实现这些表现性能。

详细来说,创新型的寻径模型应该提供:

*更快速的单个图表离线计算*;

*赋予NPC使用多类路径的能力,例如允许NPC在路径上行走和奔跑,甚至是跳跃、攀爬、游泳等;

*根据每种NPC种类的生理特征,赋予不同NPC选择不同路径的能力;

*更快速的“可信最佳路径”运行时间计算”**;

*在不添加复杂性的前提下解决路径上的动态物体问题;

*找到同种NPC的多个目标(例如,掩体和笨重的物体)***;

*当墙体和大型物体更改其位置时动态调整图表;

*总是考虑到每个NPC的心理地图可能与实际地图并不相同****。

(*)相对于运行时间计算来说,这并非一个强制要求。

(**) 正如心理学所示,我们无法:1)像手上拿着地图那样清楚地记住地图,尤其是在该区域已有一段时间并不“呈现”在NPC面前的时候;2)要避免那种情绪以及快速作出混乱推 理的需求,之后确定的路径通常不会是逻辑所提议的选择。

(***) 我想“明智”的游戏会采用自然的NPC人类,以便更好的使用下一代寻径解决方案和创新型决策制定系统的新功能。

(****) 心理学显示人类还可能忘记部分已经用过的路径,或者忘记焦点的准确序列。

可信的路径选择

区域最佳路径选择

BPF与典型的“仅靠逻辑”式的方式截然不同,它不使用当前用于寻找更短路径的算法时会更管用。这里就没有必要追究细节方面的问题了。但是也有一些因素可以让过滤器在无需 借助其他算法的情况下选择单个路径。例如,情感权重,心理地图错误,NPC种类的特点,或者关卡的数量,通常有助于挑选出唯一的理想路径。

例如,一个广阔的关卡可能使用10个区域。通常情况下,每个区域都有4个其他与之相连接的区域(除非关卡还要开发高度)。除非该关卡是一系列区域,或者关卡极其庞大,否则一般目标与NPC之间的距离不会超过2个区域。通常情况下,我们没有必要采用任何关于区域关卡的最佳路径算法。

这里有一个可重制人类行为,用于限制路径数量的简单而有效的解决方案。其目标是避开所有首个区域距离NPC及其目标之间的直线过远的路径(假设NPC知道地图)。之后你还要移除至少包括一个用于“避免”NPC类型的区域的路径。

例如,在以下情况中,决策制定系统或者在设计过程中的开发者应该将该区域标注为“避开”类型:

*如果该区域充斥大量可能杀死NPV的危险怪物。

*如果该区域充满不可行,或者不适用于该NPC类型的微场景。

*如果该路径包括更黑暗的区域,以及NPC的个人特点将其视为没有胆量进入的区域。

另一个过滤器就是每个路径的“长度感”。这个过滤器应该难以执行,但却真的很管用。它是我们大脑中最常用的过滤器之一。人类和最高智能的动物会考虑一条路径的长度感。 生物体的长度感是由多个因素决定的。其中之一就是过去的旅程所发生的情绪(那种感觉越好,其想象的长度就越短)。

另一个就是路径多为直线或曲折的这一现实。如果你想使用这个符合某些心理研究的过滤器,你甚至可以为任何焦点创造一两个标注。你还可以创造其他过滤器,但我它是相对于 路径类型来说最重要的一者。这个标注的职责就是存储始于该焦点的微场景的类型。

从本文的图片中可以看到,一个焦点可能仅靠近一个微场景(图1),或者介于两个微场景中间(图4)。未被选中的标注意味着该迷你场景是直线的,而有被选中的标注则意味着 它是曲折的。该路径上被选中的标注数量越多,NPC使用该路径的可能性就越小。

图4(from gamedev.net)

图4(from gamedev.net)

(图4:焦点及其两个标注指示两个相邻微场景的类型)

更进一步的过滤器就是NPC对于这些区域的认知。这是另一个精心设计的人类模拟方法所要考虑的重要功能。BPF可以随机创造区域地图的情况,制作每个NPC或物种。如果是长寿的 NPC,你就应该记录每个NPC所行走过的地点。

通常情况下会产生1至2条路径,最多只有3条。如果有多条路径时应该使用哪个路径呢?最应该选择的是包含NPC走向目标时穿过最多次区域的路径。但这个解决方案会被每条路径 所包括的区域数量所抵消。

过滤器应考虑以下方面:

*只能选择首个区域离NPC及其目标之间的直线不会过远的区域路径。

*只能选择不含“避开”区域的路径。

*考虑路径的长度感。

*只能选择含有已知区域的路径。

如果这一筛选结果产生了一条以上的区域路径:

*那就选择拥有区域数量较少/或者NPC及其目标之间的直线被穿行过更多次的区域的路径。

内部可信的路径选择

在确定要跟随哪条区域路径后,NPC就得开始解决在当前区域内部的寻径问题。之后,在进入下一个区域时,再重复一遍这种做法。将关卡划分为多个区域(方块)通常会产生多个 可行(或者更管用)的表面连接两个区域的情况。这意味着NPC在特定区域路径上进入下一个区域可能有多个解决方法。

将路径划分为两个关卡可以加快可信路径选择的运行时间,并迫使你将寻径划分为多个步骤。尽管如此,要正确使用这一方法,你还是需要应对一些新问题。

如果两个区域之间有走廊,那就有两个关于路径设计时间阐述方面的问题:“死亡路径”以及区域走廊的连接性。事实上,如果某个连接了两个相邻区域的可行路径深入了无法穿 过下一站的区域,那么NPC之前就该知道这个问题了。

为了修复这个问题,我们在设计时间应该为每个区域选择从一个相邻区域进入另一个区域的路径。这可能会是一项很耗时间的计算,尤其是相邻区域之间的走廊数量极多的时候。 此时可以人为更改区域,以免两个区域之间存在太多联系。

无论如何,其算法应该遵从以下原则:

A-选择区域

A1-选择某一边至少有一个通向相邻区域的区域。

A11-针对每个走廊检查它是否存在可通向另一个相邻区域的路径。如果有,将该走廊标注为可同另一区域兼容的走廊。

这里没有必要计算每条路径的长度了。

BPF的运行时间环节将使用与通向下个区域相关的可行走廊的数据,以便检查该选择哪条走廊走向下个区域。

如果这里存在1条以上通下向个区域的走廊,就要由NPC来决定要走哪条路。你可以使用区域关卡寻径所采用的同种过滤器来选择。我建议考虑长度感以及相对于走向目标的直线走 廊距离来选择。

要开始内部路径运行时间选择,你必须知道内部路径以及通向下个区域的走廊的早期环节。前者是NPC进入区域的所在地,或者NPC所在位置。当你两者兼具时,你应该选择该路径 走向下条路径寻找目标。即使如此,你也要使用之前所提到的过滤器。但你可以决定要使用哪一种还是全部使用。

注意,如果你的项目是策略型战争游戏那就不可以用这种NPC思维方式。策略型战争游戏是每个NPC已经清楚路径的少数游戏类型。在这种情况下,比较好的解决方法仍然是仅靠逻 辑的方法。你应该添加的唯一过滤器就是目前NPC的情感觉醒水平(游戏邦注:相当于音乐的音量)。但这并非直接由PF系统所管理的问题。

尽管如此,你还是很容易注意到生物寻径方法远比目前使用的寻径方法速度更快。我之所以如此确定是因为BPF的执行方式更轻便。

总结

生物寻径方法是一种不但对人类、僵尸、怪物和外星模拟物,甚至是智能动物都很有创新性的解决方法。

尽管如此,我们还是不可低估寻径问题之下的情感因素。即使是决策的能力,也不是一种仅靠逻辑就可制定的功能。Plutchik称情感是一切有机体在追求个体生存时所需要的基本 适应性。他认为6亿年前的寒武纪中发生的自然选择很大程度上与情感有关。这8种适应性是结合、拒绝、毁灭、保护、繁殖、机体重组、定向和探索。

这意味着,多种动物都具有心理导航的最重要过滤器。

所以,人类解决寻径问题的方式与动物有何不同?其区别相当之小,主要与逻辑的使用相关。这也并不完全正确。但其中深刻原因我无法在此详述,也难以用代码重现。

多数动物无法通过训练更好地驾驭自己的情感,也无法考虑1个以上的过滤器选择。如果你想区分人与动物在寻径选择方面的行为(或者不同智能的动物行为),只要使用针对最简 单动物的一个过滤器即可。之后,当你遇到人类(或者更高智能动物)时再运用其他过滤器。

你应该时时使用的唯一过滤器就是关于首个焦点指向目标方向的路径选择。

关于本文最后一个考虑就是:两个(或多个)层次的寻径方法要求你采用允许NPC具有更多目标层次的决策制定系统。这是你选择BPF时需要牢记在心的另一个重要问题。

避开动态物体

今天,有些游戏开发者发现某物体与NPC当前路径相关叉时,就会迫使自己的AI执行方法重新计算最佳路径。所幸并非所有开发者都会采用这一做法。这一操作行为的结果,从NPC 的可信度和表现性能来看,无疑是消极的。

寻径过程中的动态物体是一个陌生的问题,但在我看来根本就不是个问题。我们应该首先将这个问题划分成两种情况:

1.一个物体正向NPC当前路径移动。

2.一个物体在移动并且被置于NPC的当前路径。

应该采用不同方法对应这两种情况。事实上,如果某物体是移动的,我们就得担心NPC与该物体发生碰撞的可能性。尽管一个可能发生的碰撞永远不能导致我们更改路径,除非同个 地点有大量移动物体。如果这种情况发生了,你应该检查自己的游戏和模拟设置。事实上,如果某个地点含有大量移动物体,就应该在图表上标出它拥有更高的权重。

当某物体(或者另一NPC)向NPC目前正在使用的路径移动时,唯一的解决方法就是避开它。但这不可改变已经决定好的路径设置。而针对某物体正在移动过程中被置于NPC当前路径这种情况下,除非该物体大到足够阻挡整个走廊,否则你就要用物体躲避算法来解决问题了。

BPF的合理物体躲避算法应该是怎样的?这里没有什么可考虑的参考或者防范措施。你只能在避开物体时使用该算法。当NPC避开物体时,该算法就必须中止了。之后寻径系统将会 再次激活,该NPC会继续走向其下个焦点。

如果物体过于宽大挡住了去路,无法掉头了又该如何?我们是否需要另寻出路?我完全赞同避开这个解决方法。人类在遇到真正的问题时,并不会受逻辑所主宰。尽管这很难理解 ,但还是得承认情绪会操纵我们的行动。只有筛除了带有情绪的事件后,我们才可能思考和使用逻辑。

如果是人类,开始走上一条路径时,如果发现有问题就会试着想象(而非计算)这里还存在一条有助于扭转局面的分支路线,以便自己继续走完同条路径。在人类走完这条路的时 间有限的情况下,考虑改变路径实现在太复杂了。只有发生危险才能改变这个方法,但它却与寻径系统没有直接关系。

所以,即便是在最糟糕的情况下,也没有必要开始从当前位置到目标的寻径计算。合理的人类模拟的正确解决方法是找到从当前位置到超越该物体的首个焦点的“最简单”次级路 径,或者使用避开物体算法。

在人类的寻径问题解决方法中永远不存在计算,只有估算。估算会考虑到转折次数和焦点数量:在我们看来路径上不存在(像视频一样)的持续记录,只会有关于焦点的一些片断 。因此,如果人类看到一张地图,他会更好地估计每条路径的长度。

任何焦点都会接近于一个微场景。这对我们有帮助,因为它让我们知道一个物体不可能占据一个以上的微场景(除非是一个巨大的物体)!

平顺移动

尤其是在复杂或开阔路径中,我认为网格和网眼导航并不会因为地图上的节点数而给予NPC足够的可信度。一条路径上实际上有4个数量等级的节点:

1.节点太少,或者置于无意义的位置上:NPC不可能像人类一样行走,因此它会产生不可预测的结果。

2.“焦点”上布置少量节点:NPC会像人类一样作出反应(目前仅有生物寻径法能够做到)。

3.许多节点:NPC行业与人类大相庭径。没有良好的(有时候浪费时间)平顺算法,NPC会产生类似于醉汉的行为(当前的导航解决方案就可能出现这种问题)。

4.太多节点(数十倍乃至数百倍于焦点数量):NPC行为会同人类有所相似。但离线和运行时间计算非常棘手(NavGrid方法会产生这个问题)。

请看以下例子。

图1(from gamedev.net)

图5(from gamedev.net)

你可以由此看到由Navigation Grid做成的凸面多边形数量,下图则是由Mental Navigation所做的相同地图,Navigation使用了BPF方法。你可以看到Navigation Map所能创造的节 点数量和相对线段比当前导航方法所能创造的更多。

图6(from gamedev.net)

图6(from gamedev.net)

当前导航方法的另一个问题在于它们几乎任何线段都要使用到平顺算法。对于可以开发高数量节点的方法,这只会恶化其表现效果。

Mental Navigation焦点之间的任何走廊也需要平顺算法。尽管如此,相比当前寻径方法的整体执行时间而言,它的成本已经最小化了,因为其焦点数量较少。

这里有必要再次提起BPF的另一个前提条件:如果非相邻微场景的两个节点之间存在一个静态物体或深谷,NPC将会使用躲避物体算法在这些焦点之间移动。

这个规则甚至可以被另一个方法所取代,即移动一个甚至两个焦点的方法而不是使用避开物体算法来克服这个问题。

心理地图

心理地图是一个考虑到人类(和动物)如何在大脑中建立导航地图的方法。在之前的文章中我已经提到了这个模块最重要的部分。尽管如此,我们还是要重申一下你在执行BPF之前应该考虑的一些因素。

正如我一再强调,人类智能并不只有逻辑。决定智能的因素还包含其他比逻辑更重要的因素。正如一些生物和神经学发现的证据所示,智能并非人类的专利。

所有的灵长目动物都有高智能。例如黑猩猩可能会使用250个文字的语言。而海豚和狗等其他动物则有中度智能。但在所有这些物种之中,它们的智能基础几乎都是相同的。但人类开发出了大量动物无法拥有的“心理适应性”。

我想说的是逻辑仅是生物智能的尖端,但它并非一种独特的元素。情感和其他数种因素是智能的最基本构成元素,如果没有这些因素我们无法理解周围的世界。

这种推理的结果是什么?两个事实:A)人类的某种或多种情绪过高或过低时,就会产生非逻辑的行为;B)动物在寻径方法上,当遇到路径选择或避开一个物体时几乎也会采用相同的做法。

目前我们还没有能够代表整个世界智能的完整模型。我是指在整个智能世界中,包括情绪、心情、感情、信仰和个性特征,更别提年龄差异、社会规则和激素的模型。这不难推测 出,BPF的执行目前还难以发挥其最佳功效。

总结

那么,我们已经能够处理寻径过程中的情绪问题,以便更好地模拟人类行为?也许还没有那么快,但已经有一些人正尝试创建可靠的AI模型。我认为推出一个以更高可信度模拟人 类和动物行为的解决方案不久就会来临。

不论如何,你甚至可以创建一个并不用到情绪的BPF执行方法。

关于生物寻径的话题目前仍局限于研究领域,虽然你已经从这些文章发现了一些成功执行的基础。我希望能够推出一个关于BPF的开源项目,加快这种新方法的研发速度。

(本文由游戏邦编译 )