全新资源导入管线:加速资源导入
在Unity 2019.3中,新项目将默认使用全新的Asset Import Pipeline资源导入管线,从而实现更快的平台切换,获得更快的资源导入,节省用户的时间。同时我们也针对大型项目对资源管线进行了优化。
本文,我们将介绍全新的Asset Import Pipeline资源导入管线新改进的内容、原因和考虑因素。
新资源在加入项目的时候,资源不会立即成为项目的一部分,只有当Asset Import Pipeline资源导入管线发现并导入资源后,它才会加入到项目中。Asset Import Pipeline资源导入管线的主要功能之一是对项目状态进行正确检测,同时允许用户使用不同的API来查询状态。
2017年,我们开始针对Asset Import Pipeline资源导入管线的代码重写工作,目的是实现稳定性和可扩展性更强的方法,同时也要解决用户在日常工作流程中遇到的许多痛点。
现在,在Unity 2019.3 Beta版中,全新的Asset Import Pipeline V2将成为新项目的默认管线。而旧项目也可以选择升级到新的资源导入管线,享受新系统的各种好处。
全新的Asset Import Pipeline资源导入管线背后的设计思路是:我们希望确保新系统能够与现有API兼容,以便在升级到新管线时,不必重写脚本。
实现更快的导入
在日常开发过程中,往往会涉及许多工作流程。我们找出了其中最耗时的问题,并针对它们实施多种解决方案。
将源数据转换为Unity编辑器或某个平台能够直接使用的数据格式,绝非易事。有时候,导入资源需要很长时间。例如:导入一个复杂的3D模型需要进行大量的计算,如果模型附带动画,导入时间会大幅增加。
要解决这个问题,首先要处理3个关键概念:导入结果、决定论和依赖追踪。
导入结果
对于大多数资源类型,Unity需要根据项目的目标平台,转换源文件的数据。转换结果有很多种,具体取决于GPU兼容的格式,包括:PVRTC、ASTC和ETC格式。
这是因为大多数资源文件的格式都是经过优化以节省存储空间,而在游戏或其它实时应用中,资源数据格式必须是硬件可以直接使用的格式,包括:CPU、图形或音频硬件等。
当Unity导入一张PNG图片文件作为纹理时,Unity并不会在运行时使用原始的PNG格式数据。在导入纹理时,Unity会以一种不同的格式创建新的图片,并将其存储到项目的Library文件夹中。导入后的图片版本会被引擎的Texture类使用,上传到GPU,以用于实时显示,这就是所谓的导入结果。
决定论
在不同的硬件上,我们需要确保导入后的结果是相同的,并使用相同格式的数据。对相同输入内容取得相同的输出结果,我们把这种原则称为决定论。
依赖追踪
全新的Asset Import Pipeline资源导入管线可以追踪每个资源的所有依赖关系,并缓存所有资源的导入版本,资源的导入依赖是可以影响导入结果的数据。这意味着,如果改变资源导入依赖,那么导入资源的缓存版本会过时,而资源也需要重新导入才能反映这些改动。
全新的Asset Import Pipeline资源导入管线
在不同情况下,导入操作可能会非常耗时。我们分析了对新项目导入资源和快速平台切换的工作流程,使用了对应的两种方案来解决其中存在的问题。
对新项目导入资源
首次创建新项目时,项目内容基本上和删掉Library文件夹一样。这意味着资源文件夹内的每个资源都需要通过资源导入管线重新枚举和导入,这项操作非常耗费性能。
如果确保不同设备的导入过程能够完全一致并且稳定可靠,那么获得导入结果的时间可以大幅缩短,具体时间取决于原始资源和导入结果的大小。
我们使用了全新的Unity Accelerator来实现这一目标,该功能可以从任何连接到云端的用户设备,缓存导入结果,从而让其他用户能够直接从服务器下载导入结果,不必经历导入资源的繁琐过程。
快速平台切换
直到Unity 2019.2版本,Unity都使用原先的Asset Import Pipeline资源导入管线,Library文件夹中的文件使用资源的GUID作为文件名。因此,从一个平台切换到另一个平台会导致Library文件夹中的导入结果失效,使得每次切换平台都需要重新导入资源。
Asset Import Pipeline V1
如果每天需要在不同平台间多次切换,这项操作可能会耗费数个小时,具体取决于项目大小。
部分用户可能找到了解决的办法,例如:在机器上为每个平台保存项目副本,但是这种方法的灵活性不高。
在全新的Asset Import Pipeline资源导入管线中,我们去掉了GUID和文件名之间的映射。由于该管线会跟踪特定资源的依赖,因此我们可以对依赖进行哈希处理,创建资源导入结果的修订版。我们可以为每个资源创建多个修订版,不必再依靠文件名和GUID的映射关系。
这样,导入结果便能够在不同的配置下照常工作。对于快速平台切换过程,我们可以根据每个平台使用单独的导入结果,在平台之间切换时,导入结果便早已准备好了。和Asset Import Pipeline V1相比,这种方法可以大幅提升平台切换的速度。
Asset Import Pipeline V2
潜在缺点
在改动资源时,Unity会生成许多新文件,占用更多的硬盘空间。不过,我们也有针对这个问题的解决方法:当Unity重启时,Unity会删去未使用的导入结果。
我们会在每个平台上保存最新的导入结果,确保实现快速的平台切换,同时删掉较早的导入结果,从而帮助用户节省磁盘空间。
升级到全新的Asset Import Pipeline
我们可以在Unity 2019.3 Beta版中使用新的Asset Import Pipeline资源导入管线。如果是旧项目,可以在编辑器的项目设置窗口中升级到新的Asset Import Pipeline资源导入管线。
在Mode设置中选择Version 2时,我们会告诉编辑器在此项目中使用新的Asset Import Pipeline资源导入管线。在重新打开项目后,编辑器会使用新的Asset Import Pipeline代码重新导入资源。
这项操作其实和删除Library文件夹的效果相似,但不必删除该文件夹。在切换到新管线Asset Import Pipeline V2时,原先管线的导入结果不会被删除,因为新管线会新建自己的文件夹结构,来存储对应的导入结果。
在Unity 2019.2及更早版本创建的项目仍旧会默认使用原先的导入管线。在Unity 2019.3中首次打开这类项目时,用户可以选择升级到新的资源导入管线。如果拒绝升级,则项目依旧会使用原先的导入管线。此外,项目版本存储在EditorSettings.asset文件中,用户可以自行控制版本。
使用全新Asset Import Pipeline创建的新项目
当使用Unity 2019.3或更新版本创建新项目时,新项目都将默认使用全新的资源导入管线。
更多改进即将到来
在Unite Copenhagen 2019上,Unity新资源管线的开发团队进行了两次相关的演讲,你可以观看下面视频进行了解。
Javier Abud的演讲主要介绍本文探讨的内容,指导用户作出关于资源管理策略的决定。Jonas Drewsen的演讲主要介绍即将推出的新功能,这些功能的目的是让资源管线更具拓展性,并确保项目有更高的稳定性。
小结
欢迎使用Unity 2019.3 Beta版,尝试全新的Asset Import Pipeline资源导入管线。
如果你有任何反馈意见,请访问:
https://forum.unity.com/forums/2019-3-beta.337
下载Unity Connect APP,请点击此处。 观看更多Unity官方精彩视频,请关注“Unity官方”B站账户。
你可以访问Unity答疑专区留下你的问题,Unity社区和官方团队帮你解答:
Connect.unity.com/g/discussion
《尘封的记忆》学习课程上线Unity Learn Premium
官方活动
Unity X 创想家计划
面向青少年的「Unity X 创想家计划」发布,赋予孩子开拓未来的力量,快来参加吧。[了解详情...]
直播预告|AR Foundation中国增强版介绍
11月20日星期三晚8点,新一期的Unity直播课程将帮助你了解AR Foundation中国增强版。[了解详情...]
双十一活动
Unity“双十一”活动火热进行中,来看看有哪些优惠活动吧。[了解详情...]
喜欢本文,请点击“在看”