[反恐精英]ex_interp參數(shù)中文最詳解釋
- 來源:Pacifichawk
- 作者:不死鳥
- 編輯:ChunTian
已知:
1. ex_interp設(shè)置為0即為一個(gè)開關(guān),作用是ex_interp開始根據(jù)你的cl_updaterate數(shù)值進(jìn)行全自動(dòng)調(diào)校,我們可以認(rèn)為,此時(shí)的ex_interp實(shí)際值即為valve的推薦值,也是理論上最適合的值。
2.cl_updaterate 的概念為每秒從服務(wù)器接受的數(shù)據(jù)包數(shù)量。這個(gè)數(shù)值能否正常發(fā)揮其作用,取決于2個(gè)方面,一個(gè)是服務(wù)器的FPS是否大于你的cl_updaterate數(shù)值,一個(gè)是服務(wù)器端是否設(shè)置了sv_maxupdaterate 大于或等于你的cl_updaterate數(shù)值。
3.ex_interp的實(shí)際數(shù)值決定了插值運(yùn)算的強(qiáng)度,ex_interp越小,在你看到一個(gè)人的完整運(yùn)動(dòng)軌跡之中,由插值運(yùn)算所產(chǎn)生的比例越小。
4.ex_interp的數(shù)值(0.1,0.01等)實(shí)際上可加上一個(gè)單位s,其實(shí)0.1就代表0.1秒。
我們來對(duì)比一下兩種情況下cl_updaterate和ex_interp的關(guān)系。
當(dāng)cl_updaterate 為100時(shí) ,ex_Interp最佳值為0.01 即0.01s=10ms
當(dāng)cl_updaterate 為10時(shí), ex_interp最佳值為0.1即0.1s=100ms
我們可以注意到,第一種情況,100X10=1000ms,第二種情況10X100=1000ms。
而1000ms=1秒。你可以試一下別的數(shù)值,最后的乘積一定也是1000ms。
注意到cl_updaterate為每秒從服務(wù)器接受的數(shù)據(jù)包數(shù)量。
所以我們可以這么解釋,當(dāng)客戶端每接收到一個(gè)數(shù)據(jù)包之后,可以確定一次你的對(duì)手的真實(shí)位置。自你接收到第一個(gè)數(shù)據(jù)包開始xxms之內(nèi),你看到的對(duì)手運(yùn)動(dòng)軌跡為插值計(jì)算所得,這個(gè)xx=ex_interp的數(shù)值。舉例說明,當(dāng)clupdaterate 為100時(shí),每隔1/100=10ms你接收到一個(gè)數(shù)據(jù)包,所以ex_interp 設(shè)置為10ms為最合適的數(shù)值;因?yàn)閯偤?0ms之后你又能收到第二個(gè)數(shù)據(jù)包,從而完美的實(shí)現(xiàn)銜接過程。同理cl_updaterate為10時(shí),ex_interp=0.1就是最佳的數(shù)值。
現(xiàn)在我們來用目前爭(zhēng)議最大的wNv和Fnatic的戰(zhàn)斗過程來舉例:
Fnatic 的設(shè)置:
cl_updaterate=100,ex_interp=0.01=10ms
wNv(或者說wNv-Kin'z)的設(shè)置:
cl_updaterate =100,ex_interp=0.1=100ms
兩者都是每秒接收到100個(gè)數(shù)據(jù)包,但由于wNv的ex_interp設(shè)置為100ms,所以當(dāng)kin'z接收到第一個(gè)數(shù)據(jù)包后,客戶端根據(jù)插值運(yùn)算虛擬計(jì)算出了100ms內(nèi)對(duì)手的可能行為。
而此時(shí)Fnatic隊(duì)員的cs客戶端只虛擬計(jì)算出了10ms內(nèi)對(duì)手的可能行為。
現(xiàn)在有人會(huì)想當(dāng)然的認(rèn)為,這樣wNv隊(duì)員不是"提前"90ms預(yù)知對(duì)手的行為了?實(shí)際上這也是John Mellin和被其影響的相當(dāng)多數(shù)外國人的想法。然而我要說這種想法是錯(cuò)誤和主觀的。首先,客戶端雖然“預(yù)知”了對(duì)手未來的行為,但是操作客戶端的玩家卻無從知曉,客戶端要想反應(yīng)出敵人未來100ms的情況,同樣需要花100ms的時(shí)間。其次,上面所說的情況其實(shí)根本不會(huì)產(chǎn)生。
我們注意到此時(shí)雙方的cl_updaterate 都為100。這意味著,在接收到第一個(gè)數(shù)據(jù)包之后10ms,客戶端將接受到第二個(gè)數(shù)據(jù)包。對(duì)fantic這一方而言,第二個(gè)數(shù)據(jù)包處于剛好銜接上的狀態(tài)。對(duì)wNv這一方而言,雖然在第一個(gè)數(shù)據(jù)包到達(dá)之后,客戶端虛擬出了未來100ms內(nèi)對(duì)手的行為。但是10ms后,第二個(gè)真實(shí)反映對(duì)手位置的數(shù)據(jù)包到達(dá)了。
我們可以想象出此時(shí)程序的2種處理方式,如下:
第一,忽略多出的90ms虛擬計(jì)算數(shù)據(jù),采用到達(dá)的真實(shí)數(shù)據(jù)。
第二,忽略第二個(gè)數(shù)據(jù)包的內(nèi)容,繼續(xù)采用虛擬的計(jì)算數(shù)據(jù),直到第10個(gè)數(shù)據(jù)包到來。
第二種情況是不科學(xué)的,也不可能是valve實(shí)際采用的,因?yàn)槿绻吹诙N情況處理的話,其實(shí)cl_updaterate 10和cl_updaterate 100在ex_interp為0.1的情況下沒有任何區(qū)別。你可以去一個(gè)服務(wù)器里把cl_updaterate 改成10 ,試下你的感覺……
那么我們可以認(rèn)為程序是按第一種模式運(yùn)行的。
于是我可以提出我的結(jié)論:
在cs1.6中,當(dāng)cl_updaterate數(shù)值足夠且網(wǎng)絡(luò)狀況良好的情況下,ex_interp為0.1或ex_interp為“1/cl_updaterate數(shù)值”這2種設(shè)置并沒有實(shí)際區(qū)別。采用其中任何一種設(shè)置均獲得近似相等的效果,并不存在所謂的不公平性因素。
那有人要問,為什么valve把最佳值設(shè)為"1/cl_updaterate數(shù)值"而不統(tǒng)一設(shè)定為0.1?
我想,那是一個(gè)最優(yōu)數(shù)值,使用這個(gè)數(shù)值,可以避免cpu時(shí)間被無謂的浪費(fèi)要知道cpu計(jì)算數(shù)據(jù)量的不同耗費(fèi)的時(shí)間也不同,在這里也存在一個(gè)"延遲",而且可能還會(huì)略微的影響FPS。所以我在結(jié)論中用了一個(gè)"近似相等"。至于影響的大小是可以完全忽略不計(jì)還是可以微微感覺的到,這就不在本文研究的范圍之內(nèi)了。在平時(shí)進(jìn)網(wǎng)絡(luò)服務(wù)器打比賽或混戰(zhàn)的時(shí)候,使用ex_interp 0.01等參數(shù)可能會(huì)導(dǎo)致人物一跳一跳,這是由于互連網(wǎng)絡(luò)連接狀況不穩(wěn)定, 如果產(chǎn)生了lost(丟包),choke(阻塞),那么使用ex_interp 0.01等參數(shù)就有可能出現(xiàn)插值運(yùn)算結(jié)束后不能銜接上下一個(gè)數(shù)據(jù)包,這樣反映出來的效果就是人物會(huì)跳動(dòng)。
最終我依然推薦平時(shí)將你的ex_interp設(shè)置為0,而cl_updaterate設(shè)置為60-100,比賽時(shí)設(shè)置為ex_Interp 0.01,cl_updaterate設(shè)置為100。
另外,有人抱怨在國內(nèi)的大多數(shù)服務(wù)器中無法修改ex_interp,這里呼喚一下所有粗心的服務(wù)器架設(shè)者們,請(qǐng)到服務(wù)器安裝目錄下的cstrike\addons\wwcl子目錄下修改下wwcl的配置文件。具體過程:首先查看wwclconfig.cfg確定你現(xiàn)在用的wwcl模式。注意前面沒有//注釋的就是目前你采用的wwcl模式,然后修改該模式對(duì)應(yīng)的config文件,以ex_interp做關(guān)鍵字查找到鎖定ex_interp的那一行將其刪除,并把brightness參數(shù)由原先鎖定的1修改為3。
而對(duì)于玩家而言,也不必過于擔(dān)心此事,如果你能習(xí)慣ex_interp=0.1,那么你就能習(xí)慣ex_interp=0.01 。
關(guān)于ex_interp,我想以上已經(jīng)解釋的足夠清楚了。
玩家點(diǎn)評(píng) (0人參與,0條評(píng)論)
熱門評(píng)論
全部評(píng)論