到底如何从2BPP中获得合适的色彩?


11

我一直在研究PowerVR纹理,并遇到了几种显然每个像素2位的纹理。坦白说,这让我感到困惑。当每个像素每个像素只有4种可能的状态时,如何获得甚至一半的体面色彩保存?我很乐意那里有任何资源谈论这种壮举背后的压缩。谢谢!


使用JPG,您可以在1BPP以下获得不错的颜色:)
Ivan

Answers:


13

本文中介绍的PVRTC 2BPP编码将图像划分为8x4-texel块,并压缩每个块,以便每个32 texel块仅存储两种RGB颜色。

32个纹理像素中没有一个存储自己的颜色-每个纹理像素仅存储有关如何在其8x4纹理像素块的两种RGB颜色之间进行混合的信息。

如果源图像中包含带有32种颜色的彩虹的8x4 texel块,则PVRTC 2BPP压缩在保持其质量方面做得很差,因为在PVRTC 2BPP中,每个8x4 texel块只有两种RGB颜色可以混合。


迷人!非常感谢你。不幸的是,加载链接到的纸张时遇到很多麻烦。也许它托管在亚马逊的EC2上?;)
Toji

6

纹理压缩不压缩像素。它压缩像素块。当引用单个像素时,GPU将计算代表该像素的块。然后,它会处理整个块以获得该像素的颜色。

一个例子

假设块大小在RGB纹理上为4x4像素。未经压缩,每个块消耗4x4x3 = 48纹理内存中的字节。
现在,压缩算法将计算每个通道的平均值(RGB)并将其与块一起存储(3个字节)。现在,给每个像素2位以调整平均值,以使像素更接近其原始颜色。多数民众赞成在另一个4x4x2x3/8 = 12字节。
这个新发明的压缩器使用的总字节数是每个块15个字节,压缩率为31.25%。

我神话般的压缩器使用7.5 bpp。这不如2 bpp pvrtc所能达到的好,但是现在您对如何实现2 bbp有了大概的认识。

更新:
我只是在Wikipedia页面上查看了pvrtc。看起来pvrtc没有使用传统的基于块的压缩。 本文介绍了基于块的压缩的工作方式以及pvrtc的不同之处。需要特别注意的是:基于块的滤镜可以使用4bpp(没有alpha)生成外观不错的图像,而nvrtc可以使用2bpp生成图像。


1

@Toji,论文所在的网站有点气质,但今天早上对我有用。失败的话,如果您可以访问ACM / SIGGRAPH,它将在此处托管。奇怪的是,这也是IMG / PowerVR的开发者网站(免费注册)上,但我似乎无法找到正确的部分。:-(

[更新]它仍然是在IMG的网站在这里 [/ UPDATE]

@bmcnet:PVRTC不会将纹理分解成块,例如ETC或S3TC。FWIW,我确实试验了基于块的纹理,但找不到将足够的数据打包到独立的块中并仍然获得所需结果的方法。相反,它更多地是“全局”纹理压缩系统。它具有2个低分辨率图像,将其双线性放大至目标分辨率,然后在逐像素的基础上将它们混合在一起。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.