查看完整版本: cl_up cl_cm 迷思
頁: [1]

ptsvpaul 發表於 2010-10-23 12:32 PM

cl_up cl_cm 迷思

本帖最後由 ptsvpaul 於 2010-10-23 12:35 PM 編輯

文內容引用網路論壇都是轉貼的提供版友參考  {:1_newbiggrin:}     參數介紹:

cl_cmdrate:

這個命令決定了客戶端向每秒鐘服務端發送數據包的數量。很明顯地,這個參數的數值設定得越高,那麼服務器就能相應客戶端處理信息
的速度越快,基本上數值設定得高是沒什麼錯的。如果你與你的朋友都在局域網中遊戲,而延時非常嚴重,那麼很可能就是這個參數沒有
設置好。事實上,大多數的寬帶接入沒有提供足量的上行帶寬,這也恰好是這個命令需要的。


cl_updaterate:

cl_updaterate與cl_cmdrate是類似的,不過方向是相反的。它控制的是客戶端每秒鐘從服務端接收數據包的數量。因此,它和你的下行
帶寬是緊密相連的。cl_updaterate的數值設定得越高,你和服務器的同步率就越高。因為只有服務器才會決定你開槍是否命中,所以你需
要足夠的更新數據包(upadates)。


sv_maxupdaterate:

cl_updaterate控制客戶端每秒接收來自服務端的數據更新包數量(只對客戶端本身控制),而sv_maxupdaterate就指定了服務端每秒發
送多少數據包到客戶端上(對服務端進行控制)。因此,客戶端cl_updaterate的數值設定比服務端sv_maxupdaterate的數值要高,是不能
增加客戶端接受的更新數據包數量的。


sys_ticrate:

這個命令設定了服務器每秒能處理的最大數據「幀」數。默認設定下,這個參數設置為100。為什麼服務器的fps那麼重要?這個參數
決定了服務器的感應能力。我敢肯定我們都覺得服務器好像在TI-83 Plus(圖形計算器)上工作一樣,而我們就是在LAN上進行這些圖形計
算器的處理。

sys_ticrate只是指定你的服務器所能計算的最大fps。默認設定下,服務器不會達到你所設定的數值,因為運算系統可能在處理某些
其他的進程。市面上有不同的加速("boost")服務器fps的軟件,不過大多數(如果不是全部的話)服務器加速軟件是靠網絡
服務器供應商處理的,記住,這樣的加速會加重服務器CPU的負荷。(出於某些原因,在de_inferno和de_aztec上用服務器加速軟件的話,
會劇烈增加CPU的負荷,大家可能曾經有過這樣的體驗。)在默認設置下,Half-life服務器,基於Win32的服務器一般在64fps,而基於Linux的
服務器一般在50fps。如果使用加速軟件的話,可能可以提升到512fps或者更高。這麼高的服務器fps是受到爭議的,不過我感覺如果在200fps左右就能感覺到明顯的改進了。

一致性才是關鍵的。Fps從100飆升到512,這樣可能會帶來一個更差的遊戲環境,因為sys_ticrate只在150左右,150是大多數服務器
硬件所能承受的了的。

如果你有一個服務器的權限,而且想測試一下服務器的fps,那麼在控制台輸入rcon stats,看看你的服務器是否加速了:暫時地把
sys_ticrate調到10000,然後在看看服務器的fps是否超過100,如果超過100,那就是加速了的。


ex_interp:

在解釋這個參數之前,我們看看Webster字典對interpolate(添加,改寫)這個詞的解釋.
(以下是Webster字典的解釋,譯者這裡不將原英文去掉,是讓大家容易看到原有的解釋)
Main Entry: in·ter·po·late
主要條目: in·ter·po·late
3 : to estimate values of (a function) between two known values
3 : 評估兩個已知值之間的量的關係
intransitive senses : to make insertions (as of estimated values)
不及物動詞:進行插入(到已評估的值之中)

每一秒你只能從服務器獲得有限的更新,因此是不可能每次都那麼精確地及時地與服務器達到同步。舉個例子:

下面的圖形顯示的是圓的線性內插法。當數據點(更新數據包)的數量增加的時候,則插入的量則變得更加地準確。在CS中,你可以
將這個比喻成在一秒內一個人物位置變化所跨越的範圍。在服務器看來,這是一個精準的圓圈,而從客戶端就需要在兩個「真正」的數據
包中插入一定的數據。


rate

我之前已經假設rate的數值為20000。把它調到20000以上不會有任何的改善,還可能會造成更不好的影響。

推薦值:
rate 20000.


sv_maxrate:

