SceneKit,动态加载和替换纹理的最有效方法是什么? UIImage,MTLTexture,MDLTexture,URL?

SceneKit, what is the most efficient way to load and replace textures on the fly? UIImage, MTLTexture, MDLTexture, URL?

我需要在运行时尽快加载和替换各种纹理,同时保持尽可能低的内存使用率。应尽快从 VRAM 中删除未使用的旧纹理。将所有内容重写为 Metal 可能会有所帮助,但这需要大量工作。

从Apple的文档中可以看出,纹理可以是:

UIImage / NSImage / MTLTexture / MDLTexture / String / URL

所以,哪一个是最好的。我测试了其中一些,但它们在 macOS 和 iOS.

上的表现不同

文件路径和 URL 更好,因为它们不会为纹理数据预先分配内存。例如,在处理 UIImageCGImageRef 时,SceneKit 无法代表您丢弃原始图像数据,这可能与颜色 space and/or 像素不匹配格式 SceneKit 将要在内部使用。