Version: Unity 6.0 (6000.0)
语言 : 中文
异步加载纹理和网格数据
检查网格是否使用异步上传管线

纹理和网格加载

Unity 可以通过两种不同的方式从磁盘加载纹理和网格数据并将其上传到 GPU:同步方式或异步方式。这两个过程称为同步上传管线和异步上传管线。

当 Unity 使用同步上传管线时,在加载和上传数据时无法执行其他任务。这种情况下可能会导致应用程序出现明显的暂停。当 Unity 使用异步上传管线时,数据在后台加载和上传,同时可以执行其他任务。

如果某个纹理或网格适合异步上传管线,则 Unity 会自动使用异步上传管线。如果某个纹理或网格不适合异步上传管线,则 Unity 会自动使用同步上传管线。

工作原理

同步和异步上传管线之间的主要区别是 Unity 在构建时保存数据的位置,这会影响 Unity 在运行时加载数据的方式。

在同步上传管线中,Unity 必须在单个帧中同时加载纹理或网格的元数据(标头数据)和纹素或顶点数据(二进制数据)。在异步上传管线中,Unity 必须在单个帧中仅加载标头数据,并可以在后续帧中将二进制数据流式传输到 GPU。

在同步上传管线中:

  • 在构建时,Unity 将网格或纹理的标头数据和二进制数据都写入同一 .res 文件。
  • 在运行时,当应用程序需要纹理或网格的时候,Unity 将该纹理或网格的标头数据和二进制数据从 .res 文件加载到内存中。当所有数据都位于内存中时,Unity 随后将二进制数据从内存上传到 GPU。加载和上传操作主要发生在主线程上的单个帧中。

在异步上传管线中:

  • 在构建时,Unity 将标头数据写入到一个 .res 文件,而将二进制数据写入到另一个单独的 .resS 文件。
  • 在运行时,当应用程序需要纹理或网格的时候,Unity 将标头数据从 .res 文件加载到内存中。当标头数据位于内存中时,Unity 随后使用固定大小的环形缓冲区将二进制数据从 .resS 文件流式传输到 GPU。Unity 使用多个线程通过几个帧流式传输二进制数据。请注意,在 Unity 已了解 GPU 硬件的某些游戏主机平台上,Unity 会跳过环形缓冲区并直接加载到 GPU 内存中。

其他资源

异步加载纹理和网格数据
检查网格是否使用异步上传管线