程序丨腾讯技术专家答疑专场:游戏中的人工智能
什么是AI?AI在游戏里面的运用是哪些?如何学习AI知识?AI的未来如何?本期【我问大咖】以“AI技术”为主题,腾讯AI技术专家唐向兴、葛诚,后台技术专家李勍、熊松为你答疑,一起来回顾本场精彩内容吧!
Q:什么是AI?仅仅是简单的规则而已吗?
葛诚:首先我默认你说的AI是Game AI。Game AI其实是一个决策系统,输入AI感知,外部事件,输出下一个动作。这个Decision Making系统可以是规则集合,也可以是其他模型,比如规划器,概率模型,神经网络。目前大部分游戏还是用脚本 BT这样的脚本工具去写规则;一些追求浮现性(Emergence)的游戏会加入Planner,使Agent在完成一项任务的时候会走不同的Action线路,本质是个搜索问题;还有一些追求类人属性的游戏,在尝试使用DNN,去模仿人类的行为。
Q:AI在游戏里面的运用是哪些?如何学习AI知识?
熊松:个人工作经历中应用的游戏AI主要有过以下几个方面:
1、驱动游戏中对象的行为,例如NPC、boss、小怪、机器人等。
2、智能问答系统,例如问答助手。
3、智能监控系统,通过监控玩家的各种游戏内行为,来获得精准的行为统计、异常监控、告警等。
AI本质上是一个模拟行为的算法,在游戏领域目前我见到的都还是弱AI,打下扎实的算法基础能极大帮助游戏AI的开发,例如FSM、群体AI策略、基础的寻路算法、各种目标选择策略等。
唐向兴:游戏里的AI,我们可以简单理解为,游戏里的非玩家角色,可以根据环境,状态,玩家交互等数据,做出相应决策的行为。例如,游戏里的野怪,boss等角色。
学习AI知识,有很多途径,有部分游戏是开放源代码的,例如Quake3里的分层状态机方案,FEAR开源的GOAP SDK, 饥荒里用lua实现的AI行为树,都可以参考学习。看项目代码是比较有效的学习方法,但前提得有一定的理论基础。要补充理论基础的话,我推荐你可以看这本书: 《Artificial Intelligence for Games, 2nd edition》。这本书对当前主流的游戏AI技术做了系统性的介绍。
葛诚:
补充几条算法类的:初阶FSM,脚本,基本的寻路结构,寻路算法;中阶的BehaviorTree, HFSM,和AI很近的物理动画系统最好也能有所了解,动态场景寻路;高阶的各种Planner(GOAP,HTN),常用的机器学习方法,LR,决策树,SVM;研究级别的深度学习,增强学习等等。
Q:有没有对于游戏AI设计的书籍可以推荐一下?
唐向兴:《游戏编程中的人工智能技术》、《Artificial Intelligence for Games, 2nd edition 2009》、《Game AI Pro- Collected Wisdom of Game AI Professionals》、《Game AI Pro 2 Collected Wisdom of Game AI Professionals》。还有很多其他的书籍,可以网上搜索。但这几本书应该可以覆盖当前的游戏AI主流技术。
Q:游戏中的AI一般使用什么训练数据呢,人造吗?
唐向兴:要看具体的游戏AI实现技术了,有一种QLearning的方式训练AI玩游戏,它用图像处理的方法,运行游戏的同时获得游戏结果,这种方法基本不需要训练数据。这里有个开源的案例可供参考https://yanpanlau.github.io/2016/07/10/FlappyBird-Keras.html
对于其他基于神经网络的AI技术,训练数据有的来自游戏后台用户的操作日志,也有比较暴力方法,就是“人造”。
Q:在3D ARPG项目里,服务器端要检测,对象(PC/NPC)之间的碰撞和阻挡,对象和场景/物件之间的碰撞和阻挡,物件可破坏,对象需要动态寻路(绕场景/物件/PC/NPC),有没有推荐的思路?
李勍:服务器可以考虑采用PhysX在后台进行物理计算,寻路可以用Recastnavigation从Unity中导出NavMesh并在PhysX中加载进行寻路计算。
Q:Unity NPC寻路如何实现跨场景?《星露谷物语》中有类似功能,NPC可以像玩家一样有自己的行为逻辑,比如 早上从城镇走到 传送点 到达 树林,然后开始伐木,下午 NPC 会自己再跑会城镇,中间玩家在不同时间去找NPC,可以看到他做不同的事。
熊松:NPC行为在游戏中还是比较常见的,我以网游为例,假设NPC的AI在服务器执行。服务器同时会处理大量的这种非角色行为,所以会用最基本的FSM来实现,按照固定的时间频率(例如每秒一次)驱动AI。
在设计游戏对象的时候会让角色和NPC、怪物都继承于一个游戏可见、可移动对象,具备视野显示、移动等功能。
通过脚本、表格或者固定代码的方式驱动NPC对象在指定的时间触发指定的行为。AI对象一般有一块AI状态数据来记录当前状态和状态附加数据。
葛诚:这些应该是脚本写好的,中间即使被玩家打断,也能被事件继续驱动。至于你说的跨场景寻路,可以把寻路做成两层,一层是小块地图连通图上的寻路,在每张地图内部再根据路点,或是NaviMesh,Grid寻路。整个串起来,脚本写好故事线,事件处理,需要走到那个地点,再调用寻路系统即可。
Q:我们在游戏中使用了A*的寻路插件,依靠grid_map实现怪物寻路。在使用过程中为了实现怪物间的躲避,需要频繁update grid map,但是因为整张地图较大,所以很费。有没有什么办法可以减少这里的开支?
唐向兴:这个问题属于碰撞回避问题,A* Project组件里有个RVO的示例,你可以直接参考Demo里的代码实现。这是简单介绍的连接:
https://arongranberg.com/astar/docs/writing-rvo-colliders.php
Q:有个项目要求500个角色同屏运动,运动要自然,第一想法是考虑使用RVO算法,但是500角色用了,每三帧查询一次K-D感觉性能都影响很大。是否考虑不用RVO,有其他解决方案吗?
唐向兴:ORCA 算法性能上和效果上会比RVO算法要好,性能问题,可以通过多线程的方式解决,毕竟运动逻辑和渲染逻辑是分离的,可以用多线程的方式提高性能。
但同屏500个角色,性能可能还是会一个大问题,尤其是在手游上。要看你项目的具体需求是什么,能否简化需求。像现在的MMORPG游戏角色之间是没有碰撞的,就能避开这种性能的问题。
Q:像阿尔法狗那种级别AI,什么时候才能实际商业应用到游戏中?之前看TI7与dota冠军对战的AI实际上只用了一台普通的商用PC,最后击败了dota世界冠军。那么能够达到世界冠军级别的AI什么时候才能实际应用在网络游戏或者单机游戏中呢?能否从开发成本,使用成本,使用价值等角度初步分析一下?
熊松:谈一点我个人的想法。围棋算是棋类项目的皇冠,也是AI比较高端的应用场景,其他棋类项目(例如象棋、国际象棋、五子棋)在几十年前世界冠军就不是电脑的对手了,因为他们的计算空间存在几个量级的差异。
在绝大部分类型的游戏里,AI是远远优于人的,而且只需要使用极少数的计算资源,例如一台普通服务器可以执行上千个这样的AI。
1、人有反应时间,会被情绪控制,会操作失误。而AI没有这些缺点。
2、人只有自己的当前视野和信息量。而AI可以有全局数据,可以准确预测、控制行为。
3、人会疲劳,经验很难积累、继承和传播,需要不断练习和学习。而AI可以廉价、持续、高效地获得这些资源。
当然,人也会有灵犀一动的神操作,但是概率很低,并且被AI掌握后会进入学习策略库。
唐向兴:看了下,这个AI玩家对抗的场景是1v1,1v1的AI相对好实现,而且比较容易达到好的效果。moba类游戏是多人协作的游戏,要实现5v5的对抗而且能战胜职业玩家,个人认为不太容易。
至于什么时候,出现游戏AI玩MOBA类游戏/RTS类游戏可以战胜世界冠军级别玩家的,这个不太好说。听说AlphaGo正在和暴雪合作,实现AlphaGo打星际2,我们可以期待一下。
一旦出现了成熟的方案能实现这种游戏AI,我相信开发成本和使用成本都不算太高,毕竟就是多几台高性能的服务器。但游戏AI的初衷是陪玩家玩游戏,而不是战胜玩家。游戏里出现不可战胜的AI,我相信很多玩家都会觉得索然无味吧。
Q:能谈机器学习技术对未来游戏产业的影响么?
葛诚:这个问题略大,学术AI尤其是机器学习已经在影响着游戏这一垂直领域。主要体现在体验和效率两方面。体验方面,比如已机器学习为主要方法的识别技术(视觉,语音),为游戏带来了新的交互体验,比如:AR Game。效率方面,视觉上的合成技术为超分辨率,纹理材质自动生成,光线跟踪,渲染图像增强等方面带来了较大的提升。
错过上次的提问机会也不用担心,现在,以“游戏开发中的物理系统”为主题的答疑专场正在火热进行中,腾讯前台程序专家方煜宽、朱新铭及《穿越火线:枪战王者》主程谢文将回答大家提出的问题。有什么想问的赶紧点击阅读原文,去问专家吧!
----------------------
今日推荐
添加小编微信,可享双重福利
1.加入GAD程序猿交流基地
获取行业干货资讯,观看大牛分享直播
2.领取60G独家程序资料,地址在小编朋友圈
包括腾讯内部分享、文章教程、视频教程等全套资料
↓长按添加小编GAD苏苏↓