【问题标题】:Best image format for uncompressed textures?未压缩纹理的最佳图像格式?
【发布时间】:2010-10-06 14:30:35
【问题描述】:

我正在选择一种图像格式,该格式将用作所有内部纹理的存储格式。 该格式将用作生成不同平台和配置的压缩纹理的源格式,因此需要涵盖所有可能的纹理类型(2D、立方体、体积测量、不同数量的 mip-map、浮点像素格式、等)并且完全无损。 此外,格式必须能够保留一些元数据。

目前为此使用了一种自定义格式,但由于在大多数图像编辑器中都可以查看,因此艺术家可以更轻松地使用常用格式。

我曾想过使用 DDS,但据我所知,这种格式不支持元数据。

感谢所有建议!

【问题讨论】:

    标签: image textures


    【解决方案1】:

    根据您的要求,您应该保持自制格式。除了支持体积和立方体纹理的 DDS 之外,我不知道任何图像格式。不幸的是,DDS 不支持元数据。

    您能找到的最接近的是 TIFF。它不直接支持立方体贴图或体积纹理,但它支持任意数量的子图像。这样,您可以将子图像重新用作切片或立方体。

    TIFF 对自定义元数据也有很好的支持。 libtiff 图像读/写库工作得很好。如果您来自 OO 方面,它看起来有点过时,但它可以完成工作。

    尼尔斯

    【讨论】:

      【解决方案2】:

      在查看各种游戏的资源时,我发现它们中的大多数都在TGA中存储了纹理(我不知道它们是否被压缩)

      【讨论】:

      • 原因是 TGA 是少数支持 alpha 通道的格式之一
      【解决方案3】:

      对于支持任意元数据和多帧的格式,TIFF 可能是您最接近的选择,但我认为您最好将资产(在本例中为图像)与它们在您的引擎。

      将图像保存为 32 位 PNG 格式,并将类型和元信息放入 XML。这使您的数据保持可见、可读和可编辑。晦涩的自定义格式适用于引擎,而不是人。

      【讨论】:

        【解决方案4】:

        坚持与您的艺术家合作。

        • 如果您是 windows/mac 商店并使用 Photoshop坚持.psd
        • 如果您是 unix 商店并使用 gimp 坚持使用 .xcf

        这些格式将存储图层以及您的艺术家需要和习惯的所有内容。 由于您的艺术家将创建大量资产,使他们的生活尽可能轻松, 即使这意味着要编写一些额外的代码。

        如果原生格式 (psd/xcf) 不支持,请将元数据(无论它可能是什么)放在图像“旁边”的某个位置。

        对于立方体贴图之类的东西,mipmap(如果不是由转换器生成)坚持命名指导线或指导如何将它们放入一个文件中。

        根据您用于创建体积数据的工具,坚持使用该工具的原生格式。

        虽然为目标编写自定义格式通常是个好主意,但 为艺术家编写自定义格式会导致混乱......

        【讨论】:

          【解决方案5】:

          我对 DDS 的体验是,它是一种记录不充分且难以使用的格式,并且几乎没有什么优势。通常更简单的方法是为每个图像类存储一个主文件,该文件具有对构成它的源图像的引用(即立方体贴图的 6 个面,体积纹理的任意数量的切片)以及任何其他有用的元数据。将元数据保存在单独的文件(或数据库)中总是一个好主意,因为您不希望在执行搜索、填充浏览器等时加载大量图像。这也很有意义将源图像格式(tiff、tga、jpeg、dds ...)与“元格式”(cube、volume ...)分开,因为您可能会发现需要使用有损压缩来支持 HDR 格式或非常大的源体数据。

          【讨论】:

          • 有趣的想法,我看到这种设计的缺点是它消除了图像作为文件系统中单个文件的概念,实际上需要为所有图像操作(移动,复制等)。我们使用了大量的外包,所以这进一步复杂化了。
          • 是的。人们采用的一种简单解决方案是将所有组件资产打包在一个 zip(或类似)包中。
          【解决方案6】:

          【讨论】:

          • 请注意,它可能被压缩,但它不会丢失。
          • PNG 不支持浮点曲面,也没有多维图像的概念,所以它不是我想要的。
          【解决方案7】:

          作为替代解决方案,也许花一些时间为您的文件格式编写一个Free Image Editor 的插件?我以前从来没有做过,所以我不知道所涉及的工作,但是那里有大量的示例代码供您使用。

          【讨论】:

            猜你喜欢
            • 2012-08-31
            • 1970-01-01
            • 1970-01-01
            • 2015-02-02
            • 1970-01-01
            • 2015-06-24
            • 2019-11-03
            • 1970-01-01
            • 2014-04-05
            相关资源
            最近更新 更多