动态图集概述

发表于2020-04-30
评论0 1.2w浏览

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

Graphics.CopyTexture

Pw56F9Rw2IAcJkp25Baw.png

Texture2D.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未做测试

 

7.资料

https://docs.unity3d.com/ScriptReference/Rendering.CopyTextureSupport.html

https://docs.unity3d.com/ScriptReference/Graphics.CopyTexture.html

https://docs.unity3d.com/ScriptReference/Texture2D.SetPixels.html

https://blog.csdn.net/nxshow/article/details/90724350

https://blog.zhangshirong.com/2019/01/118.html

https://zhuanlan.zhihu.com/p/38004837

  • 允许他人重新传播作品,但他人重新传播时必须在所使用作品的正文开头的显著位置,注明用户的姓名、来源及其采用的知识共享协议,并与该作品在磨坊上的原发地址建立链接
  • 可对作品重新编排、修改、节选或者以作品为基础进行创作和发布
  • 不可将作品进行商业性使用
  • 需在以作品基础上创作的演绎作品上适用相同类型的知识共享许可条款

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

标签: