游戏引擎剖析(十)

大型游戏引擎的特效编辑器代码 BW引擎的特效编辑器代码 比较难找的好东西 适合游戏程序员研究使用 立即下载
原文作者:Jake Simpson
译者: 向海



第10部分: 人工智能和导航(路径发现)


人工智能(AI)
  我们上面已经用了其他九个章节介绍了游戏引擎,现在让我们深入到非常有趣和重要的人工智能主题。人工智能如今正在变成被谈论得最多的仅次于游戏引擎渲染能力的游戏开发领域之一,确实如此。直到大约两年半以前,游戏似乎主要是在考虑你能够渲染多少个多边形,眼睛是多么的漂亮,和… 好…劳拉的胸部是多么的有弹性...既然我们现在已经能够渲染出非常真实的乳房,中心就开始转移到我们实际上用那些多边形做什么了(即玩游戏)。因为它给你提供实际玩游戏的刺激作用和参与游戏世界中正在进行的事情,所以人工智能在这个领域非常关键。

  人工智能包括了全部的东西,从在Tetris中决定哪一块新砖头掉落(这很大程度上知识一个随即数产生器), 一直到创造基于小组的策略游戏,这些游戏和你交互,并且实际上在你玩的时候向你学习。人工智能包含了许多规则,如果你(作为一个游戏开发者)没有花费足够多的时间让它正确地工作,它会反过来在你屁股上咬一口。所以让我们谈论一些哪些规则?这样你能更好地理解人工智能系统会确实是多么的复杂。为了避免法律上的纠纷,我们将使用一个假设的游戏而不是一个真实的游戏作为例子。

  假设我们的游戏中有坏份子生活在3D世界中,干着他们的事情,而且如果你打搅了他们的正常次序他们就会反抗你(玩家)。你必须决定的第一件事情就是他们正在从事的到底是什么事情呢?他们正在守卫什么东西吗?在巡查?在计划一个聚会?在购买食品杂货?在整理床铺?建立行为的基线是游戏开发者的工作之一。一旦有了这个,你就总有NPC(非玩家角色)或计算机控制的‘人’能够恢复去做的事情,玩家与他们的交互就应当能被完成。

  一旦我们知道一个NPC角色需要做什么 — 比如它在守卫一扇门,并且在这个区域小巡逻,NPC也必须有‘世界意识’。游戏设计者需要决定NPC的人工智能将如何看见世界,和它的知识范围。你将会仅仅说“计算机知道正在进行的每件事情” 吗?这通常被认为是一件糟糕的事情,因为非常明显计算机能够看见和听见你不能看见和听见的事情,这被当成是在作弊。不是一种有趣的经历。或者你将模拟他的视野,这样他只能够对他能看见的事物作出反应吗?当有墙壁出现时这里就有问题了,因为你开始进入那些我在第九部分提到的‘追踪’例程,看看NPC是否试图对被墙壁挡住的人作出反应。这是一个很明显的人工智能问题,但是当涉及到门和窗户时,这个甚至变得更加复杂了。

  当你开始为AI刺激例程增加听觉意识时,这依然变得更加复杂了。但是,这个意识是那些关键的“小事情”之一,这些使得假想的游戏世界似乎更加真实,或者能够去除怀疑的悬念。如果你碰到过这样的事情,请举手:你在枪战中跟一个NPC交战,免除了一个NPC,你绕着角落行走并遇到了另外一个NPC依然保持他的缺省行为模式,没有意识到刚刚发生的事情。现在,枪是嘈杂的事物,枪战可能已经明显地提醒了一个“倾听”的NPC有些事情正在进行。避免这种事情的技巧在于找到一个有效的方式来决定声源(即你武器的发射)的距离是否足够接近到NPC能够听见。

  接下来就是决策例程。当我们的巡逻NPC角色能够听到但不能看见某物时,你试图实现什么样的行为呢?他去寻找它吗?不理睬它?你如何决定什么是重要的声音他应该去或者不去调查?如同你看见的一样,这会很快变得非常的复杂。有很多方法来建造处理这些事情的代码,但通常这样是一个好主意,建立一个不是对特定的NPC而是对所有的NPC都起作用的系统,该系统基于你能够在游戏引擎以外的文本文件中建立的属性。这样就不需要程序员为一个给定的角色而改变AI,并且如果你对游戏代码做了改动,它将立即自动地应用到所有的角色,这在大多数情况下是一件好事情。

  其他的世界意识问题会冒出来,比如这样的情形,两个守卫彼此紧挨着站立,你用狙击武器干掉了一个,而另外一个站在哪儿完全不知已经发生的事情。再者,遵守真实世界行为的细节是一款好游戏和一款伟大游戏的之间的区别。

  让我们说你已经把所有的刺激-响应部分准备好了—你已经扫描了世界,决定NPC应当对正在进行的一些事情作出反应—他听到了玩家角色发出了声响—并且你(游戏开发者)决定了他应当对这个做些什么—他将去调查。现在更加复杂的事情来了。他如何离开现在的位置,到达他认为发出声音的地方,而不会想通常的数字傻瓜一样跑到墙壁里面,碰到家具呢?继续往下看…


