Choose your operating system:
Windows
macOS
Linux
Oodle Network
は、ネットワーク ストリームの圧縮システムを公開しています。これのプロジェクトへの統合は、他の Oodle ソリューションと比較して少し実践的な作業となるため、パケット キャプチャ、「
BaseEngine.ini
」の知識、およびオフラインでのコンプレッサの「トレーニング」が必要となります。また、Oodle Network は、圧縮時間を劇的に早くするためにオフライン トレーニング ステップも使用します。
Oodle Network を設定する
以下は、Oodle Network を使用するために必要な手順の要約です。
-
Oodle Network プラグインが有効になっていることを確認します。
-
可能な限り最もリアルなデータを使用して、オンライン ゲームプレイのパケット データをキャプチャします。
-
コンプレッサをトレーニングし、実行時に使用する辞書ファイルを作成します。
-
これらのファイルを使用するように Oodle Network を構成します。
-
これらのファイルがゲームにパッケージ化されていることを確認します。
これらの手順の詳細については、以下のセクションを参照してください。
Oodle Network を有効にする
プラグイン自体はデフォルトで有効になっており、起動ログに次のように記録されているはずです。
LogPluginManager:Mounting plugin OodleNetwork
ただし、ネットワーク ストリームを操作する場合は、このプラグインを使用するように Unreal Engine に指示する必要があります。これを行うには、「
BaseEngine.ini
」ファイルの次の 4 つの場所を編集します。
[GameNetDriver PacketHandlerProfileConfig]
+Components=OodleNetworkHandlerComponent
[PendingNetDriver PacketHandlerProfileConfig]
+Components=OodleNetworkHandlerComponent
[DemoNetDriver PacketHandlerProfileConfig]
+Components=OodleNetworkHandlerComponent
[PacketHandlerComponents]
Components=OodleNetworkHandlerComponent
これらの変数により、Unreal Engine はネットワーク ストリームに Oodle Network を使用するようになります。最初の 3 つのエントリは、関連するネット ドライバのコンポーネントを指定します。特定のネット ドライバにコンポーネントが指定されていない場合、Unreal Engine は
PacketHandlerComponents
セクションをチェックします。
パケット ハンドラはアクティブな接続でのみ作成されるため、デバッグ時には、実際のクライアントに接続してコードレベルのデバッグを行わないといけない場合があります。
さらに、Oodle Network は、構成のために次の「
BaseEngine.ini
」ファイル ブロックを探します。
[OodleNetworkHandlerComponent]
bEnableOodle=true
PacketLogFile=PacketDump
ServerDictionary=
ClientDictionary=
ServerEnableMode=AlwaysEnabled
ClientEnableMode=AlwaysEnabled
設定 |
説明 |
---|---|
bEnableOodle |
false に設定すると、Oodle はデータを圧縮しません。 |
PacketLogFile |
パケットデータをキャプチャ するときに書き出すファイル名のプレフィックスを定義します。 |
ServerDictionary |
トレーニング ステップで作成されたサーバー側の辞書ファイルへのパス。ゲームをパッケージ化するときは、このファイルを含める必要があります。 |
ClientDictionary |
トレーニング ステップで作成されたクライアント側の辞書ファイルへのパス。ゲームをパッケージ化するときは、このファイルを含める必要があります。 |
ServerEnableMode |
メモリに制約のある特定のプラットフォーム向けに、圧縮を条件付きで無効にする方法を提供します。 オプション:
|
ClientEnableMode |
メモリに制約のある特定のプラットフォーム向けに、圧縮を条件付きで無効にする方法を提供します。 オプション:
|
パケット データをキャプチャする
パケット キャプチャは、特別なモードで Oodle Network を有効にしてゲームをプレイすることによって行われます。これらパケット キャプチャの品質は取得する圧縮の品質に影響を与えるため、一般的かつ代表的なプレイをキャプチャする必要があります。
サーバーとして機能している実行ファイルは、次のように
-OodleCapturing
を使用して実行する必要があります。
UE4Editor.exe ShooterGame -game **-OodleCapturing** -windowed -log
クライアントは、次のように
-OodleCapturing
なしで接続する必要があります。
UE4Editor.exe ShooterGame -game -windowed -log
パケット キャプチャは、プロジェクトと設定のために
Saved/Oodle
ディレクトリに書き込まれます。トレーニングに適切かつ代表的なデータセットを作成するには、多くのパケット キャプチャ (50 MB 以上) を収集する必要があります。トレーニングは、ディレクトリ内のすべてのパケット キャプチャを使用して行われます。
トレーニング
Oodle Network トレーナーは、すべてのパケット キャプチャを読み取り、それらから辞書を作成するコマンドレットです。これらの辞書は、サーバーとクライアント間のネットワーク ストリームを圧縮するために使用されます。
次は、トレーナーのコマンドレットを実行するためのコマンドです。
UE4Editor.exe ShooterGame -run=OodleNetworkTrainerCommandlet AutoGenerateDictionaries -CompressionTest
デフォルトの辞書サイズは 4MB ですが、これは
-DictionarySize=(size in bytes)
コマンドライン オプションで上書きできます。
トレーナーは、Oodle Network がパケット キャプチャを書き込むのと同じディレクトリからパケット キャプチャを読み取り、結果の辞書を次の「
Content/Oodle
」ディレクトリに書き込みます。
Content/Oodle/ShooterGameInput.udic
Content/Oodle/ShooterGameOutput.udic
ログは、生成された辞書で達成された圧縮率を次のようにレポートします。
OodleNetworkHandlerComponentLog:Compression test results:
OodleNetworkHandlerComponentLog: - CompressionTestPackets:380, Size:10428 (~0MB)
OodleNetworkHandlerComponentLog: - Uncompressed:10428 (~0MB), Compressed:6699 (~0MB)
OodleNetworkHandlerComponentLog: - Total Savings:35.759495
この時点で、トレーニングは完了です。
ゲームがかなりの頻度でパッチを変更する場合は、新しいパケット キャプチャで Oodle Network を再トレーニングし、パッチを使用して新しい辞書をリリースする必要があります。
構成する
サーバー側とクライアント側の辞書は、「
BaseEngine.ini
」ファイルで次のように指定する必要があります。
ServerDictionary=Content/Oodle/ShooterGameOutput.udic
ClientDictionary=Content/Oodle/ShooterGameInput.udic
構成が完了すると、
stat OodleNetwork
コマンドが使えるようになり、統計が有効になっているゲームでリアルタイム圧縮率を表示できるようになります。
パッケージ化
辞書ファイルは、ターゲット プラットフォームで Oodle Network が有効になっている限り、自動的に追加されます。これを確認するには、pak ファイルの内容を一覧表示し、関連するエントリを次のように検索します。
UnrealPak.exe Path\To\ShooterGame\Saved\StagedBuilds\WindowsNoEditor\ShooterGame\Content\Paks\ShooterGame-WindowsNoEditor.pak -list
...
LogPakFile:Display:"ShooterGame/Content/Maps/ShooterEntry_BuiltData.uasset" offset:326025216, size:735 bytes, sha1:BF611DF661BA7260E086145D328AC09E9E1149FB, compression:None.
LogPakFile:Display:"ShooterGame/Content/Maps/ShooterEntry_BuiltData.uexp" offset:326026004, size:286 bytes, sha1:44DB46D2C5EC43395C2659E97D4B94DCE0064E6A, compression:Oodle.
LogPakFile:Display:"ShooterGame/Content/Oodle/ShooterGameInput.udic" offset:326027264, size:46416 bytes, sha1:95EE01894C1E72CD12105652186515573E42C3FE, compression:Oodle.
LogPakFile:Display:"ShooterGame/Content/Oodle/ShooterGameOutput.udic" offset:326074368, size:24339 bytes, sha1:EE0602B1263815475FE75BA5D953D7A7963CAF71, compression:Oodle.
LogPakFile:Display:"ShooterGame/Content/ShaderArchive-Global-PCD3D_SM5.ushaderbytecode" offset:326100992, size:5427343 bytes, sha1:129EED3E7BB14E54ACEB72F4A5D813CD1F8E5FA6, compression:None.
...
暗号化キーの取得中にエラーが発生した場合は、このテストで
-skipencryption
を使用してパッケージ化してみてください。