每个游戏的回放系统是怎么做到的?

回放系统,是电子游戏中常见的一项功能。通过回放,我们可以观摩高手之间的对决,重复享受游戏中的精彩瞬间,甚至还可以拿到敌方玩家的比赛录像进行分析和学习。总的来说,回放功能常用于记录整个比赛的过程细节或者展示游戏中的精彩瞬间,非常贴合竞技类游戏玩家的需求。

从实现技术角度来讲,下面的这些功能本质上都属于回放的一部分:

  • 精彩瞬间展示:FIFA / 实况足球 / NBA2K / 守望先锋 / 极限竞速:地平线 / 跑跑卡丁车
  • 死亡回放: 守望先锋 / 彩虹六号 / 使命召唤 / CODM
  • 全局比赛录制、下载、播放: 守望先锋 / CSGO / Dota / LOL / 魔兽争霸 / 星际争霸 / 红色警戒 / 坦克世界 / 绝地求生 / 王者荣耀
  • 观战(常用于非实时观战): CSGo / 堡垒之夜 / Dota
  • 时光倒流:Braid / 极限竞速:地平线

每个游戏的回放系统是怎么做到的?插图1

彩虹6号中的击杀回放

每个游戏的回放系统是怎么做到的?插图3

守望先锋中的完整比赛回放

其实早在20世纪90年代,回放系统就已经诞生并广泛用于即时战略、第一人称射击以及体育竞技等类型的游戏当中。

回放系统的录制方式

当我们打开CSGo或者Dota回放文件夹的时候会发现这些回放的文件并不大,一场比赛下来最多也就几十兆,远小于对应时长的视频,那么回放到底是如何实现的呢?

每个游戏的回放系统是怎么做到的?插图5

Dota录制文件大小,打开后一般是乱码

通常来说有三种方式,我们会逐一的展开来讲:

  1. 逐帧的录制游戏画面
  2. 逐帧录制玩家的输入操作
  3. 定时录制玩家以及游戏场景对象的状态

第一种,逐帧的录制游戏画面。就像现实中体育赛事用摄像机捕捉现场画面那样,我们可以游戏渲染的时候直接从底层抓取画面信息来持续的生成一个视频流文件,然后通过任意的一个视频播放器都进行解析和回放。

优点:

  • 播放简单,随便找个视频播放器即可
  • 方便分享到社交平台
  • 完美支持倒放和跳跃进度

缺点:

  • 占用大量的存储空间
  • 录制性能开销较大
  • 加载速度慢,很难实时地用于游戏中
  • 不够灵活,视角受限,无法定制特殊功能

一般来说,由于存储空间以及各种性能问题,录制游戏画面方式几乎不会被用于游戏开发中。

每个游戏的回放系统是怎么做到的?插图7

实况足球比赛回放(可以任意调整视角)

第二种,逐帧录制玩家的输入操作。其实游戏本身就是一个可视化的软件程序(或者说是一个渲染器),每一时刻的画面都是通过玩家的操作逻辑来驱动的。在考虑游戏内进行回放的情况下(比如死亡回放),我们完全没有必要去录制冗余的画面信息,只需要记录玩家的输入信息然后去驱动游戏逻辑改变画面就可以了。

每个游戏的回放系统是怎么做到的?插图9

录制帧输入,回放时按照时间触发这些指令信息即可

优点:

  • 录制数据极小,存储空间友好,网络发送便捷
  • 录制性能开销几乎可以忽略
  • 对于帧同步的游戏,额外开发工作较少
  • 播放视角可以随意调整和定制

缺点:

  • 回放消耗性能很大,等价于重新跑游戏
  • 进度跳跃比较困难、倒放很困难
  • 只能在游戏内播放
  • 要严格保证游戏内逻辑计算结果的一致性

通常来说,这种实现方式可以完美的利用游戏逻辑去进行回放,而且消耗非常小。对于帧同步(LockStep)的网络游戏,不需要额外做太多的工作,适合性能要求严格、物理计算不太需要同步的RTS、MOBA、FTG等类型游戏。

有了玩家输入信息我们可以较好的向前推进游戏流程,但是却很难执行倒退、向前跳跃等操作。举个场景,假如玩家A在第10帧点击攻击按钮击杀了一个AI并回复了5点生命值,第20帧点击武器制作按钮制作了一把新的武器但是同时由于被敌人击杀而掉落。

如果回放时想从第50帧跳回到第5帧的画面,那么就需要把玩家A复活,新创建的武器删掉,扣掉恢复的生命并复活AI。按照上述的第二种方案我们在只记录玩家的输入信息【5帧:攻击按钮 20帧:制作按钮】的情况下,几乎不可能顺利还原所有逻辑。根本的原因是,游戏很容易根据当前的场景和玩家输入推算出下一帧的结果,却很难根据当前一帧的结果和玩家输入推算出上一帧的游戏状态。

除此之外,我们需要保证任何一个操作都必须有一个回滚的逻辑并且不同播放端回滚后的结果是严格一致的的,这些都都远远增大了跳跃播放的难度。

因此,我们可以考虑第三种方案,定时记录玩家以及游戏世界的状态信息(或者说游戏快照)。所谓的状态信息就是某一时刻的对象身上附带的状态信息,比如玩家的生命值、移动位置等。如果我有了每一帧玩家的坐标信息,我就可以完美的处理播放、快进、跳跃等逻辑,但很明显这样要记录的数据要多很多。

每个游戏的回放系统是怎么做到的?插图11

Dota中的回放,录制状态信息

优点:

  • 录制数据量中等,可以根据具体情况调整和优化
  • 录制性能开销较少
  • 回放时性能消耗尚可
  • 可以支持跳跃、倒放等常见功能
  • 不用担心计算一致性问题(浮点数精度、随机数等)
  • 播放视角可以随意调整和定制

缺点:

  • 实现逻辑相对复杂
  • 只能在游戏内播放
  • 录制数据量和性能上不如第二种方案

总的来说,回放的本质是记录游戏的过程信息,画面是最终的表现效果。为了更好的利用游戏程序本身提供渲染功能和逻辑计算功能,同时从性能、数据量、自由度等多角度考虑,我们通常会根据游戏的类型来选择第二种或者第三种方案来实现游戏内部的回放系统。

回放系统与网络同步

通过上面的描述,我们很容易发现,回放系统的实现逻辑与网络同步非常相似。从原理上来讲,我们完全可以认为网络同步是实现回放系统的技术基础,上面第二种方案对应的就是网络同步中的“帧同步(LockStep)”技术,第三种方案对应就是网络同步中的“状态同步”技术。

虽然大家常把网络同步可以简单分为帧同步和状态同步,但实际上这两个概念是国内开发者不断摸索和自创的名词,并非严格指某种固定的算法,他们有很多变种,甚至可以结合到一起去使用。

在如今的游戏中,状态同步是比较流行的实现方式,也可以比较好支持回放的各种功能(比如吃鸡、守望、彩六等)。但是如果频繁的录制整个世界的快照会导致消耗非常大,所以通常会采用定时录制快照+持续录制Delta的方式进行处理,简单来说就是每隔一段时间录制一个存档点(称为Checkpoint),每个存档点之间持续的录制Delta数据(变化的状态信息),每次加载回放的时候都先找到合适的存档点,然后再通过读取中间的Delta数据快进过去。

每个游戏的回放系统是怎么做到的?插图13

Checkpoint+Delta方案示意图

Unreal的回放系统就是按照上面的方式实现的,可以比较好的支持快进、跳转、暂停等大部分回放功能,我会在下一篇文章中详细的分析虚幻引擎回放系统的实现原理,尽请期待!

每个游戏的回放系统是怎么做到的?插图15

UE中的回放录制命令

(0)
上一篇 2022-08-29 09:20:07
下一篇 2022-08-29 09:23:26

相关推荐

  • 《某大叔的 VRMMO 活动记》宣布改编电视动画 前导视觉图公开

    由椎名ほわほわ所著轻小说作品《某大叔的 VRMMO 活动记》,官方宣布将改编电视动画的消息,并且是出了前导视觉图。 轻小说《某大叔的 VRMMO 活动记》,其故事描述喜爱高自由度的 VRMMO「重启自由之地 Online(ワンモア・フリーライフ・オンライン)」38 岁上班族「田中大地」,在游戏中钻研各式被认为是废物技能将其发挥到极致的奇幻故事。 本作目前即将…

    2023-02-11
    2610
  • 《模拟城市:我是市长》在开元古都感受古人衣食住行

    经过长期的精心筹备与制作,《模拟城市:我是市长》全新的国风版本与玩家们见面的日期已逐步临近。在即将推出的开元古都地区,玩家们将能尽情打造古风城市,沉浸式地感受古人的衣食住行。这里,就让我们抢先了解! 首先,在地图场景的搭建上,开元古都地区参考了许多古代文献资料,例如:中国古建筑结构、唐代建筑格局等等,并在建筑外形方面,大胆融入了各种神话元素和创新元素,以此为…

    2023-06-30
    2100
  • 孙权为什么叫孙十万(孙权的外号是什么)

    孙十万这个外号,得自于孙权不止一次领着数万大军,诈称十万进攻魏国,最终屡次失败。于是现在的网友,戏称孙权每次狂送十万人头,为三国第一经验包。 第一次,时孙策让孙权率十万大军进攻只有万余人防守的广陵,但当时的广陵太守陈登,颇有谋略,孙权手上的十万人愣是没把广陵城啃下来,反而是自己折损了万余人,不得不灰溜溜的撤军。 第二次,孙权诈称十万大军,攻打合肥,当时的合肥…

    2022-07-24
    4410
  • 15v15全新赛制全面进化 2023WCL坦克世界冠军联赛扬帆起航

    2023WCL坦克世界冠军联赛(World of Tanks Championship League)15vs15战场传奇继续!2023WCL分为预选赛I II、小组赛和淘汰赛三个阶段。在预选赛I II中位列小组第一名的队伍将晋级小组赛。在小组赛中,16支队伍将分为2个小组展开各自角逐,每个小组前四名晋级双败淘汰赛。2023WCL,15vs15战场传奇继续!…

    2023-04-29
    1900
  • steam手机令牌用不了怎么办?

    随着《绝地求生》游戏的回温,最近芝士君收到了好多小伙伴关于“令牌”的问题。 在这里为大家专门出一篇文章科普一下,好好看完这篇文章,以后妈妈再也不用担心我《绝地求生》游戏令牌出问题啦! 在这里,芝士把大家遇到的问题总结为5点,为大家一一解释清楚。 一,《绝地求生》游戏:我绑令牌的手机坏掉了,但是手机号卡还在,我的手机号还能收短信,我该怎么办? “手机抽了”是很…

    2022-09-25
    6630

文章包括原创、肖像、评论、剧本、改编、译本、转载、游戏、文字等内容,由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 782699939@qq.com 举报,一经查实,本站将第一时间删除内容。
本文链接:https://www.dianler.com/archives/126100.html

联系我们

联系我们

QQ号:3623667043

返回顶部