动态图集概述

1.先看一组icon相关的图集数据:

E0NbwYsbzuKgWUwEUxrx.png

2.普通道具相关散图打包测试

上面表格中,普通道具是一张1024*2048的图集,RGB ETC2 4bit压缩格式下占1M内存,打包出的安卓ab为610KB。

普通道具这里有299个小图标,尝试打包299个散图到ab,打包出的安卓ab为436KB。

3.一些问题思考

*更新图标

    图标有更新,一个图标需要大图集更新。比如上面分类中的礼包如果新加或修改了某个图标(几k),安卓至少有一个849kb的更新。这里是一个资源规划问题,需根据具体项目具体分析。

*内存占用

各类图标在游戏中展示时,内存占用性价比不高,比如展示一个礼包图标,安卓ab包里的大图load出来后会占2M内存。

*DC

比如背包里,我们可能会展示各类型的二手手机靓号拍卖平台图标,假设有上面5个不同种类同时展示的话,安卓下相关图集会占0.5+1+0.25+0.5+2=4.25M。且这5个dc也是省不了的。

H9PHR008q96daYD5lYUg.png

4.有哪些优化点

资源规划优化?

图标更新ab包大小的优化?

图集内存占用性价比不高?

DC优化?

比如上面说的礼包类图集,2048*2048最大可包含625个80*80的图标,但如果超过了,再新加一张图集去放新礼包图标?针对其中存在的一些优化点,这里讨论一种运行时动态图集的方案。

5.运行时动态图集(V1.0)

上面图标的尺寸比较规则,适合我们动态图集的处理,暂时不用去考虑复杂的动态排列。一般情况下,1024*1024的纹理图最大可包含144个80*80的图标,基本可满足使用。

思路抽象图:

gWKgHsQKegvz97i6zY7N.png

具体说明:

1.散图打AB包;

2.加载该AB中用到的Sprite;

3.创建纹理,进行纹理复制;

4.设置图标sprite。

具体实现:

1.散图ab包测试

ONMmGr9hP5hw9MoIXphB.png

2.加载AB与指定Sprite

加载AB:

1UvrhmjfXmc6aKy6EYCp.png

加载指定Sprite:

IKMIJULnmenos3d1ZmVU.png

3.纹理复制

unE1fbEFbae35phco9yT.png

CopyTexture

Pw56F9Rw2IAcJkp25Baw.png

SetPixels

eKoGmjDa8FEwyYvUnijg.png

测试112个图标纹理复制,合成后纹理:

PJoHjL5JFTgUtbC9uzP9.png

4.实际展示

W5m9FlPZN3J0PKj4ylSx.png

HKPbWDOZzVmSa76Yrc21.png

手机上测试:(红米note4X)ETC2_RGB

7s2YIoUMZxp1WHlmP3iw.png

(荣耀20)ETC2_RGB

t4YhpqcStt77vgOXzvTx.png

tx手游助手:

rarM5UJA3ZeFAFvdrwHA.png

这里在模拟器上日志显示,不支持GPU直接操作纹理复制,所以测试用的像素复制。SetPixels要慢GC也高。为啥模拟器上没显示?猜测是纹理格式兼容问题。(前面认真看了api就不会遇到了)

在PC上强制用像素复制+ETC2_RGB纹理格式,测试下,发现:

FxFgqu4pitQhYe1JYtY9.png

换成强制用像素复制+RGB24纹理格式,测试下:

jaSjEjsSjufAwWBrhS2w.png

换RGB24再去tx模拟器测试:

lkePvVvIpTcEZx9r05s8.png

用ETC_RGB4、ETC2_RGBA8格式手机上测试:(note4X)

iNodMmAQIqtLLSxb2NR1.png

因此,需要注意纹理兼容的情况!

Exact rules for which formats are compatible vary a bit between graphics APIs

6.拓展方向

支持纹理动态size适应;

支持不规则贴图纹理排列;

Ios未做测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值