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

非 络延迟(latency)

络游戏中非 络延迟分类:

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

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

  3. 多线程渲染流水线延迟(multithrended render pipeline latency)

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

  5. 排队延迟(queuing delay)
    在接收队列花费的时间时间

    在采用保守算法的前提下:

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

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

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

    客户端预测(client side prediction)

    【游戏开发】多人游戏 络同步相关技术(延迟处理)
    1. 客户端运行与服务器相同的模拟代码
    2. 只运行额外1/2RTT的模拟
      Q:如何计算1/2RTT br> 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. 服务器存储相关对象最近几帧位置进行预测或回退

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年7月22日
下一篇 2020年7月22日

相关推荐