据我所知,用texturetool制作的PVR纹理只是压缩图像.因此,差异在于文件大小. 坦率地说,文件大小对我不感兴趣.我想知道的是,PVR纹理能否比普通的.PNG纹理消耗更少的RAM?或者这完全取决于
坦率地说,文件大小对我不感兴趣.我想知道的是,PVR纹理能否比普通的.PNG纹理消耗更少的RAM?或者这完全取决于纹理格式(如RGBA8888等)?
关键问题是:
给定X.png和X.pvr,如果我用纹理格式RGBA8888显示两者,是否会比另一个消耗更少的RAM?
是的,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试图找到舒适的平衡,游戏通常会增加其纹理的分辨率.