Oodle网络

关于使用Oodle网络提高项目流送性能的概述。

Windows
MacOS
Linux

Oodle网络 公开了一个可用于网络流送的压缩系统。与其他Oodle解决方案相比,将其集成到你的项目中需要更多的操作,需要数据包捕获、需要你熟悉 BaseEngine.ini 以及需要进行压缩器的离线"训练"。它将使用离线训练步骤大幅缩短压缩时间。

设置Oodle网络

以下是使用Oodle网络所需步骤的摘要:

  1. 确认Ooodle网络插件已启用。

  2. 使用尽可能真实的数据捕获在线Gameplay的数据包数据。

  3. 训练压缩器,创建在运行时使用的字典文件。

  4. 配置Oodle网络以便使用这些文件。

  5. 确保这些文件与你的游戏一起打包。

以下小节提供了有关这些步骤的更多信息。

启用Oodle网络

Oodle网络插件

插件本身应该默认启用,你应该会在启动日志中看到说明:

LogPluginManager: Mounting plugin OodleNetwork

但是,你需要告诉虚幻引擎在处理网络流送时要使用此插件。为此,你需要在四个位置编辑 BaseEngine.ini 文件:

BaseEngine.ini

[GameNetDriver PacketHandlerProfileConfig]
+Components=OodleNetworkHandlerComponent
[PendingNetDriver PacketHandlerProfileConfig]
+Components=OodleNetworkHandlerComponent
[DemoNetDriver PacketHandlerProfileConfig]
+Components=OodleNetworkHandlerComponent
[PacketHandlerComponents]
Components=OodleNetworkHandlerComponent

这些变量将使虚幻引擎将Oodle网络用于网络流送。前三个条目将指定相关网络驱动程序的组件。如果没有为给定的网络驱动程序指定组件,则虚幻引擎会检查 PacketHandlerComponents 分段。

调试时,你可能需要连接实际客户端,以便进行代码级调试,因为数据包处理程序仅在活动连接上创建。

此外,Oodle网络将查找以下 BaseEngine.ini 文件块进行配置:

BaseEngine.ini

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

设置

说明

bEnableOodle

当设置为false时,Oodle不会压缩数据。

PacketLogFile

这定义了在捕获数据包数据时要写出的文件名的前缀。

ServerDictionary

训练步骤创建的服务器端字典文件的路径。打包游戏时需要包含此文件。

ClientDictionary

训练步骤创建的客户端字典文件的路径。打包游戏时需要包含此文件。

ServerEnableMode

为某些内存受限的平台提供一种有条件地禁用压缩的方法。 选项:

  • AlwaysEnabled:自我解释;设置此选项时,Oodle网络始终处于启用状态。

  • WhenCompressedPacketReceived:当你设置此选项时,除非收到压缩数据包,否则不会初始化服务器端字典。

ClientEnableMode

为某些内存受限的平台提供一种有条件地禁用压缩的方法。 选项:

  • AlwaysEnabled:自我解释;设置此选项时,Oodle网络始终处于启用状态。

  • WhenCompressedPacketReceived:当你设置此选项时,除非收到压缩数据包,否则不会初始化客户端字典。

捕获数据包数据

通过在特殊模式下启用Oodle网络玩游戏来完成数据包捕获。此播放应该代表典型播放,因为这些数据包捕获的质量会影响你得到的压缩质量。

无论哪个可执行文件充当服务器,都应该使用 -OodleCapturing 运行:

UE4Editor.exe ShooterGame -game -OodleCapturing -windowed -log

客户端应该在没有 -OoodleCapturing 的情况下连接:

UE4Editor.exe ShooterGame -game -windowed -log

数据包捕获会写入用于项目和配置的 Saved/Oodle 目录。你需要收集许多数据包捕获(50 Mb或更多)以便创建具有适当代表性的训练数据集。训练时要使用目录中的所有数据包捕获。

训练

Oodle网络训练器是命令行程序,可以读取所有数据包捕获并从中创建字典。这些字典用于压缩服务器和客户端之间的网络流送。

这是运行训练器命令行程序的命令:

UE4Editor.exe ShooterGame -run=OodleNetworkTrainerCommandlet AutoGenerateDictionaries -CompressionTest

字典默认大小为4MB,可以使用 -DictionarySize=(size in bytes) 命令行选项覆盖。

训练器从Oodle网络写入数据包的同一目录读取数据包捕获,并将结果字典写入 Content/Oodle 目录:

Content/Oodle/ShooterGameInput.udic
Content/Oodle/ShooterGameOutput.udic

日志将报告使用生成的字典实现的压缩率:

OodleNetworkHandlerComponentLog: 压缩测试结果:
OodleNetworkHandlerComponentLog: - CompressionTestPackets: 380,大小:10428 (~0MB)
OodleNetworkHandlerComponentLog: - 未压缩:10428 (~0MB),已压缩:6699 (~0MB)
OodleNetworkHandlerComponentLog: - 总保存量:35.759495

此时,训练完成。

如果你的游戏以明显的方式更改补丁,你需要重新训练Oodle网络捕获新的数据包,并发布带有补丁的新词典。

配置

服务器端和客户端字典应该在 BaseEngine.ini 文件中指定:

ServerDictionary=Content/Oodle/ShooterGameOutput.udic
ClientDictionary=Content/Oodle/ShooterGameInput.udic

配置完成后,你应该能够使用 stat OodleNetwork 命令,并查看启用统计数据的游戏中的实时压缩率。

打包

只要为你的目标平台启用了Oodle网络,字典文件就应该会自动包含在内。你可以通过列出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 打包。

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消