21

我正在为 iPhone 开发一个可以渲染大量纹理的 2D 应用程序。目前,它们中的大多数都是从具有 alpha 透明度的 PNG 文件加载的。作为一项测试,我也一直在玩 PVR 测试,看看是否有任何性能差异。

PNG 纹理与崩溃着陆示例附带的 Texture2D 类一起加载。PVR 测试是使用 PVRTextureLoader 示例中的 PVRTexture 类加载的。我使用 Apple 的纹理工具创建 PVR 纹理。

作为测试,我渲染了一个背景 (512*512),并在 36 个 90*64 像素精灵(来自 512*512 纹理)之上以透明度渲染。PVR 纹理以大约 58 fps 的速度渲染,PNG 以 47 fps 的速度渲染。这是我可以期待的还是应该更大的差异?另外,texturetool生成的纹理看起来很糟糕,PVRTexTool更好吗?

4

2 回答 2

44

PNG:

  • 高精度色彩表现,无损耗
  • 从磁盘读取/解压缩速度较慢。
  • 缓慢上传到图形硬件,内部像素重新排序(swizzling)由驱动程序执行。可能还有 RGBA<->BGRA<->ARGB 之间的转换,尽管 Xcode 通常会将 PNG 转换为更适合硬件的颜色格式。
  • 由于内存带宽有限(从内存中为 GPU 读取更多字节),渲染速度较慢。实际减速量取决于使用场景。当放大率低于 1 倍且没有 MIP 映射时,此问题最为明显。
  • 占用更多 RAM/VRAM 空间。
  • 可编辑,可以在上传前由您的软件过滤/混合/调整大小/转换。
  • Mip-maps 可以在驱动程序上传纹理时自动生成
  • 磁盘空间使用量因内容而异,对于简单的图像非常小,对于逼真的图像几乎未压缩。
  • 可以直接快速地从任何图像编辑软件中导出。

PVR:

  • 低精度有损压缩。提供 2 种压缩级别,即每像素 2 位和每像素 4 位。块状,可能会损坏锋利的边缘和平滑的渐变。图像质量因内容而异。3 或 4 个颜色通道,因此您可以使用 Alpha 通道,但有损压缩可能会产生不良结果。
  • 从磁盘快速加载,无需软件解压缩。
  • 几乎即时的纹理上传,因为它是一种内部硬件格式,将通过驱动程序不变。
  • 由于内存带宽使用量较小,因此渲染速度快。使用 PVR 纹理时,像素渲染速度主要受其他因素的限制。
  • 使用最少的 RAM 和 VRAM 空间。
  • 必须预先生成 Mip-map。
  • 您无法在软件 AFAIK 中生成或编辑 PVR。否则会很慢。
  • 磁盘空间使用量与源图像大小(固定压缩比)成正比。可以通过其他方法进一步压缩(轻微)。
  • 尺寸限制。2 的幂,仅平方。
  • 需要额外的转换工具,处理可以自动化,但会大大减慢构建时间。
于 2011-02-03T17:07:00.210 回答
10

PVRTC 纹理的性能应该更好,因为它们是压缩的(有损)。解压缩是在图形硬件本身中完成的。传输的纹理数据更少,因此您获得更多带宽。您为 RAM 和带宽节省付出的代价是质量损失。

于 2009-02-13T10:37:13.650 回答