游戲開發巨頭第八百三十一章 卡頓與延遲_宙斯小說網
當前位置:宙斯小說網 >>都市>> 游戲開發巨頭 >>游戲開發巨頭最新章節列表 >> 第八百三十一章 卡頓與延遲

第八百三十一章 卡頓與延遲


更新時間:2015年12月11日  作者:煙雨料峭  分類: 都市 | 商戰風云 | 煙雨料峭 | 游戲開發巨頭 
后臺有人,會盡快回復!



在又稍微的運年思索了一下,順便組織了一下接下來的語言。

因為接下來要說的東西會稍微顯的有些復雜,很有可能沒有這方面的技術的看起來會有些吃力,所以,杰斯特在想著怎么才能夠把他要說的東西說的更加的通俗易懂。

杰斯特接著在新的回帖里面寫道。

“接下來我要說的就要難懂很多了,但是至少仔細的想一下,其實也就是那么回事。”

“在說完了上面的那些簡單的概念以及術語之后,我們來看一個新的概念,這個概念的專有名詞叫做‘內插幀’。那么什么叫做‘內插幀’?”

“實際上,內插幀是一項技術用來平滑游戲中的物體行動的,比如說玩家。本質上講,內插幀是用來平滑一個物體在2個點之間的行動。內插幀的延遲通常等于2個快照,但也是會變化的——這么說可能會有些難以理解,但是我們可以舉一個例子來進行說明。”

“如果一個玩家直線奔跑,在tick1的時候他在0.5m處,在tick2的時候在1m處,那么經過內插幀的處理將之顯示在客戶端,他從0.5m的起點非常平滑的移動到1m的終點。但是服務端,總是并且只是“觀察”到玩家在2個位置,而不是在2點之間。”

“這么說有些理解了吧?”

“也就是說,服務器進行處理的智商兩次tick的快照,沒有內插幀的話,游戲就會變的斷斷續續。因為客戶端只是在收到來自服務端的更新后才能得知游戲中的物體的行為。內插幀行為只在客戶端單邊發生。”

“內插幀本質上降低了整個游戲在你電腦上的渲染速度,這個數值通常等于2快照,一般來說所有的游戲都是如此,但是有些游戲允許你更改這些,比如《反恐精英》。這些就是人們在說起rates的時候所指的,他們指的是更新率和內插幀延遲。”

這一次杰斯特斌沒有在一個帖子里面寫上所有他想要說的話,因為現在的這些并不好理解,所以,他現在是一個概念一個帖子的進行闡述卡跟不卡之間的關系。

讓更多的玩家不要在似懂非懂的爭執這些雞毛蒜皮的事情。

在說完了內插幀,并且將闡述這個概念的帖子發出去之后。杰斯特又開始了一個新的帖子,仍舊是繼續上面的話題。

“之前說了內插幀,那么很多人會好奇,既然有內插幀,那么到底有沒有外插幀呢?”

“答案是肯定是。這個世界上面天生就是對稱的,有內就會有外,而所謂的外插幀,這是另一個客戶端方面的技術用來補償延遲。本質上說,客戶端外插物體的位置替代降低整個客戶端的渲染。這種做法大體上不及內插幀,特別是對于玩家行動不可判斷的fps游戲來說。”

“所以,在討論《反恐精英》這款標準的fps游戲的時候我不會太過于詳細的去介紹這個概念,因為他并不是我要說的話題的主角。”

杰斯特寫的這些術語介紹什么叫做卡為什么會卡的帖子馬上就引起了玩家們的關注。雖然有一些看的比較吃力,但是,他們也逐漸的明白了所謂的卡于不卡其實是一個很復雜的過程。所以,杰斯特的這個帖子的下面很快的就有了一兩百個贊。

當然,杰斯特要說的還沒有說完。

“然后,就是一個重中之重的概念,我們內部將其稱之為hitbox,可以簡單的解釋為命中框或者是命中面積。這樣說似乎就顧名思義了,一個人物的3d模型包含了一些區域來判斷命中。長寬高的數據在3d世界里面精確的描述一個物體。你看不到命中框,你只能看到玩家模型。命中框可大可小。也可某種程度上無法命中,這都要根據游戲如何編寫來判定。在命中和未命中方面,命中框能夠帶來比快照速率更大的不同。”

