PVR纹理消耗更少的RAM吗?

时间:2014-06-10 05:21:04

标签: ios opengl-es cocos2d-iphone

据我所知,用texturetool制作的PVR纹理只是压缩图像。因此,差异在于文件大小。

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

基本问题是:

鉴于X.pngX.pvr,如果我用纹理格式RGBA8888显示两者,那么一个人会比另一个消耗更少的RAM吗?

2 个答案:

答案 0 :(得分:6)

是的,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试图找到舒适的平衡,游戏通常会提高纹理的分辨率。

答案 1 :(得分:1)

未压缩的纹理是:

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

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

此外,它们表现更好,因为需要更少的内存带宽来获取纹理。