如何压缩纹理以在SceneKit中使用

时间:2017-01-09 06:44:16

标签: textures scenekit

我在Xcode中尝试了 texturetool 来压缩一堆.png纹理,以便在SceneKit场景中使用。根据{{​​3}}尝试了几个选项。

  texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-4 -o ImageL4.pvrtc Image.png

得到的图像是原始png大小的3到4倍。我预计它会小得多。这些是方形纹理,2的幂等。结束使它变小并进行有损优化传递。

纹理压缩的正确方法是什么(适用于iOS10)?

更新了压缩测试结果。这张图片是约。 2倍大小。毫不奇怪,结果与textureTool相同。 PVRTexTool(来自Imagination Technologies)提供了更多种格式可供选择。

Apple docs

2 个答案:

答案 0 :(得分:1)

有三种主要方式(在我的头脑中)思考"对"在压缩纹理方面。

  1. 纹理占用的存储空间,以及在追求更小的纹理文件大小时,您在细节丢失方面愿意接受的妥协。这可能包括实际上物理缩小纹理,并在以后扩展它,但通常会考虑到不同的有损格式:

  2. 压缩影响加载时间的程度,因为包中的所有压缩图像都必须解压缩以供GPU / CPU和您的应用程序用于在屏幕上显示图像作为纹理等。一些图像格式和压缩类型比其他类型需要更长的时间来解压缩。有些闪电般快,但更大。

  3. 最后一个问题是您将在GPU内存中使用纹理的格式。这通常是位细节,但在某些硬件上还有一些选项。它是每种颜色2个,4个,5个,8个位吗? alpha的位数是多少?等。

  4. 并非所有的视频加速器和系统都能满足多种格式的纹理,但苹果确实如此,您可能已经发现了这种格式。这些都是尺寸与细节之间权衡的混合。较少的颜色位=较少的渐变定义等.Apple的硬件也非常擅长解压缩某些格式,而其他格式则很糟糕。对于不同的设备类型,包装的最终尺寸显然是一个不同的问题。

    在需要使用某些存储管理之前,Apple TV上限制为200MB。

    应用程序超过单元格数据的限制为100 MB

答案 1 :(得分:1)

这与您的问题略有相关,但有关于纹理压缩的讨论,包括PVRTC jquery.dirtyforms

TLDNR :PNG和JPEG可能适合存储/传输纹理数据,但在GPU访问之前必须在内存中完全解压缩)

但是,如果你的纹理可以很好地压缩PNG,那么通过对数据的一些重新排序,压缩的PVRTC有一个很好的机会。 / ETC / S3TC图像也可能受益于无损压缩(例如zlib等),这可能会解决您的存储问题。