“另外的一個非常重要的東西,叫做卡頓補償,這可能在不同的游戲里面會有完全不同的表現。”

“卡頓補償是在服務端的一種功能,意在減少客戶端延遲的直觀感受。如果沒有卡頓補償,或者卡頓補償不夠理想,你就會朝著一個目標瞄準想要打中,但是由于客戶端電腦“看到”的延遲后的游戲世界,你并不會命中原先瞄準的區域。本質上講,卡頓補償是在解讀從客戶端接收到的動作,比如開火,盡管動作已經發生過了。服務端游戲世界和客戶端游戲世界的不同,或者說我們通常所說的客戶端延遲,都可以總結為:客戶端延遲(1/2*延遲)內插幀延遲。”

“這其實是一個很復雜的機制,我原本想要三言兩語的將其說明白,但是我發現這根本沒有辦法做到,索性我就詳細的說一下什么叫做卡頓補償或者更加確切的一個說法,就是卡頓補償這個機制到底是怎么運行的?”

“現在我描述一個這樣的玩家在游戲里面的游戲場景,來通過這個場景簡單的說一下什么叫做卡頓補償。”

“這個場景是這樣的。”

“玩家a看到玩家b向一個拐角行進,玩家a開了1槍,客戶端把開槍這個動作發送給服務端。服務端接收到xms后的數據,x為玩家y(延遲)的一半。服務端這時查看過去發生過的(在記憶加載中),查找到當玩家a開槍的時候玩家b的位置。在基礎的例子中,服務端會返回(xms玩家a的內插幀延遲)到玩家a看到玩家b的時間點,但是其他的數值因素或許由游戲程序員想要卡頓補償如何施行來決定。”

“服務端決定玩家a開的槍是否命中。開槍想要被算做命中,需要它必須打在玩家模型的命中框中。在這個例子里,服務端認為玩家a命中玩家b。盡管如此。玩家b的屏幕可能已經看到自己在墻后了,但是在玩家b看到自己在墻后的時間和服務端認為玩家b被命中的時間的差異等于:1/2玩家a的延遲1/2玩家b的延遲距離上一次快照的時間。”

“在下一次快照中,服務端更新玩家a、b的客戶端上的數據。玩家a看到命中瞄準的位置x,玩家b看到自己的生命值減少或者死亡。”

“看完這一個過程之后,是不是就對于什么叫做卡頓或者說是延遲有了一個完全不同的清晰的定義了呢?”

杰斯特寫完這些之后。想要將帖子發出去,但是他突然的想起了一個玩家經常爭執的問題,正好可以利用這個機會解釋一下,于是他便在這個帖子的下面緊接著寫道:“我突然的想起了一個fps游戲玩家之間經常的進行爭吵的經典問題,那就是我跟另外一個玩家同時開火,并且同樣命中。為什么我死了對方卻沒事呢?”

“因為這是不同的游戲存在著不同的設定的原因,在一些游戲中,比如《反恐精英》,如果先開的一槍到達服務端的時候殺死了目標,那么任何接下來的所有到達服務端的命中目標的開火將被服務端忽略。這種情況下。就不可能存在同時擊殺,因為2玩家在1快照中向對方開槍并都死亡。”

“但是,在另外的一些游戲當中,比如說有一些人已經試玩過的《軍團要塞》,共同擊殺是可行的。這里有一個叫做權重的東西在影響著游戲的進程。”

“如果你用《反恐精英》的模型,玩家在良好的延遲下會有明顯的優勢,并且在一些時候可能會出現‘oh,我在死前打了他一槍。但是他并沒有死!’的情況。你甚至會在你死前聽到你發出的槍聲,但仍沒有造成任何傷害。”

