Android平台压缩纹理ETC2 VS ASTC

article/2025/11/10 6:31:17

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%。
在 Android App Bundle 中指定目标纹理压缩格式  |  Android 开发者  |  Android Developers

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

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

4. ASTC/ETC2的压缩纹理尺寸是否需要2的幂?网上有些说法是非2的幂纹理加载到显存的时候会进行转换成2的幂,转换过程耗时,会导致卡顿。
Unity导入图片尺寸大小和压缩格式的问题_林新发的博客-CSDN博客_unity可以导入什么格式的图片

我做过以下测试:
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问答社区提供了回答,欢迎大家转至社区交流:
Unity2020 il2cpp 代码多的情况下,直接打包出错,使用obb模式或导出到AndroidStudio工程再打apk没问题 -- UWA问答:帮助开发者找到更好的答案


Memory

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

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

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

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

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

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

感谢芭妮妮@UWA问答社区提供了回答,欢迎大家转至社区交流:
Unity2020 il2cpp 代码多的情况下,直接打包出错,使用obb模式或导出到AndroidStudio工程再打apk没问题 -- UWA问答:帮助开发者找到更好的答案


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问答社区提供了回答,欢迎大家转至社区交流:
Unity2020 il2cpp 代码多的情况下,直接打包出错,使用obb模式或导出到AndroidStudio工程再打apk没问题 -- UWA问答:帮助开发者找到更好的答案


Script

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

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

感谢张迪@UWA问答社区提供了回答,欢迎大家转至社区交流:
Unity2020 il2cpp 代码多的情况下,直接打包出错,使用obb模式或导出到AndroidStudio工程再打apk没问题 -- UWA问答:帮助开发者找到更好的答案

封面图来源于网络


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

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)


http://chatgpt.dhexx.cn/article/9LRdUsCH.shtml

相关文章

Unity iOS使用ASTC格式纹理实践

