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

一、网络同步的典型场景

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

赛车游戏、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)帧同步的应用场景和注意事项

五、参考资料

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值