我的游戏引擎最近增加了对PowerVR(PVR)的支持,在谷歌和维基百科上搜索了一下,我只知道PVR的定义,但我不知道它是干什么用的,它的优缺点是什么。我正在为 Android 开发游戏,我应该使用什么,PNG 还是 PVR?
1 回答
(PowerVR 是 Imagination Technologies Ltd. 的品牌名称,指的是他们的图形加速技术。PVR 是 PowerVR Insider SDK 中使用的纹理容器格式。PVRTC 是 PowerVR 的纹理压缩方案,我认为您对此感兴趣......抱歉,如果你不是)
PVRTC 是一种用于 PowerVR 图形加速器的运行时纹理压缩格式(许多 Android 平台都有其中之一)。与未压缩的 32 位纹理相比,PVRTC 在每像素 4 位或每像素 2 位模式下提供 8 倍或 16 倍压缩。因为它是一个运行时纹理压缩方案,它不需要在图形核心本身之外的任何阶段解压缩(并且那里有专门的电路用于该位),因此磁盘上的数据更小,上传到 GL 的数据更小,上传到 GL 的数据更小渲染时使用的内存更小 - 几乎在所有方面都更好更快。在移动系统上,内存带宽非常宝贵并且通常是图形的性能瓶颈,它可以对您的帧速率产生巨大影响(以及功耗 - 内存访问需要功耗)。
缺点:
- PVRTC 往往比磁盘上的 PNG 大 - PVRTC 数据压缩(例如)非常适合磁盘存储。
- PVRTC 是有损压缩 - 与源图像相比,有时可以在 PVRTC 纹理中看到伪影。PNG是无损的,所以不存在问题
- PVRTC 不可用于除 PowerVR 之外的其他图形加速(目前) - 查看其他平台的 DXT/S3TC(更大)或 ETC(无 alpha)压缩。
- 只有正方形、二维的幂纹理可能起作用 - 例如 32x32、512x512 等。
- 压缩可能很慢
PNG 不是运行时格式,因此 PNG 压缩比未压缩图像具有优势的唯一地方是存储在磁盘上(或通过网络发送等) - PNG 图像数据必须先由 CPU 解压缩才能被解压缩传递给 GL 或以任何方式绘制,即 PNG 与这些平台上的纹理一样慢。
PNG 是无损的,还支持 alpha 通道。
所以...
为获得最佳性能,请尽可能使用 PVRTC,如果不能,请使用其他版本的纹理 - 例如,压缩伪影太明显或您运行的平台不支持它。
进一步阅读:
- http://imgtec.com/powervr/insider/powervr-faq.asp
- http://imgtec.com/powervr/insider/docs/PVRTextureCompression.pdf
- http://imgtec.com/forum/default.asp
要制作 PVRTC 纹理:
希望有帮助...