游戏思考04:网络游戏同步算法产生原因和相关介绍:跟随(插值)、预测、延迟补偿,三种算法(未完待续02/07)

2023-05-16

文章目录

    • 一、网络同步的典型场景
    • 二、简单粗暴的数据同步为何行不通?(帧同步的难题)
      • 1)网络同步的流程
      • 2)网络延迟和抖动的直观解释
      • 3)产生卡顿、瞬移的原因分析
      • 4)测试网速网速
    • 三、网络同步的优化算法(同步算法,目的是缓解网络延迟抖动的问题)
      • 0)直接网络同步
      • 1)插值算法(跟随算法)
      • 2)预测算法
      • 3)延迟补偿算法
    • 四、「帧」的切确含义(帧同步的内容)
      • 1)状态同步和指令同步
      • 2)延迟执行
      • 3)锁帧算法
      • 4)严格帧同步、乐观帧同步
      • 5)帧同步的应用场景和注意事项
    • 五、参考资料

一、网络同步的典型场景

  • 定义
    可以简单认为,网络同步 = 实时的多端数据同步+实时的多端表现同步(数据同步是后端操作,而表现同步就是让前端对后端同步过来的数据进行进一步的处理从而达到表现上的一致)

赛车游戏、MMORPG游戏、王者荣耀、红色警戒局域网的同步

二、简单粗暴的数据同步为何行不通?(帧同步的难题)

1)网络同步的流程

  • 概念
    客户端定时报告位置,服务端转发,其他客户端直接收到服务端的信息直接设置坐标

  • 缺点
    玩家看到的画面会有顿挫感,画面像PPT一样,其他玩家像瞬移一下(为了照顾网络不好的玩家,我们会假定网络延迟都比较高,比如100毫秒。)

  • 解决方法
    若是画面切换的频率高宇24hz,就可能不会有卡顿问题,还会受到网络延迟抖动的影响

2)网络延迟和抖动的直观解释

  • 延迟和抖动
    延迟在200ms内,玩家不会感到明显察觉(经验值)
  • 类似测试数据
网络												ping
电脑->匹配服务器 						25ms
手机wifi->低配服务器					50ms
电脑->高端服务器						3ms
手机wifi->高端服务器					3ms
手机4g											60-120ms不稳定
局域网->局域网服务器				0.2ms

3)产生卡顿、瞬移的原因分析

1)地域的差别
2)网络延迟和抖动,发7帧的效果等于3帧的包(其一,消息的传播需要时间,会有延迟;其二,消息的到达时间并不稳定,有时候两条消息会相隔较长时间,有时候却相隔很短。)

  • 举例
    图12-4展示了在网络不太通畅的情况下,服务端每隔0.033秒(即每秒发送30次)发送消息给客户端,客户端收到消息的间隔时间。可见,有部分接近0.4秒,对应图12-3右图①的情形,还有部分接近0,对应图12-3右图②的情形。平均间隔时间约为0.1秒,相当于每秒同步10次,也就是客户端10帧,远不及服务端发送的30次。

在这里插入图片描述
假如客户端每隔0.033秒向服务端发送坦克的位置信息,服务端转发给其他客户端,其他客户端并不能保证每隔0.033秒就更新一次位置,较坏的情况下,有可能每1秒才更新一次位置,玩家会明显感觉到卡顿。

  • 做法
1)尽量发送更少的数据,数据越少,发生数据丢失并重传的概率就越小,平均速度越快
2)又比如,在客户端上做些“障眼法”,让玩家感受不到延迟。(网络同步优化算法)

4)测试网速网速

限制网速工具 netlimiter
增加延迟工具 clumsy

三、网络同步的优化算法(同步算法,目的是缓解网络延迟抖动的问题)

0)直接网络同步

  • 做法
    最直接的同步方案莫过于客户端定时向服务端报告位置,其他玩家收到转发的消息后,直接将对方坦克移动到指定位置
  • 评价
    假设玩家1在C点时又发送了位置信息,玩家2看到的同步坦克是瞬移的,从B直接跳到了C,很不自然。所以,商业游戏中一般不会这么直接地同步位置。

1)插值算法(跟随算法)

  • 概念
    为了解决“直接状态同步”的瞬移问题,人们引入了一种障眼法,称为“跟随算法”。在收到同步协议后,客户端不直接将坦克拉到目的地,而是让坦克以一定的速度移动。
  • 做法
    如图12-7所示,玩家1经过B点时发送同步信息,玩家2收到后,将坦克以同样的速度从A点移动到B点。此种情况下,误差更大了,因为在玩家1从B点移到C点的过程中,玩家2看到的坦克才从A点移向B点。
    在这里插入图片描述
  • 评价
    然而很多时候,游戏并不需要非常精确的同步,只要同步频率足够高(玩家每1秒发送位置的次数,比如每秒发送30次),误差就可以忽略。跟随和预测算法普遍应用在商业游戏中

