schroet.comにbdsさんのネットコード解説コラム『Counter-Strike 1.6 Net Code Explained』が掲載されていたので読んでみました。
以下は翻訳です。
ゲームプレーに致命的な影響を与えるchoke現象とネットコードの説明をはじめよう。
Chokeは以下のようにして測定される。
Current time + 1/cl_updaterate
Current time + (number of bytes just sent / rate setting)
したがって、高いcl_updaterate値でプレーしてあなたの帯域幅がそれを扱うことができない場合、より多くのchokeを得ることになるだろう。
また、ゲーム世界の多くのプレーヤーから送られてくるパケットによってもchokeを受け取ることになる(あなたの大域が処理できない場合)。
最後に低いrate設定でもまた、より多くのchokeを得るだろう。
chokeが有効である場合、サーバーはchokeがなくなるまで、1/cl_updaterateの倍数待って、すべての構造上のクライアントにパケットをその後送ることができるかどうか確かめようとする。
Half-Lifeエンジンがinterpolationを使用する方法は位置とそれらの位置が正確であった時間を格納することである。
そのとき、それはhistoryを通じてベストの2つのポジションのためにex_correctを使用する。
(これが最後の2つのポジションでなければならないというわけでないことに注意)
これは、ex_interpの値がいかなる数値が使われてもその位置間に同じ速度でプレーヤーが移動することを意味しする。
プレーヤーがより速く動くかもしれない唯一のケースは、巨大なパケット落ちがあった後、
もしくはプレーヤーがゲーム世界の後ろにいて、現在の場所に速く移動しなければならないという遅れの元にいる場合である。
なぜデフォルトの値が比較的低く設定されているかというと、このゲームはいろいろな回線のユーザーに対してスムーズにインターネットを介したゲームをできるように設計してあるからである。
また、HLDSは多くのPCで動かなければいけないし、CPUを使いすぎてもいけない。
私の書いた前回のcl_updaeterate、cl_cmdrateのコラムのように、cl_updaterate、cl_cmdrateはそれぞれserver-client、client-server間のトラフィックの流れを調整する。
しかし、低い値にしたからといって、不正確になるわけではなくない。
(これはclientが多くのパケットをロスしたときに起こる)
HLエンジンの動きと1対1の通信が必要なわけではない。
高すぎるcl_updaterateとcl_cmdrateを使ったとき、以下のような問題があるあなたのclientの回線がトラフィックを処理しきれず、chokeを受け取ったとする(前記で説明したとおり)あなたのプレイしているサーバーに、大きな負荷が掛かり、とても小さく、多くの動きがサーバーに送信され、計算されることでCPUパワーを消費し、server-lagの原因ともなる。
重要なのは回線幅と、PCが実際に処理できる値に調整することである。
大会などLANにおいては、より整合性を取れるように高い値に設定すべきである。
CPLがNet Codeのポリシーをデフォルトのupdaterate、cmdrateから高い値に変えたとき、LANの大会で多くのChokeが発生知ることに気づいた。
これはサーバーがsv_lan 1のとき、HLDSは強制的に全てのクライアントのrateを10000にするからである
これは当初は上限ではなかったが、クライアントのデフォルトの値を2500から10000に上げたらLANでよりよく感じられた。
これはCounter-Strikeのバージョンで修正される。
しかしHLエンジンの上限はrate 20000なのでこれ以上の値は無視される。
この値はDedicated Serverのフレームレートの上限である。
値を高く設定すれば、より多くのパケットをクライアントに送ることができる。
この値はサーバーのupdaterateの上限である。
値を高く設定すれば、より多くのパケットをクライアントに送ることができる。
(もしサーバーで十分なフレームレートがでていれば)