我正在为 iPhone 开发一个 2D 应用程序,它可以渲染大量纹理。目前,它们中的大多数都是从具有 alpha 透明度的 PNG 文件加载的。作为一项测试,我也一直在尝试 PVR 测试,看看是否存在任何性能差异。
PNG 纹理加载了崩溃着陆示例中附带的 Texture2D 类。 PVR 测试使用 PVRTextureLoader 示例中的 PVRTexture 类加载。我使用 Apple 的纹理工具创建 PVR 纹理。
作为测试,我渲染了一个背景(512*512),并在 36 个 90*64 像素 Sprite (来自 512*512 纹理)之上具有透明度。 PVR 纹理的渲染速度约为 58 fps,PNG 的渲染速度为 47 fps。这是我所期望的还是差异应该更大?另外,texturetool生成的纹理看起来很糟糕,PVRTexTool更好吗?
最佳答案
PNG:
- 高精度色彩表现,无损耗
- 从磁盘读取/解压缩速度较慢。
- 上传到图形硬件的速度缓慢,驱动程序执行内部像素重新排序(混合)。也可能存在 RGBA<->BGRA<->ARGB 之间的转换,尽管 Xcode 通常会将 PNG 转换为针对硬件更优化的颜色格式。
- 由于内存带宽有限(GPU 从内存中读取更多字节),渲染速度较慢。实际的减速程度取决于使用场景。这个问题在低于 1 倍的放大率且没有 MIP 映射时最为明显。
- 占用更多 RAM/VRAM 空间。
- 可编辑,上传前可通过您的软件进行过滤/混合/调整大小/转换。
- 驱动程序上传纹理期间可以自动生成 Mip 贴图
- 磁盘空间使用情况因内容而异,对于简单图像来说非常小,对于照片级真实图像来说几乎未压缩。
- 可以直接快速地从任何图像编辑软件导出。
PVR:
- 低精度有损压缩。提供 2 种压缩级别,即每像素 2 位和每像素 4 位。 block 状,可能会损坏锋利的边缘和平滑的渐变。图像质量随内容而变化。 3 或 4 个颜色 channel ,因此您可以使用 Alpha channel ,但有损压缩可能会产生不良结果。
- 从磁盘快速加载,无需软件解压。
- 几乎即时纹理上传,因为它是一种内部硬件格式,将通过驱动程序不变。
- 由于内存带宽使用量较小,渲染速度更快。使用 PVR 纹理时,像素渲染速度主要受到其他因素的限制。
- 使用最少的 RAM 和 VRAM 空间。
- Mip 贴图必须预先生成。
- 据我所知,您无法在软件内生成或编辑 PVR。否则会很慢。
- 磁盘空间使用量与源图像大小(固定压缩比)成正比。可以通过其他方法进一步(轻微)压缩。
- 大小限制。 2 的幂,仅限平方。
- 需要额外的转换工具,处理可以自动化,但会大大减慢构建时间。
关于iphone - OpenGL ES 中的 PVR 纹理与 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/501956/