非 络延迟(latency)
络游戏中非 络延迟分类:
-
输入采样延迟(input sampling latency)
-
渲染流水线延迟(render pipeline latency)
驱动程序 -> 命令缓冲区 -> GPU -
多线程渲染流水线延迟(multithrended render pipeline latency)
-
传输延迟(transmission delay)
从数据链路层到物理介质层的时间延迟 -
排队延迟(queuing delay)
在接收队列花费的时间时间在采用保守算法的前提下:
- 尽可能使IP == PP,效果更真实
- PP与 络延迟和 络带宽有关
- 因此使用客户端插值的游戏玩家感知的延迟与 络有关
*客户端仅仅模拟两个真实状态之间的变化过程,以达到平滑的视觉效果
[处理延迟] 方法2 : 客户端预测
客户端预测(client side prediction)
- 客户端运行与服务器相同的模拟代码
- 只运行额外1/2RTT的模拟
Q:如何计算1/2RTT br> A:服务器给数据包时打上时间戳,便于客户端计算当前RTT
[处理延迟] 方法3: 航位推测法
航位推测法(dead reckoning)
核心思想:
- 非玩家对象:模拟AI
- 玩家对象:假设玩家继续不断进行(继续完成)当前正在执行的动作
1.乐观算法(optimistic algorithm)
当客户端检测到本地模拟错位时,- 即时状态更新(instant state update)
- 插值(interpolation)
每帧更新一个偏移量,最终与目标状态相同 - 二阶状态调整(second-order state adjustment)
对急剧变化的参数(如加速度)进心平缓修正
2.针对本地玩家特殊处理
客户端不是使用航位推测法模拟1/2RTT,而是使用玩家A的精确输入来模拟1/2RTT(为保证本地玩家操作的真实感)3.将移动状态保存到列表中
用于收到服务器状态后的移动回放4.通过技巧和优化隐藏延迟
利用前置特效,进度条等方法隐藏延迟[处理延迟] 方法4: 服务器端回退
- 发送给服务器的每个移动数据包中保存客户端视角(在射击游戏中服务器可根据光线/瞄准角度确定是否击中)
- 服务器存储相关对象最近几帧位置进行预测或回退
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!