书海阁
书架 邀请 登录

第526章 无解的问题

作者:哈娜欧菲手字数:3.7千字更新时间:2026-09-26 10:59:26
第526章 无解的问题

子弹够不够,命中情况如何,对方的血量还有多少?

等到服务器把这些东西都搞清楚,这才会把数据回传给客户端。

如果客户端这边执行的东西被服务器否定了,那再尝试修正。

如果服务端说目标死掉了,客户端才会渲染出对方似掉的动画效果。

“啊!是的,应该如此!”

卡马克眼神一亮。

这种即时感才是联机最欠缺的东西。

让客户端尽可能哄着玩家先玩着,剩下的事情由服务器慢慢想办法解决。

想到这儿,他便立马要离席跑去开工。

但林立新立马喊住了他。

“别急啊,这才哪到哪,这只是个第一重保险。”

林立新直接伸手在白板上抹出一片空白,搓了搓手把油墨蹭掉,这才继续道,

“这样做虽然解决了即时响应的问题,但却会让《Quake》出现一个全新的BUG。”

他在上面写下两行字。

【FAVOR THE SHOOTER】(满足射击者)

【RESPONSIVENESS】(响应性)

这两种观念,就对应了在FPS这条道路上的两类完全不同的优化思路。

刚才设计的这个客户端预测,其实就是非常典型的响应性设计。

响应性设计的主张是:当玩家执行了一个操作时,他应该立刻得到反馈。

“你们看,这种设计最大的好处是什么?当然是符合玩家的直觉,操作干脆干练,简直就像是在玩本地游戏,完全感受不到联机的延迟。”

林立新在写着‘响应性’的位置点了点。

“可它并不是完美的,它最大的问题就是……打不中人。”

卡马克眨巴眨巴眼,等待着林立新继续说下去。

因为现在这两条放在一起,完全是在左脑搏击右脑。

刚才才说了客户端预测不能干预服务器判断,这样才能确保一致性和足够公平。

现在却又要把打不中人拿出来说。

“预测错误导致的回弹、子弹数量不对导致的只能听见枪响但没有开枪的情况、打中了人却没打中……”

林立新如数家珍地一条一条罗列着现在联机系统的罪状,

“为此,我们需要引入第二条优化策略。”

他的手向上移动,点在【FAVOR THE SHOOTER】那行上,

“我们要在服务器处理信息时,稍微……偏心一点,偏向射击者。”

“可那样不是又会导致……”

山姆开口道,不过还没说完,便被林立新给打断了。

“别急,我不是说让射击者完全本地化处理,命中与否仍然是服务器负责的。”

“……”

这下不管是山姆还是卡马克都没招了,静静等着林立新给出最终的答案。

“Lag Compensation(延迟补偿)。”

林立新解释道,

“预测能解决手感,而延迟补偿解决的是公平。”

他在板子上画了三个方块,让其中两个通过一个箭头连接到最上面那个。

显而易见的,这是个非常简略的客户端/服务端模型。

“你看,假设我们的延迟是100毫秒,那我们在游戏中看到的画面,实际上就是100毫秒以前的内容,而我们如果在这个时候开枪,打中的也是100毫秒以前的对手。”

这就坏菜了。

理论上来说,如果玩家是绝对精准地瞄准着目标进行开火,在这种情况下是永远都不可能击中正在移动的目标的。

除非这位高手能够牛逼到精准地推算出自己的实时延迟,并根据对方现在的运动状态、心理情况、战术策略等各种因子,综合推算出对方的下一步动向,并提前瞄准对应的位置。

但这显然是不可能的。

职业选手最多也就是计算个提前量打跟枪。

真正的完全预测根本就不是人脑能解决的。

哪怕是计算机也不可能完整计算出来。

“呐,问题就在这儿了,这样一来,玩家便会有种明明开枪了、也瞄准了、也打中了,甚至目标脑袋都飙血了,却毛事都没有,一点血皮子都没掉的诡异错位感。”

“而解决这个问题的办法也非常简单。”

林立新重新伸手,写下一个单词。

【Rewind】

当然不是以撒里的那种,不过也的确是差不多的思想。

“Rewind(回滚),确切地说是服务器回滚。”

“服务器不再实时进行计算,而是保存一份包含所有玩家最近几百毫秒以内的所有快照。”

这才是Valve的看家法宝。

比起前面的预测,这套系统的重要性完全是次世代的,彻底解决了高延迟环境下打不中人的苦恼。

“几百毫秒内的快照……”

卡马克喃喃道,忽然灵光一闪,似乎猜到了林立新是什么意思,

“林你的意思是……当玩家的射击信息发送到服务器时,不再根据实时状态进行处理,而是……检查快照?”

