Unreal回放系统剖析(上)

这是【游戏开发那些事】第56篇原创

两周前,在Epic举办的UnrealCircle会议上,我受邀分享了一场关于“UE4回放系统”的技术演讲。不过由于时长限制,很多细节都没有得到进一步的阐述。

这篇文章会在演讲的基础上拓展更多内容,更好的帮助大家去理解虚幻引擎的回放系统,建议大家结合源码进行阅读和学习。

目录(上篇)

  • 一、帧同步、快照同步、状态同步

  • 二、UE4网络同步基础

  • 三、回放系统框架与原理

    • 3.1 回放系统核心实现思路

    • 3.2 回放系统简单使用

    • 3.3 UE4回放系统架构

      • 3.3.1 数据的存储和读取

      • 3.3.2 数据的组织和存储

      • 3.3.3 小结

回放,是电子游戏中一项常见的功能,用于记录整个比赛过程或者展示游戏中的精彩瞬间。通过回放,我们可以观摩高手之间的对决,享受游戏中的精彩瞬间,甚至还可以拿到敌方玩家的比赛录像进行分析和学习。

4c7c021d40bff4d96e98ba1e7f595c17.png

>>彩虹6号中的击杀回放

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

在上一篇文章“游戏中的回放系统是如何实现的?”里,我们简单讲解了实现回放系统的三种思路:

  • 逐帧录制游戏画

  • 逐帧录制玩家的输入操作

  • 定时录制玩家以及游戏场景对象的状态

总的来说,由于第一种录制画面的方案存在着“占用大量存储空间”、”加载速度慢”、“不够灵活”等比较严重的问题,我们通常采用后两种方式来实现游戏中的回放。

帧同步、快照同步与状态同步

虽然不同游戏里回放系统具体的实现方式与应用场景不同,但本质上都是对数据的记录和重现,这个过程与网络游戏里面的同步技术非常相似。举个例子,假如AB两个客户端进行P2P的连接对战,A客户端上开始时并没有关于B的任何信息。当建立连接后,B开始把自己的相关信息(坐标,模型,大小)发给A,A在自己的客户端上利用这个信息重新构建了B,完成了数据的同步。

思考一下,假如B不把这个信息发给A,而发给自己进行处理,是不是就相当于录制了自己的机器上的比赛信息再进行回放呢?

5195354cc41cde016b5f60713290e57b.png

>>AB两个客户端进行联机对战

没错,网络游戏中的同步信息正是回放系统中的录制信息,因此网络同步就是实现回放系统的技术基础!

在正式介绍回放系统前,不妨先概括地介绍一下游戏开发中的网络同步技术。我们常说网络同步可以简单分为帧同步、快照同步状态同步,但实际上这几个中文概念是国内开发者不断摸索和自创的名词,并非严格指某种固定的算法,他们有很多变种,甚至可以结合到一起去使用。

  • 帧同步,对应的英文概念是LockStep/ Deterministic Lockstep。其基本思路是每固定间隔(如0.02秒)对玩家的行为进行一次采样得到一个“Input指令” 并发送给其他所有玩家,每个玩家都缓存来自其他所有玩家的“Input指令” ,当某个玩家收到所有其他玩家的“Input指令”后,他的本地游戏状态才会推进到下一帧。

    5a3571c0e4a67c5ae52c4a65df0cae2b.png

  • 快照同步,可以翻译成Snapshot Synchronization。其思想是服务器把当前这帧整个游戏世界的状态进行一个备份,然后把这个备份发送给所有客户端,客户端按照这个备份对自己的世界状态进行修改和纠正进而完成同步。(快照,对应的英文概念是SnapShot,强调的是某一时刻的数据状态或者备份。从游戏世界的角度理解,快照就是整个世界所有的状态信息,包括对象的数量、对象的属性、位置线信息等。从每个对象的角度理解,快照就是指整个对象的各种属性,比如生命值、速度这些。所以,不同场景下快照所指的内容可能是不同的。)

    15d88fc8031602716bafc0cde2a99c21.png

  • 状态同步,可以翻译成State(State Based) Synchronization。其思想与快照同步相似,也是服务器将世界的状态同步给客户端。但不同的是状态同步的粒度变得非常小(以对象或者对象的属性为单位),服务器不需要把一帧里面所有的对象状态进行保存和同步,只需要把客户端需要的那些对象以及需要的属性进行保存和发送即可。

    daf12f5af84dfd3194461c2f4879f7cc.png

