为何游戏行业偏爱TGA而非PNG?真相揭秘
PNG32也带有alpha通道,并且支持无损压缩,压缩率更高,存储体积更小,为什么游戏行业更多的是使用TGA格式存储贴图。
游戏开发中关于图像格式的选择存在诸多误解,本文旨在澄清事实。
只使用TGA而不采用其他格式的核心原因只有一个:开发流程中的惰性与便利性,而非技术优势。
关于PNG Alpha通道被优化问题
该说法不成立。大量游戏实际采用PNG存储纹理,尤其是UI元素。由于DXT/PVR等硬件压缩格式为有损压缩,在处理边缘清晰的UI图形时表现不佳,因此即便整体使用硬件压缩,UI部分仍普遍采用PNG格式。
256色PNG加Alpha通道的文件体积较小,适用于图形简单的游戏场景。
关于TGA无需解码速度更快的说法
此观点错误。实际测试表明,加载1000张PNG/JPG图片的速度远超同等数量的BMP/TGA图片。虽然TGA省去了解码步骤,但其较大的文件尺寸导致I/O开销显著增加,总体加载时间反而更长。
现代CPU处理PNG/JPG解码负担极轻,JPG已有硬件加速支持,因此TGA在速度上并无优势,尤其在大图或首次加载无缓存情况下劣势明显。
资源打包后都会压缩,TGA也能变小?
尽管打包系统常内置压缩算法(如zip/rar/lzma2),但PNG本身具备多方向预测和差分编码机制,压缩效率优于原始TGA再进行通用压缩。以一张普通UI截图为例:
- PNG(经TinyPNG优化):74.8KB
- TGA:1.04MB
- TGA+RAR:198KB
- TGA+lzma2:170KB
即便使用高效压缩算法,TGA压缩后体积仍为优化PNG的2.3倍,说明直接使用PNG可显著减少磁盘占用。
因需转为DXT/PVR硬件格式,故不用PNG?
该理由有一定合理性。DXT/PVR等格式占用显存更少,适合大多数非UI纹理,并支持mipmap存储,使用便捷。
但更优策略是在磁盘上保留JPG/PNG等高压缩比格式,运行时动态转换为DXT/PVR。mipmap可分离存储并按需生成,例如美术提供关键层级,其余通过bicubic插值生成。
已有成熟工具支持实时压缩,如PC端的libsquish,以及Unity中的ETC/PVR动态生成插件。这些工具采用低精度近似算法,在视觉无显著差异的前提下大幅提升压缩速度。
理想方案是发布时使用传统压缩格式降低安装包体积,提升用户下载效率;运行时转换为目标硬件格式并缓存,避免重复计算。
最终推荐方案
- 基础方案:界面使用PNG(优先8位带Alpha),非界面使用DXT/PVR/ETC
- 进阶方案:界面采用WebP或BPG,普通纹理仍用DXT/PVR/ETC
- 极致优化:全量使用BPG(支持有损与无损),运行时按需动态生成DXT/PVR/ETC格式并启用缓存机制
FLIF虽具备优异的无损压缩率,超越BPG与WebP,但其解码性能过慢,目前尚不具备实用价值,需持续观察其发展。
作者:韦易笑
来源:www.zhihu.com/question/340196227/answer/789538293