2)预测算法

  • 概念
    跟随算法的一大缺陷就是误差会变得很大,那么还有没有办法可以减少误差呢?在某些有规律可循的条件下,比如坦克匀速运动,或者匀加速运动,我们能够预测坦克在接下来某个时间点的位置,让坦克提前走到预测的位置上去。这就是预测算法。

  • 做法
    在图12-8中,假设坦克匀速前进。玩家1经过B点时发送位置信息,玩家2根据“距离=速度*时间”可以计算出下一次收到同步信息时,坦克应移动到C点。于是玩家2让同步坦克移向C点,玩家1和玩家2之间的误差会很小
    在这里插入图片描述

  • 评价
    然而玩家1操控的坦克不可能一直保持匀速。当玩家1突然停下,玩家2看到的坦克会向前移动一段距离,又再向后移动一段距离,如图12-9所示。
    在这里插入图片描述

3)延迟补偿算法

四、「帧」的切确含义(帧同步的内容)

1)状态同步和指令同步

2)延迟执行

3)锁帧算法

4)严格帧同步、乐观帧同步

5)帧同步的应用场景和注意事项

五、参考资料

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

游戏思考04:网络游戏同步算法产生原因和相关介绍:跟随(插值)、预测、延迟补偿,三种算法(未完待续02/07) 的相关文章

  • tcp连接的select

    tcp的socket不同于udp tcp xff1a 建立socket的fd xff1b bind xff1b listen xff1b accept xff1b send or recv 另一端connect xff08 客户端 xff0
  • ROS NOETIC 思岚激光雷达A2M8启动历程

    Ubuntu20 04系统 xff0c 装的ROS对应为NOETIC版本 第一个bug 一直在catkin make这里出错 xff0c 我的工作空间 xff08 我也命名为catkin ws xff09 在catkin make之后 xf
  • 解决ubuntu网络调节助手之后打不开

    解决ubuntu安装deb文件之后打不开问题 xff08 安装libqtgui4 amd64 xff09 安装Ubuntu网络调试助手 链接 xff1a https pan baidu com s 1GSq pi1FOZxHFnY7PMBh
  • VSCODE中运行C语言(从安装到运行详细版)

    VSCODE中运行C语言 xff08 从插件安装到运行详细版 xff09 一 下载安装MinGW w64 官方下载网站 xff1a MinGW 64 往下来进入下一张页面图 xff0c 选择要下载的文件 二 环境变量配置 按照上面的步骤全部
  • 【ubuntu16.04 LTS】ping百度通,但浏览器打不开百度网页

    典型的DNS配置问题 1 xff0c 执行如下命令 span class token function sudo span span class token function vi span etc resolv conf 在文件最后添加
  • VLAN类型

    大家好呀 xff0c 我是请假君 xff0c 今天又来和大家一起学习数通了 xff0c 今天要分享的知识是VLAN类型 一 基于端口的VLAN xff1a 基于端口的VLAN是最简单 最有效的VLAN划分方法 xff0c 它按照设备端口来定
  • STM32开发(三) 使用printf 重定位到串口输出|CSDN创作打卡

    上一篇 主目录 下一篇 文章目录 背景 KEIL MDK环境下printf重定位串口输出 第一步 在KEIL MDK中使用MicroLIB如图中勾选 第二步 STM32Cube MX异步配置 第三步 KEIL代码演示 代码使用Cube 注意
  • 总线(二)CAN通讯协议介绍

    文章目录 CAN xff08 Controller Area Network xff09 是什么 xff1f 总线拓扑图CAN特征CAN协议数据帧遥控帧遥控帧和数据帧相关 xff1f 仲裁优先级决定数据帧和遥控帧的优先级标准格式和扩展格式的
  • CAN 简介

    1 目的 本文主要介绍一部分 CAN 协议层 2 CAN 简介 这里的内容参考的是 1991 9 的 2 0 版本的官方 CAN 规格书 2 1 概述 CAN 控制器局域网 是一种串行通讯协议 xff0c 传输速度可达 1Mbit s 总线
  • I2C 简介

    1 I2C 简介 这里的内容参考的是 2014 4 4 的 V 6 版本的官方 I2C Bus 规格书 xff0c 第六章有给出相应的链接 1 1 引脚 I2C 一般而言是一种同步半双工的通信方式 xff0c 所以除了电源引脚之外 xff0
  • MPC5744 烧录一直停留在 98% 的解决方法

    1 目的 本人在调试一块主控为 MPC5744 的板子时 xff0c 有时候在烧录时 xff0c 发现烧录总是停在 98 xff0c 卡在 CRC 这里 xff0c 在查找和看资料之后 xff0c 发现了几种解决方法 xff1a 使用 pe
  • MPC5744 Data Flash 仿真 EEPROM

    一 目的 本文主要是使用 MPC5744 中的 Data Flash 仿真 EEPROM 之前在 MPC5744 烧录一直停留在 98 的解决方法 中也简单介绍了 Flash xff0c 所以在这里直接介绍仿真过程 xff0c 注意这里可以
  • Keil添加文件和头文件

    Keil如何添加文件 在工程文件夹下面新建一个 c和一个 h文件 xff0c c文件就是要添加的文件 xff0c h文件就是要添加的头文件 右键点击Project下面的第一个文件夹 点击Manage Project Items 是新建文件夹
  • linux下简单的Socket+Http服务

    C语言体验Socket Http服务 代码部分实验结果实验总结 代码部分 socket监听80端口 xff0c 接收到访问数据 xff0c 返回简单的Http页面 span class token macro property span c
  • 不定态与高阻态,及modelsim默认波形颜色的含义

    数字电路只有高低电平 xff0c 没有实际电平对应不定态和高阻态 xff0c X和Z更多的是用来表示设计者的意图或者用于仿真目的 xff0c 旨在告诉仿真器和综合器如何解释这段代码 X态 xff1a 常用于判断条件 xff0c 只在告诉综合
  • 【ubuntu16.04 LTS】设置屏幕分辨率

    第一种方式 直接打开系统设置 xff0c 选择屏幕分辨率即可 xff0c 和Windows一样 xff0c 不多说 第二种方式 如果在第一种方式中 xff0c 没有找到自己想要设置的分辨率的话 xff0c 可以按如下操作 xff1a 1 x
  • verilog中taskd的用法

    本文转载自博客园作者 xff08 id xff09 xff1a 再也不喝冰了 任务就是一段封装在 task endtask 之间的程序 任务是通过调用来执行的 xff0c 而且只有 在调用时才执行 xff0c 如果定义了任务 xff0c 但
  • Github 安装和上手记录

    1 Git xff1a 分布式版本控制软件 xff08 本地含有版本库 xff09 2 安装 xff1a msysgit github io gt 3 Download gt 安装 4 安装时除了其中一步需要选择 use git from
  • Verilog02:结构化建模

    结构化描述是用Verilog HDL 进行电路设计中最基本描述方式 对于系统级电路设计 xff0c 为了把不同的功能模块有层次地组合在一起 xff0c 主要是采用模块调用的结构化建模方式实现 根据所调用子模块的不同抽象级别 xff0c 可将
  • 有无符号数及原码反码补码之间的关系

    前提知识 xff1a 加法器比减法器的电路实现方式更简单 无符号数表示的数值范围大于0 为了简化电路设计 xff0c 引入有符号数可以表示负数 xff0c 便可以用加法器实现减法运算 使用加法器和原码进行减法运算会产生错误结果 引入反码来修

