查看原文
其他

复制图表概述和正确的复制方法

虚幻引擎 2020-09-06


如果要制作类似于《堡垒之夜》这样的大型多人在线游戏,标准的网络复制策略完全无法带来预期的效果。在动态场景中存在50000个Actor并且同步的情况下,如果多达100个客户端(玩家)四处移动,确定每个Actor与每个客户端的“网络相关性”会加重服务器CPU负荷。尽管您可以通过降低复制速率和错开Actor更新时间的方法减轻CPU负荷,但是由于更新频率降低了,客户端体验将变得迟缓。更重要的是,这种方法无法解决根本性问题——在每帧上针对每个客户端测试每个Actor的总体策略无法很好地满足大型游戏的需求。

对于这类大型游戏,需要采用不同的方法。为此,我们构建了复制图表(Replication Graph)插件。复制图表可以很好地应对大型多人游戏,因为通过减少冗余工作和缓存数据而非始终重新计算,它减轻了服务器CPU问题。它的实现机制有二,一是依据Actor在游戏中的作用以及Actor与其他Actor的关系以不同的方式处理Actor;二是存储可供多个Actor、多个客户端使用的数据,甚至是可跨多个帧使用的数据。

借助复制图表(Replication Graph)插件,您可以自定义网络复制,从而构建无法借助传统复制策略构建的大型多人游戏。


复制图表的工作原理

复制图表 包含一系列复制图表节点。这些节点根据需要创建要复制到每个客户端的Actor列表。这些节点为持久对象,可跨多个帧存储数据以及在客户端连接间共享结果。它们可以基于相对较小的数据集运行,而非在每帧上针对每个连接对每个Actor求值。由于使用了持久和可共享的数据,复制图表系统能够快速为客户端生成复制列表,而且能够充分处理大型多人游戏。

该系统为连接和Actor提供了更加一致的数据结构,因此可以拉取相关数据并快速进入流程的下一阶段。

借助复制图表(Replication Graph)插件,您可以确定应将哪些Actor复制到哪些连接。其中包括自定义打开Actor信道的时间和方式、在这些信道上复制Actor的时间以及关闭这些信道的时间。因此,这可以帮助您提高效率并除去冗余。

复制图表节点
  

《堡垒之夜》复制图表的总体布局


复制图表节点被划分为处理各种任务,而且可在具体了解游戏的工作原理的情况下编写。一个节点保存跟踪玩家状态的列表,另一个节点跟踪始终相关的复制等等。通过将这些任务分至不同的节点,可以高效地组织需要复制的内容并消除系统开销。例如,“Grid Spatialization 2D”节点将场景分成网格单元,并保存每个单元可见的Actor列表。这避免了客户端对每个Actor执行距离检查,因为它们只需要查找它们当前占用的网格单元并复制其可见Actor列表即可。通过将Actor注册到相应的节点,可以确保对每个Actor进行求值以便于进行复制的方式与其在游戏中的角色最相称。

总结

构建具有100个(或更多)连接客户端、场景中包含成千上万个Actor的游戏时,复制图表系统可以提供远多于以往的性能优化方法,以便您可以创建在线流畅运行的大型多人游戏。

由于未来可能要对该插件执行些微API更改,目前它尚处于 抢先体验 阶段。该系统仅可供开发大型游戏的高级用户使用。但是,其代码稳定,经过了大量测试并在《堡垒之夜:大逃杀(Fortnite Battle Royale)》中进行了实际使用。如果要直接使用此系统,请 单击此处,阅读有关如何在项目中启用的说明;或查看ShooterGame示例(可从Epic Games启动程序中获取),其中随附的复制图表与在《堡垒之夜》中使用的复制图表相似。

要了解更多信息,请参阅Epic的复制图表(Replication Graph)文档,或者观看下面的直播。




III  近期焦点  III



如需获得更多虚幻引擎4的授权合作方式和技术支持,请发送邮件至EGC-Business@epicgames.com咨询;


如果你想来Epic工作,扫描下方二维码关注我们后发送关键词“招聘”,即可了解我们的最新招聘信息。Epic Games欢迎你的加入!

长按屏幕选择“识别二维码”关注虚幻引擎

“虚幻引擎”微信公众账号是Epic Games旗下Unreal Engine的中文官方微信频道,在这里我们与大家一起分享关于虚幻引擎的开发经验与最新活动。




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存