【游戏开发】多人游戏网络同步相关技术(延迟处理)

非网络延迟(latency)

网络游戏中非网络延迟分类:

  1. 输入采样延迟(input sampling latency)

  2. 渲染流水线延迟(render pipeline latency)
    驱动程序 -> 命令缓冲区 -> GPU

  3. 多线程渲染流水线延迟(multithrended render pipeline latency)
    【游戏开发】多人游戏网络同步相关技术(延迟处理)_第1张图片

  4. 垂直同步(VSync)
    显示器刷新率 < FPS
    例如:屏幕下半是新图像,上半是上一次刷新的图像

  5. 显示延迟(display lag)
    显示器处理输入延迟

  6. 像素响应时间(pixel response time)

网络延迟

  1. 处理延迟(processing delay)
    【游戏开发】多人游戏网络同步相关技术(延迟处理)_第2张图片

  2. 传输延迟(transmission delay)
    从数据链路层到物理介质层的时间延迟

  3. 排队延迟(queuing delay)
    在接收队列花费的时间时间【游戏开发】多人游戏网络同步相关技术(延迟处理)_第3张图片

  4. 传播延迟(propagation delay)
    在信息在物理介质中的传输速度

处理网络延迟

服务器是唯一拥有真实和正确游戏状态的主机。
例:某角色执行跳跃动作
【游戏开发】多人游戏网络同步相关技术(延迟处理)_第4张图片
玩家感知时间 - 真实状态时间 = 1/2 RTT
为保证整个系统状态一致,采用保守算法(conservation algorithm)

在采用保守算法的前提下:
【游戏开发】多人游戏网络同步相关技术(延迟处理)_第5张图片
客户端画面可能产生非连续变化(被网络限制而产生的卡顿法)

[处理延迟] 方法1 : 客户端插值

客户端插值(client side interpolation)
【游戏开发】多人游戏网络同步相关技术(延迟处理)_第6张图片

  1. 尽可能使IP == PP,效果更真实
  2. PP与网络延迟和网络带宽有关
  3. 因此使用客户端插值的游戏玩家感知的延迟与网络有关

*客户端仅仅模拟两个真实状态之间的变化过程,以达到平滑的视觉效果

[处理延迟] 方法2 : 客户端预测

客户端预测(client side prediction)
【游戏开发】多人游戏网络同步相关技术(延迟处理)_第7张图片

  1. 客户端运行与服务器相同的模拟代码
  2. 只运行额外1/2RTT的模拟
    Q:如何计算1/2RTT ?
    A:服务器给数据包时打上时间戳,便于客户端计算当前RTT

[处理延迟] 方法3: 航位推测法

航位推测法(dead reckoning)

核心思想

  1. 非玩家对象:模拟AI
  2. 玩家对象:假设玩家继续不断进行(继续完成)当前正在执行的动作

1.乐观算法(optimistic algorithm)
当客户端检测到本地模拟错位时,

  1. 即时状态更新(instant state update)
  2. 插值(interpolation)
    每帧更新一个偏移量,最终与目标状态相同
  3. 二阶状态调整(second-order state adjustment)
    对急剧变化的参数(如加速度)进心平缓修正

2.针对本地玩家特殊处理
客户端不是使用航位推测法模拟1/2RTT,而是使用玩家A的精确输入来模拟1/2RTT(为保证本地玩家操作的真实感)

3.将移动状态保存到列表中
用于收到服务器状态后的移动回放

4.通过技巧和优化隐藏延迟
利用前置特效,进度条等方法隐藏延迟

[处理延迟] 方法4: 服务器端回退

  1. 发送给服务器的每个移动数据包中保存客户端视角(在射击游戏中服务器可根据光线/瞄准角度确定是否击中)
  2. 服务器存储相关对象最近几帧位置进行预测或回退

你可能感兴趣的:(游戏开发,游戏,游戏开发,网络)