随机推荐

  • MIPS指令格式定义

  • PTA 浙大版《C语言程序设计(第3版)》题目集--练习2-1 Programming in C is fun!

    题目 本题要求编写程序 xff0c 输出一个短句 Programming in C is fun 输入格式 本题目没有输入 输出格式 在一行中输出短句 Programming in C is fun 思路 一个简单的输出 代码 includ
  • 带参数的宏

    定义两个带参数的宏 xff0c 一个用来求s xff0c 另一个用来求area include lt iostream gt using namespace std define s a b c a 43 b 43 c 2 define A
  • RTK和网络RTK

    浅谈传统RTK工作模式与网络RTK工作模式 谈谈传统RTK工作模式与网络RTK工作模式 传统RTK工作模式就是电台工作模式 xff0c 网络RTK工作模式就是CORS系统测量 本文主旨 有网络信号和CORS覆盖范围的地方就选择网络RTK工作
  • KITTI数据集国内下载地址

    文件列表 xff1a http www functionweb tk kitti 如果遭遇下载失败的情况请访问 https blog csdn net weixin 43599336 article details 87801040 原始图
  • HTTP ERROR 405 Method Not Allowed

    一般访问web UI的时候出现以上错误 xff0c 都是浏览器的防火墙问题 可以进行在安全设置里取消一些防护功能即可
  • 【ubuntu16.04 LTS】更换国内清华源

    目录 1 xff0c 备份原始源文件sources list2 xff0c 修改源文件sources list3 xff0c 更新源 1 xff0c 备份原始源文件sources list 在终端输入如下命令 xff1a span clas
  • 串行通信——异步串行通信

    目录 I 串口通信简介 一 定义 二 意义 三 分类 II 异步串行通信详解 一 数据格式 1 起始位 2 数据位 3 奇偶校验位 4 停止位 二 通信制式 1 单工 2 半双工 3 全双工 三 通信速率 I 串口通信简介 一 定义 在一条
  • shell发送请求解析结果

    需求shell发送请求到服务获取返回结果 xff0c 解析结果后提取需要的数据 再次请求服务 1 发送get请求到服务器 xff0c 格式化返回结果输出到result json文件 2 解析json文件并循环处理解析结果 curl命令 X
  • VScode编辑器快捷键整理

    记录 xff1a VScode编辑器快捷键记录 1 代码块折叠 展开 操作光标所在文件中的所有代码块 xff1a 折叠所有 Ctrl 43 K 43 0 展开所有 Ctrl 43 K 43 J 仅仅操作光标所处代码块内的代码 xff1a 折
  • ROS不同版本消息传递问题

    ROS不同版本消息传递问题 问题 不同版本ros间可通信 xff0c 但消息发送接收有问题 主机 xff1a x86 BECKHOFF Ubuntu16 04 ROS Kinetic 从机 xff1a ARM AGX Xavier Ubun
  • 复位电路

    单片机复位电路 系统开始运行和重新启动都是依靠复位电路实现的 以MCS 51为例 xff0c 复位是需要在RST引脚加上2个机器周期 xff08 24个时钟周期 xff09 以上的高电平 简单的计算 xff1a 如果单片机的时钟频率是12M
  • WIFI原理

    1 路由器向下提供给接入的用户一个id xff0c 也就是类似于192 168 1 231 xff0c 这样的ip地址 xff0c 所有在这个路由器下的用户的ip地址的前面的网络号是相同的 xff0c 都是192 168 1 xff08 x
  • :: 在 C++ 中的作用

    一 作用域符号 xff1a 作用域符号 的前面一般是类名称 xff0c 后面一般是该类的成员名称 xff0c C 43 43 为例避免不同的类有名称相同的成员而采用作用域的方式进行区分 另外 xff0c 在类外定义类中已申明的函数成员时 x
  • PX4-4-任务调度

    PX4所有的功能都封装在独立的模块中 xff0c uORB是任务间数据交互和同步的工具 xff0c 而管理和调度每个任务 xff0c PX4也提供了一套很好的机制 xff0c 这一篇我们分享PX4的任务调度机制 我们以PX4 1 11 3版
  • 基于stm32的mpu6050传感器实验

    64 TOCMPU6050 43 STM32学习笔记 学习了差不多两天的mpu6050 xff0c 参考了很多篇博客还有看一些资料 xff0c 今晚终于把这个东西在我的串口显示出来了 xff0c 下面就废话不多说 xff0c 开始我的笔记啦
  • Ubuntu 20.04 ROS Noetic及Realsense-ROS的安装和多机通信

    Ubuntu 20 04 ROS Noetic及Realsense ROS的安装和多机通信 1 Ubuntu20 04 ROS Noetic安装 参考官方安装教程 ROS Installation 请以以上安装步骤为准 xff0c 因为随着
  • 机械硬盘基本知识

    硬盘内部的物理结构很复杂 xff0c 只能从大的颗粒度去看内部的结构 xff0c 总体来说 xff0c 硬盘结构包括 xff1a 盘片 磁头 盘片主轴 控制电机 磁头控制器 数据转换器 接口 缓存 等几个部份 所有的盘片 xff08 一般硬
  • RTK八大基础知识

    RTK作为现代化测量中的测绘仪器 xff0c 已经非常普及 RTK在测量中的优越性也是不言而喻 为了能让RTK的优越性能在使用中充分的发挥出来 xff0c 为了能让RTK使用人员能灵活的应用RTK xff0c 我认为RTK使用人员必须了解以
  • 游戏思考04:网络游戏同步算法产生原因和相关介绍:跟随(插值)、预测、延迟补偿,三种算法(未完待续02/07)

    文章目录 一 网络同步的典型场景二 简单粗暴的数据同步为何行不通 xff1f xff08 帧同步的难题 xff09 1 xff09 网络同步的流程2 xff09 网络延迟和抖动的直观解释3 xff09 产生卡顿 瞬移的原因分析4 xff09