有关正确的路径 --- 世界导航
  快速,准确的世界导航( 也叫做路径-发现) 近来已经成为游戏开发者的圣杯。 让它看起来非常信服是一件非常困难的事情。你需要有局部世界的地理知识—墙壁的位置,台阶,悬崖和建筑物等的边缘。你也需要世界中的对象的知识—比如家具,汽车,尤其是其他人的位置。真正最后的因素是问题所在,一会儿我们将回到这一点上。

  世界导航通常被分为两个领域,世界导航和局部导航。二者实际上只是范围上的区别,但大多数的程序员分别对待它们,因为这样处理起来容易一些。世界导航例程处理理解房间,门和一般的地理学,并计算出让玩家或者角色从世界中的A点到达B点的一条路径。“它将让你从A点到达B点”,这是一句很容易说的话,不是吗?说起来容易,但做起来很困难。理解世界是一个非常复杂问题,我已经看到过许多尝试过的解决办法。QuakeIII的机器人遵照建造的预先处理过的地图,一般的说法,使用原来地图的地面。预处理器检测地面元素,由地图建造者作上标记,并自己建造一个只使用地面的世界简化地图。机器人并不关心墙壁,因为他们从不接近它们,就像他们遵照地面的地图一样,设计上已经把避免墙壁构造在里面了。

  其他方法在地图本身里面建造一些小的结点,AI可以追随它们。这些结点通常被建造在彼此的视线里面,有从一个结点到其他所有结点的连接,角色AI能够直接‘看见’,所以你就确保了从一个结点移动到另外一个结点时AI不会试图穿越墙壁。如果有门或者降落物,你能够事先用这些结点对路径的信息编码,于是NPC能够采用适当的行为—等候电梯,打开一扇门,或者从一点跳到另外一点。这实际上是HereticII使用的系统,也是Raven在他们其他的大多数游戏中使用的系统。

  关于这个主题,3D Realms的Jess Crable,现在为Duke Nukem Forever工作,如是说:

  "导航在许多方面是个巨大的挑战,主要是当游戏中有大量正在发生的事情和一些非计划性的东西,比如障碍。为了避免和(或)真实地对非计划性的障碍物导航(例如像另外的AI),AI需要很好地知道正在它周围发生的事情。比较而言另外一个巨大的挑战就是真实感。如果AI正在表现玩家在实际生活中看到的一些东西,比如说一个人,或者一条狗, 那么让它看上去真实可信就更加困难。"

  然后就是局部导航。我们可能有一条路径让我们的 NPC 从他在世界中的位置,移动到他认为听到声音的地方,但你不能盲目地按照这个执行并期望得到看起来不错的结果。这种性质的路径倾向于非常特定于一个给定的目的。当你沿着走廊从一个房间跑到另外一个房间时,它很好,但如果你试图指导他穿越一个巨大的房间时,路径结点方法容易最终得到一些看起来很奇怪的发现路径。这些路径也不是动态的。因为他们被预先建造,他们不容易考虑到世界的任何动态变化。桌子可能有被移动过了,椅子被破坏了,墙壁被摧残,当然,人们会移动。这就是局部导航不同于世界导航的地方。它必须考虑局部世界并导航NPC在里面穿越。它必须知道周围的环境,存在哪些可以选择的路径,并决定选择哪一条。

  在局部导航中最大的问题是其他的NPC。给定一个发现路径的具体例程,如果你在相同的一般区域中有不止一个NPC,他们都试图到达世界的同一地点,结果是他们都非常容易有相同的路径。然后他们试图沿着这个路径行进,结果彼此遇到一起,然后花费他们所有的时间试图将彼此分开,并且一旦成功地分开了,他们再次试图到达目标,然后我们又再次看到同样的事情发生。这一切看起来都是非常的愚蠢,这不是大多数人想要的效果。所以需要一些路径发现中的变化来避免这种情形,需要一些妥善处理避免的代码。有大量能够帮助解决这种情形的算法。


