eスポーツ、FPS、MOBA、ゲーミングデバイスの最新情報を紹介する個人ニュースサイト

CS1.6ネットコード解説

schroet.comにbdsさんのネットコード解説コラム『Counter-Strike 1.6 Net Code Explained』が掲載されていたので読んでみました。
以下は翻訳です。

Explanation

ゲームプレーに致命的な影響を与えるchoke現象とネットコードの説明をはじめよう。

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の倍数待って、すべての構造上のクライアントにパケットをその後送ることができるかどうか確かめようとする。

Interpolation

Half-Lifeエンジンがinterpolationを使用する方法は位置とそれらの位置が正確であった時間を格納することである。
そのとき、それはhistoryを通じてベストの2つのポジションのためにex_correctを使用する。
(これが最後の2つのポジションでなければならないというわけでないことに注意)
これは、ex_interpの値がいかなる数値が使われてもその位置間に同じ速度でプレーヤーが移動することを意味しする。

プレーヤーがより速く動くかもしれない唯一のケースは、巨大なパケット落ちがあった後、
もしくはプレーヤーがゲーム世界の後ろにいて、現在の場所に速く移動しなければならないという遅れの元にいる場合である。

  • cl_updaterate/cl_cmdrate

なぜデフォルトの値が比較的低く設定されているかというと、このゲームはいろいろな回線のユーザーに対してスムーズにインターネットを介したゲームをできるように設計してあるからである。

また、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においては、より整合性を取れるように高い値に設定すべきである。

  • ex_interp
  • ex_extrapmax
  • ex_correct
  • ex_maxerrordistance 1.6にex_の設定はないので割愛。
  • sv_lan

CPLがNet Codeのポリシーをデフォルトのupdaterate、cmdrateから高い値に変えたとき、LANの大会で多くのChokeが発生知ることに気づいた。
これはサーバーがsv_lan 1のとき、HLDSは強制的に全てのクライアントのrateを10000にするからである
これは当初は上限ではなかったが、クライアントのデフォルトの値を2500から10000に上げたらLANでよりよく感じられた。
これはCounter-Strikeのバージョンで修正される。
しかしHLエンジンの上限はrate 20000なのでこれ以上の値は無視される。

  • sys_ticrate

この値はDedicated Serverのフレームレートの上限である。
値を高く設定すれば、より多くのパケットをクライアントに送ることができる。

  • sv_maxupdaterate

この値はサーバーのupdaterateの上限である。
値を高く設定すれば、より多くのパケットをクライアントに送ることができる。
(もしサーバーで十分なフレームレートがでていれば)

この記事を書いた人
Negitaku.org 運営者(2002年より)。Counter-Strikeシリーズ、Dota 2が大好きです。 じゃがいも、誤字脱字を見つけるのが苦手です。

https://twitter.com/YossyFPS/
SNSでフォローする
YouTube

取材動画、ポッドキャスト等配信中。チャンネル登録をお願いします!


アフター6ジャンクション出演時アーカイブ