Hacker News 中文摘要

RSS订阅

以PNG格式传输纹理并非最佳选择 -- Shipping textures as PNGs is suboptimal

文章摘要

文章指出在游戏中直接使用PNG格式的纹理并非最佳选择,建议采用更高效的纹理格式如KTX2,并提供了相关实现和操作指南,同时提醒使用游戏引擎时可能已自动优化,但仍建议检查确认。

文章总结

标题:停止在游戏中直接使用PNG格式

主要内容:

在游戏开发中,直接将PNG格式的纹理发送给玩家并不是最佳选择。PNG格式虽然无损压缩且支持广泛,但它主要用于图像数据,而非纹理数据。纹理格式通常具备PNG所不具备的特性,如预生成的mipmaps、立方体贴图(cubemaps)和预乘透明度等。虽然可以通过加载时生成mipmaps和单独处理立方体贴图来解决这些问题,但这会增加开发难度,并且无法充分利用GPU的纹理压缩技术。

GPU兼容的纹理压缩格式(如BCn)能够在存储、显存使用和采样性能方面带来显著提升。然而,GPU无法直接解压PNG,因此如果使用PNG格式,要么无法利用这些压缩技术,要么需要在每次加载游戏时进行昂贵的解压和再压缩操作。

推荐的纹理格式:

Khronos的KTX2和微软的DDS是专为纹理数据设计的格式,它们可以直接上传到GPU,无需额外处理。这些格式通常还会结合无损压缩(如zlib或lz4)来进一步提高压缩率。开发者可以根据需求选择合适的压缩方式,例如在桌面平台上使用DXT5 + lz4压缩的DDS文件,或在移动平台上使用Basis Universal进行快速转码。

导出工具:

大多数图像编辑器并不直接支持KTX2和DDS格式的导出,因此开发者通常需要自行实现导出工具。作者分享了自己开发的开源工具Zex,它可以将PNG转换为KTX2,并支持BC7压缩和zlib超压缩。Zex还支持mipmap生成和地址模式配置,开发者可以根据需要扩展其功能。

纹理查看器:

由于大多数图像查看器无法直接打开DDS/KTX2格式,作者推荐使用Tacentview,这是一款开源、跨平台且支持多种格式的纹理查看器。

自动化处理:

手动转换所有图像不仅耗时,而且容易出错。作者建议通过自动化工具来处理纹理转换,并分享了自己的自动化工具Oven,尽管它目前还不具备通用性,但可以作为参考。

总结:

在游戏开发中,选择合适的纹理格式和工具可以显著提升性能和开发效率。PNG虽然有其优势,但在纹理处理上并非最佳选择。通过使用专为纹理设计的格式和自动化工具,开发者可以更高效地管理游戏资源。

评论总结

评论主要围绕纹理压缩的实践和工具展开,观点多样且涉及不同场景和需求。以下是总结:

  1. 自动化的必要性:多位评论者指出,现代游戏引擎通常会自动处理纹理压缩,手动操作可能增加复杂性。

    • "Any modern engine does this automatically on PNG import, or as part of material/shader setup." (Stevvo)
    • "Texture compression is already handled automatically by all the major game engines under the hood." (lisp2240)
  2. 工具的选择与局限性:评论者提到现有工具的功能不完善,尤其是开源工具,难以满足所有需求。

    • "I unfortunately haven’t found any option that cover all of these points." (jms55)
    • "It sucks to get to the 'better' option and there actually is no better option other than bespoke export tools." (declan_roberts)
  3. 特定场景的需求:在移动应用等场景中,SVG或平台绘图代码可能更适合,因为它们能动态调整大小和颜色。

    • "Designed image assets are better exported as SVG or platform draw code." (drak0n1c)
  4. 未来趋势:有评论者预测,神经纹理压缩将取代现有的块压缩技术,带来更高的压缩率。

    • "Neural texture compression is on its way to replace block compression." (cubefox)
  5. 技术细节与优化:开发者建议使用索引颜色格式,以减少纹理占用的内存和磁盘空间。

    • "Developers should revisit using indexed color formats." (cshores)
  6. 性能与效率:某些压缩格式(如BC7)在渲染速度上有显著优势,尤其适用于需要同时播放多个视频的场景。

    • "Bc7 renders 20-40% faster than raw rgba32." (smallstepforman)

总结:纹理压缩在现代开发中已高度自动化,但现有工具仍存在局限性,尤其是在开源和多功能支持方面。不同场景对压缩格式和工具有不同需求,未来神经纹理压缩可能带来新的突破。