cl_interpとは?CS:GOのエンティティ補間について

CS:GOでは、ネットワーク状況があまりよくない状態でもスムーズなゲームプレイを実現するため、様々な技術が用いられています。今回はそのうちの1つである エンティティ補間 という技術と、そのコマンドについて解説します。
エンティティ補間とは?
CS:GO は クライアント/サーバモデル という技術を使って、プレイヤーのPC(以下クライアント)とサーバー間の通信を行っています。クライアントとサーバーは常時相互に通信を行っていて、クライアント側で行った動きはサーバーに転送され、サーバーはそれを認証し、接続している各クライアントにその情報を再転送します。
サーバーは tickrate という数値に基づいて、情報を計算しています。CS:GOは多くのサーバーが tickrate 128 で動いているので、1秒間に128回の情報を計算しているということになります。
しかしながら、クライアント側がサーバーから受け取った情報を正確にそのまま表示するだけだと、動くオブジェクトの表示が不規則でガクガクになってしまいます。

これを防ぐために、CS:GOではわざと最新の情報ではなく1つ前の情報をクライアントに表示し、最新の情報と照らし合わせて間の情報を補間、アニメーションとして表示することで、スムーズなゲームプレイを行えるようになっています。これは cl_interpolate
というコマンドで制御されており、デフォルトではON(値は1)になっています。

情報を補間する間隔は cl_interp
というコマンドで制御されます。cl_interp
の値はサーバーに入った段階で cl_interp_ratio
と cl_updaterate
の数値に基づいて自動的に決定されます。実際に cl_interp
の値が決定するプロセスは以下の通りです。
cl_interp_ratio / cl_updaterate = cl_interp
つまり簡単にいうと、cl_interp_ratio
はエンティティ補間を行う上で、何tick情報を遅らせて画面に表示するかを設定できるコマンドになります。なので、最適な設定は遅延を最小限にできる「1」 になります。cl_interp_ratio
はサーバーに接続してプレイ中は変更できないので、一度観戦枠に入るか、サーバーから切断してから変更しましょう。
もし高い ping のサーバーに接続した場合、エンティティ補間が間に合わず、他のプレイヤーの動きが不規則でガクガクになってしまう場合があります。一度サーバーから切断した上で cl_interp_ratio "2"
にして再度接続するとアニメーションが滑らかになりプレイしやすくなるでしょう。Demoを見ている時に同様の状態になっても、cl_interp_ratio "2"
にすると改善されます。
cl_interp に関する補足
cl_interp
はプレイヤー側でも設定でき、一部のプロのcfgでは cl_interp "0.031"
と設定されていることもありますが、これはつまり 0.031秒かけてエンティティ補間を行う という意味で、端的に言うと0.031秒(31ms)の遅延が入る ということです。
もちろんその分アニメーションはスムーズで滑らかになりますが、極端な例だと相手プレイヤーが物陰から出てきた瞬間に自分を撃ってくる(決め撃ちしてくる)といった状況の時に、アニメーション描写の遅れにより 自分が撃たれて死んだ後に相手のプレイヤーモデルが物陰から出てくる ということが頻繁に起こるようになってしまいます。
なので、cl_interp
の値は 基本的に「0」(=自動)にすることを推奨 します。そうすることによって、最低限必要なエンティティ補間の間隔をゲーム側が自動的に設定してくれるので、アニメーション描写の遅れも最小限に止めることができます。
飛び出し有利
エンティティ補間技術はつまるところ、プレイヤーモデルの描写を最低1tick遅延させて、アニメーションを滑らかに見せる技術です。つまり、サーバーに繋いでいるプレイヤーはどれだけ回線状況が良くとも 最低限必ず0.0078125秒(約8ms)の表示遅延がある ということになります。
これはつまり、物陰から決め撃ちするシチュエーションの時 8ms以内に決め撃ちして倒せば相手は、自分のプレイヤーモデルを見ることがないまま死ぬ ということになります。
最適な設定まとめ
1 2 3 4 |
cl_interpolate "1" // エンティティ補間を有効化する cl_interp "0" // エンティティ補間の間隔の設定を自動化する cl_interp_ratio "1" // エンティティ補間の間隔を1tickにする cl_updaterate "128" // サーバーからデータを受信する間隔を最大にする |
上記のように autoexec.cfg に設定すれば、最も表示遅延を小さくし、かつ滑らかなアニメーションでゲームをプレイすることができます。
参考:Source Multiplayer Networking-
前の記事
FIVESCUPのLive on Three離脱について 2018.11.15
-
次の記事
CS:GOの基本ルール 2018.12.02