文/黄军
作者在国内最早也是最有经验的从事深度学习AI赋能游戏的公司之一从事游戏端的接入开发。本文和AI方面的同事一起,在两年多的时间里,支持了很多国内外知名的大型手游项目提供智能AI服务,获得了一些经验和总结。
希望游戏行业的从业者(尤其是游戏程序开发者)能明白什么样的游戏框架适合AI训练。在回答之前。需要解释一下深度学习AI在游戏框架中的作用是什么。
可以简单的认为,深度学习AI最终会是一个特殊的“AI客户端”,通过协议与服务器进行通信和交互,就像传统的客户端一样。它具体做什么,
有点类似于游戏中用来实现“托管离线玩家”的行为树。它利用神经网络的预测结果映射成调用游戏逻辑提供的基本行为节点,在合适的时机做出合理的行为。
我们先来看看传统游戏框架中最基础的单机游戏的框架设计。你会得到下面的结构。
上述游戏框架将有以下几个部分:
游戏的核心逻辑:负责响应用户的输入和自定义的更新逻辑。并返回操作结果,以状态的形式展现给游戏的表示层。游戏图形渲染:表示层的主要逻辑就是通过这一部分来展示的。
输入控制:专门响应玩家的逻辑输入,向核心逻辑发送指令。物理引擎(可选)。用户输入可以总结为:
移动:移动玩家在游戏中控制的角色。攻击:操纵玩家在游戏中的角色产生攻击。UseProp:操纵游戏中玩家的角色产生一种使用道具的行为。等等。行为。该状况可概括为:
位置:玩家在游戏世界中所操作的角色的位置。HP:玩家操作的角色的血量。UnderAttackEvent:玩家操作的角色受到攻击的。。。等等。状态。考虑到多人在线游戏设计和主流设计思路,
有两种模式:帧同步和状态同步。
帧同步模式以《王者荣耀》等MOBA游戏为。。。相对单一的设计。主要是将用户输入部分改为专门的帧同步服务器转发广播。这样就可以实现“多人游戏”了(当然实际实现没那么简单)。
状态同步模式以《魔兽世界》等MMO游戏为。。。相对单机的设计。服务器接收到用户的输入后,会先在服务器上处理一些核心逻辑(比如攻击判断,血扣等。),最后直接同步客户端需要的状态信息。
但不可避免的是,仍然会有一些操作,尤其是那些依赖于物理引擎的操作,将由客户端来处理。单机游戏中的核心逻辑分散在客户端和状态服务器中。以及更适合AI训练的游戏框架。如下图所示:
强调游戏的服务器端应该拥有游戏的所有核心逻辑规则,甚至包括集成游戏中的物理引擎(可选)。
支持玩家各种行为的后续结果和反馈规则。比如玩家攻击玩家后,如何扣血。游戏本身的基本逻辑。比如玩家包里的食物,过几天就会烂掉。场景中出现的道具会定期刷新。等等,这些都是核心逻辑。
但是不一定要带表示层。
在接口层,它与传统的C-S协议一致。从客户端和AI在线决策服务器接收“用户输入”,并返回相同的状态输出。与AI的连接可以用最简单的TCP socket进行通信。作为AI端的服务器,
游戏服务器充当客户端。这里的考虑主要是为了方便AI端的请求负载均衡。这种改编对传统游戏框架进行了最小程度的修改。出于强调游戏的服务器端和拥有一套完整的游戏核心逻辑的原因,
主要是AI端需要在没有客户端的情况下,发送一个用户的操作,但服务器要能处理所有的后续逻辑。比如说AI端说向前跳跃,服务端需要检测AI端的跳跃是否合法(有无体力,是否被禁锢等等),
并且要在真实的物理层面支持跳跃是否中途被障碍物阻挡,落点在哪(可选)。这些都决定了,适合AI训练的游戏框架是这样处理。目前已知的,符合这种设计的游戏引擎是Unreal。
采用dedicated server的项目,基本上原生支持上述的要求。以下是更详细的描述了,做为在强化学习训练中,做为环境一部分的游戏服务器,会被同时启动大量的(1000+局)单局同时训练。
并且可以支持的不同纬度,更好的适配AI训练。
监督学习的训练相对简单一些。主要是要通过游戏服务器,把单局里的用户输入以及状态的改变,都保存成记录(录像),以便监督学习平台训练。
常见的问题是传统服务器里并没有全量的状态(比如fps游戏里玩家摄像机的朝向),会影响训练效果。上线后的阶段和AI在线决策服是一样的。
标题:技术干货:适合AI训练的游戏框架
链接:https://www.52hkw.com/news/rj/67039.html
版权:文章转载自网络,如有侵权,请联系删除!