人工智能和角色动画问题
  当然,当角色自己在世界中行走时你必须完全地决定你想要角色播放什么动画。听起来无足轻重?不是的。关于这个主题,Raven的 Chris Reed—Soldier of FortuneII使用名为LICH的AI系统的现在的负责人—如是说:

  "此刻我能告诉你,我们在平滑移动上正有着最大的困难。在一个多丘陵的长满草的丛林中试图让五个角色在彼此附近行走是一个非常困难的问题。让底层系统完美是重要的,因为除非角色在较低层次上(避免墙壁,适当的动画)看起来真实,他们不能够有效地表达任何较高层次决定的智能。由于这个单独的原因,动画和底层的移动是最重要的和最难实现的。它确实需要完美。"

  因此我们已经让我们的角色从A点到达了B点,他自己穿越世界,在途中避免障碍物,正确播放动画,现在到达了这里。他看见了你。接下来做什么呢?很明显更多的是作出决策。他将向你射击。太棒了。你回应射击。现在干什么?当他试着逃走的时候,现在你再次经历全部同样的事情。

  为了让这些情形看起来令人信服,你看见了这里必须要处理的大量问题。如果你建立你的AI使用没有动画的行为让NPC执行,这能被混合。一些Soldier of Fortune中的AI就是这样的例子。他们受到了指责,因为坏家伙没有以适当的方式对刺激作出反应。当他们明显应该这样做的时候,敌方NPC不扫射,或者不逃跑。部分问题是他们没有扫射敌人NPC的动画,或者让他们往回跑,因为空间的问题。因此世界上所有最伟大的AI代码都不能够解决这个问题。这是所有要考虑的重要事情。

  想知道隐藏的难点吗?看看我前面所有的描述,然后试着将它应用到一组NPC上,这些NPC彼此必须说话,设定目标,彼此沟通,但不妨碍彼此的方式。一旦你这么做了,试试那些代码,作为玩家的队友做上面所描述的这些,然而不要在枪战中妨碍他。现在这是复杂的。然后这成为乐趣。这是最困难的部分。Raven的 Chris Reed关于AI‘感觉’的一些评论:

  "我认为反馈是AI的一个极大的问题。如果角色对于他周围环境的变化不产生反应,游戏的真实感就被完全打破了。这有许多明显的例子(听见枪炮声,看见同伴被击中...),以及一些更加微妙的事情(当两个人通过门厅时看着彼此并点头致意)。玩家是乐意接受一些生硬和可预测性的,但是这些事物容易把游戏带到现实生活。"

  并且Jess Crable 赞同:

  "平衡是非常重要的… 对玩家将会有多大的乐趣至关重要,但还有其他的问题要平衡。游戏玩家时常说他们想在游戏中看见更加真实的人工智能。然而,太多的真实感开始把乐趣带走。在这两者之间必须要有一个好的平衡。变化和随机同样也很重要—行为的变化,和保持在可信范围内的一定程度的不可预测性。"