“没错。”

林立新满意地点点头,脸上露出笑容,

“我们让服务器去判断……当玩家开枪的那一刻,这个世界是什么样子的。”

当网络包发送到服务器的时候,服务器会根据状态调取对应的缓存,检查命中或是其它信息。

完成计算后再将结果和必要的修正信息返回给玩家这边。

整个过程大概会比原本增加几毫秒的延迟,但换来的效果却绝对值得。

“原来如此……”

卡马克若有所思地点点头,思路一下子便被打开了。

坐在一旁的山姆仔细看着白板上的东西。

他的技术远远跟不上两人,但他却是个实打实的资深玩家,看待问题的也会有自己的角度。

终于是努力理解了这套机制后,山姆出声打断了还在叽里咕噜深入讨论算法细节的两人。

“可是这样的话……对被射击者来说体验又会变差吧?”

山姆在脑袋里模拟了一番那个场景,一下子就抓到了其中一个最严重的问题。

“要是我操作着角色在墙后面跟对方打立回,不是会出现我已经躲在墙后面,却还是被打死了的情况吗?就像是穿墙了一样。”

这套方案听起来非常甜美,射击者总能得到一个优秀的游戏体验,玩起来就像是在本地游戏一样。

但仔细一看问题同样不少。

林立新就像是避重就轻地把问题给划过去了一样,根本没有治根。

闻言,林立新眉毛一挑,略带惊异地看向他。

山姆已经触及到了FPS网络设计的最本质的那点东西。

“你说得对,山姆,但很遗憾……这是个无解的问题,至少在目前是无解的。”

林立新轻轻摇了摇头。

卡马克也立马反应了过来,帮着跟山姆解释道:

“山姆,射击者和被射击者的体验是不可能同时被满足的,在数学角度就是不成立的。”

‘我打中了就应该算’和‘我躲开了就不应该算’。

两种思想,在存在客观的网络延迟时,是数学角度上不可能同时成立的东西。

哪怕是现代的FPS游戏,也没能彻底解决这个千古难题。

没有人能做到完美地解决它。

最多也就是优化、缓解,尽可能让这种情况少发生,至少也要变得不那么明显。

“我们可以通过限制回滚时间来一定程度上优化这一点,对不同武器、不同环境下都分别采用不同的处理模式,虽然我们做不到完全解决,但我们可以让绝大多数玩家都有足够优秀的游戏体验。”

在FPS网络优化这方面,那就完全是千人千面了。

几乎每一款现代的FPS作品,都拥有一套独属于自己的优化逻辑。

Valve派的偏向射击者处理,直接决定了CS的整个生态环境。

在Valve的想法里,宁愿牺牲一部分被射击者的游戏体验,也要尽可能让玩家得到最好的射击感。

这种方案高度适合那些低TTK的FPS游戏,也就是几枪之内便会分出胜负的作品。

而在Valve派下,还有一个另类——《瓦罗兰特》。

Riot深度研究了Valve的优化策略,并在此之上加入了一些自己的理解。

它允许低延迟的玩家得到一定的优待,严格限制了回滚窗口的长度,并提高了服务器修正频率。

高Ping玩家的游戏体验明显下降,但换来的是更高的竞技公平。

而在长TTK游戏环境下,不管是Valve还是Riot,他们的方案都不合适。

这方面做得比较优秀的……说起来虽然有点抽象,不过司马重生的《Apex》的确很有说法。

Respawn的思想很简单,玩家首先应该觉得自己像个灵活的猴子。

各种机动行为和移动操作是需要最优先保证的,确保了《Apex》足够丝滑的运动体验。

而除了这两大派别之外,还有着一类结合了两种风格的长TTK小地图竞技作品。

暴雪的《Overwatch守望先锋》。

要论起在网络同步方面的设计,OW绝对是最复杂最高级的之一。

各种花里胡哨的技能和机制的加入,让OW无法用同一套网络策略面对所有环境。

这就实在是没什么参考价值了,完全是针对OW这一款游戏做的唯一性设计。

再之外就是《逃离塔科夫》之类的服务端至上的方案了。

面对这个需求,根本就没有一个通用的统一解,需要根据游戏的类型进行专项对策。

嗯……

如果硬要说完美的解决方案的话,其实也的确存在。

“如果真的想要彻底解决问题,只能让玩家升级宽带了……”

此章为VIP章节,需要订阅后才能继续阅读

  • 价格:0屋币(1元=100屋币)
  • 购买
设置
作品详情 加书架
章节进度
评论 (0条)
评论加载中...
美利坚:游戏制作教父封面 正序
目录加载中...
加书架
上一章 目录 下一章

设置