首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PVRTC压缩增加了PNG的文件大小

PVRTC压缩增加了PNG的文件大小
EN

Stack Overflow用户
提问于 2009-11-06 17:47:50
回答 4查看 7.6K关注 0票数 5

对于iPhone游戏开发,出于性能考虑,我从PNG格式切换到PVRTC格式。但是PVRTC压缩创建的文件比PNG文件大得多。因此,在PVRTC格式中,140 KB (1024x1024)的PNG会膨胀到512 KB或更多。我在某处读到一个50KB的PNG文件被压缩到大约10KB,而在我的例子中,情况正好相反。

为什么会发生这种情况,以及我如何避免这种情况..如果PVRTC压缩是盲目地执行4bpp转换(1024x1024x0.5),而不考虑PNG中的透明度,那么我们在这里实现的压缩是什么。

我在我的游戏中有100个这样的1024x1024图像,因为游戏中有许多角色,每个人都在做一些复杂的动画。因此,按照每个图像512KB的速率,我的应用程序将获得超过50MB的空间。这对我的客户来说是不可接受的..(使用PNG,我可以让我的应用程序达到10MB)..

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-23 21:09:11

通常,未压缩的图像数据为24bpp (RGB)或32bpp (RGBA)扁平率。PVRTC是4bpp (或2bpp)的扁平率,因此与此相比,有6或8 (12或16)倍的压缩。

图形硬件本机使用纹理的一个要求是,纹理的格式必须是硬件可随机访问的。PVRTC是这种格式,而PNG不是,这就是为什么PNG可以达到更高的压缩比。PVRTC是一种运行时部署格式;PNG是一种存储格式。

PVRTC压缩一次在4x4像素块上以固定的比特率执行,因此很容易计算在内存中的何处检索导出特定纹素的值所需的数据,并且只需访问一次内存。在图形核心中有专门的电路,它将解码这个4x4块,并将纹素值提供给您的着色器/纹理组合器等。

PNG压缩不能在平面比特率下工作,并且从其中检索特定值更加复杂;为了检索单个颜色值,需要从多个位置访问内存,并且每次发生纹理读取时都需要更多的内存和处理。所以它不适合用作原生纹理格式,这就是为什么你的纹理在图形硬件使用之前必须解压缩的原因。与PVRTC相比,这增加了带宽使用,PVRTC使用时不需要解压缩。

因此,对于脱机存储(应用程序在磁盘上的大小),PNG比PVRTC小,PVRTC比完全未压缩的小。在运行时内存占用和性能方面,PVRTC比PNG更小、更快,因为PNG必须解压缩,所以它与未压缩的纹理一样大,速度也一样慢。在初始化磁盘访问时,使用PNG可能会获得一些优势,但这样会浪费解压的时间。

如果您想减少PVRTC的存储空间,您可以尝试对纹理文件进行zip样式的压缩,并在从磁盘加载时对其进行扩展。

票数 17
EN

Stack Overflow用户

发布于 2009-11-06 17:56:35

PowerVR纹理压缩是一种纹理压缩格式。在使用PowerVR的设备上,例如大多数高端手机,包括iPhone和其他基于ARM的小工具,如iPod,绘制速度非常快,因为绘制是硬件加速的。它还使用更少的内存,因为图像以压缩的形式表示,并在每次绘制时解码,而PNG在绘制之前需要解压缩。

PNG是无损压缩。

PVRTC是有损压缩,这意味着它近似于图像。它有一个完全不同的设计标准。

PVRTC将“压缩”(通过近似)任何类型的艺术作品,给出每个纹理元素的固定位数,包括摄影图像。

PNG不近似图像,因此如果图像包含很少的冗余,它将几乎不会压缩。另一方面,统一的图像,例如插图,使用PNG压缩效果最好。

它的苹果和桔子。

票数 2
EN

Stack Overflow用户

发布于 2009-11-09 14:53:29

在单个图像上放置多个平铺的帧,并对纹理的子矩形进行blit。这将大大减少您的内存消耗。

如果您的图像是64x64,那么您可以将其中256个图像放置在16x16排列的1024x1024纹理上。

只需一点努力,图像就不需要完全相同的大小,只要您在每个图像所在的纹理中跟踪矩形的代码即可。

这就是iPhone游戏开发人员的做法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1686525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档