烘焙和数据块划分

烘焙内容、编译.pak文件进行发布

Windows
MacOS
Linux
参见

在编辑器外的平台上烘焙游戏以进行发布或测试时,可使用 数据块划分 将数据拆分为数个.pak文件,然后单独进行部署。数据块 是一个可以单独部署和下载的资源的编号集合。生成的第一个数据块将编号为零,默认情况下将包含项目使用的所有内容。利用引擎的打包系统,每个数据块将创建一个独立的.pak文件,然后可以将其集成到特定于平台的部署系统中。数据块划分已完全整合到资源管理器中,可使用 主资源标签(Primary Asset Labels)规则覆盖(Rules Overrides) 进行设置。可以在ShooterGame范例项目中找到数据块划分示例,该项目构建了三个数据块:数据块1包含“Sanctuary”地图;数据块2包含“Highrise”地图;数据块0则包含其他所有数据。在ShooterGame中,选择的是主资源标签(Primary Asset Labels),但两种方法我们皆会讨论。

在设置数据块划分时,编译一个自定义资源管理器子类并覆盖某些虚拟函数可能非常有帮助。对于大型游戏,强烈建议采用这种方法。例如,可能需要覆盖 SetPrimaryAssetRules 函数来设置特定于游戏的资源规则,比如将一些内容手动分配到特定数据块。您可能还想覆盖 ShouldSetManager 函数,该函数被调用以确定哪些资源由特定的主资源ID管理。每个项目都可以有自己的自定义规则,根据单个项目的需要将内容分配给数据块。资源管理器将根据需要进行扩展和自定义。

主资源规则

主资源规则 用于决定哪些主资源对哪些次资源拥有管理权限,以及在烘焙过程中如何处理资源。这些规则由 FPrimaryAssetRules 结构所定义,由 资源管理器 所使用,决定烘焙时的资源处理方式。如需了解 FPrimaryAssetRules 中可用选项的详细信息,请查看其API页面。您也需要查看EPrimaryAssetCookRule API页面上定义的烘焙规则。

主资源标签

主资源标签UPrimaryDataAsset 类的最小覆盖,对其进行设置后可指定其他资源进行数据块划分和烘焙。在游戏中通常不会加载它们,但在烘焙和划分数据块时需要使用到它们,可对它们的规则、列表和其他项目资源的优先级进行设置。以ShooterGame为例,创建的标签能够指定放置到诸多数据块中的资源。

除了显式指定资源外,还可以使用 我的目录中的标签资源(Label Assets In My Directory) 选项设置标签来管理目录中的所有资源。或者,您可以通过设置 资源集合(Asset Collection) 字段来管理编辑器集合中的所有资源。

HighriseLabel.png

该主资源标签名为“HighriseLabel”,可显式管理游戏的“Highrise”地图资源,并标明其属于数据块2。

此时,“Highrise”资源与其自身的主资源 ID“Map:/Game/Maps/Highrise”、以及“HighriseLabel”和“PrimaryAssetLabel:HighriseLabel”的主资源ID相关联。因为地图没有单独的数据块ID,划分数据块的过程将使用“HighriseLabel”中找到的数据块ID:2。此外,地图中的所有次资源将与数据块2相关联。需要对“Sanctuary”地图和数据块1执行相似的设置。不带数据块ID(或带负数据块ID)的资源将被划入数据块0,即默认.pak文件,同时也是项目的初始地图“ShooterEntry”将保存的位置。由多个主资源标签引用的次资源将与具有最高优先级的标签相关联。如果有多个标签具有最高优先级,则资源将与每个标签相关联。

ReferenceViewer.png

引用查看器将显示主资源标签和关卡地图之间的管理关系。

Management.png

双击“Map:/Game/Maps/Highrise”将显示其由“PrimaryAssetLabel:HighriseLabel”所管理。

规则覆盖

规则覆盖 用于建立特定主资源的优先级和数据块设置。要使用规则覆盖替代主资源标签构建ShooterGame的三数据块设置,需要在 DefaultGame.ini 中创建以下代码段:

[/Script/Engine.AssetManagerSettings]
+PrimaryAssetRules=(PrimaryAssetId="Map:/Game/Maps/Sanctuary",Rules=(Priority=-1,ChunkId=1,CookRule=Unknown))
+PrimaryAssetRules=(PrimaryAssetId="Map:/Game/Maps/Highrise",Rules=(Prority=-1,ChunkId=2,CookRule=Unknown))
+PrimaryAssetRules=(PrimaryAssetId="Map:/Game/Maps/ShooterEntry",Rules=(Priority=-1,ChunkId=0,CookRule=AlwaysCook))

