如今桌面上的Opengl最佳纹理压缩格式

问题描述 投票:1回答:1

我没有找到任何有效的在线资源,并且比较了OpenGL for desktop的纹理压缩格式。一切都过时或移动。

在我的平台上看,我看到许多不同的格式:

GL_ARB_compressed_texture_pixel_storage
GL_ARB_texture_compression
GL_ARB_texture_compression_bptc
GL_ARB_texture_compression_rgtc
GL_EXT_texture_compression_dxt1
GL_EXT_texture_compression_latc
GL_EXT_texture_compression_rgtc
GL_EXT_texture_compression_s3tc
GL_NV_texture_compression_vtc

如果我直接查询GL_COMPRESSED_TEXTURE_FORMATS,我还有其他一些

  public static final int GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 33776;
  public static final int GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778;
  public static final int GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779;

  public static final int GL_PALETTE4_RGB8_OES = 0x8B90 = 35728;
  public static final int GL_PALETTE4_RGBA8_OES = 0x8B91;
  public static final int GL_PALETTE4_R5_G6_B5_OES = 0x8B92;
  public static final int GL_PALETTE4_RGBA4_OES = 0x8B93;
  public static final int GL_PALETTE4_RGB5_A1_OES = 0x8B94;
  public static final int GL_PALETTE8_RGB8_OES = 0x8B95;
  public static final int GL_PALETTE8_RGBA8_OES = 0x8B96;
  public static final int GL_PALETTE8_R5_G6_B5_OES = 0x8B97;
  public static final int GL_PALETTE8_RGBA4_OES = 0x8B98;
  public static final int GL_PALETTE8_RGB5_A1_OES = 0x8B99 = 35737;

  public static final int GL_COMPRESSED_RGB8_ETC2 = 0x9274 = 37492;
  public static final int GL_COMPRESSED_SRGB8_ETC2 = 0x9275;
  public static final int GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276;
  public static final int GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277;
  public static final int GL_COMPRESSED_RGBA8_ETC2_EAC = 0x9278;
  public static final int GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279 = 37497;
  public static final int GL_COMPRESSED_R11_EAC = 0x9270 = 37488;
  public static final int GL_COMPRESSED_SIGNED_R11_EAC = 0x9271;
  public static final int GL_COMPRESSED_RG11_EAC = 0x9272;
  public static final int GL_COMPRESSED_SIGNED_RG11_EAC = 0x9273 = 37491;

虽然here Nicol说不依赖于glGet但是依赖于扩展..

据我所知,所有这些都是有损的,对吧?

谷歌搜索S3TC / DXTx / BCx似乎是在线记录最多的一个,但它也很老,也比现代格式更好。

比较它们的一个非常好的网站是this one,但是用于移动,也是我发现的唯一解释DXT3和DXT5的不同目标的网站。但它错过了EC2,这似乎是GLES3和GL4.3的强制性要求。

另一个有趣的网站是this one

PVRTC在性能方面似乎是最好的,但不幸的是它只在专用硬件上运行。 ASTC也很有前途,但与PVRTC具有相同的劣势。按名称ATITC似乎也很老(ATI纹理压缩)

所以,我想知道在你看来哪些是台式机上GL3 +的最佳压缩格式。

编辑:在纹理压缩上添加来自Nvidia的另一个有趣的link,重点是ASTC

format compression textures opengl-3 opengl-4
1个回答
3
投票

似乎您已经对可用的压缩格式进行了深入的研究。

这是我的2cents贡献:大多数压缩格式都是有损的。我猜只有GL_OES_compressed_pa​​letted_texture没有损耗,但它只支持16或256种颜色,并且对性能有一些担忧。它受到Adreno GPU的支持,以及一些Intel和Mali hw的支持。此外,它也没有被广泛支持为ETC1。如果保真度至关重要,请考虑使用尺寸合适的未压缩纹理。您可以使用尺寸(256/512/1024)和颜色深度(565/888),直到找到最佳的平衡质量/性能。通过允许可配置的纹理质量,您可以让您的客户选择最适合他/她的产品。

此外,如果您选择“最佳”格式,如果您的目标客户端hw不支持它,则无关紧要。如果您的应用程序面向广泛的受众,则必须注意必须降低图形要求。

另一件事。今天大多数“台式”PC实际上都是由Intel Graphics提供支持的笔记本电脑。除非你有足够的资源为无数的当前显卡(NVidia,AMD,Intel)编写替代路径,否则最好坚持使用最常用的解决方案。

但最常用/最常用的压缩格式是什么?好吧,将一些数据库检查为Delphigl.de OpenGL databaseOpenGL ES Database,并考虑为每个平台报告的一些压缩格式的覆盖范围。请注意,一些旧的hw甚至不支持压缩纹理。

作为默认选项,保留一组未压缩的纹理和一组压缩的S3TC(DXT1,DXT3,DXT5)或ETC / ETC2(足以满足RGB w / o透明度)。

祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.