游戏规则与自然发生的游戏
  在我们关于AI的所有描述中,我们采用的是FPS的方式。有不止一种的AI。我们已经描述的是处理3D世界一组规则。AI远远不止这些。时常最好的AI实际上非常的简单。它就是一组规则,玩家必须响应和处理的响应(或开始)动作的规则。

  这里应当处理一个被称为“自然发生的游戏”的专业术语。 自然发生的游戏本质上创造游戏将遵守的规则,那将会造成游戏程序员不能预见的情形。

  举例来说,象棋能被认为是自然发生的游戏。有一组规则,但游戏能够陷入各种程序员不能够以个别方式处理的情形。你不能为每一种可能的棋局情形编码规则。很清楚,游戏玩家每次不会总是面临相同的游戏情景。一定程度上,进行中的游戏情形会根据他的行动而发生变化。Black and White是这种情形的一个完美的例子,和The Sims一样—游戏有它自己的规则,但你如何运用和调和他们是你自己的事情。实际上,你在玩游戏的过程中创造着游戏,而不是照着游戏设计者/程序员已经为你定义的路线进行。

  有可能把基于规则的,自然发生的游戏方式和FPS环境混合在一起。Half Life中的一些海军陆战队士兵的行为就是这样做的—压制火力和侧翼攻击从设定的规则中动态完成。它看起来是动态的,而且一定程度上它是这样。然而,在FPS世界中仅仅有一组规则时常是不够的。几何和其他AI时常能够打败简单的规则,这让保持正确并依然有趣变得更加困难。所以对那些可怜的AI程序员有一些同情心吧。他们的工作不容易。


  好吧,下面还有一个章节,仅仅还剩下一个章节了。在最后的章节里,我们将讨论头顶显示,菜单系统,游戏定制和配置,游戏引擎版权与建造,最后是游戏“mods”。
 
AI游戏引擎程序设计 AI游戏引擎程序设计,学习游戏开发的重要组成部分,加入恰当的ai设计可以使游戏体验更好 立即下载

相关推荐

OpenSteer领航AI C++开源库

一个开源的c++领航ai(Steering behavior, steering AI)库。 OpenSteer is a C++ library to help build steering behaviors for autonomous characters in games and animation. OpenSteer provides an app which displays predefined demos of steering behaviors. You can prototype, visualize and debug your own as a plug-in.

开源项目推荐:训练属于自己的游戏AI

开源项目推荐:训练属于自己的游戏AI 项目基础介绍和主要编程语言 该项目名为“训练属于自己的游戏AI”,旨在帮助开发者通过开源代码和教程,构建和训练自己的游戏AI。项目主要使用Python语言进行开发,结合了多种机器学习和深度学习框架,如TensorFlow和OpenCV,以实现高效的AI训练和游戏控制。 项目核心功能 游戏AI训练框架:提供了一套完整的AI训练框架,支持多种游戏类型的AI训练。...

gitblog_01248的博客 772

RK3576处理器RT-Thread与Linux混合部署实现工业EtherCAT实时控制

实时操作系统(RTOS)是工业自动化领域的核心技术,通过精确的任务调度和中断响应机制确保微秒级控制精度。RT-Thread作为开源实时系统,采用优先级抢占式调度算法,能够满足运动控制和总线通信的硬实时需求。在工业显控一体设备中,实时系统需要与富应用系统协同工作,Linux系统负责图形界面和网络通信等非实时任务。混合部署架构通过共享内存和核间通信技术实现数据交换,既保证了实时性能又扩展了应用生态。EtherCAT工业以太网协议作为高性能现场总线,采用主从站结构和分布式时钟同步,可实现多轴运动控制的精确同步。R

weixin_33738982的博客 2627

AIGame:开启智能游戏开发新纪元