引言 上一篇文章描述了如何在不修改自定义渲染组件的前提下使用 alpha 分离的纹理来提升 iOS 的透明压缩纹理质量(见这里:https://indienova.com/indie-game-development/unity-alpha-separate/)。 在这个方案投入项目开始使用一段时间之后…

ASTC纹理压缩格式详解

https://zhuanlan.zhihu.com/p/158740249 一、ASTC纹理压缩格式介绍 ASTC是在OpenGL ES3.0出现后在2012年中产生的一种业界领先的纹理压缩格式,它的压缩分块从4x4到12x12最终可以压缩到每个像素占用1bit以下,压缩比例有多种可选。ASTC格式支持RGBA&…

astc纹理压缩格式

astc是当前android和ios平台下压缩最好的纹理格式,并且主流的机器基本都支持, astc:支持非2次幂的,2次幂的,等宽高的 一、ASTC纹理压缩格式介绍 ASTC是在OpenGL ES3.0出现后在2012年中产生的一种业界领先的纹理压缩格式。 它的压…

ASTC textures

ASTC textures 原文:https://arm-software.github.io/opengl-es-sdk-for-android/astc_textures.html This document describes usage of compressed ASTC textures. Introduction This tutorial shows how Adaptive Scalable Texture Compression (ASTC) can be …

[图形学]ASTC纹理压缩格式

纹理压缩的目的 1,降低内存,特别是移动端应用,内存占用不应过大,否则低端机很容易崩溃 2,降低带宽,手游类应用,在渲染时会有大量贴图传输到GPU,不限制的话不仅会严重影响渲染性能&a…

ASTC纹理压缩格式(Adaptive Scalable Texture Compression)

原文:这是一个pdf的下载链接 介绍 Adaptive Scalable Texture Compression(ASTC)是一种世界领先的新型纹理压缩格式。这种压缩格式已经加入Khronos标准,并已在某些硬件平台中提供。本文介绍了它的工作原理、使用方法和如何最大程度地使用它。更深入的信…

ASTC纹理压缩格式介绍

一、ASTC纹理压缩格式介绍 ASTC是在OpenGL ES 3.0出现后,在2012年中产生的一种业界领先的纹理压缩格式,它的压缩分块从4x4到12x12最终可以压缩到每个像素占用1bit以下,压缩比例有多种可选。ASTC格式支持RGBA,且适用于2的幂次方长宽…

选择软件人力外包公司看这几点没错

近几年,大数据、云计算等各种互联网技术飞速发展,深入到我们工作生活的各个角落。很多企业为了提升竞争力也加快了信息化建设的步伐,而信息化建设的关键就是软件人才,谁能快速构建真正高效的软件开发团队,谁就能先一步…

10 个Web3 设计灵感网站

10 个Web3 设计灵感网站:Cosmos、Axies Infinity、DeSo Foundation、Foundation App、Llama、Snapshot、Juicebox、Alchemy、RabbitHole 正如Twitter前首席执行官Jack Dorsey最近发的一条推文“你不拥有web3,但风险投资家拥有”,而Marc Andre…

web 服务器有哪些

<1>什么是web服务器 "网络服务"&#xff08;Web Service&#xff09;的本质&#xff0c;就是通过网络调用其他网站的资源。 Web Service架构和云 如果一个软件的主要部分采用了"网络服务"&#xff0c;即它把存储或计算环节"外包"给其他…

要不要进外包?

互联网行业的估计都听过这句话:外包&#xff0c;你是外包&#xff0c;麻烦不要偷吃公司零食&#xff0c;注意素质&#xff01; 事情是这样的:她说自己被外派到一家大公司上班&#xff0c;因为那家公司是大公司&#xff0c;在休息的时候还提供零食和下午茶。大家都知道女生爱吃…

为什么程序员做外包会被瞧不起?

二哥&#xff0c;有个事想询问下您的意见&#xff0c;您觉得应届生值得去外包吗&#xff1f;公司虽然挺大的&#xff0c;中xx&#xff0c;但待遇感觉挺低&#xff0c;马上要报到&#xff0c;挺纠结的。 以上是读者小 K 给我发的私信。除此之外&#xff0c;还有个读者 down 也问…

被迫选择了到了外包公司

即使大厂裁员下来的员工愿意被迫选择了到了外包公司&#xff0c;迫不得已做外包的工作&#xff0c;那么&#xff0c;中小型企业那势必也得裁员&#xff0c;为了接收从大厂下来的&#xff0c;有大厂背景的员工&#xff0c;那么就会裁掉自己公司的员工。 这样看来&#xff0c;这…

测试应届生是去自研小公司好还是外包公司好?

我不知道当年怎么想的&#xff0c;能在一个外包公司一干就是3年&#xff0c;后来终于跳出来了&#xff0c;现在的公司虽然不是什么大厂吧&#xff0c;但至少是个正经的互联网企业&#xff0c;待遇也不错。其实很多地方的朋友都有提到外包公司的一些弊端。 外包公司&#xff1a…

网站建设公司该不该把web前端外包出来!精辟

如今的网站建设公司其实过的并不好&#xff0c;一些建站平台、模板建站、仿站等都对网站定制造成了比较大的影响&#xff0c;网站建设公司如何降低用人成本、灵活的整合第三方资源成为度过“特殊时期”的重要手段&#xff0c;迎接下一波春天的到来。 网站建设公司该不该把前端…

外包公司面试门槛高吗?软件测试员进外包公司容易吗?

虽然很多测试人员都抵制外包&#xff0c;但实际情况则是依旧有大量软件测试员&#xff0c;选择加入到外包这个圈子。外包公司面试门槛高吗?外包公司容易进吗?本篇来解答一下这个问题。 外包公司面试门槛高吗&#xff1f; 外包的面试门槛&#xff0c;相对大厂要低很多。尤其…

我的web前端工作日记11------在腾讯外包的这一年

说在前面的话 本文只是大概说一下自己在腾讯做了一年前端外包的收获和一些心得感悟&#xff0c;希望自己能客观的描述&#xff0c;能给一些后来者参考取舍&#xff0c;看是否值得去腾讯做外包。写的没啥逻辑&#xff0c;都是想到啥就写啥&#xff0c;所以大家将就着看看。 一…

进程平均周转时间的计算

题目&#xff1a; 有4个进程A,B,C,D,设它们依次进入就绪队列&#xff0c;因相差时间很短可视为同时到达。4个进程按轮转法分别运行11,7,2,和4个时间单位&#xff0c;设时间片为1。四个进程的平均周转时间为 &#xff08;&#xff09;&#xff1f; 分析 要理解周转时间的含义&am…

操作系统进程完成时间,周转时间,带权周转时间, 平均周转时间, 带权平均周转时间计算

计算规则 周转时间作业完成时刻-作业到达时刻&#xff1b; 带权周转时间周转时间/服务时间&#xff1b; 平均周转时间作业周转总时间/作业个数&#xff1b; 平均带权周转时间带权周转总时间/作业个数&#xff1b;

平均周转时间和平均带权周转时间怎么算?

周转时间&#xff1a;从作业被提交给系统开始&#xff0c;到作业完成为止的这段时间间隔称为作业周转时间。 带权周转时间&#xff1a;即作业的周转时间T与系统为它提供服务的时间Ts之比&#xff0c;即W  T/Ts 周转时间 作业完成时刻 - 作业到达时刻带权周转时间 周转时间…