据我所知,用texturetool制作的PVR纹理只是压缩图像。因此,差异在于文件大小。
坦率地说,文件大小并不让我感兴趣。我想知道的是,PVR纹理能否比普通的.PNG纹理消耗更少的RAM?或者这完全取决于纹理格式(如RGBA8888
等)?
基本问题是:
鉴于X.png
和X.pvr
,如果我用纹理格式RGBA8888
显示两者,那么一个人会比另一个消耗更少的RAM吗?
答案 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。所以是的他们确实使用更少的内存。
此外,它们表现更好,因为需要更少的内存带宽来获取纹理。