游戏引擎与人工智能设计
2009-01-14张凯
张 凯
摘要:游戏软件开发工作量的增大和数据整合的困难孕育了游戏引擎的产生,游戏引擎应采用分层次的体系结构,以抽象和封装接口。而这又给游戏人工智能的设计提供了基础和问题的定义。
关键词:游戏软件开发;游戏引擎;人工智能
1引言
由于计算机软硬件的发展,计算机游戏的画面表现力达到了与电影相媲美的高度,随之带来了对游戏软件的可玩性相应提高的要求。由于 3D 图形技术、虚拟现实技术及相关软件和硬件的发展,使得计算机游戏开发者们能够创造更加吸引玩家,更有视觉投入感的游戏世界。游戏软件的下一个进步应该是提供更加真实可信的人工智能。硬件的图形和声音处理系统的发展,解放了更多的系统资源,这使得在游戏中实现更加精细的人工智能成为可能和必然的方向。越来越多的游戏品牌将其卖点放在了实现更加可信和真实的人工智能上来。
2 游戏引擎及其对人工智能设计的影响
随着软硬件的发展,现今的计算机游戏的复杂度已经达到了一个难以想象的高度。这不仅表现在游戏程序设计上,更表现在够整合大量的不同的人力资源和数据资源的一套完整的系统上。例如,先进的 3D 图形技术提高了游戏世界的细节的表现力,导致游戏项目中美术工作者所占全部开发者的比重和游戏中在程序逻辑之外的数据部分的显著增加。这就造成了数据整合工作的困难和游戏复杂度的相应提升。于是游戏引擎的概念应运而生:为了减少重复开发工作以降低开发成本,不同的游戏可以共用相同的游戏引擎。游戏引擎不但提供数据整合、关卡设计的工具,更为编程人员提供了统一的接口,使底层的实现得到封装和重用。这为游戏 AI 的设计提供了基础,提供了游戏中的角色所能进行的行为的一个层次描述。这里分层次的的系统设计起着重要的作用。例如,一个只支持游戏中角色的位置变动层次的游戏引擎,显然不需要为其角色的肢体行为设计人工智能。而即使是提供了低层细节(例如程序中对角色肢体的控制)的游戏引擎,也应该可以限定人工智能模块工作在较高的层次之上(例如仅仅用 AI 程序处理角色的位置移动),这降低了问题的复杂度。所以在设计与实现游戏中的人工智能之前,首先应该完成基本的游戏引擎系统的设计,明确游戏引擎提供的接口的层次结构和人工智能设计的最小粒度。这相当于明确人工智能所要处理的问题的定义。
3游戏引擎层次体系结构
3.1 机器人的三层软件体系结构
由于具有相似的应用环境,游戏程序可以采用与机器人的三层软件体系结构相似的体系结构。在机器人学中,机器人的软件体系结构必须决定如何将反映式控制和基于模型的思考模式相结合。反应式控制是传感器驱动的,适合于实时地制定低层次决策,而思考式控制适用于依赖于在进行决策的时候不能感受到的信息的全局控制决策。混合体系结构将反应与事先思考相结合。而最为流行的混合体系结构是三层体系结构,它由一个反应层、一个执行层和一个思考层组成。反应层为机器人提供低层次的控制,具有紧密的传感器-行动循环。执行层接受思考层发出的指令,序列化以后传送给反应层,起着反应层和思考层之间的粘合剂的作用。思考层利用规划生成复杂问题的全局解。
相应于机器人的三层体系结构,整个游戏引擎中实现的接口可以划分为低层接口、中层接口和高层接口三层。除了像在机器人软件体系中,区分不同控制和决策层次的作用外,三层接口的引擎结构可以带来如下好处:
首先,起到了抽象和封装程序接口的所用。上层接口对下层接口的调用是透明的。其次,促进项目组内承担不同开发任务的开发者明确分工和协同工作。图像和音效等的底层实现、人工智能算法的实现、动画数据的整合、高层游戏逻辑的编写等等,每一项工作都明确的位于一个唯一的层次中。这在常常包含上百人的大型项目中,对于开发工作的组织和管理是非常必要的,因为不仅设计者、美术工作者、程序员等需要明确分工,程序员内部更是如此。
3.2低层接口
低层接口主要提供基本的 3D 渲染、物理计算、角色的运动控制和角色动画系统,这其中与人工智能密切相关的是角色的运动控制和角色动画系统。低层接口的运动控制,是最基本的操作,它仅是对角色的位置和朝向的控制,与角色的属性没有关系。而与角色的属性相关的运动,如速度、加速度的实现,甚至是一些高层的运动行为(例如,一辆汽车,它的速度的方向必须与其朝向一致,而速度方向的改变,只能依靠侧向的转向力)的实现,是中层接口实现的任务。而这个实现正是通过对低层接口的调用来实现的。角色动画控制提供对动画序列的调用与混合,完成逼真可信的角色动画。同样底层接口的动画控制是对单个动画序列的操纵,不应包含任何逻辑上的动画序列的组织,那是中层接口的任务。
3.3中层接口
中层接口通过利用低层接口提供的运动和动画控制功能,实现角色更高层次行为的接口功能。例如用户可以通过中层接口的调用来控制角色从一个地点行走到另一个地点,而行走过程中的角色动画,正是调用低层接口实现的,而其实现对于低层接口的用户(即中层接口的实现代码),是透明的。
3.4高层接口
可以规定只有高层接口包含人工智能算法的实现,即 AI 程序员只能调用中层以上的接口。例如一个高层接口的调用,可以控制角色向敌人攻击,而攻击过程中的行动、战术(是从正面进攻,还是从侧面包抄?使用步枪,还是使用手雷?)等,正是通过具体的人工智能算法,调用中层接口提供的功能来实现的。
高层接口可以提供给关卡设计师,来完成游戏实际内容的创建。这些接口往往包含较少的程序逻辑控制,可以供非程序员的设计人员使用,这通常需要实现某种简单的,或接近自然语言的脚本语言。有些游戏引擎甚至提供图形化的工具来方便这一工作,这样,项目中的非编程人员(如游戏设计者),也可以参与游戏的具体开发,以减少工作流程。
4 人工智能引擎的优化
虽然 AI 计算在整个游戏中的比重不断提高,但图形渲染模块仍需要占用绝大多数系统资源,分配给 AI使用资源是相当有限的。除了对 AI算法本身进行优化外,从 AI 引擎层次上的优化更为有效。通常有如下几个优化的方面:
4.1 载荷平衡(LoadBalancing)
载荷平衡主要有两种实现方法:
将 AI 计算按照一个预定的进度运行(如每 2 秒钟计算一次),而不同的个体之间的计算请求错开。
增量计算,现得到一个大致的结果,之后逐渐计算改善。许多寻路算法用这种方法,现计算一个大致的运动方向,再逐渐精化。
4.2 LevelofDedail 人工智能
受到三维图形领域的细节级别(LOD,LevelOfDetail)的启发,许多游戏实现了一定的 AI 细节级别控制。这种优化是有必要的。例如,玩家完全看不到,或在离视点很远的地方,角色被表现为几个像素。而这时,若角色仍在进行复杂的 AI 算法计算,是没有必要的。
然而,目前还没有统一的细节级别方法。这是因为,每个元素并没有统一的表现形式(不同于三维图形,场景中的所有物体的模型都有多边形表示,模型的细节可以表现为多边形的增减),所以还没有形式化研究的可能性。首先需要定义若干细节级别,如离屏、很远、较远、中等、较近、直接交互,并且建立一个细节级别系统,游戏中的每个对象可以请求这个系统以得到自己当前的细节级别。然后是定义在每个细节级别下角色的表现行为。一种实现方法是对每一个行为,为不同的细节级别使用不同的解决方法,这种方法是一种可靠的解决方案,但会给 AI 开发人员增加成倍的工作量。另一种方法是,不同的细节级别,计算更新的频率不同。这似乎是一种较可行的方法。
参考文献
[1]MatBuckland.ProgrammingGameAIbyExample.WordwarePublishing,2005
[2]任巍. 实时 3D 角色骨架动画系统. 西安电子科技大学计算机学院2004年度研究生学术年会论文集.October,2005.