新的资产导入管道:加快资产进口基础坚实

JAVIER ABUD / UNITY TECHNOLOGIESContributor
Nov 7, 2019|7 Min
新的资产导入管道:加快资产进口基础坚实
为方便起见,此网页已进行机器翻译。我们无法保证翻译内容的准确性或可靠性。如果您对翻译内容的准确性有疑问,请参阅此网页的官方英文版本。

从 2019.3 开始,新的 Asset Import Pipeline 已成为新项目的默认设置,旨在通过更快的平台切换节省您的时间,并为更快的导入奠定基础。我们还正在为大型项目改进资产管道规模。继续阅读以了解有关新的改进以及我们的动机和考虑的更多信息。无论何时将新资产放入项目,它实际上都不会成为项目的一部分,直到资产导入管道发现并导入它。正确检测项目状态是 Asset Import Pipeline 负责的,同时允许您通过各种 API 查询此状态。2017 年,资产导入管道重写工作开始为更加健壮和可扩展的方法铺平道路,同时也解决了您在日常工作流程中报告的许多痛点。随着 Unity 2019.3(目前处于 测试阶段),新的 Asset Import Pipeline(也称为 Asset Import Pipeline V2)将成为新项目的默认实现。较旧的项目可以选择升级到新的资产导入管道,以获得该新系统的好处。现在是分享一些新管道背后想法的好时机。具体来说,我们希望分享一些考虑因素,以确保新系统与现有 API 兼容,以便在升级到新的资产导入管道时不必重写脚本。

实现更快的导入时间

日常开发周期中有许多工作流程。我们已经确定了最耗时的问题并实施了解决方案。导入资产可能需要很长时间。将源数据转换为 Unity 编辑器或平台可以使用的格式并不是一个简单的过程。例如,导入复杂的 3D 模型需要大量计算,而与动画结合时,这个时间会迅速增加。为了解决这个问题,有 3 个关键概念需要作为解决方案的一部分来处理:

导入结果

对于大多数类型的资产,Unity 需要根据 项目的目标平台转换源文件中的数据。结果将因兼容的 GPU 格式(例如 PVRTC、ASTC 或 ETC)而异。这是因为大多数文件格式都经过了优化以节省存储空间,而在游戏或任何其他实时应用程序中,资产数据需要采用可供硬件(例如 CPU、图形或音频硬件)立即使用的格式。例如,当 Unity 将 PNG 图像文件导入为纹理时,它不会在运行时使用原始 PNG 格式的数据。相反,当导入纹理时,Unity 会以不同的格式创建图像的新表示,并将其存储在项目的库文件夹中。这个导入的版本是引擎中的Texture类所使用的,并上传到GPU进行实时显示。这被称为 导入结果

决定论

我们需要知道,即使我们使用不同的硬件,您和我导入时都会以完全相同的格式获得相同的导入结果。对于给定的输入获得相同输出的原则就是我们所说的确定性。

依赖关系跟踪

资产导入管道跟踪每个资产的所有依赖项,并保留所有资产的导入版本的缓存。资产的导入依赖项是所有可能影响导入结果的数据。这意味着如果您的任何资产的导入依赖项发生更改,则导入资产的缓存版本将变得过时,并且需要重新导入资产以反映这些更改。

引入新的资产导入管道

在不同情况下,导入可能会花费很长时间。我们确定了以下两种工作流程并实施了两种解决方案来解决上述问题:新项目导入快速平台切换

新鲜项目导入

首次设置项目时,其操作与删除 Library 文件夹时基本相同。这意味着资产文件夹中的每个资产都需要通过资产导入管道进行枚举和导入。这自然是一个昂贵的操作。但是,通过确保我们的导入过程在机器上是确定性和稳定的,检索导入结果所需的时间可以减少几个数量级,具体取决于源资产的大小和导入结果的大小。我们通过使用新的 Unity Accelerator 来实现这一点,它会将连接到它的任何人的导入结果缓存在云端,从而允许您直接从服务器下载导入结果,而不必经过导入资产所需的繁重处理。

快速平台切换

直到 Unity 2019.2(带有原始资产导入管道)为止,Library 文件夹均由资产的 GUID 作为其文件名组成。因此,从一个平台切换到另一个平台将使 库文件 夹中的导入结果无效,导致每次切换平台时都需要重新导入它。

图像
资产导入管道 V1

如果您每天需要在平台之间来回切换多次,这很容易花费几个小时,具体取决于您的项目规模。

你们中的一些人已经找到了解决这个问题的方法,比如在你的机器上为每个平台保留一个项目副本,但这种方法的可扩展性不是很好。

通过新的资产导入管道,我们删除了 GUID 到文件名的映射。由于跟踪了特定资产的依赖关系,我们能够将它们全部哈希在一起以创建资产导入结果的修订。这使得我们可以对每个资产进行多次修订,这意味着我们不再受 GUID 到文件名映射的约束。没有这个要求使我们能够获得跨不同配置工作的导入结果。对于快速平台切换,我们可以为每个平台提供一个导入结果,这样当您来回切换平台时,导入结果已经存在,从而使平台切换比资产导入管道 V1 快几个数量级。

图像
资产导入管道 V2
可能的负面影响

当您对资产进行更改时,Unity 会生成许多新文件。这将占用磁盘上更多的存储空间。然而,我们决定解决这个问题的方法是在 Unity 重启时删除未使用的导入结果。我们会跟踪每个平台的最新导入结果,以便在删除旧的导入结果时仍可以进行快速平台切换,从而帮助您释放一些磁盘空间。

如何升级到新的资产导入管道

新的资产导入管道已在 Unity 2019.3 测试版中推出。如果您有现有项目,则可以使用编辑器中的 项目设置窗口 升级到新的资产导入管道:

图像
图像

选择 版本 2 将告诉编辑器您现在想要将新的资产导入管道与该项目一起使用,并且重新启动项目将使用新的资产导入管道代码重新导入它。这基本上与删除“库”文件夹具有相同的效果,但不会删除它。切换到使用资产导入管道 V2 时,原始资产导入管道的导入结果不会被删除,因为 V2 会创建自己的文件夹结构来存储其导入结果。

您在 Unity 2019.2 或更早版本中创建的项目仍将默认使用原始的 Asset Import Pipeline。首次在 Unity 2019.3 中打开此类项目时,您将获得升级到新资产导入管道的选项。如果您拒绝,您的项目将继续使用原始的资产导入管道。此外,所选版本存储在项目的 EditorSettings.asset 文件中,因此可以进行版本控制。

图像
使用新的资产导入管道创建的新项目

使用 Unity 2019.3 或更新版本创建新项目时,新的资产导入管道已成为新的默认工作方式。您创建的所有新项目都将使用它。

即将推出更多改进

在 2019 年 Unite Copenhagen 大会上,我们的团队发表了两次演讲。我的演讲 是对本博文中涵盖的主题的一般介绍,可以指导您制定自己的资产管理策略的决策。我的同事 Jonas Drewsen 谈到了即将推出的功能,这些功能旨在使资产管道更具可扩展性和确保项目稳定性:

现已在 Unity 2019.3 测试版中推出

获取 Unity 2019.3 测试版 并试用新的 Asset Import Pipeline。我们期待 在论坛上听到您的想法!如果您还有其他问题,也可以通过 Twitter 与我联系。