使命召唤吧 关注:1,184,556贴子:26,790,625
  • 7回复贴,共1

论sbmm改伤论真相

取消只看楼主收藏回复

之前贴吧出现了大量的sbmm改伤阴谋论 正好今天也没什么事情,摸摸鱼。
正好看现在还有人关注这个sbmm改伤问题,那我就索性结合我的知识写一篇sbmm改伤论的解析,文字很多,需要一定的理解能力。
杠之前确保看懂我写的文字。
技术小白 不是专业的,真正懂的请轻喷或者直接关闭网页,我真是小白。
先说结论,不存在sbmm改伤。莫急 看分析
1、技术难度高,如果真的要改伤害,那么涉及到核心的hp伤害计算,和枪械伤害更改,并且这必然是服务器后台核心算法的更改,还是个动态算法,及其难不说还容易出bug。
2、没必要 还记得sbmm的工作原理吗?真要平衡玩家水平只需要平衡你的对手和队友就可以了,改你伤害又有什么意义呢?永远有比你更强的玩家存在,永远有比你更低ping的存在,只需要这2点就可以平衡你的数据,为什么还要去动那个核心算法?脱裤子放屁 一样。
ps!下面大篇幅引用了知乎刘泽昕的一篇文章"现代FPS网络同步架构:为什么CODMW高延迟看见人就死?"
ps!下面大篇幅引用了知乎刘泽昕的一篇文章"现代FPS网络同步架构:为什么CODMW高延迟看见人就死?"
ps!下面大篇幅引用了知乎刘泽昕的一篇文章"现代FPS网络同步架构:为什么CODMW高延迟看见人就死?"
但为什么还会有这么多的sbmm改伤论说法存在呢?难道大家都感觉错了? 不,真正的原因另有其他。
下面才是正文。真正让人感受到sbmm有改伤的错觉原因。
其实是COD的CTO (网络编程技术总监)Mitch在COD19引入了一项新的网络与架构代码!服务端buffer调整技术
而这份代码正是ow1守望先锋在2017的GDC上游戏开发者大会上的一份架构分享,后面会提
慢慢来 慢慢来
先解释下表面,你开枪在到击中再到对面血量归零,是一个什么步骤?我翻译成人话给你听
因素1敌我坐标 2血量 3伤害。
假设:我从A点发射子弹击中B点的敌人手臂,敌人血量减30。这个动作中A-B都是你鼠标来控制,是本地计算。
但是重点来了 血量减30,这个一定是在服务器计算(BF凡尔登战神 PUBG的穿墙子弹 全是因为这个计算放在了本地,那是垃圾游戏、cod16那个对天开枪击杀是某些情况在本地计算)
正常情况下 ,服务器存有敌我双方坐标,服务器看到了我向B点发射了子弹,服务器计算我射向B点的子弹击中了B,B减30血。
但是,不正常呢????
服务器存有敌我双方坐标,服务器等待开枪1、服务器等待开枪2、服务器等待开枪3、服务器等待开枪4、服务器看到了我向B点发射了子弹,服务器计算我射向B点的子弹击中了B,B减30血。。
实际我开枪了吗?我开了5枪,对面角色冒了5个雪花,对面跑了。。。。。
看懂了吗 一般这叫丢包,服务器等待开枪不是无意义的重复,是真实存在的,时间过去了,服务器没有或者延迟收到你的子弹数据。
但是 但是 但是,重点来了!!!
COD19 他不一样!!!
一般情况你开个加速器 基本能小于1%的丢包,这个等待开枪会极低甚至没有,但是COD19 他不一样 不一样 重复N+1
往上翻 还记得我说COD19的CTO引入了什么吗?
服务端buffer调整技术!
如果你看懂了上面那个数据包丢包问题,就能隐隐约约感觉到什么,没错,你击中对面坐标只是你看到的击中,血量计算和击中减血 还需要通过服务器计算,等待他计算完了在吧结果发给你,同时发给你的敌人。
这也是为什么会有sbmm改伤论的原因,但是为什么会这么频繁这么多人都这样?难道都丢包了? 不是。
服务端buffer调整技术翻译人话版
控制玩家的数据包从而使得服务器负载平均永远是100%或者最大化。
什么意思?大概就是
COD19的官方服务器是60Tick、战区更低具体不详,意味着每位玩家每秒最多能发送60组数据包到服务器。
你上班每次都能成功挤上第一趟公交吗? 每个玩家每次都固定发送60组数据包吗?当然不是,有开枪的时候自然也有跑路也有跳跃下爬的时候。服务器处理数据包肯定是有多也有少的时候。
多的时候服务器负载高,少的时候服务器负载低。低的时候服务器是不是浪费了?
buffer调整技术来了。将负载高的时候数据包进行排队,等到负载低的时候在来慢慢处理。那我是不是就可以用更少的人手做更多的事?
没错,你是不丢包了,可你的子弹数据包还在苦哈哈的排队,你还在苦哈哈的看着那个不停冒出来的白叉在疯狂嘲讽你,对面看着你望着他发呆。
随后你开始了怒骂sbmm改伤。
你以为到这就完了吗。?
是的,但还有个番外,有没有细心的同学感觉19的欧服美服比16难打很多?
一部分原因是玩家水平大幅度提升,还有一部分原因是服务端buffer调整技术。
首先buffer给每位玩家调整数据包传输是动态的。其次玩家和服务器的数据包通讯是相互的,就和你上班一样,你要去上班你也要下班回家对吧。
那么通讯延迟越低,是不是意味着服务器能越能优先处理完数据让你回家?
buffer调整技术会让那些低延迟玩家的数据包先处理,这样可以先处理完让他们滚蛋回家,从而更早的来上班。。减少服务器为了等你来上班而在哪发呆的情况。
而你,打欧服美服的家伙,就因为你的通勤时间太长而被服务器拒之门外等待,等待那些老爷先进先走,等待公司有时间了你才能进去办公。
懂了吗,你的网络越差,你的数据包也会因为buffer更差一步,并不是你看到的160ping的欧服,实际情况可能要翻好几倍,实际有几百ping一样。
buffer技术其实最主要是为了解决服务器负载和延迟补偿的问题,所以别问为什么COD没有延迟补偿,有buffer就是。
比如你300延迟,你打他几枪击中了,你没死你跑了,你跑的过程中排队的数据包就会去给对面计算伤害
如果没有buffer, 你的开枪就是无效数据,服务器基于双方坐标判定你没击中。。。
但这东西真的好吗? 见仁见智吧。每个人有不同的见解。
最后
good luck
好了这就是我几个小时的成果。我也干了一滴都不剩了


