5 Years of Arma 3 T-Shirt | Bohemia Interactive Store
大変だ、BohemiaのMerchandise StoreでArma3の5周年記念Tシャツが売ってるぞ!
この記事はPCゲーム Advent Calendar 2018 – Adventarの6日目の投稿です。
概要
Arma3サーバーを公開状態で建てるには、Dedicated_serverと呼ばれる専用サーバープログラムを利用してサーバーを建てる方法と、通常のArma3ゲームプログラムを起動した上でMultiplayerからサーバーを建てる方法があります。
本稿では前者のDedicated Serverを利用してサーバーを建てる際に、ネットワーク関連のパフォーマンス設定を行う「basic.cfg」ファイルについて解説します。(Multiplayerよりサーバーを建てる際にも利用可能です。その際にはLauncherよりbasic.cfgファイルを指定したうえでArma3を起動する必要があります。)
簡単に言うと「Arma3サーバーを建てたけどラグが酷い」という方向けです。
basic.cfgとは
まず、当サーバーの環境(10-15人程度のプレイヤー、回線実測300Mbps程度)で使用しているbasic.cfgは下記の内容になります。
language="English";
adapter=-1;
3D_Performance=1.000000;
Resolution_W=800;
Resolution_H=600;
Resolution_Bpp=32;
MinBandwidth = 131072;
MaxBandwidth = 10485760;
MaxMsgSend = 256;
MaxSizeGuaranteed = 256;
MaxSizeNonguaranteed = 64;
MinErrorToSend = 0.01;
MinErrorToSendNear = 0.04;
MaxCustomFileSize = 16777216;
このファイルでは主に、使用するネットワーク帯域に関連する部分、転送されるファイルの最大サイズ等が定義されています。また一部の項目についてはデフォルトで生成される為、クライアントプログラムのMultiplayerからサーバーを建てた場合は既に設定されている項目もあります。
各設定項目の解説
各項目は一見難解そうに見えますが、設定する必要のある項目は多くないです。また一部公式のWikiには記載されていませんが、初期設定されている値もあります。
language, adapter, 3D_Performance
これらは標準で設定されている項目です。特に設定する必要はありません。(設定されていない場合には初期設定されている下記の値が使用されます。)
language="English";
adapter=-1;
3D_Performance=1.000000;
Resolution_W, Resolution_H, Resolution_Bpp
解像度を設定する為の項目です。W,HはそれぞれWidthとHeightを意味しています。Dedicated Serverとして起動する場合は特に考慮する必要はありません。クライアントのMultiplayerよりサーバーを起動する場合には、ここに設定した項目がそのままゲーム内の解像度になります。
Resolution_W=800;
Resolution_H=600;
Resolution_Bpp=32;
MinBandwidth
サーバーが確保することができる最小の通信帯域(bps)を定義します。サーバーで利用可能な帯域幅を測定する為の項目になります。Arma3には、この値とMaxBandwidthに設定された値を基に、ネットワークの帯域幅を割り出した上で、使用するネットワークに合わせて通信頻度を調整する機能が備わっています。(設定されていない場合には初期設定されている下記の値が使用されます。)
この値を実測値より高く設定しすぎた場合には、サーバーのラグとL/A(CPU load)が高くなります。
MinBandwidth=131072;
MaxBandwidth
この値に設定された値とMinBandwidthに設定された値を基に、サーバーで利用可能な帯域幅を測定します。
値は初期設定されていません。
MaxBandwidthとMinBandwidthの値は常にMaxBandwidth > MinBandwidthで設定する必要があります。
MinBandwidth=;
MaxMsgSend
各フレーム(サーバー上のFPS)ごとに送信可能なパケット数の設定値です。(設定されていない場合には初期設定されている下記の値が使用されます。)
高く設定すればするほど、より多くの通信帯域幅とCPUリソースを必要とします。その代わりに接続したクライアントが感じる「ラグ」がより小さくなります。
MaxMsgSend = 128;
MaxSizeGuaranteed
プレイヤーの移動情報や発砲などの細かなデータは1パケットに集約されて送受信されます。
制御情報やユーザー部などのヘッダー部を除いたパケットサイズの、サーバーで提供可能な最大サイズをここで設定します。(設定されていない場合には初期設定されている下記の値が使用されます。)
基本的には低いほどより多くの通信帯域幅を必要とします。ただしクライアント側でデータを復号する際にかかる負荷はより大きくなります。
Guaranteedパケットで送受信されるデータは基本的にどのタイミングで発砲したか等の「繰り返しのないデータ」になります。送受信される頻度がNon-Guaranteedパケットより少ないため、通常はMaxSizeGuaranteed > MaxSizeNonguaranteedで設定します。
MaxMsgSend = 512;
MaxSizeNonguaranteed
上記のパケットサイズの内、Non-Guaranteedパケットのサイズを設定します。(設定されていない場合には初期設定されている下記の値が使用されます。)Non-Guaranteedパケットでは、プレイヤーや車両の位置情報など「繰り返し送受信されるデータ」を取り扱います。
この値を高く設定することにより、低い通信帯域幅の回線でも正常に通信が行うことができるようになります(プレイヤーの位置情報が飛んだりしない)が、プレイヤー側でのラグ(カクツキ)がより大きくなります。
MaxSizeNonguaranteed = 256;
MinErrorToSend, MinErrorToSendNear
プレイヤーが移動した際にどのタイミングで位置情報を同期するかを設定する値です。(設定されていない場合には初期設定されている下記の値が使用されます。)
MinErrorToSend = 0.001;
distance = sqrt[(20Error)/MinErrorToSend]
上記の式に基づいて、AI含むプレイヤーの位置情報が同期されます。(sqrtは平方根です。)
例として
この値を0.001に設定した場合は、1km先のプレイヤーが50m移動すると位置情報の同期が実行されます。
この値を低く設定すると、必要とされるサーバーの通信帯域幅が高くなりますが、遠距離のプレイヤーを視界にとらえた際によりスムーズに動いているように見えます。
また、この値で設定された値をそのままクライアントの直近のプレイヤーに適応した場合、不必要に位置情報の同期が行われる為、クライアントのFPSの低下を招きます。この為直近のプレイヤーに対して送受信される位置情報同期のタイミングについては、個別の値を設定することによりArma3ではクライアントのFPSの低下を回避しています。
MinErrorToSendNearの値を高く設定することにより、距離の近いプレイヤー同士の位置情報の同期頻度が低くなり、通信帯域がより低い回線でもデータの欠損が少なくなります。(設定されていない場合には初期設定されている下記の値が使用されます。)
MinErrorToSendNear = 0.01;
MaxCustomFileSize
プレイヤーがCustom FaceやCustom Soundファイルに使用可能な最大サイズを設定する値です。マルチプレイヤーで音楽を鳴らしたりする際のファイルサイズを規定しています。単位はbytesです。(設定されていない場合には0つまりCustom Filesの設定を許容しない設定になっています。)
ここで設定された値を超過したファイルサイズのファイルを転送しようとした場合には、プレイヤーはサーバーからKickされます。
MaxCustomFileSize = 0;
class sockets{maxPacketSize = “number”;};
端的に言うとMTU(Maximum Transmission Unit)です。プレイヤーが頻繁にワープするなどの致命的な問題を抱えていない限り、この値を変更することは推奨できません。使用しているルーターとISPが対応している場合のみこの値を変更してください。(設定されていない場合には初期設定されている下記の値が使用されます。)
class sockets{maxPacketSize = 1400;};
プレイヤーの位置が頻繁にワープする場合、パケットサイズ(MaxSizeGuaranteed, MaxSizeNonguaranteedで設定した値と、ヘッダー部の和)がこの値を超えている可能性があります。(位置情報の共有に必要なパケットが欠損する為。)
チューニングの進め方
基本的には、通信帯域幅が低い回線に合わせて設定した上で、プレイヤーがワープするなどの明確なデータ欠損が起きない範囲で値をより通信帯域幅が高い回線に合わせて設定する方法を取ります。
各設定項目はプレイヤー数と密接に関係している為、少人数またはより少ないAI数でプレイする場合は、より通信帯域幅が高い回線に合わせて設定することができます。普段どのくらいのプレイヤー数、設置するAI数でプレイするかによりベースライン(サーバーとの通信に問題が生じないプレイヤー数)を設定することが望ましいです。
簡単に言えば
より多くのプレイヤー数(AI, Human)にはより多くの通信帯域幅が必要
になります。
取り掛かりとして
サーバーの動作に最も大きな影響を与えるのは「MaxMsgSend」です。この値を調整するにはサーバーのコマンドラインから#monitorを実行して、サーバーのFPSをまず測定しましょう。サーバーFPSは最大50で、一般に15を切って動作している場合プレイヤーはサーバーが「重い」と感じています。
サーバーが常にFPS50で動作している場合で、ネットワーク帯域幅を使い切っていない時は、この値を上げるとよりプレイヤーの動作がスムーズに見えます。反対に常にサーバーFPSが50を切っている場合や、常にプレイヤーのワープが発生している場合は、まずこの値を見直すことをお勧めします。
余裕があれば
サーバーの通信帯域幅を測定してMin/MaxBandwidthを設定しましょう。もしかしたらプレイヤーの動作が改善するかもしれません。
参考
basic.cfg – Bohemia Interactive Community
Arma 2 : OA beta build 84984 – Page 2 – ARMA 2 & OA – BETA PATCH TESTING – Bohemia Interactive Forums