我有一个大的 png 纹理 4096x4096,我需要在内存中加载部分。我已经将大 png 纹理分割成 16 个 1024x1024 切片,然后将它们转换为 PVR 压缩文件。
问题是当我绘制这些图块时,图块之间的边缘与 png 不同。所以,我想如果有一种工具可以生成一个 4096x4096 PVR 纹理然后将其拆分为 16 个 1024x1024 PVR 瓦片?
PVR(这是一种支持多种纹理类型的更通用的纹理文件格式)我假设您的意思是 PVRTC?
PVRTC 不是传统意义上的基于块的,例如,使用 ETC 或 S3TC 时,纹理被拆分为 4x4 像素块,每个块单独压缩。相反,它试图在重叠的像素邻域集之间共享数据。它还(有点)假设纹理可能是平铺的,因此,例如,最左边的边缘区域实际上与最右边的手共享信息(顶部和底部也是如此)。这通常不是太大的问题,除非边缘完全不同。
因此,如果您尝试将已压缩的纹理细分为较小的区域,则它将不起作用,因为压缩器已对大图像中共享的内容做出了假设,这与小图像中的内容不同。
至于分别压缩每一块,听起来每一块的边缘可能会有很大的不同。我唯一能想到的就是将你的原始纹理切成 (2^N -4)x (2^N -4) 个单位,但将它们居中存储在 2^N * 2^N 纹理中用原始像素的副本填充 2 像素边框。然后,您将纹理映射设置为仅使用中心 (2^N -4)x (2^N -4) 区域。希望这样可以减少不连续性伪影。