IP属地:湖北1楼2023-06-29 17:23回复
    咦 帖子过审了 之前说有想看的 这里统一艾特
    @Makise紅莉栖 @小野猪佩佩佩奇 @立‏华奏


    IP属地:湖北2楼2023-06-30 10:29
    收起回复
      2025-07-24 20:41:47
      广告
      不感兴趣
      开通SVIP免广告
      在精简一点的话就是,你看到的白叉只是你认为的白叉,实际上第一个白叉的伤害计算需要等待半秒或者1秒后才会被服务器开始计算,第二第三依次顺延,而此时等待过程中 你被打死了就死了,因为对面玩家的子弹伤害数据可能不需要排队,也可以比你先处理,也可能和你同时处理,也可能比你更后处理。
      这就是buffer 动态调整。


      IP属地:湖北4楼2023-06-30 10:43
      收起回复
        @额不知道啊6
        先划分AB,A为主视角B为被害人。暂分数据为2个,一个攻击动作数据一个伤害数据、A攻击动作传到服务器计算数据回传到B,这是一个正常情况,可B如果出现滞后呢? 他的坐标数据更新是慢一步的,好似不似还都是近战,双方坐标在服务器上更新是不对等的,服务器看来这两有一个是在对空气挥舞左键。可数据包回传到B哪里就不一样了 本地计算没延迟,收到了A的攻击坐标和自己坐标一致 判断成功 白叉红血,可服务器不认本地计算,他只在服务器上算两个人的坐标,和攻击参数


        IP属地:湖北17楼2023-06-30 13:56
        收起回复
          @额不知道啊6
          你这不是讨论,你只是在单纯的灌输你自己的理念,你听不进去别人的话。我最后在纠正你一次,这样我给你出几个算术题,你算一下先
          小红正在坠楼 40秒后落地死亡,小白需要从楼下前往160米外的消防站获取救援物资后回来救小红,假设小白1秒前进1米。不考虑其他因素比如开门打电话开车什么都不考虑。
          请问小白如何能救到小红


          IP属地:湖北25楼2023-06-30 16:16
          收起回复
            @额不知道啊6
            这种小学生题目 一目了然救不了 神仙来了还有可能救下来。
            以你200帧的电脑为基础。
            1秒钟生成200帧,1000/200=5 不管帧生成时间 平均5毫秒一帧
            从开枪到白叉一共8帧也就是8*5=40ms,在来计算数据包,160的延迟,ping的单位是毫秒,数据包要跑个来回一共就要320ms
            320ms没跑完呢 40ms白叉出来了?
            请问白叉如何能在数据包没回来之前显示出来?


            IP属地:湖北26楼2023-06-30 16:25
            收起回复






              活脱脱的一只小丑,很纯粹的为了杠而杠,往死里打自己就算了,字还看不懂,可能学业不太高吧,能理解能理解。


              IP属地:湖北109楼2023-07-07 09:27
              收起回复





                IP属地:湖北115楼2023-07-10 09:06
                收起回复