图片动画美术资源的优化-可大量的优化IO/内存/CPU/GPU性能

一、图片贴图纹理的优化压缩

参考自:http://www.58player.com/blog-2533-66464.html

1. 图片分类合并: 成plist大图文件减少内存,常驻的plist和公共的plist可以进入游戏就加载;特定界面的plist可以打开时候加载,如果太大卡顿那么进入场景时候加载,离开场景时候释放。因为Opengl是以2的整数幂申请图片纹理内存的,所以用plist可有效节省内存。

 

2. 图片压缩: 质量要求不高的RGBA8888,压缩为RGBA4444加上texturePacket的插值算法; 不要求Alpha通道的用TP去掉alpha通道,采用RGB565格式,图片大小也会减半。

3. 图片格式android一般用png格式 ios用pvr格式,PC用tga/dds格式,图片更小,加载速度更快。不要是个jpg格式的图片!

cocos2d里面纹理加载分为两个阶段:1.从图片文件中创建一个UIImage对象。2.以这个创建好的UIImage对象来创建CCTexture2D对象。这意味着,当一个纹理被加载的时候,在短时候内,它会消耗两倍于它本身内存占用的内存大小。

cocos2d-iphone使用JPG纹理的时候有一个问题。因为JPG纹理在加载的时候,会实时地转化为PNG格式的纹理。这意味着cocos2d-iphone加载纹理是非常慢的(这里有演示),而且JPG纹理将消耗三倍于本身内存占用大小的内存。

一个2048*2048大小的纹理会消耗16M的内存。当你加载它的时候,在短时间内,它将消耗32MB内存。现在,如果这个图片是JPG格式,你会看到这个数字会达到48MB,因为额外的UIImage对象的创建。

可以使用CCTexture2D对象的类方法setDefaultAlphaPixelFormat来更改默认的纹理像素格式。

首先,纹理像素格式的改变会影响后面加载的所有纹理。因此,如果你想后面加载纹理使用不同的像素格式的话,必须再调用此方法,并且重新设置一遍像素格式。

4.  图片大小:大图的宽高不必是2的整数幂。

不同设备支持的纹理尺寸不一样,iphone4支持最大的是4096*4096,iphone4s是4096*2048。有的android设备,仅仅限制在1024*1024。拼图的时候要避免把图片拼的太大。为了提高游戏的兼容性,图片的尺寸最好都设置在1024*1024范围内(主流设备都支持)。

5. 特殊图片格式处理:对于png图片,最后一步是用PNGGauntlet工具做一次垃圾数据清除,进一步瘦身。

 

6.  程序处理:尽量使用九宫格对图片放缩对称的图片只需要一边,重复的大图只需要小图放大拼接即可(编辑器处理也是类似程序的方式).

   也可以用在线更新下载,微端的思想来实现小包。

7.内存飙升问题:加载大量纹理防止内存飙升,可以考虑使用内存池,及时的开辟和释放缓存区。

 

PVR格式:

使用PvrTexTool生成.

PVRTC2和PVRTC4是两种pvr压缩的图像格式,他们都是pvr文件。这两种图像格式比普通图像有更快的加载速度和更小的内存占用。

PVRTC4: Compressed format, 4 bits per pixel,ok image quality

PVRTC2: Compressed format, 2 bits per pixel,poor image quality

一般pvr格式文件的图像格式有:

RGBA8888: 32-bit texture with alpha channel,best image quality

RGBA4444: 16-bit texture with alpha channel,good image quality

RGB565: 16-bit texture without alphachannel, good image quality but no alpha (transparency)

图像占用内存的公式是:numBytes = width * height *bitsPerPixel / 8

也就是说2048*2048的RGBA8888占用内存16MB,而PVRTC4只占用2MB。

PVR格式实际上就是把ARGB8888转成ARGB1555色深进行保存的。

如果是ios设备的话,可以使用pvr.ccz,pvrtc4格式的图片,这个格式相当于windows下的dds图片,是可以被显卡直接支持的。

pvr也不是万金油。

android设备下虽然可以使用pvr格式,但是不能使用pvrtc4,希望通过pvr像ios设备上一样真正减少游戏内存是不太可行的。

 

图片压缩解压:

pvr.ccz其实就是pvr图片zip打包下,程序读的时候还是先解压出pvr资源,然后再读取pvr。不过由于压缩下可以极大的减小图片体积,所以虽然多了解压过程也不会有特别多的cpu消耗。

参考:

http://blog.csdn.net/langresser_king/article/details/8426708

二、动画资源的优化

1.序列动画较多,用降帧方式来优化。

2.序列动画尽量分割为比较小的动画,方便重用。

3.采用骨骼动画:

以前做人物动画我们常常使用每一帧画一幅图片的逐帧动画方式。使用骨骼动画可以大大降低图片帧的数量,它只需要很少的图量就可以达到几乎相同的动画效果。但需要做比较复杂的编辑工做,对每一个关健帧的骨骼点进行编辑

骨骼动画的制做流程一般为:

(1).通过设定基础的骨骼点并构建出骨架关系树。将人物按骨架树划分成各个身体部件

(2).按照划定的身体部件来制做人物或动物图片,当然一般是将整个人物或动物图片进行切图命名图块来取得。

(3).将身体部件图块绑定到相应的骨骼上

 

(4).设定关键帧,编辑关键帧上所有骨骼的位置及缩放与旋转变化

(5).播放动画,使骨骼按照时间进行两个关键帧间的变化插值计算,使用插值后的结果来影响身体部件图块绘制时的顶点位置。

  骨骼动画的算法关键是对于骨骼动画编辑器的掌握,希望大家多多研究使用。

  参看网友豆奶哥哥的博文:

http://www.cnblogs.com/lovegame/archive/2012/10/15/2722626.html


三、制作plist贴图集文件,利用内存缓存提高IO和内存性能

CCSpriteFrameCache

CCTextureCache

缓存比较耗电量,所以,一般使用完,就会调用remove函数。而且在预加载时要显示进度条,可能会影响用户体验,应该根据情况使用。

  预加载:

CCTextureCache CCSpriteFrameCacheCCAnimationCache;都可以为其添加一个key,后面通过key索引获取纹理、精灵或动画。


四、制作对称/九宫格/碎片图片,利用CPU计算减少资源

对称的图片可以翻转得到另一半得到,九宫格图片可以放大得到。对于大图片,不能使用九宫格,但是部分可以复用,那么可以对那部分进行九宫格,其它图片进行拼接得到整个大图。

五、制作批量渲染的单个贴图,利用GPU的批量渲染提高GPU性能

1.      批量渲染:使用CCSpriteBatchNode和CCParticleBatchNode精灵批节点类和粒子批节点类。

批次处理

使用CCSpriteBatchNode,准备好Sprite的坐标信息后,进行一次性渲染。

传统渲染处理是这样的:不同的切换纹理,不同地加载和渲染。而批次处理是一次加载完所有纹理,然后一次渲染,这样效率就提高了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: registry-1.docker.io/v2/ 是一个Docker镜像仓库。Docker镜像是一种轻量级虚拟化技术,它允许开发者将应用程序和其依赖项打包在一个可移植的容器中。然后,这些容器可以在不同的操作系统上运行,提供了更高的灵活性和便携性。 registry-1.docker.io/v2/ 是Docker官方的公共镜像仓库,也是最常用的镜像仓库之一。在这个仓库中,开发者可以找到各种类型的镜像,如操作系统镜像、数据库镜像、Web服务器镜像等。这些镜像是由Docker社区维护和更新的,有许多开发者可以共享和使用。 通过访问 registry-1.docker.io/v2/ ,开发者可以搜索并获取所需的镜像。他们还可以上传自己的镜像,以便与其他人分享。通过使用这个镜像仓库,开发者可以节省大量的时间和精力,因为他们可以直接使用他人共享的镜像,而不需要从头开始构建。 registry-1.docker.io/v2/ 的存在使得Docker生态系统更加强大和精简。它提供了一个集中存储镜像的地方,帮助开发者快速获取、分享和部署容器化应用程序。这个仓库是Docker技术的重要组成部分,为开发者提供了更好的使用体验和更高效的开发工作流程。 ### 回答2: egistry-1.docker.io/v2/是一个Docker镜像仓库的地址。Docker是一种容器化技术,用于轻量级的应用程序和服务的封装和分发。它可以将应用程序及其依赖项打包成一个镜像,并在不同的环境中运行。镜像仓库是存储和共享这些Docker镜像的地方。 egistry-1.docker.io/v2/是Docker官方的一个镜像仓库地址。在这个仓库中,用户可以下载和上传各种Docker镜像。这个地址中的"/v2"表示使用的是Docker镜像版本2的仓库。 使用egistry-1.docker.io/v2/可以实现很多功能。首先,用户可以通过该地址获取他们需要的Docker镜像。例如,如果用户想要一个包含特定操作系统和软件的镜像,他们可以使用该地址在仓库中搜索并下载满足他们需求的镜像。 同时,用户也可以将他们自己制作的Docker镜像上传到该地址。这样其他人就可以通过该地址进行下载和使用。这种共享镜像的方式可以节省时间和资源,提高开发效率。 除了下载和上传功能外,egistry-1.docker.io/v2/还提供了一些其他的功能。例如,用户可以在该地址注册一个帐户,以便管理和跟踪他们下载和上传的镜像。他们还可以查看有关特定镜像的信息,如版本、构建日期和作者等。 总之,egistry-1.docker.io/v2/是一个功能强大的Docker镜像仓库地址,可以帮助用户下载和上传各种Docker镜像,实现高效的软件开发和部署。 ### 回答3: registry-1.docker.io/v2/ 是一个Docker镜像仓库的URL。Docker镜像仓库是一个用于存储和管理Docker镜像的服务器。Docker镜像是一个可重复部署的软件包,其中包含了运行一个应用程序所需的所有依赖项。registry-1.docker.io/v2/ 是Docker官方的公共镜像仓库,可以通过该URL访问到它的第二个版本。在这个镜像仓库中,用户可以浏览和下载各种不同的Docker镜像,这些镜像可以用于快速构建和部署容器化应用程序。 Docker镜像仓库中的镜像是通过标签进行识别和区分的。每个镜像可以有多个不同的标签,每个标签对应一个版本。当用户拉取(pull)一个镜像时,可以通过给定镜像的标签来指定所需的版本。registry-1.docker.io/v2/ 中存储了大量常用的Docker镜像,例如操作系统的镜像、开发语言的镜像等等,用户可以根据自己的需求选择合适的镜像来构建自己的应用程序。 该URL中的/v2/表示该镜像仓库正在使用Docker Registry V2的协议。Docker Registry V2是Docker镜像仓库的一种升级版本,它提供了更好的性能和可扩展性。通过/v2/路径,可以访问到该镜像仓库的V2版本,从而能够利用V2协议的新特性和功能。 总之,registry-1.docker.io/v2/ 是Docker官方的公共镜像仓库的URL,用户可以通过该URL访问到大量常用的Docker镜像,并使用这些镜像来构建和部署自己的容器化应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值