拓展:快照同步其实是状态同步的前身,那时候整个游戏需要记录的数据量还不是很大,人们也自然的使用快照来代表整个世界在某一时刻的状态,通过定时地同步整个世界的快照就可以做到完美的网络同步。但是这种直接把整个世界的状态进行同步的过程是很耗费流量和性能的,考虑到对象的数据是逐步产生变化的,我们可以只记录发生变化的那些数据,所以就有了基于delta的快照同步。

更进一步的,我们可以把整个世界拆分一下,每一帧只针对需要的对象进行delta的同步,这样就完全将各个对象的同步拆分开来,再结合一些过滤可以进一步减少没必要的数据同步,最后形成了状态同步的方案。更多关于网络同步技术的发展和细节可以参考我的文章—— 《细谈网络同步在游戏历史中的发展变化》。

UE4网络同步基础

在虚幻引擎里面,默认实现的是一套相对完善的状态同步方案,场景里面的每个对象都称为一个Actor,每个Actor都可以单独设置是否进行同步(Actor身上还可以挂N个组件,也可以进行同步),Actor某一时刻的标记Replicated属性就是所谓的状态信息。服务器在每帧Tick的时候,会去判断哪些Actor应该同步给哪些客户端,哪些属性需要进行同步,然后统一序列化成二进制(可以理解为一个当前世界状

最低0.47元/天 解锁文章
Jerish_C
关注 关注
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
UE5实时录屏插件(FFmpeg)
01-28
UE5实时录屏插件,支持windows和Linux系统;使用FFmpeg库封装接口,代码实现;对于学习使用有参考意义
TinyReplaySystem系统设计和开发
宁静致远
04-23 1619
TinyReplaySystem系统设计和开发 简单探讨和分析下游戏系统的设计和针对特定需求功能的TinyReplaySystem设计和具体实现 需求分析 在屏幕舞台中,玩家操控动画角色通过手势缩,移动,修改角色颜色等属性,用户操控所需要的角色进行PlayAnimation,角色扮演。扮演结束,保存到本地,可以用户所扮演的动画。相当于录制屏幕指定区域,存储成视频,加
游戏中的系统是如何实现的?
Jerish的博客
03-22 1万+
这是【游戏开发那些事】第54篇原创系统,是电子游戏中常见的一项功能。通过,我们可以观摩高手之间的对决,重复享受游戏中的精彩瞬间,甚至还可以拿到敌方玩家的比赛录像进行分析和学习。总的来说,功能常用于记录整个比赛的过程细节或者展示游戏中的精彩瞬间,非常贴合竞技类游戏玩家的需求。从实现技术角度来讲,下面的这些功能本质上都属于的一部分精彩瞬间展示: FIFA / ...
《Exploring in UE4》Unreal系统剖析(下)
UWA—简单优化,优化简单!
04-18 488
这是在“UE4系统”技术演讲基础上的扩展,帮助大家去理解虚幻引擎的系统
【UE5 新手向】网络同步1 —— 开启 Actor 的位置网络同步
LanQ的博客
06-02 1110
在播设置中,将 Number of Players 改为2,并将 Net Mode 改为Play As Listen Server。开启 Replicate Movement 和 Replicates,然后点击编译。选择 Harvest Components,并选择继承 Actor。运行游戏,就可以发现刚刚的物体可以进行网络同步了。播游戏,可以发现角色默认开启了同步。在 Details 面板选择新建蓝图。停止播,选中场景中的某个物体。新建一个第三人称 C++ 项目。
【UE4】反射系统分析(二)
胡嘿嘿
06-19 950
文章目录INCLASS_NO_PURE_DECLSENHANCED_CONSTRUCTORS 这节主要分析一下generated.h文件中的代码。首选先创建一个继承AActor的类,并编译,UHT会生成一个generated.h文件。下边来分析一下AActor类中的GENERATED_BODY()宏的作用。 #define BODY_MACRO_COMBINE_INNER(A,B,C,D) A##B##C##D #define BODY_MACRO_COMBINE(A,B,C,D) BODY_MACRO_C
ffmpeg 推流可以暂停么_UE4结合FFmpeg实现录制和推流画面(一)
weixin_42499899的博客
11-30 1227
之前,有碰到过需要在游戏中录制画面,或者推流游戏画面的需求,所以这里使用了FFmpeg来帮助做到了这一点.下面简单的把这个流程记录一下,这里先只讨论录制的功能,关于FFmpeg内部的细节就先不说了.​ 目前的工作流程:​ Game,Render,Auido,Encode,共4个线程:​ Game:记录累加时间,每隔一定时间(1000毫秒/输入的fps(帧率))去把最近一次记录的渲...
深入理解UE4宏定义—— GENERATED_BODY
cartzhang的专栏
06-01 1万+
本文章由cartzhang编写,转载请注明出处。 所有权利保留。 文章链接: 作者:cartzhang一、GENERATED_BODY 都实现了什么? 在前几年的写引擎的时候,也类似使用过这些宏定义的方法,用法也是比较复杂的。现在就借UE4来顾和分析一下。 测试版本:4.15 看例子:// Fill out your copyright notice in the Descript
UnrealEngine-4.27.0-release源码
09-28
UnrealEngine-4.27.0-release源码 需要自己用vs编译
Game Development Projects With Unreal Engine
08-11
Game Development Projects With Unreal Engine Learn to Build Your First Games and Bring Your Ideas to Life Using UE4 and C++ by Hammad Fozi Gonçalo Marques David Pereira Devin Sherry (z-lib.org)
Unreal Engine CarSim_Unreal_plugin
09-26
使用Unreal Engine 开发车辆组装,碰撞,模拟的插件的细节技术
MonsterHunt_Unreal_
10-04
Source for MonsterHunt Game mode v503 for UE1
Unreal Engine RDG 入门教程
02-09
RDG 是 Unreal Engine 渲染系统中的一个关键组件,负责管理渲染依赖关系,确保渲染过程的正确性和高效性。RDG 的全称是 Rendering Dependency Graph,顾名思义,就是渲染依赖关系图。RDG 的主要功能是对渲染资源的...
FFMPEG4.1源码分析之 过时代码管理 attribute_deprecated
ice_ly000的博客
05-13 2164
目录 0FFMPEG过时代码管理 1attribute_deprecated 1.1定义 1.2 作用 2FF_DISABLE_DEPRECATION_WARNINGS宏 2.1定义 2.1 作用 3 示例 0FFMPEG过时代码管理 FFMPEG中对于过时,以及即将在未来某个版本中将去掉的某些API和变量,一般采取如下做法 在库的version.h头文件中声明一...
帧同步联机战斗(预测,快照,滚)转自(http://www.manew.com/thread-140259-1-1.html)
嘿嘿
08-14 2003
终于要写帧同步这块了,这块很难讲清楚,细枝末节有很多优化点,也有一些不同的优化方向,根据不同项目类型,对操作手感的要求,对联机玩家的个数等,会有不同的难点和痛点。不同的优化方向,优化手法的差异,可能导致一些争论。并且,帧同步,本身也有很多变种,以应对不同的需求。所以,我一切都是基于我们的项目类型(ACT)来做的方案和优化,并不一定适合其它也需要帧同步的游戏,故在此提前说一下,以免引起一些不必要的误...
【网络同步】浅析帧同步和状态同步
weixin_42565127的博客
01-03 2734
谈到网络游戏,不可避免要谈到现有两种比较常见的网游同步技术:帧同步和状态同步 说到这两个名词,大家夸夸奇谈,都能讲上些许自己的见解,我反正啥也不懂 这篇文章就打算着重学习一下这两种技术的基础和原理
UE4网络同步(二)——深入同步细节
热门推荐
Jerish的博客
10-29 2万+
前言 UE同步是一块比较复杂而庞大的模块,里面设计到了很多设计思想,技巧,技术。我这里主要是从同步的流程分析,以同步的机制为讲解核心,给大家描述里面是怎么同步的,会大量涉及UE同步模块的底层代码,稍微涉及一点计算机网络底层(Socket相关)相关的知识。 PS:如果只是想知道怎么使用同步,不建议阅读这篇文章,不过可以参考我另外一篇博客 UE4网络同步(一)——理解同步规则 另外,博主参考的源...
UE4 录制及重播功能(类似死亡) 基于Wiki教程修改
JiangCoolguy的博客
01-04 4025
UE4中录制和重播功能也是通过网络功能实现的,即使是单机同样可以实现。 官方文档中简单介绍了一下,不是很详细。官方文档——重播系统 重播系统的工作原理是使用 DemoNetDriver从内置复制系统读取数据,类似于NetDriver在实时联网游戏环境中的工作方式。任何设置为复制数据的项目,即使项目实际上没有多人模式,无需进一步修改即可兼容重播系统。该系统的工作方式是用 Dem...
2024 年 5 月区块链游戏研报:市值增长、玩家参与变迁、迷你游戏兴起
最新发布
m0_60517769的博客
06-11 668
2024 年 5 月区块链游戏行业概览:市场总市值持续增长,玩家参与模式逐步演变,迷你游戏与游戏 bots 崭露头角。
unreal media capture 源码分析
08-01
unreal media capture 是一款用于捕获和编码视频和音频的工具,其源码分析主要涉及到软件的基本架构、核心功能和关键算法等方面。 首先,unreal media capture 的基本架构包括三个主要模块:媒体捕获模块、媒体编码模块和媒体传输模块。媒体捕获模块负责从摄像头或屏幕等设备中获取原始音视频数据;媒体编码模块将原始数据进行压缩编码,以提高数据传输效率和减少带宽占用;媒体传输模块负责将编码后的数据传输到目标设备或网络。 其次,unreal media capture 的核心功能包括音视频流的捕获、编码和传输等。捕获功能通过与音视频设备的交互,获取原始的音视频数据流;编码功能将原始数据进行压缩编码,以减小数据体积和提高传输效率;传输功能将编码后的数据流传输到指定设备或网络。 另外,unreal media capture 的源码分析还需深入理解其中的关键算法。例如,音视频的编码算法主要采用诸如H.264、AAC等标准的编码算法,需要了解其原理和应用;传输模块中的网络传输算法需要熟悉网络协议和数据传输机制,如UDP或TCP等;另外,还需要分析源码中的数据流处理算法,以及视频帧率、分辨率和音频采样率等参数的处理方式。 总之,unreal media capture 源码分析需要对软件的基本架构、核心功能和关键算法等方面有深入的理解。只有通过深入分析源码,我们才能全面了解该工具的原理和功能,进而进行二次开发或优化工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 游戏开发入门(一)游戏开发概述 70806
  • UE4摄像机系统解析 70383
  • 游戏开发入门系列(目录) 65389
  • 如何学习大型项目的源码? 52328
  • Unity(C#.net)网络通信问题解决(服务器开启失败,Socket下的“由于目标机器积极拒绝,无法连接”异常) 49796

分类专栏

  • 游戏开发入门 14篇
  • Unreal Engine 4(虚幻引擎) 38篇
  • C++基础 38篇
  • 面试与笔试 8篇
  • UE4 37篇
  • Unity 3篇
  • 游戏开发 49篇
  • 操作系统 5篇
  • 计算机网络 2篇
  • SVN工具 1篇
  • 代码规范 3篇
  • 前端 2篇
  • 编程工具 6篇
  • 图形学与渲染 1篇
  • 生活 3篇

最新评论

  • UE4移动组件详解(一)——移动框架与实现原理

    qq_67542568: 写的真好 擦 瞬间悟了

  • 游戏开发入门系列(目录)

    qq_25073893: 视频链接都已经失效了表情包

  • Unreal Fest 上海 2023 参会总结

    Jerish_C: 关注UE的GitHub最新源码就行。 Iris以后应该是想取代现在的同步系统,稳定的话很难说,我感觉一两年内都比较困难

  • Unreal Fest 上海 2023 参会总结

    _rebort: 感谢分享。 会上有分享Iris后续的Roadmap之类的吗? Iris和现有的复制系统以后会是什么关系,二选一,还是替代现有的复制系统? 以及Iris在哪个版本会稳定下来,5.3里还是实验性。

  • UE4移动组件详解(二)——移动同步机制

    图布修: 高质量的讲解!我以为我会做笔记,精简一些句子,结果发现每句话都像是针对我的认知精简过的,没法再减了。最后只能整体收藏,respect!

大家在看

  • C++学习手册
  • 数据分析必备:一步步教你如何用matplotlib做数据可视化(1) 465
  • MySQL中的日期格式化匹配
  • Day52 代码随想录打卡|二叉树篇---二叉搜索树中的众数
  • 什么是深拷贝;深拷贝和浅拷贝有什么区别;深拷贝和浅拷贝有哪些方法(详解)

最新文章

  • Unreal Fest 上海 2023 参会总结
  • 虚幻引擎技术开放日完整议程 | Unreal Fest 上海2023
  • 2023科隆游戏展开幕~黑神话等多款国产游戏亮相
2023年10篇
2022年6篇
2021年14篇
2020年35篇
2019年21篇
2018年29篇
2017年19篇
2016年29篇
2015年25篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

聚圣源刀歌之短刀行给儿童起乳名女孩新生儿起姓名测试结果幼儿起名初恋那件小事下载姓余的男孩起名的三个字品牌起名大全老电影大全起少女小名洋气好听的二哈的白猫师尊微博车截图起个叫什么先生的网名机电科技起名馨越公寓起名字男孩美赫集成吊顶出生老鼠起名公司起名参考大全四字时尚女装店铺起名方法医圣叶皓轩全文免费网上起名准么最终幻想4攻略焦裕禄精神心得体会辽宁都市频道年猪年宝宝宝宝起名宜用字冒菜加盟店幼儿园各班创意起名饺子馆起名大全免费伤仲永原文及翻译起名的 易经webplayer淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化