在又稍微的運(yùn)年思索了一下,順便組織了一下接下來(lái)的語(yǔ)言。
因?yàn)榻酉聛?lái)要說(shuō)的東西會(huì)稍微顯的有些復(fù)雜,很有可能沒(méi)有這方面的技術(shù)的看起來(lái)會(huì)有些吃力,所以,杰斯特在想著怎么才能夠把他要說(shuō)的東西說(shuō)的更加的通俗易懂。
杰斯特接著在新的回帖里面寫(xiě)道。
“接下來(lái)我要說(shuō)的就要難懂很多了,但是至少仔細(xì)的想一下,其實(shí)也就是那么回事。”
“在說(shuō)完了上面的那些簡(jiǎn)單的概念以及術(shù)語(yǔ)之后,我們來(lái)看一個(gè)新的概念,這個(gè)概念的專有名詞叫做‘內(nèi)插幀’。那么什么叫做‘內(nèi)插幀’?”
“實(shí)際上,內(nèi)插幀是一項(xiàng)技術(shù)用來(lái)平滑游戲中的物體行動(dòng)的,比如說(shuō)玩家。本質(zhì)上講,內(nèi)插幀是用來(lái)平滑一個(gè)物體在2個(gè)點(diǎn)之間的行動(dòng)。內(nèi)插幀的延遲通常等于2個(gè)快照,但也是會(huì)變化的――這么說(shuō)可能會(huì)有些難以理解,但是我們可以舉一個(gè)例子來(lái)進(jìn)行說(shuō)明。”
“如果一個(gè)玩家直線奔跑,在Tick1的時(shí)候他在處,在Tick2的時(shí)候在1m處,那么經(jīng)過(guò)內(nèi)插幀的處理將之顯示在客戶端,他從的起點(diǎn)非常平滑的移動(dòng)到1m的終點(diǎn)。但是服務(wù)端,總是并且只是“觀察”到玩家在2個(gè)位置,而不是在2點(diǎn)之間。”
“這么說(shuō)有些理解了吧?”
“也就是說(shuō),服務(wù)器進(jìn)行處理的智商兩次tick的快照,沒(méi)有內(nèi)插幀的話,游戲就會(huì)變的斷斷續(xù)續(xù),因?yàn)榭蛻舳酥皇窃谑盏絹?lái)自服務(wù)端的更新后才能得知游戲中的物體的行為。內(nèi)插幀行為只在客戶端單邊發(fā)生。”
“內(nèi)插幀本質(zhì)上降低了整個(gè)游戲在你電腦上的渲染速度,這個(gè)數(shù)值通常等于2快照,一般來(lái)說(shuō)所有的游戲都是如此,但是有些游戲允許你更改這些,比如《反恐精英》,這些就是人們?cè)谡f(shuō)起rates的時(shí)候所指的。他們指的是更新率和內(nèi)插幀延遲。”
這一次杰斯特斌沒(méi)有在一個(gè)帖子里面寫(xiě)上所有他想要說(shuō)的話,因?yàn)楝F(xiàn)在的這些并不好理解,所以,他現(xiàn)在是一個(gè)概念一個(gè)帖子的進(jìn)行闡述卡跟不卡之間的關(guān)系。
讓更多的玩家不要在似懂非懂的爭(zhēng)執(zhí)這些雞毛蒜皮的事情。
在說(shuō)完了內(nèi)插幀。并且將闡述這個(gè)概念的帖子發(fā)出去之后,杰斯特又開(kāi)始了一個(gè)新的帖子,仍舊是繼續(xù)上面的話題。
“之前說(shuō)了內(nèi)插幀,那么很多人會(huì)好奇,既然有內(nèi)插幀。那么到底有沒(méi)有外插幀呢?”
“答案是肯定是,這個(gè)世界上面天生就是對(duì)稱的,有內(nèi)就會(huì)有外,而所謂的外插幀,這是另一個(gè)客戶端方面的技術(shù)用來(lái)補(bǔ)償延遲。本質(zhì)上說(shuō),客戶端外插物體的位置替代降低整個(gè)客戶端的渲染。這種做法大體上不及內(nèi)插幀,特別是對(duì)于玩家行動(dòng)不可判斷的FPS游戲來(lái)說(shuō)。”
“所以,在討論《反恐精英》這款標(biāo)準(zhǔn)的FPS游戲的時(shí)候我不會(huì)太過(guò)于詳細(xì)的去介紹這個(gè)概念,因?yàn)樗⒉皇俏乙f(shuō)的話題的主角。”
杰斯特寫(xiě)的這些術(shù)語(yǔ)介紹什么叫做卡為什么會(huì)卡的帖子馬上就引起了玩家們的關(guān)注,雖然有一些看的比較吃力。但是,他們也逐漸的明白了所謂的卡于不卡其實(shí)是一個(gè)很復(fù)雜的過(guò)程,所以,杰斯特的這個(gè)帖子的下面很快的就有了一兩百個(gè)贊。
當(dāng)然,杰斯特要說(shuō)的還沒(méi)有說(shuō)完。
“然后,就是一個(gè)重中之重的概念,我們內(nèi)部將其稱之為Hit-box,可以簡(jiǎn)單的解釋為命中框或者是命中面積,這樣說(shuō)似乎就顧名思義了,一個(gè)人物的3D模型包含了一些區(qū)域來(lái)判斷命中。長(zhǎng)寬高的數(shù)據(jù)在3D世界里面精確的描述一個(gè)物體。你看不到命中框,你只能看到玩家模型。命中框可大可小,也可某種程度上無(wú)法命中,這都要根據(jù)游戲如何編寫(xiě)來(lái)判定。在命中和未命中方面。命中框能夠帶來(lái)比快照速率更大的不同。”
“另外的一個(gè)非常重要的東西,叫做卡頓補(bǔ)償,這可能在不同的游戲里面會(huì)有完全不同的表現(xiàn)。”
“卡頓補(bǔ)償是在服務(wù)端的一種功能,意在減少客戶端延遲的直觀感受。如果沒(méi)有卡頓補(bǔ)償,或者卡頓補(bǔ)償不夠理想,你就會(huì)朝著一個(gè)目標(biāo)瞄準(zhǔn)想要打中。但是由于客戶端電腦“看到”的延遲后的游戲世界,你并不會(huì)命中原先瞄準(zhǔn)的區(qū)域。本質(zhì)上講,卡頓補(bǔ)償是在解讀從客戶端接收到的動(dòng)作,比如開(kāi)火,盡管動(dòng)作已經(jīng)發(fā)生過(guò)了。服務(wù)端游戲世界和客戶端游戲世界的不同,或者說(shuō)我們通常所說(shuō)的客戶端延遲,都可以總結(jié)為:客戶端延遲=(1/2*延遲)+內(nèi)插幀延遲。”
“這其實(shí)是一個(gè)很復(fù)雜的機(jī)制,我原本想要三言兩語(yǔ)的將其說(shuō)明白,但是我發(fā)現(xiàn)這根本沒(méi)有辦法做到,索性我就詳細(xì)的說(shuō)一下什么叫做卡頓補(bǔ)償或者更加確切的一個(gè)說(shuō)法,就是卡頓補(bǔ)償這個(gè)機(jī)制到底是怎么運(yùn)行的?”
“現(xiàn)在我描述一個(gè)這樣的玩家在游戲里面的游戲場(chǎng)景,來(lái)通過(guò)這個(gè)場(chǎng)景簡(jiǎn)單的說(shuō)一下什么叫做卡頓補(bǔ)償。”
“這個(gè)場(chǎng)景是這樣的。”
“玩家A看到玩家B向一個(gè)拐角行進(jìn),玩家A開(kāi)了1槍,客戶端把開(kāi)槍這個(gè)動(dòng)作發(fā)送給服務(wù)端。服務(wù)端接收到Xms后的數(shù)據(jù),X為玩家A,latency(延遲)的一半。服務(wù)端這時(shí)查看過(guò)去發(fā)生過(guò)的(在記憶加載中),查找到當(dāng)玩家A開(kāi)槍的時(shí)候玩家B的位置。在基礎(chǔ)的例子中,服務(wù)端會(huì)返回(Xms+玩家A的內(nèi)插幀延遲)到玩家A看到玩家B的時(shí)間點(diǎn),但是其他的數(shù)值因素或許由游戲程序員想要卡頓補(bǔ)償如何施行來(lái)決定。”
“服務(wù)端決定玩家A開(kāi)的槍是否命中。開(kāi)槍想要被算做命中,需要它必須打在玩家模型的命中框中。在這個(gè)例子里,服務(wù)端認(rèn)為玩家A命中玩家B。盡管如此,玩家B的屏幕可能已經(jīng)看到自己在墻后了,但是在玩家B看到自己在墻后的時(shí)間和服務(wù)端認(rèn)為玩家B被命中的時(shí)間的差異等于:1/2玩家A的延遲+1/2玩家B的延遲+距離上一次快照的時(shí)間。”
“在下一次快照中,服務(wù)端更新玩家A、B的客戶端上的數(shù)據(jù)。玩家A看到命中瞄準(zhǔn)的位置X,玩家B看到自己的生命值減少或者死亡。”
“看完這一個(gè)過(guò)程之后,是不是就對(duì)于什么叫做卡頓或者說(shuō)是延遲有了一個(gè)完全不同的清晰的定義了呢?”
杰斯特寫(xiě)完這些之后,想要將帖子發(fā)出去。但是他突然的想起了一個(gè)玩家經(jīng)常爭(zhēng)執(zhí)的問(wèn)題,正好可以利用這個(gè)機(jī)會(huì)解釋一下,于是他便在這個(gè)帖子的下面緊接著寫(xiě)道:“我突然的想起了一個(gè)FPS游戲玩家之間經(jīng)常的進(jìn)行爭(zhēng)吵的經(jīng)典問(wèn)題,那就是我跟另外一個(gè)玩家同時(shí)開(kāi)火。并且同樣命中,為什么我死了對(duì)方卻沒(méi)事呢?”
“因?yàn)檫@是不同的游戲存在著不同的設(shè)定的原因,在一些游戲中,比如《反恐精英》,如果先開(kāi)的一槍到達(dá)服務(wù)端的時(shí)候殺死了目標(biāo)。那么任何接下來(lái)的所有到達(dá)服務(wù)端的命中目標(biāo)的開(kāi)火將被服務(wù)端忽略。這種情況下,就不可能存在同時(shí)擊殺,因?yàn)?玩家在1快照中向?qū)Ψ介_(kāi)槍并都死亡。”
“但是,在另外的一些游戲當(dāng)中,比如說(shuō)有一些人已經(jīng)試玩過(guò)的《軍團(tuán)要塞》,共同擊殺是可行的。這里有一個(gè)叫做權(quán)重的東西在影響著游戲的進(jìn)程。”
“如果你用《反恐精英》的模型,玩家在良好的延遲下會(huì)有明顯的優(yōu)勢(shì),并且在一些時(shí)候可能會(huì)出現(xiàn)‘Oh,我在死前打了他一槍,但是他并沒(méi)有死!’的情況。你甚至?xí)谀闼狼奥?tīng)到你發(fā)出的槍聲。但仍沒(méi)有造成任何傷害。”
“如果你用目前的《軍團(tuán)要塞》模型,反應(yīng)時(shí)間的微小差別并不會(huì)意味很多,舉例,如果服務(wù)端快照連拍率是64,如果玩家A比玩家B快了15ms開(kāi)槍,但是他們都是在的快照中完成這個(gè)動(dòng)作,那么他們就會(huì)同歸于盡,整個(gè)過(guò)程其實(shí)就是這么的簡(jiǎn)單。”
“如果卡頓補(bǔ)償過(guò)量,會(huì)顯示結(jié)果為我在他之后開(kāi)槍但是還是打死了他。”
“如果卡頓補(bǔ)償不足,會(huì)顯示結(jié)果為我需要再移動(dòng)準(zhǔn)星一點(diǎn)才能打中他。”
“只是看這個(gè)的話任何人都會(huì)覺(jué)得這很簡(jiǎn)單。但是拆開(kāi)來(lái)看的話,那就會(huì)非常的復(fù)雜,而我剛才說(shuō)的不過(guò)只是一點(diǎn)皮毛而已,實(shí)際上。我并不是專業(yè)的網(wǎng)絡(luò)工程師,對(duì)于這個(gè),我知道的也僅僅是一點(diǎn)皮毛罷了。”
“可能很多人會(huì)問(wèn),我對(duì)于你說(shuō)的這些毫無(wú)興趣,我想要知道,我如果卡頓了應(yīng)該怎么辦。我可以有什么辦法來(lái)解決自己卡頓的問(wèn)題呢?”
杰斯特寫(xiě)到這里的時(shí)候把這個(gè)帖子發(fā)了出去,然后又另開(kāi)一貼。
他決定在新的帖子里面詳細(xì)的說(shuō)一下這個(gè)問(wèn)題。
“如果你想要明顯的改善你的延遲,那么首先,你要確定,你所感受到的卡頓并不是因?yàn)橛螒蛱峁┥處?lái)的,可能一些比如服務(wù)器的負(fù)載等等的問(wèn)題,讓你覺(jué)得游戲不流暢,但是這事跟你無(wú)關(guān)的,如果你確定了別人都很流暢,但是我就不流暢之后,那么我下面說(shuō)的東西或許會(huì)給你一點(diǎn)幫助,當(dāng)然,也可能不會(huì)。”
“首先,也是最重要的,你的網(wǎng)絡(luò)連接。越低的延遲越好。同時(shí),任何連在你家庭網(wǎng)絡(luò)中的過(guò)多的分流都會(huì)導(dǎo)致延遲。卡頓補(bǔ)償能夠在‘你在對(duì)什么開(kāi)火’這部分提供幫助,但是如果你有很差的延遲,你更可能會(huì)體驗(yàn)到‘我已經(jīng)跑到墻后了但還是挨了一槍’或者‘我先開(kāi)槍,但依舊是我死’。”
“如果你的客戶端的幀數(shù)很低,只要是低于或者不足于你顯示器的刷新頻率,這會(huì)增加延遲的感覺(jué),并且相較不同的快照連拍速率而言感覺(jué)更明顯和頻繁。”
“修改內(nèi)插幀,如果游戲允許的話。大多數(shù)游戲都有一個(gè)默認(rèn)的內(nèi)插幀時(shí)間,最少是2倍的快照間隔。這么做的原因是如果一個(gè)單一數(shù)據(jù)包丟失,玩家的動(dòng)作不會(huì)定格在客戶端屏幕上。如果你的網(wǎng)絡(luò)鏈接很好,并且0丟包,那么你完全可以把內(nèi)插幀時(shí)間設(shè)定在正好等于2個(gè)快照的間隔時(shí)間,但如果1個(gè)數(shù)據(jù)包延遲了,你便會(huì)看到一個(gè)斷口。以《反恐精英》為例,這比從20快照服務(wù)器換到64快照服務(wù)器進(jìn)行還要有很大不同。如果你把這個(gè)值設(shè)置的很低,會(huì)造成斷斷續(xù)續(xù)的畫(huà)面。”
“這也是很多玩家在談到卡頓問(wèn)題的時(shí)候,經(jīng)常說(shuō)到的丟包,其實(shí),這就是內(nèi)插幀的問(wèn)題。”
諸如此類的東西杰斯特又說(shuō)了很多,最后他總結(jié)了一句話:“總之,有很多的方法都可以解決一些問(wèn)題,但是他們不可能解決所有的問(wèn)題,比如說(shuō)卡頓,我為什么要發(fā)著幾個(gè)帖子說(shuō)明這些問(wèn)題的原因很簡(jiǎn)單,因?yàn)槲野l(fā)現(xiàn)太多的人根本不懂什么叫做網(wǎng)絡(luò)代碼,甚至對(duì)于這個(gè)問(wèn)題一無(wú)所知,但是卻總是在抱怨自己在墻后面被殺死。”
“有些時(shí)候,你在墻后面被人射死,不僅僅是因?yàn)榉?wù)器的原因,更多的,還是因?yàn)槟阕约旱臋C(jī)器或者網(wǎng)絡(luò)寬帶上面出現(xiàn)了一些問(wèn)題。”
當(dāng)杰斯特寫(xiě)完這一整個(gè)帖子之后,他竟然發(fā)現(xiàn),已經(jīng)有數(shù)百個(gè)回復(fù)出現(xiàn)在了他的這一個(gè)帖子當(dāng)中。
很多人都在感謝杰斯特代替開(kāi)發(fā)組,在百忙當(dāng)中,在為玩家們答疑解惑,當(dāng)然,這些都是對(duì)于《反恐精英》的開(kāi)發(fā)組并不像是一些其他的火星娛樂(lè)的游戲那樣,經(jīng)常在玩家社區(qū)出沒(méi)的抱怨。不過(guò)杰斯特對(duì)此的解釋是不同的開(kāi)發(fā)組有不同的風(fēng)格,他并不強(qiáng)求這樣。
他喜歡在玩家社區(qū)跟玩家交流,但是并不要求所有的開(kāi)發(fā)組都如此。
但是仍舊有不少人在說(shuō)杰斯特這明顯的是在為自己的服務(wù)器問(wèn)題甩鍋,當(dāng)然,這些無(wú)腦噴當(dāng)然是被很多自告奮勇的玩家們噴的他們媽媽都不認(rèn)識(shí)他們了。(未完待續(xù)。)
,