这能解决哪些问题?
由于内存的限制,我们在创造游戏玩法的过程中总是需要整合纹理内容。可能是出于复杂的3d世界的约束,开发者必须将对象顺畅地整合进关卡中,或者在我们自己的案例中,为了使用2d渲染,我们就必须整合进更多纹理(我们预先渲染了游戏世界,对象和角色动画的纹理集,并将其映射到布告牌上以获得更高质量的视觉效果,灯光以及更复杂的环境/角色)。
如果你的问题是以毫秒的速度在3d世界中加载纹理,你便可以使用压缩PVR纹理去解决这一问题。除此之外关于这一方法还存在其它更棒的性能优势。
如果你和我一样是为了呈现布告牌纹理去加载这些内容,你便可以基于无损耗模式,如PNG(最普遍的一种),BMP,TGA或未压缩的PVR去加载它们。基于本篇文章所提及的技术,你便能够通过改变你所使用的格式或加载方式而获得大量的性能优势。
步骤1:文件格式
如果你打算在一个3d世界中使用对象纹理,你便可以选择PVRTC格式,因为这是一种有损耗且固定的纹理压缩格式,同时支持4bpp和2bpp的ARGB数据。
而对于无损耗纹理,你的最佳选择则是未压缩的PVR文件格式。这一格式包含了PVR文件标题以及基于RGBA4444,RGBA8888或者BGRA8888等格式的数据。如果你使用的是32bit数据,你就没有理由使用RGBA8888格式,因为驱动程序将处理其中的cpu内容,这时候你可以预先将数据转变成BGRA8888格式,从而将其直接上传至内存中。
注释
–如果你使用RGB8数据格式去处理CPU,那便等于你在执行一些无用功,因为你必须为此添加一个填充字节,所以你必须确保始终使用RGBA/BGRA格式,即使你并不需要使用这一渠道。
–使用未压缩纹理格式意味着将占据更多磁盘空间。虽然这不会影响你的应用下载规格(IPA/APK则会压缩你的内容),但是在安装时却会占用更多的磁盘空间。如果你发现磁盘空间的使用已经超出了自己的预想,你便可以将纹理整合进.zip格式的程序包中,在初始加载时压缩你所需要的内容,并在应用终止时删除这些内容。游戏开发(http://www.bosigame.com)