這個值在大多數的情況下設置為0。我會解釋一下為什麼在線上遊戲時這並不是個理想的數值。sv_maxrate 0 會檢測每一個客戶端rate的
設置,並盡量滿足每一個玩家的需求。假設對half-life引擎來說每一秒允許玩家使用的rate參數的數值超過20000。如果有一個玩家將這
個數值設定為一個超高值(比如:999999999),那麼服務器會盡量的去滿足這個玩家的需要。那麼這樣會潛在的浪費帶寬,並且會對服務
器造成更多的負擔,也許會超過服務器所能承受的範圍。因此,我提出一個比較安全的建議,sv_maxrate在20000的時候會有比較好的表現
。在現實中,sv_maxrate 0和sv_maxrate 20000的效果對遊戲的進行而言可能都是一樣的,不過提高一些預防的範圍總是好的。

推薦值:
sv_maxrate 20000.


cl_cmdrate:在理想情況下,這個數值應該和服務器的fps是相等的(不是有些人所認為的客戶端的fps)。如果你對服務器的更新超過了
在同一時段內服務器所能處理的幀數的話,多餘的更新包會被服務器所丟棄。因此,cl_cmdrate設置得太高會有不好的效果,直接造成帶
寬的浪費。

推薦值:
cl_cmdrate與服務器的fps值相等或者稍高。


ex_interp:

把這個參數設為0或者什麼都不寫。CS會自動的把ex_interp設置為1/cl_updaterate(比如你的console窗口會顯示「ex_interp forced
up to xx msec")。這就是你想你的客戶端要進行插入的時間長度。改變cl_updaterate會自動地改變ex_interp(當ex_interp=0時發
生)。因此我推薦只改變cl_updaterate,讓CS去設置你的ex_interp。現在已經不可能把ex_interp設定得比1/cl_updaterate更低了,把
它設定得高一些卻會產生錯誤。設置一個比1/cl_updaterate更高的值會造成你開槍的時候打在屏幕中人物的後面(譯者註:就是實際上你
並沒有打中人物,而只打在他的後面)。舉個例子,如果你用cl_updaterate 101,那麼ex_interp應該是1/101=0.009(9毫秒),那麼使
用默認的ex_interp 0.1,而cl_updaterate還是這麼高的話,那麼之前所說的錯誤就會產生。

推薦值:
ex_interp 0


cl_updaterate:長期以來,大家都認為cl_updaterate的規定是在101,這樣能使你獲得少量的"choke(阻塞)"。Choke可以用
命令net_graph 3看到。個人認為,choke是我不會考慮的東西。其實cl_updatarete的最佳值是很複雜的。CAL的服務端的config提供sv_maxupdaterate為
101,那麼很多人會總結為我們也應該把cl_updaterate設置為101。在理想的狀況下,這是正確地,不過在實際情況下,並不是那麼有用。
在北美,大多數的服務器都不能負荷每秒100幀的運算,這就意味著服務器無法發出每秒100個更新包,而玩家們就會覺得很「卡」了。由
於我們從客戶端如果沒有遠程控制密碼(遠程控制權限)的話是無法窺探服務端的fps的,如何選擇最適當的數值就像猜謎遊戲一樣了。你
可能會說,「好吧,那就把cl_updaterate設置為101就不管了,我會獲得服務器給我更新的最大值。」問題就在忽視了cl_updaterate對ex_interp的影響以及兩者之間微妙的平衡關係。尋找一個適當的cl_updaterate值(記住要把ex_interp先設為0),從101開始逐漸減小,你會發現人物只是「微小的閃動」(譯者註:原文是「slightyly skip around」,從實際操作來看,我們可以看到人物的重影,就像閃動一樣,我就把它翻譯成「閃動」了)。「微小的閃動」是優先的選擇,只要ex_interp等於1/cl_updaterate,那麼人物就會在應有的位置上出現。在
不同的服務器中遊戲你都要改變cl_updaterate。如果必要的話,把它設置低於50也不要擔心。預處理系統會發揮好它的作用的。備註:大
多數的公眾服務器都會使用默認的sv_maxupdaterate 30,那麼在那種情況下,cl_updaterate就最好了。

請注意,從一個低的cl_updaterate數值(比如說20)逐漸增加是不行的,一旦你把它設定得更高,ex_interp是不會重新設定的,你
需要不斷手動地將ex_interp置0。

推薦值:
cl_updaterate應該與服務器的fps相等,不應該超過服務器的sv_maxupdaterate數值


sys_ticrate:

