一个操作让游戏内存立减50+%-Creator性能优化之压缩纹理

什么游戏,我要去捧捧场

大佬V5!以前完全没研究过这方面,感觉像是打开了新世界的大门~
但是有个问题,我按楼主的方法给资源设置了纹理压缩,内存的确降低了,但是draw call提升了很多,貌似是无法合批渲染,推测是压缩后的数据只能单独保存,不能合并成图集?请问大佬有解决办法吗?

内存降低 draw call增多 那有个毛用

mask 流弊

这个降低个50% 个 毛线 最多30%

预制体 声音 场景 都不考虑吗

尽管压缩纹理能降低内存占用,不过我估计我不会在实际项目中使用,经过测试etc2的fast会降低画质。
1.etc2 的fast模式会明显降低alpha效果,而我在项目中大量使用了透明度
2.etc2的slow模式我没能测试出效果来,因为每次build 几个小时起步,我机器还是i9的机器,这样的实际效率太低
3.热更新要准备Android ios两版,而我又有出海的打算,这意味着每个国家都要做两次构建操作
当我每次想热更时,操作大致是这样
IOS构建。创建热更文件。再次构建。将src res放到国服服务器上。
IOS构建。创建热更文件。再次构建。将src res放到美服服务器上。
…日服。。韩服

完成了IOS之后又要开始构建android,这个时间就太夸张了。因为fast模式在图片千儿八百的时候也并不算fast,也要漫长等待。

4.如果我压缩部分纹理,依然需要两版的热更,所以不值得。

所以压缩纹理现在看来更适合项目体量不大的情况,体量一大工作量就会变得特别大,或许单机游戏更适合,发布之后就无需担心热更的事

而且现在的手机内存越来越大,内存往往不会成为瓶颈,不过iphoneX在1.5G的时候就会崩。。。
当项目较大的时候,不如研究如何更节省的缓存资源。

什么时候android和ios能共用一套,画质不会较大的损失,构建又能在几分钟之内搞定,那这个功能才适合我这个情况

1赞

drawcall增加是不能动态合图的原因。

因为Creator动态合图依赖于内存中缓存,而压缩纹理直接送到GPU。

你可以在拼UI时,就尽量把相关资源放在一张大图里,或者放在统一目录下使用自动图集。

压缩纹理的使用本身还是有一些细节可以再优化的,只要使用得当,降低50%完全没有问题。

1 使用slow模式会比fast的画质好很多;

2 要看你使用哪个版本的Creator了?2.4及以上有纹理缓存功能,转换过的,如果没有变化就不会再转换。2.4以下版本,自己稍微改改,也能增加缓存功能。需要的话,后面再说方法。这样你只是第一次转换的时间长些(确实可能超过10个小时),但后面都很快;

3 我自己项目使用Jenkins做自动化,压缩纹理配缓存功能,每天半夜自动构建一次,相当于每天给有变化的资源加上缓存,这样白天来上班后构建时,一般只用几分钟就好了。只要命令写好了,配置表合并、Creator构建、压缩、加密、热更资源上传、cdn刷新,这些都是一键操作,i9 CPU+固态硬盘,接杯水的功夫就完事了。

4 包体方面,我自己项目中单图、自动图集、TP合图加起来也有几千张纹理,使用PNG时打出来的apk包大小近500M,用压缩纹理后包体降到100多M。

5 压缩纹理除了省内存和包体,对耗电、渲染性能也有不少好处。

6 要android和iOS共用一套,只能等OpenGL ES 3.0全面普及了,到那时用ETC2或ASTC都可以,但那至少3-5年后。

1赞

其实我只是把自己的一些经验分享出来而已,具体用不用还是依据个人情况而定吧,适合自己的才是最好的。

唉,说了这么多,看大佬独立做好几年游戏,还各种外服一起搞,光前端、后端一人搞定就已经很强了,更不用说包括文案、美术、音乐这些,这真是非常人所能及,真心佩服~

厉害了,这个要好好了解下

image
大佬我加了个微信小游戏的,但是后面pvr压缩没有生效,编辑器是以下的这种:
image
能帮我看看怎么回事吗?

忘记压缩纹理不存在内存中了,多谢提醒~

想问一下,如果用了自动构建图集,很多散图合成在一张图集里。那是不是只要设置这张图集的压缩纹理格式参数就好了?还是说其余的散图还是需要一张张去设置?

1赞

都用ETC2也可以吧 这样就不用分别更新了

只要设置这张自动图集的压缩纹理格式就好了,其余散图在构建后不会进入包体。

ETC2需要OpenGL ES 3.0的支持,如果不考虑安卓低端机,都用ETC2是可以的。

直接干etc2,省时省力,那种老安卓机让他自生自灭吧,都2021年了,现在系统还在android 4.3以下的手机,你感觉能玩现在的游戏?

只要你能说服你们的老板,完全ok啊~~

我不敢,怕被玩家骂飞