Oodle Network

Oodle Network を使用してプロジェクトのストリーミング パフォーマンスを向上させる方法の概要です。

Windows
MacOS
Linux

Oodle Network は、ネットワーク ストリームの圧縮システムを公開しています。これのプロジェクトへの統合は、他の Oodle ソリューションと比較して少し実践的な作業となるため、パケット キャプチャ、「BaseEngine.ini」の知識、およびオフラインでのコンプレッサの「トレーニング」が必要となります。また、Oodle Network は、圧縮時間を劇的に早くするためにオフライン トレーニング ステップも使用します。

Oodle Network を設定する

以下は、Oodle Network を使用するために必要な手順の要約です。

  1. Oodle Network プラグインが有効になっていることを確認します。

  2. 可能な限り最もリアルなデータを使用して、オンライン ゲームプレイのパケット データをキャプチャします。

  3. コンプレッサをトレーニングし、実行時に使用する辞書ファイルを作成します。

  4. これらのファイルを使用するように Oodle Network を構成します。

  5. これらのファイルがゲームにパッケージ化されていることを確認します。

これらの手順の詳細については、以下のセクションを参照してください。

Oodle Network を有効にする

The Oodle Network plugin

プラグイン自体はデフォルトで有効になっており、起動ログに次のように記録されているはずです。

LogPluginManager:Mounting plugin OodleNetwork

ただし、ネットワーク ストリームを操作する場合は、このプラグインを使用するように Unreal Engine に指示する必要があります。これを行うには、「BaseEngine.ini」ファイルの次の 4 つの場所を編集します。

BaseEngine.ini

[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」ファイル ブロックを探します。

BaseEngine.ini

[OodleNetworkHandlerComponent]
bEnableOodle=true
PacketLogFile=PacketDump
ServerDictionary=
ClientDictionary=
ServerEnableMode=AlwaysEnabled
ClientEnableMode=AlwaysEnabled

設定

説明

bEnableOodle

false に設定すると、Oodle はデータを圧縮しません。

PacketLogFile

パケットデータをキャプチャ するときに書き出すファイル名のプレフィックスを定義します。

ServerDictionary

トレーニング ステップで作成されたサーバー側の辞書ファイルへのパス。ゲームをパッケージ化するときは、このファイルを含める必要があります。

ClientDictionary

トレーニング ステップで作成されたクライアント側の辞書ファイルへのパス。ゲームをパッケージ化するときは、このファイルを含める必要があります。

ServerEnableMode

メモリに制約のある特定のプラットフォーム向けに、圧縮を条件付きで無効にする方法を提供します。 オプション:

  • AlwaysEnabled:その名の通り、このオプションを設定すると Oodle Network が常に有効になります。

  • WhenCompressedPacketReceived:このオプションを設定すると、圧縮パケットを受信しない限り、サーバー側の辞書は初期化されません。

ClientEnableMode

メモリに制約のある特定のプラットフォーム向けに、圧縮を条件付きで無効にする方法を提供します。 オプション:

  • AlwaysEnabled:その名の通り、このオプションを設定すると Oodle Network が常に有効になります。

  • WhenCompressedPacketReceived:このオプションを設定すると、圧縮パケットを受信しない限り、クライアント側の辞書は初期化されません。

パケット データをキャプチャする

パケット キャプチャは、特別なモードで 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 を使用してパッケージ化してみてください。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる