<@乌龟:>[翻译]开放街道下的竞速类游戏人工智能(5,终结)

 

使用完全物理模拟交通工具

      完全物理模拟的对象,VehiclePhysics,是一个为了在城市中导航的基类.城市中不同的实体(Entity)都是从这个基类中继承出来的.包括RouteRacer(一些对手),PoliceOfficer(警察).这些子类提供了附加的逻辑以实现高级的行为.我们使用完全物理状态下的交通工具(full-Physics Vehicle)”这个术语是因为车辆在这儿是根据物理学定律来控制的.这里的车辆有代码来控制引擎,传动装置,轮胎.而且被下面的一些设定值所控制:转向,刹车,油门.另外,VehiclePhysics类包含两个关键的方法:RegisterRouteDriveRoute.

 

      注册一条道路(Registering a route).首先,导航算法需要一条路径.这条路径既可以实时运算出来,也可以在文件中被定义为一系列路口的编号.实时算法总是返回最短路径.文件方法是从比赛编辑器(Race Editor)中建造的.另外一个内部工具允许游戏设计师在平面俯瞰城市,并且选择路口来创造一条道路.游戏设计师们在这儿可以创造非常特别的道路给AI.另外,文件方法使得一些Ai实体不需要实时计算路径,这样转而可以节约处理的时间.     

      规划道路(Planning the route).当一条到最终目标的道路被指定出来后,为了处理实时的情况,更多的细节规划需要得到.我们使用道路缓存来完成我们的目标,它为了当前的交通工具存储了3条最直接的道路(详细见图六)

     

图六.路线从编号为1的路口一直连接到编号为5的路口.按顺序,A车在边2-3.这是一条规划路线中的道路,B车被意外地撞到了边6-2.那么,他们两辆车的下一个共同目标都是路口3.也就是说,A车存储了2-3,3-4,4-5.B车存储了6-2,2-3,3-4.

     

      在任何给定的时间下,车辆直到下一个路口它将去的(当前目标),所以车辆在到达目标之前,他能够得到为了到达目标需要经过的路口.如果车辆已经在规划的路线上了.那么道路缓存将会被当前道路和接下来的两条填充.

      如果车辆不在原本规划的道路上.那他肯定是被撞了.在这种情况下,车辆查看当前位置到达下一个目标的所有道路.如果车辆在这样的道路上,那么缓存将会被当前道路和下两条可以使得车辆返回原定路线的道路.如果车辆不在这样的道路上,那么他将会实时运算生成一条新的到达目标的道路.

      规划多条线路.如果在这个城市里没有其他的车辆,那么对于电脑AI来说,仅仅只有一条最短道路以到达目标.不过一般而言,城市里面到处都是其他的车辆,电脑AI不得不不停的躲避他们,以保持有竞争力.在任何假定的时间内,到底是向左走还是向右走以躲避迎面而来的障碍的决策是不停在做出的.在任何时间内,电脑AI对于每个障碍物都规划了两条路线,直到他到达了规划中的距离.这种方法将会形成一颗决策树以做出最好的决策(见图七)

 

图七:道路上紫色的先就是汽车索考虑的决策线,橙色的线(不太清楚,得放大点才能看到)就是最佳的线路,最佳的线路可以考虑为一直在道路上,而且没有被什么东西挡住,越直越好.

      选择最佳线路.当全部可能的线路都被枚举出来后,最佳的线路就可以决定了.一些时候,一些线路将会使得交通工具到人行道上去,不过这些线路是不被优先选取的.一些路线将被堵死,这些线路同样也不被优先选取.最后的一个标准是,转弯的次数越少越好,考虑到上面的这些标准后,得到的最佳路径通常就是不堵,在路上,而且越直越好.

     设置转向.电脑AI的车辆在完全物理模拟下,使用的同玩家相同的驾驶模型.比如说他们的车辆都是使用转向的参数从-1.0~1.0.这个参数是玩家从手柄中输入的,但是电脑AI必须实时计算他的转向值以使得在实时状态下,可以躲避障碍物,以到达最终目标.比计算出一条完整的道路更好的方法是,电脑AI把这个问题简化为计算一系列的转向点(steering target point,STP),在每帧的时间内.STP就是使得电脑AI可以通过转向到达距离它的目标更近的地方.每个点都是通过正确的考虑来在道路上导航,转过急弯,和躲避障碍物.

 

      设置油门.大部分的时间,电脑玩家都是想跑的越快越好.这个规则有两个例外情况:转过急弯或者到达比赛的结束.急弯的定义是两条道路的夹角大于45,它可能出现在道路的任何一个地方,或者通过路口的时候.如果这个急弯的通行道路是圆形的,那么可以通过下面的公式轻松的得到最大的速度:

     

      V等于速度,u是道路的摩擦系数,g是重力加速度,R就是我们转弯的班级.当速度确定之后,所有的电脑AI需要做的事情就是减慢速度以通过这个转弯.

     受骗.不幸的是,即便是最好的电脑AI也难免受骗,就像玩家做的那样.当电脑AI受骗的时候,它将会调转方向,重新安排道路目标,然后回到赛道上继续比赛.

 

未来的展望

      仿效原版的Midtown Madness(译者注:就是第一篇文章中提到的那个游戏).我们希望开放的城市竞赛可以给玩家提供更多的自由使得他们可以在任何地方行驶,穿越任何的开放区域.为了在城市中可以感觉更真实,玩得更快乐.很多可以和玩家交互的实体就需要做得更真实.这些实体包括电脑赛车AI,紧随其后的警察,周围的交通,行人.所有的这些都需要强大的AI以使得他们可以看起来更加真实.Midtown Madness 2Midnight Club都发掘了他们的能力,都使得玩家的兴奋程度大大增加.

      开放城市的竞速游戏将会更多.说句实话,Angel Studio和我都决定增强未来的这类游戏的AI,我的一些想法是可以增强所有Ai实体的导航技术,而且可以使得比赛的电脑AI可以向玩家学习.另外我还想让行人和玩家以及AI的交互更多.

      Joe Azdima已经为我们Angel Studio工作了3年了,在这些时间里,他创造并且实现了Midtown Madness12,以及Midnight Club的全部AI系统.Joe也感谢Robert Bacon,Angel Studio的技术作者,主持编写了这篇文章.

 

乌龟后记:

      在这过年的几天内,翻译完了这接近一万字的文章,过程很辛苦.总体说来这篇文章还是很不错的,对开放城市的AI做了很多解释,其实也可以看出,之后的很多游戏都是根据这篇文章找到了一些灵感,比如GTA系列,NFS 8,9系列,还有很多没有玩过的游戏.

      另外我想给大家推荐一下<人工智能游戏编程真言>(AI game programming wisdom)这本书,里面对AI程序的方方面面做了比较好的解释,里面对开放城市的AI还有一篇更加详细的文章,讲了一些具体的实现方法,也是Azdima所著.

      另外预告一下,之后的时间我将会慢慢把自己在开放城市AI中的实现心得写出来.希望大家继续关注.

乌龟和毛驴的技术小屋原创翻译,转载请注明出处.

posted on 2009-01-31 12:05  乌龟_毛驴  阅读(1728)  评论(0编辑  收藏  举报

导航