“如果你用目前的《軍團要塞》模型,反應時間的微小差別并不會意味很多。舉例,如果服務端快照連拍率是64,如果玩家a比玩家b快了15ms開槍,但是他們都是在15.6ms的快照中完成這個動作,那么他們就會同歸于盡,整個過程其實就是這么的簡單。”

“如果卡頓補償過量。會顯示結果為我在他之后開槍但是還是打死了他。”

“如果卡頓補償不足,會顯示結果為我需要再移動準星一點才能打中他。”

“只是看這個的話任何人都會覺得這很簡單。但是拆開來看的話,那就會非常的復雜。而我剛才說的不過只是一點皮毛而已,實際上,我并不是專業的網絡工程師,對于這個,我知道的也僅僅是一點皮毛罷了。”

“可能很多人會問,我對于你說的這些毫無興趣,我想要知道,我如果卡頓了應該怎么辦,我可以有什么辦法來解決自己卡頓的問題呢?”

杰斯特寫到這里的時候把這個帖子發了出去,然后又另開一貼。

他決定在新的帖子里面詳細的說一下這個問題。

“如果你想要明顯的改善你的延遲,那么首先,你要確定,你所感受到的卡頓并不是因為游戲提供商帶來的,可能一些比如服務器的負載等等的問題,讓你覺得游戲不流暢,但是這事跟你無關的,如果你確定了別人都很流暢,但是我就不流暢之后,那么我下面說的東西或許會給你一點幫助,當然,也可能不會。”

“首先,也是最重要的,你的網絡連接。越低的延遲越好。同時,任何連在你家庭網絡中的過多的分流都會導致延遲。卡頓補償能夠在‘你在對什么開火’這部分提供幫助,但是如果你有很差的延遲,你更可能會體驗到‘我已經跑到墻后了但還是挨了一槍’或者‘我先開槍,但依舊是我死’。”

“如果你的客戶端的幀數很低,只要是低于或者不足于你顯示器的刷新頻率,這會增加延遲的感覺,并且相較不同的快照連拍速率而言感覺更明顯和頻繁。”

“修改內插幀,如果游戲允許的話。大多數游戲都有一個默認的內插幀時間,最少是2倍的快照間隔。這么做的原因是如果一個單一數據包丟失,玩家的動作不會定格在客戶端屏幕上。如果你的網絡鏈接很好,并且0丟包,那么你完全可以把內插幀時間設定在正好等于2個快照的間隔時間,但如果1個數據包延遲了,你便會看到一個斷口。以《反恐精英》為例,這比從20快照服務器換到64快照服務器進行還要有很大不同。如果你把這個值設置的很低,會造成斷斷續續的畫面。”

“這也是很多玩家在談到卡頓問題的時候,經常說到的丟包,其實,這就是內插幀的問題。”

諸如此類的東西杰斯特又說了很多,最后他總結了一句話:“總之,有很多的方法都可以解決一些問題,但是他們不可能解決所有的問題,比如說卡頓,我為什么要發著幾個帖子說明這些問題的原因很簡單,因為我發現太多的人根本不懂什么叫做網絡代碼,甚至對于這個問題一無所知,但是卻總是在抱怨自己在墻后面被殺死。”

“有些時候,你在墻后面被人射死,不僅僅是因為服務器的原因,更多的,還是因為你自己的機器或者網絡寬帶上面出現了一些問題。”

當杰斯特寫完這一整個帖子之后,他竟然發現,已經有數百個回復出現在了他的這一個帖子當中。

很多人都在感謝杰斯特代替開發組,在百忙當中,在為玩家們答疑解惑,當然,這些都是對于《反恐精英》的開發組并不像是一些其他的火星娛樂的游戲那樣,經常在玩家社區出沒的抱怨。不過杰斯特對此的解釋是不同的開發組有不同的風格,他并不強求這樣。

他喜歡在玩家社區跟玩家交流,但是并不要求所有的開發組都如此。

但是仍舊有不少人在說杰斯特這明顯的是在為自己的服務器問題甩鍋,當然,這些無腦噴當然是被很多自告奮勇的玩家們噴的他們媽媽都不認識他們了。(未完待續)


上一章  |  游戲開發巨頭目錄  |  下一章