Android平台压缩纹理ETC2 VS ASTC

1)Android平台压缩纹理ETC2 VS ASTC

2)Unity使用Profiler和UWA内存差异巨大

3)Unity 2020 IL2CPP打包异常

4)TouchScreenKeyboardWrap在PC模式下打包报错


这是第301篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com

UWA QQ群2:793972859(原群已满员)

Texture

Q:1.2022年在Android平台的ASTC支持度怎么样了,预计2023年上的游戏能不能上ASTC?

1.1 跟iOS统一方便处理

1.2 更多选择控制压缩比例 44->1212

1.3 效果比ETC2更好

1.4 ASTC有没有什么坑,看到有说华为部分机器不支持,会黑屏

网上只找到下面这个数据,2020年9月,ASTC 77%。

https://developer.android.google.cn/guide/app-bundle/asset-delivery/texture-compression?hl=zh-cn

2.我理解的压缩纹理是CPU不用解压,直接传输给GPU,直接GPU硬件采样。相对于采样ARGB32格式,采样压缩纹理的消耗是不是更高点,还是可以忽略不计?

3.移动平台纹理是否是2份?CPU一份,GPU显存一份,还是共享同一份?

4.ASTC/ETC2的压缩纹理尺寸是否需要2的幂?网上有些说法是非2的幂纹理加载到显存的时候会进行转换成2的幂,转换过程耗时,会导致卡顿。

https://blog.csdn.net/linxinfa/article/details/108827197

我做过以下测试:

1.AssetBundle内的纹理尺寸是原始尺寸。

2.Mumu模拟器+GPA纹理尺寸是原始尺寸,格式转换成了ARGB32。

3.Adreno+高通真机,目前还在测试,找的机器连不上Adreno Profiler。

A1:我2017年立项的时候跟你一样处理过这个问题,我当时的策略是主包使用ASTC,启动更新的时候判断玩家是否支持ETC2,不支持的话下载ETC2版本的AssetBundle资源。资源在线上是完全独立的2份资源(打包的时候每次打包2份独立资源)。当年是为了海外做的这个兼容。经过这几年各个大厂的洗礼,直接ASTC就行了。如果你们的游戏类型一定要下探到那么老的机器,就像我那种双保险的做法。

1. 黑屏的问题没遇到。ETC2反而因为压缩算法不好,部分颜色失真,导致你在做部分PBR效果的时候,会有问题。

2. 需要硬件支持,就是因为不能用CPU去处理这种软解压跟软压缩,可以忽略。

3. 移动平台GPU跟CPU是共享一个内存,但是GPU会独立开辟一份内存,所以会有2份。开启了Mipmap的情况下不是单纯的2份相同内存,所以还有Texture Streaming这种方式来减少贴图内存占用。

4. ASTC不需要。

至于你的测试:

Mumu模拟器在《楚留香》出来的时候就支持ASTC,后面吃鸡游戏风靡的时候更是所有模拟器都支持了,不支持的都要被淘汰。这块可以不用考虑。如果不是单独为了发行模拟器渠道,大部分情况下,发行公司都是要求禁用模拟器登录的。

感谢简单就好@UWA问答社区提供了回答

A2:1. 关于ASTC的支持度,题主查的数据本身可以作为参考,但还需要结合考虑项目发行的市场。比如实际上对于中国市场而言ASTC的覆盖率已经非常高,而对于东南亚南美等海外市场则还要酌情;

2. 常见的压缩纹理是直接降低纹理资源质量,以质量换性能的行为,它不会在GPU端重新解压缩,相反在内存、带宽等方面都有所优化;

3. 只有当纹理资源需要运行时修改、开启了Read/Write Enable选项时,才会向CPU复制一份,否则就只有GPU的一份;

4. ASTC对分辨率没有需求;ETC2要求分辨率为4的倍数,而非2的次幂;特别地,不论是ASTC还是ETC2,如果开启了Mipmap,则必须是2的次幂,否则同样会压缩失败。

感谢Faust@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/62a15f62b87a45735173440e

Memory

Q:Unity使用Profiler和UWA内存差异为何差别这么大?

A:Profiler显示的是引擎真实的分配内存,但这个内存在OS中并不仅仅是这些,它会分配更多的内存Page,而且不同的OS版本,不同的厂商分配的都不一样。

同时,OS层还会启动很多自身的Lib,比如渲染相关的库、文件加载的加速库等等,这些内存的分配,都是Unity统计不到的。

除此之外,还有虚拟机的第三方库,比如Lua等,这些的内存是会被统计到PSS中,但不会被统计到Profiler中,游戏启动时的各种渠道库,也是如此。

所以,PSS比Reserved大是正常的。

但如果你发现PSS比Reserved大了快2倍了,那一定是大家某些库的内存分配过大,比如Lua、Wwise或其他大家使用的第三方库。

感谢芭妮妮@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/62a064d0b87a457351727eee

Android

Q:Unity版本2020.2.3,在IL2CPP打包Android的编译过程报错,因为项目中用的Puerts框架,需要生成很多Wrap类。如果打包时勾选Split Application Binary,也用OBB分包情况下,使用Unity可以直接导出到APK和OBB。但如果不勾选,编译会报错。

同样不勾选Split Application Binary,在Build时,Export Project导出到AndroidStudio工程再生成APK也不会有问题。请问有遇到过这样的问题吗?

Exception: Unity.IL2CPP.Building.BuilderFailedException: D:\DevEnvironment\android-ndk-r19\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++ @“C:\Users\Administrator\AppData\Local\Temp\tmp30FE.tmp” -o “D:\workroot\Crusher\Crusher\Library\il2cpp_android_arm64-v8a\il2cpp_cache\linkresult_B322E1396ADEEC5519CBECC8D02E669C\libil2cpp.so” -shared -Wl,-soname,libil2cpp.so -Wl,–no-undefined -Wl,-z,noexecstack -Wl,–gc-sections -Wl,–build-id -stdlib=libc++ -static-libstdc++ -target aarch64-linux-android21 -Wl,–wrap,sigaction “D:\Softwares\Unity2020.2.3f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\StaticLibs\arm64-v8a\baselib.a” -llog -rdynamic -fuse-ld=bfd.exe

报错详情可戳原问答查看。

A1:尝试增加JVM的内存,或者指定一个NDK版本。

感谢廖武兴@UWA问答社区提供了回答

A2:推测可能是静态数组太大了,编译器的内存模型不够。可以自己添加IL2CPP的编译选项,注意下这个:

additional relocation overflows omitted from the output

感谢thrt520@UWA问答社区提供了回答

A3:看上去是NDK那边失败了,可以尝试一下不要勾选Development Build,可能是生成的二进制文件太大导致的奔溃。

感谢萧小俊@UWA问答社区提供了回答

A4:亲测Maximun JVM heap size,MBytes增加JVM内存有效:

感谢题主Bomber@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/60892a236bb31032f9791493

Script

Q:在Android下可以,切换到PC打包的时候就报错了。请问这是什么意思?如何解决呢?

A:有文档介绍说:Only native iPhone, Android, and Windows Store Apps are supported. 所以加个宏处理一下就可以了。

https://docs.unity3d.com/ScriptReference/TouchScreenKeyboard.html

感谢张迪@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/62903ab6b87a45735165da5f

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com

官方技术博客:blog.uwa4d.com

官方问答社区:answer.uwa4d.com

UWA学堂:edu.uwa4d.com

官方技术QQ群:793972859(原群已满员)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容