找合適的sys_ticrate就需要進行一些實驗了。首先,如果你的服務器沒有被加速,提高這個數值並超過100就不會有任何效果。如果
你正好租用了一個高性能的服務器的話(你的服務器可能已被加速),那麼你就有空間這麼做。總體上來說,服務端有更高的fps是一件好
事,提高sys_ticrate超過200(或者比200低)是毫無效果的。如果把sys_ticrate設為9999,你的服務器fps會根據現有的情況在150到1000之
間不停的跳變,把sys_ticrate設定為低於200的數值會有一個更一致的環境,不過會對服務器的性能有所減弱。同樣的,在一個物理服務
器(一台電腦或者服務器主機)上都可能運行不同的HLDS(Half-Life Dedicated Server),那麼如果每一個HLDS都把sys_ticrate設為10000的
話,服務器的CPU的負荷就相當大了。這樣的情況下,會潛在地造成在那台物理服務器上的性能的下降(也可能提高你每月的租用費用)。
最後,服務器的fps只會在某幾個數值上作用,舉例來說,我的服務器fps只在85,102,128,170,256等數值上,而不是在他們之間(比
如91)。如果你把sys_ticrate設為100,你的服務器fps最大值就會在100以下(比如85),因此,設定sys_ticrate大於目標fps數值約20到
50左右比較合適。

推薦值:
sys_ticrate 110-180,結合你的服務器性能考慮。


關於局域網對戰的備註:

局域網對戰,比如the CPL,cl_updaterate設置為101,這與局域網服務器的質量有關。通常在LAN上,只有一小部分的服務器會在虛
擬盒中運行,因此服務器使用更少的資源。如果服務器都加速超過了100fps,那麼cl_updaterate 101就是一個非常理想的數值。判斷一個
LAN服務器最快的方法就是看看玩家們ping的平均值。一個運行在50到64fps的默認服務器,在LAN下的平均ping值為15ms,而加速過的服務
器會使ping值下降,大概在5ms左右。據我所知,the CPL,ESWC還有WCG都是使用加速過的服務器的。





cs demo的文章

[教學]重要的兩大參數cl_cmdrate 和 cl_updaterate 好像有些人對 cl_cmdrate 和 cl_updaterate 產生了一點誤解
所以我想試著說明一下調整這些參數的用意
為了要在有限的網路傳輸率下營造一個準確的遊戲世界
CS 除了在伺服器上執行,還必須在每一位玩家的電腦中分別進行遊戲
然而在這麼多的遊戲世界中只有在伺服器上做的運算是絕對的
玩家則透過和伺服器的資料對傳
一面校正自己的誤差
一面上傳自己下達的指令

cl_cmdrate 和 cl_updaterate 分別為控制玩家上傳和下傳資料量的參數
我發現有不少人的誤解是
以為調整了這兩個參數後 ping 值會降低
其實這之間並沒有關聯
Ping 值所反映的是從玩家到伺服器 (或是相反方向)
傳一組資料需要花的時間
影響的因素主要是個人的網路速度與和伺服器的距離

讀到這裡你或許已經開始在想接下來的問題了
既然 ping 值不變,為什麼調整過後玩起來會比較順呢?
cl_updaterate 可以想成是玩家每秒和伺服器校正誤差的次數
cl_cmdrate 可以當作是玩家每秒將自己下達的命令傳給伺服器的次數
在網路連結可以承受的前提下 (沒有 loss/choke),
玩家的 cl_cmdrate 和 cl_updaterate 越高
所見到的遊戲世界就與實際狀況 (伺服器的遊戲世界) 越接近

最後還是回到一樣的結論
因為每個人的習慣和配備都不同,
所以還是必須花點時間找出適合自己的設定


- 設定 -
cl_cmdrate 應該是每秒上傳幾組 packet 到 server
cl_updaterate 是每秒向 server 接收幾組 packet
另外,國外選手的CFG採用 cl_cmdrate "80" 和 cl_updaterate "80"
是因為國外的寬頻網路非常先進
所以將這兩個參數設為 80 不會有什麼問題
但是如果你使用的網路連結無法達到這樣的傳輸率
資料傳輸中會有遺失 packet 的情形
反而會讓你打起來更不順

建議你開啟 net_graph (net_graph 3) 慢慢調整
net_graph 中左下角的 "loss" 是資料上傳中每秒遺失幾組 packet
相對的,右下角的 "choke" 是資料下載 / 更新中每秒遺失的 packet 數
調整的方法是
在有 loss 的時候就降低 cl_cmdrate
有 choke 的話則降低 cl_updaterate
一般的正常情形,loss 和 choke 應該皆為 "0"
而理想狀況是能夠找到「loss 和 choke 保持 "0" 的 cl_cmdrate / cl_updaterate 最大值」

===============================================

選擇自己適合的,在CS裡面playonline(或是internet)右上方會有選擇網路速的選項
那就是選擇rate的一項
選擇LAN 112k會幫你設定rate到5000
選擇LAN >...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

az091128 發表於 2010-11-7 10:47 AM

這些設定對一般遊戲來說都沒有什麼作用,只是改了模組既時候先注重
頁: [1]