一、硬件层面
硬件厂商一般都会针对自己的硬件产品提供特定的优化,如提高纹理上传速度、数据读取、计算优化。引擎开发商会和他们合作,针对不同硬件进行特殊处理,使用一些特殊的GL扩展库,这些工作由引擎开发商完成。
二、程序层面
- 设计资源管理方案
- 预加载,避免临时动态加载。
- 释放不再使用的资源,减少内存占用。
- 引用计数方案: cocos2dx_资源管理方案
- 适当使用多级纹理(glGenerateMipmap)
- 根据设备分辨率和资源分辨率使用合适级别的纹理,减少低分辨率设备内存浪费
- 减少纹理上传频率,减少带宽占用。
- 这是动态生成多级纹理,可以减小纹理资源大小(多分辨率资源),会牺牲一些计算性能,多一些内存占用。
- 相关知识:cocos2dx_多级纹理(mipmapping)
- 使用alpha预乘(alpha pre-multiplied)
- 减少纹理在场景混合时的计算量。
逐帧加载纹理
使用合适的像素格式
- 16bit纹理比32bit纹理,品质查不了太多,但是内存少一半
- RGB565代替RGB888
- alpha通道简单的图像,使用RGB5A1
- 设置合适的defaultAlphaPixelFormat
- cocos默认纹理都转换成RGB888/RGBA8888格式,压缩纹理不被设备支持时也会被解压成RGB888/RGBA8888格式。
- 很多场景可以使用16位的RGB代替,大大减少内存占用。
- 小纹理合成大纹理
- 减少绘制次数提升渲染性能,TexturePaker打包大图
- 工具生成多级纹理资源
- 相比于动态生成纹理资源,纹理资源要大一些,但是提升了性能。
- 先关知识:cocos2dx_多级纹理(mipmapping)
- 使用压缩纹理,可以明显改善性能。
- 减少资源文件大小
- 减少纹理内存占用
- 减少带宽占用(GPU直接解压纹理)
- 提升纹理读取速度
- 权衡图片压缩质量
- 在单个图像的压缩质量可以适当做出牺牲,只要场景整体画质OK就可以。