DefaultGame.ini文件中的烘焙和数据块划分规则。我们已在此例中的初始地图“ShooterEntry”中添加一个显式引用。

这将把我们的主游戏地图设置到特定的数据块中,因此其所有引用也会被添加到这些数据块。管理数据块0的最终条目确保游戏首次启动时加载的地图引用的任何内容将保存在数据块0(同时也是默认数据块)中。-1的优先级值将把优先级设为默认值1。

分析资源到数据块的分配

引擎有几个内置工具,用于审计数据块。使用这些工具,您可以查看哪些资源被分配到哪些数据块以及分配原因。

资源审计窗口

要打开 资源审计窗口(Asset Audit Window),请打开 窗口(Windows) 下拉菜单,展开 开发者工具(Developer Tools),然后选择 资源审计(Asset Audit)

AssetAuditInMenu.png

AssetAuditEmpty.png

单击 添加数据块(Add Chunks) 按钮将在窗口中填充当前项目中存在的所有数据块的摘要。

AssetAuditPopulated.png

在ShooterGame中,资源分布在三个数据块之间。

要检查单个数据块,请右键单击它并选中 大小贴图(Size Map)引用查看器(Reference Viewer)

AssetAuditRightClick.png

大小贴图

大小贴图直观地显示了数据块中包含的每个资源的类型和大小。资源显示为彩色框,框中包含图标或缩略图,且资源已按比例缩放以展示资源的大小。框嵌套在其他框中表示父-子引用关系。例如,材质引用的纹理显示在材质的框中,因为加载材质会隐式加载纹理。

在ShooterGame中,数据块0包含显示游戏菜单并进入游戏所需的资源,而数据块1和数据块2用于游戏的可玩地图。因此,数据块0比其他数据块小,并且资源的类型更加多样化。在这里,我们可以看到数据块0和数据块1的资源细分和总发布磁盘大小:

SizeMapChunk0DiskSize.png

ShooterGame的数据块0包含许多独立的资源,但相对较小。

SizeMapChunk1.png

数据库1(如图所示)和数据库2包含进行游戏的各个地图,因此它们具有单个、较大的连接资源组。

大小贴图还支持可视化它所包含资源的内存使用情况(在编辑器中)。对于同一组资源,编辑器内的内存大小可能与发布产品的磁盘空间使用情况有很大不同。

SizeMapChunk0MemorySize.png

数据块0以内存大小模式显示。此模式根据编辑器中资源的内存使用情况调整框的大小。

可以右键单击资源的框来检查或编辑各个资源。您可以使用鼠标滚轮放大或缩小,或者双击某个资源展开它,使其填充窗口。

SizeMapChunk0RightClick.png

“loading screen”纹理资源的右键单击菜单。

引用查看器

引用查看器生成一个图表,该图表将资源间引用表示为资源本身之间的一个连接网。可以使用此工具查看数据块和各个资源。在ShooterGame示例中,查看数据块1时将仅显示两个直接连接的资源:“Sanctuary”地图,以及与数据块1关联的主资源标签。

ReferenceViewerChunk1.png

引用查看器关于ShooterGame中数据块1直接引用的资源的图表。已右键单击Sanctuary地图资源的节点。

在内容浏览器或引用查看器中右键单击一个节点并选择“重新居中图表(Re-Center Graph)”(或在引用查看器中双击该节点)将显示该节点的引用。在下图中,我们从居中数据块1更改为居中“Map:/Game/Maps/Sanctuary”节点,显示出“Sanctuary”地图被其左侧的两个节点(数据块1和数据块1的主资源标签)引用,同时引用了其右侧了许多子节点,例如“M_FFA_Wall_01”材质:

ReferenceViewerChunk1Map.png

在引用查看器中查看ShooterGame的“Sanctuary”地图(数据块1的一部分)。

上面显示的图表并不完整。它受到引用查看器中选项设置的限制。限制图表的范围可以大大减少引擎在构建图表时所花费的时间。有关这些选项的详细信息,请参阅引用查看器页面

通过这种方式浏览引用,您可以确切地了解为什么给定资源与另一个资源或数据块相关联。这可以帮助发现和删除不必要的资源引用,或者调整数据块划分策略以更好地满足项目的需要。

Select Skin
Light
Dark

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见