【问题标题】:Do PVR textures consume less RAM?PVR 纹理消耗更少的 RAM 吗?
【发布时间】:2014-06-10 05:21:03
【问题描述】:

据我了解,使用 texturetool 制作的 PVR 纹理只是压缩图像。因此,区别在于文件大小。

坦率地说,我对文件大小不感兴趣。我想知道的是,PVR 纹理是否可以比普通的 .PNG 纹理消耗更少的 RAM?还是这完全取决于纹理格式(如RGBA8888 等)?

基本问题是:

给定X.pngX.pvr,如果我用纹理格式RGBA8888 显示两者,一个会比另一个消耗更少的内存吗?

【问题讨论】:

    标签: ios opengl-es cocos2d-iphone


    【解决方案1】:

    是的,PVR 在所有阶段都会消耗更少的 RAM — 它在访问时由 GPU 实时解包。没有中间减压。

    在数字视频中使用的类似 PVR 的方法是,不是在每个像素处存储 RGB,而是转换为 YUV,然后在每个像素处存储 Y,每个四像素块只存储两次 U 和 V。因此,您从块的 128 位变为 64 位。要返回 RGB,输出器会读取完全正确的 Y,并根据需要插入或访问最近的 U 和 V。

    像 PVR 这样的方案做类似的事情,不是存储每个像素的完整值,而是从附近的上下文中推断出其中的一部分。被视为附近的内容直接对应于该 GPU 上安排的缓存。通常,仅按比例缩小某些通道的采样分辨率会更深入,例如为样本指定一个基本偏移量,然后为每个样本使用一个微小的精度也很常见。

    因此,GPU 始终可以通过仅读取非常小的局部数据区域中的值来获取像素 X 的值。

    这与传统方案(如 PNG)形成对比,传统方案必须知道 X 之前流中的每个像素,如果它提高了压缩率是可以接受的。实时处理此类内容会占用 GPU 的内存带宽,因此完全不切实际,因此此类纹理会从磁盘解压缩然后上传。

    因此,像 PVR 这样的方案往往会导致更差的压缩和更低的每像素质量,但胜利在于它们可以压缩在 VRAM 中。如果使用 PVR 来尝试找到舒适的平衡,游戏通常会增加其纹理的分辨率。

    【讨论】:

      【解决方案2】:

      未压缩的纹理是:

      每像素 16 位(RGB565、RGBA4444), 每像素 24 位 (RGB888)

      PVRTC 纹理要么是 4bpp,要么是 2bpp。所以是的,他们确实使用更少的内存。

      它们的性能也更好,因为它们需要更少的内存带宽来获取纹理。

      【讨论】:

      • 所以PVR贴图不支持RGBA8888的像素格式?
      • PVRTC 有 4 种格式 - 2bpp 和 4bpp,带或不带 alpha 通道。
      • @JustKidding:PVR 是多种像素格式的容器格式,包括 RGBA8888 和压缩的 PVRTC 4bpp 和 2bpp 格式)。 keaukraine:严格来说,PVRTC 始终支持 alpha,但我相信有带有/不带有 alpha 的纹理的标识符,以便驱动程序在纹理不透明时进行额外的优化。
      猜你喜欢
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多