cocos2dx 纹理优化
来源:互联网 发布:手机视频数据恢复 编辑:程序博客网 时间:2024/04/29 06:33
description: 为什么要谈纹理的问题,游戏的画面无时无刻不充斥着图像,通俗意义上一款精致的游戏都有着非常精美的画面,这样往往能给玩家带来更好的游戏体验,这一点也是对于游戏制作者来说所尽力追求的,但是无奈有CPU和GPU的限制,手持设备上的硬件资源就更窘迫一些了,如何处理好图片资源,往往能给游戏提供更大的扩展空间,从画面上给游戏加分。
为什么要谈纹理的问题,游戏的画面无时无刻不充斥着图像,通俗意义上一款精致的游戏都有着非常精美的画面,这样往往能给玩家带来更好的游戏体验,这一点也是对于游戏制作者来说所尽力追求的,但是无奈有CPU和GPU的限制,手持设备上的硬件资源就更窘迫一些了,如何处理好图片资源,往往能给游戏提供更大的扩展空间,从画面上给游戏加分。
就我个人的经历来说,手机上图片资源处理主要是围绕两个点来周旋的,一个是图片占用的内存,图片加载后生成的纹理会存储在GPU中,而纹理的像素格式就决定了在GPU中的内存,占用的内存小来保证了游戏的机型支持,在低端机上也能运行游戏;另一个非常重要的点就是图片的加载速度,速度太慢会导致CPU占用太大,游戏会显得比较卡,这一点非常影响用户体验。对于我们来说需要处理的就是在这两者与游戏画面之间找到自己的平衡点,采用适合自己游戏的图片资源处理方式,下面来慢慢介绍图片部分的基础知识,后面会再更新-x底层是如何加载和处理图片的一些文章,分享自己的一些看法。
像素格式
(以下为texturepacker支持的打包格式)
其他的常见格式
纹理格式
1、png
png图片可谓最常见的真彩图片了,png格式有3种,png8,png24,png32,24位png不支持透明。除了PVRTC和ETC1的像素格式外,大部分的像素格式都支持。
2、pvr
pvr纹理格式是针对iOS设备进行了特殊优化的一种格式了,PowerVR显卡可以直接加载,速度快(类似win下的dds图片),而且每像素2或4位的像素格式使得占用内存很小,基本上在iOS平台的pvr图片格式从加载速度和占用内存两点来说都具有很大的优势。
pvr除了支持场景的RGB像素格式意外还支持有损压缩PVRTC,虽然PVRTC和jpg相同是有损压缩,但是PVR纹理不会在内存中解压缩纹理。
PVR特殊的像素格式:PVRTC2,PVRTC4,PVRTC2_NOALPHA,PVRTC4_NOALPHA,这里的没有ALPHA值就是指图片里面没有透明像素,同时更多的色位会用来表示颜色,图片的颜色质量就会高一点。
需要注意的:如果去官网下载PowerVR的SDK来生成pvr格式的纹理有很大的局限,不仅必须是2的幂还必须要是正方形的。
3、etc1
etc1的格式(pkm或ktx扩展名)是opengles2.0均支持的格式,但android机型众多,显卡型号也有很大的差别,我们的游戏出现过在一些山寨机上etc1图片无法正常显示或者崩溃的情况,而且部分显卡不支持NPOT的etc1图片,所以在android上现在不太推荐使用etc1。
下面针对iOS下纹理格式进行加载的测试,时间单位是微秒,测试设备是iPhone5,用的是原生的cocos2dx3.0的引擎(没有进行修改),纹理的像素格式均为RGBA8888,所以在显示效果上相差不多的,实验的结果基本符合多次测试得出的平均情况。
//RGBA8888 & POTcocos2d: id=test_png.png(809.6KB) | x: 1024 y: 1024 | time: 25316 | 32 bpp | 4096 KBcocos2d: id=test_jpg.jpg(119.4KB) | x: 1024 y: 1024 | time: 54506 | 32 bpp | 4096 KBcocos2d: id=test_pvr.pvr(4.1MB) | x: 1024 y: 1024 | time: 22931 | 32 bpp | 4096 KBcocos2d: id=test_pvrgz.pvr.gz(1MB) | x: 1024 y: 1024 | time: 24309 | 32 bpp | 4096 KBcocos2d: id=test_pvrccz.pvr.ccz(1MB) | x: 1024 y: 1024 | time: 17981 | 32 bpp | 4096 KB//RGB565 & POTcocos2d: id=test_png.png(460.8KB) | x: 1024 y: 1024 | time: 28319 | 32 bpp | 4096 KBcocos2d: id=test_jpg.jpg(106.4KB) | x: 1024 y: 1024 | time: 58430 | 32 bpp | 4096 KBcocos2d: id=test_pvr.pvr(2MB) | x: 1024 y: 1024 | time: 11914 | 16 bpp | 2048 KBcocos2d: id=test_pvrgz.pvr.gz(385.6KB) | x: 1024 y: 1024 | time: 15373 | 16 bpp | 2048 KBcocos2d: id=test_pvrccz.pvr.ccz(387.3KB) | x: 1024 y: 1024 | time: 10642 | 16 bpp | 2048 KB//RGB565 & NPOTcocos2d: id=test_png.png | x: 504 y: 1157 | time: 192065 | 32 bpp | 2277 KBcocos2d: id=test_jpg.jpg | x: 504 y: 1157 | time: 104246 | 32 bpp | 2277 KBcocos2d: id=test_pvr.pvr | x: 504 y: 1157 | time: 5704 | 16 bpp | 1138 KBcocos2d: id=test_pvrgz.pvr.gz | x: 504 y: 1157 | time: 23246 | 16 bpp | 1138 KBcocos2d: id=test_pvrccz.pvr.ccz | x: 504 y: 1157 | time: 253244 | 16 bpp | 1138 KB
这里默认的-x还是会以RGBA8888的像素格式创建png和jpg的纹理,需要我们手动修改引擎。从测试结果可以看出,pvr基本完胜了其他纹理格式,加载速度快,特别是pvr.ccz,图片大小仅为pvr格式的1/4,而且加载速度还比pvr要快。jpg的加载速度还是要慢很多。.gz和.ccz有个异常情况,NPOT格式纹理加载时间非常长,而对于其他格式纹理,NPOT格式使得加载时间和内存占用上都得到了提升。
持续更新中…
色深:
cocos2dx默认采用32位(RGBA8888)的色深的像素格式来加载纹理,
不考虑纹理压缩,颜色位数少用png8,颜色位数多非透明用jpg,颜色位数多含半透明使用png24,总的思路就是用png8和jpg来减少图片体积大小
- cocos2dx 纹理优化
- cocos2dx 纹理优化
- cocos2dx纹理优化
- 【cocos2dx】jpg纹理占用内存优化
- 关于cocos2dx 如何优化纹理内存
- cocos2dx 纹理
- cocos2dx纹理缓存
- Cocos2dx纹理缓存
- cocos2dx多边形纹理填充
- cocos2dx 多重纹理贴图
- 纹理缓存TextureCache-Cocos2dx
- cocos2dx--纹理平铺
- Cocos2dx 异步加载纹理
- Cocos2dx--纹理使用
- cocos2dx 渲染DDS格式纹理
- unity3d 纹理尺寸优化
- Cocos2d-x 纹理优化
- Android 优化之 纹理
- 微信开发 没有认证过的服务号怎么办?微信提供了测试号(开通了认证过的服务号的功能)
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记28 ScrollView 滑动视图
- Assisx快捷键大全
- UITableViewCell分割线(样式,宽度·高度调整,颜色等的设置)
- 我应该做的事情
- cocos2dx 纹理优化
- from weibo : 开始工作后的十个不要
- 常用的android弹出对话框
- ContentProvider
- 图(三)之Adjecancy List的广度优先遍历
- 回形取数
- from weibo:机器学习算法之旅
- 程序员的量化交易之路(22)--Cointrader值货币集合Currencies(10)
- Javascrip变量问题