AIGame:开启智能游戏开发新纪元 项目介绍 AIGame 是一个创新的开源项目,旨在利用人工智能技术推动游戏开发的边界。通过集成先进的AI算法,AIGame不仅能够自动生成游戏内容,还能实现智能化的游戏设计和优化。无论你是游戏开发者、AI爱好者,还是对智能游戏充满好奇的探索者,AIGame都将为你提供一个全新的平台,让你在游戏开发中体验到AI的无限可能。 项目技术分析 AIGame的核心技术架...

gitblog_01053的博客 1751

用AI助手Cursor轻松自动生成流程图

通过 Cursor + Mermaid,我们可以快速、准确地自动生成流程图,上面演示的例子部分流程图可能比较丑,我们可以通过流程图软件导入Mermaid代码,然后手动进行微调就可以了,如果你对美观要求不是特别多,可以直接用,这将极大地提升代码可视化和架构设计的效率。

呱牛 Just do IT 1941

IAR编译相同工程生产hex文件checksum不一致问题

IAR Checksum

xqw19891201的博客 1384

开源项目推荐:AI游戏开发工具集

AI技术正日益改变游戏开发的面貌,而[Yuan-ManX](https://github.com/Yuan-ManX)团队开源的AI游戏开发工具集正是为了帮助开发者更好地利用这一技术。以下是对该项目的详细介绍。 ## 项目基础介绍 该项目是一个开源的AI游戏开发工具集,旨在为游戏开发者提供全面的AI解决方案。主要使用的技术栈包括但不限于Python、C++、以及Unity等编程语言和环境。

gitblog_01102的博客 944

一分钟了解 “提示词工程”、“上下文工程”、“驾驭工程”

在大模型刚刚进入大众视野的初期,开发者面临的最大挑战是如何让模型听懂人类的指令。这一阶段被称为提示词工程时代。其核心思想非常直观:通过精心设计输入的文本提示,引导模型输出符合预期的结果。这一时期的开发者更像是“提示词巫师”,他们热衷于寻找所谓的“魔法咒语”。典型的技巧包括角色设定、思维链、少样本学习以及输出格式约束。例如,仅仅在问题前加上一句“请一步步思考”,模型的推理能力往往就能得到显著提升。然而,随着应用场景的复杂化,提示词工程的局限性逐渐暴露。

h a 6 6 6 c k 为 你解决复杂难题! 572

探索游戏AI的新边界 —— 神级开源工具Godot RL Agents

探索游戏AI的新边界 —— 神级开源工具Godot RL Agents godot_rl_agentsAn Open Source package that allows video game creators, AI researchers and hobbyists the opportunity to learn complex behaviors for their Non Player...

gitblog_00620的博客 1003

指纹浏览器降维打击(下):Cloudflare Turnstile 与 hCaptcha 的底层交互逻辑

本文将深度拆解:Turnstile 与 hCaptcha 的 Iframe 沙箱通信机制,动态混淆 JS 与 PoW(工作量证明)的物理破解法则,以及如何通过 C++ 底层事件合成与环境基因强绑定,实现验证码的“无感过验”。

数据知道的博客 424

【经验&技巧】如何在ADS中导入示波器的时域波形?

从示波器中导出的时域波形数据,需要按照固定的格式进行修改,并通过Display dataset对话框导入ADS。

一只豌豆象的博客 1573

推荐 10 个饱受好评且功能独特的开源人工智能项目

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34001430的博客 4215

用AList挂载网盘,无损看VR电影教程,无需下载到PICO头显本地!

用AList挂载网盘 + WebDAV直连头显,看片像拉本地一样流畅,不怕卡顿、不怕没空间,简直是VR看片刚需配置!别再用U盘传电影了,用AList + WebDAV,直接流畅看4K,看片效率翻倍,体验提升一个档次!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 5546

游戏引擎剖析(十)(转)

第10部分: 人工智能和导航(路径发现)人工智能(AI)  我们上面已经用了其他九个章节介绍了游戏引擎,现在让我们深入到非常有趣和重要的人工智能主题。人工智能如今正在变成被谈论得最多的仅次于游戏引擎渲染能力的游戏开发领域之一,确...

cuankuangzhong6373的博客 115

PCL学习笔记(四)——点云曲面重建

文章目录一、凸包算法二、 单纯的点云数据固然很好,但仅仅是点的话仍是不够的,因为这不利于我们后续对实体对象的渲染与各种应用,如计算实体的表面积、体积等等,所以这就需要我们对实体进行点云的曲面重建。 一、凸包算法 在计算机图形学中,凸包是指在任意维空间中包含某一有限点集P的最小凸集,它由凸包顶点构成,在二维上其表现形式为一个凸多边形,而在三维上则表现为一个凸多面体。在二维层面上来讲,最常用的凸包算法有Graham扫描法和Jarvis卷包裹法,但前者并不适用于三维层面,后者倒是可以扩展到三维。除此之外,在

dayuhaitang1的博客 6912

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

游戏引擎全剖析

第1部分: 游戏引擎介绍, 渲染和构造3D世界  介绍  自Doom游戏时代以来我们已经走了很远。 DOOM不只是一款伟大的游戏,它同时也开创了一种新的游戏编程模式: 游戏 "引擎"。 这种模块化,可伸缩和扩展的设计观念可以让游戏玩家和程序设计者深入到游戏核心,用新的模型,场景和声音创造新的游戏, 或向已有的游戏素材中添加新的东西。大量的新游戏根据已经存在的游戏引擎开发出来,而大多数都以I

kellymalan的专栏 3656

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

3D游戏引擎剖析

介绍 自Doom游戏时代以来我们已经走了很远。 DOOM不只是一款伟大的游戏,它同时也开创了一种新的游戏编程模式: 游戏 "引擎"。 这种模块化,可伸缩和扩展的设计观念可以让游戏玩家和程序设计者深入到游戏核心,用新的模型,场景和声音创造新的游戏, 或向已有的游戏素材中添加新的东西。大量的新游戏根据已经存在的游戏引擎开发出来,而大多数都以ID公司的Quake引擎为基础, 这些游戏包括Coun

舒夜无痕--成为更好的自己 7593

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

游戏引擎剖析 1

游戏引擎剖析原文作者:Jake Simpson译者: 向海Email:GameWorldChina@myway.com第1部分: 游戏引擎介绍, 渲染和构造3D世界介绍自Doom游戏时代以来我们已经走了很远。 DOOM不只是一款伟大的游戏,它同时也开创了一种新的游戏编程模式: 游戏 "引擎"。 这种模块化,可伸缩和扩展的设计观念可以让游戏玩家和程序设计者深入到游戏核心,用新的模型,场景和声音创造新

gameworldchina的专栏 1947

游戏引擎剖析

原文作者:Jake Simpson 译者: 向海 Email:GameWorldChina@myway.com 第1部分: 游戏引擎介绍, 渲染和构造3D世界 介绍   自Doom游戏时代以来我们已经走了很远。 DOOM不只是一款伟大的游戏,它同时也开创了一种新的游戏编程模式: 游戏 "引擎"。 这种模块化,可伸缩和扩展的设计观念可以让游戏玩家和程序设计者深入到游戏核心,...

weixin_30566149的博客 755

游戏引擎剖析(一)

原文作者:Jake Simpson译者: 向海第1部分: 游戏引擎介绍, 渲染和构造3D世界介绍  自Doom游戏时代以来我们已经走了很远。 DOOM不只是一款伟大的游戏,它同时也开创了一种新的游戏编程模式: 游戏 "引擎"。 这种模块化,可伸缩和扩展的设计观念可以让游戏玩家和程序设计者深入到游戏核心,用新的模型,场景和声音创造新的游戏, 或向已有的游戏素材中添加新的东西。大量的新游戏根据已经存在

Nicholas黎的专栏 1915
上一篇: 游戏引擎剖析(九)
下一篇: 游戏引擎剖析(十一)
Image_Graphics
博客等级 码龄20年 18粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值