从64MB降至5MB,TMP字体Atlas内存优化实战
- 作者:admin
- /
- 时间:一小时前
- /
- 浏览:9 次
- /
- 分类:厚积薄发
1)TMP字体Atlas内存优化实战
2)TMP内嵌图集纹理压缩改造
这是第474篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。
UWA社区主页:community.uwa4d.com
UWA QQ群:793972859
本次推送的实战案例来自于使用UWA服务的项目的真实且典型的问题。在某个项目上经过以下两个方法优化后,能将字体内存从64MB下降至5MB以内,效果显著,非常值得其他团队参考借鉴。
实战案例
Q:GOT Online报告中显示,我们项目游戏字体Atlas出现了双实例冗余且开启RW动态图集内存占用过高的情况,是什么原因?该如何优化解决?

A:字体Atlas实例数量为2,通常是由于该字体既在初始包中的初始场景中被引用,又在后续AssetBundle资源中重复引用,导致有2个对应的Atlas实例。建议将初始场景中使用的字符单独创建对应的小字体,从而避免初始场景中有大图集和大字体的引用。
当前字体Atlas是开启了RW(Read/Write Enabled,开启此项会导致 CPU 和 GPU 各存一份,内存瞬间翻倍),属于动态图集机制,因此单个字体是2×4096×4096/1024/1024=32MB。开启RW主要为支持动态补字,实时将未预加载字符填充至图集中,避免游戏出现缺字乱码。从内存优化的角度上来看,可以预先收集游戏的大部分字符集,将Atlas设置为静态图集配置,这样就可以减少16MB的占用,对于不在静态图集中的字符,可以通过TMP的Fallback机制,设定一个小分辨率(比如512×512)的动态Atlas进行字符补充。
实战案例
Q:TMPAsset内嵌Atlas纹理无法压缩是什么原因?有什么脚本改造方案?
A:当前字体Atlas纹理属于TMPAsset内嵌子资源,无法单独进行纹理压缩等参数配置。可通过Editor编辑器脚本对该纹理进行独立复制,将TMPAsset材质球关联替换为复制后的新纹理,并移除原TMPAsset内的内嵌纹理。
剥离后的独立纹理可自由配置压缩格式,如ASTC6×6、ASTC8×8等,进一步降低内存开销。经真机测试,压缩后文字美术表现无明显差异。
Atlas优化前后内存占用对比:
优化前:64MB
优化后合计:4.75MB
- 初始场景 512×512静态图集:0.25MB
- 4096×4096静态图集(ASTC8×8):4MB
- Fallback兜底纹理512×512(Alpha8):0.5MB
无论是社区里开发者们的互助讨论,还是AI基于知识沉淀的快速反馈,核心都是为了让每一个技术难题都有解、每一次踩坑都有回响。本期分享分别来自UWA AI问答和UWA问答社区,希望这些从真实开发场景中提炼的经验,能直接帮你解决当下的技术卡点,也让你在遇到同类问题时,能更高效地找到破局方向。
封面图来源于网络
今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。
UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859

