当前位置: 首页 > news >正文

【Unity3D优化】使用ASTC压缩格式优化内存

在Unity3D手游开发中,合理选择纹理压缩格式对于优化内存占用、提高渲染效率至关重要。本文将记录近期在项目内进行的图片压缩格式优化过程,重点介绍从ETC2到ASTC 5x5的优化方案及其带来的收益。

1. 现状分析:从ETC2到ASTC 6x6 block

在项目初期,统一采用ETC2作为主要的纹理压缩格式。这种格式在Android设备上的兼容性较好,但在细节表现和压缩效率上仍有优化空间。

通过测试,我发现 ASTC 6x6 block 可以在与ETC2相同的视觉质量下提供更好的压缩率。因此,我开始尝试将资源从ETC2转换为ASTC 6x6,并观察其对内存使用和加载性能的影响。

2. 选择ASTC 6x6作为主要格式

2.1 兼容性检查

虽然ETC2几乎在所有OpenGL ES 3.0及以上的设备上均受支持,但 ASTC 在现代设备上的支持率也非常高。为了确保兼容性,我们通过以下方法进行设备支持性检测:

// 检查设备是否支持ASTC 6x6
bool supportsASTC6x6 = SystemInfo.SupportsTextureFormat(TextureFormat.ASTC_6x6);
// 检查设备是否支持ASTC 5x5
bool supportsASTC5x5 = SystemInfo.SupportsTextureFormat(TextureFormat.ASTC_5x5);

同时,我们也确保设备支持OpenGL ES 3.0,避免兼容性问题:

public static bool CheckSupportOpenGLES3()
{GraphicsDeviceType deviceType = SystemInfo.graphicsDeviceType;return deviceType == GraphicsDeviceType.OpenGLES3;
}

通过广泛的数据收集和日志记录,发现项目用户绝大多数设备都支持 ASTC 格式,因此决定将其作为主要的压缩格式。

3. 相关配套优化

3.1 自动检查格式工具的修改

为了自动化这一优化过程,我们对内部的资源检测工具进行了修改,使其能够:

  • 自动检测并转换符合条件的ETC2纹理为ASTC

  • 对于某些 不希望被压缩 的纹理(如RGBA32格式的特殊资源),保持原样,不进行转换。

  • 允许手动标记精度要求较高的资源,自动选择 ASTC 4x4 或 ASTC 5x5 作为替代方案。

3.2 资源包适配不同设备

为了兼容少部分不支持ASTC的设备,我们采取了 双版本资源方案

  • 打包时生成两套资源

    • ASTC 5x5 版本:大多数设备加载该版本,减少内存占用。

    • ETC2 版本:兼容性回退版本,仅用于不支持ASTC的设备。

  • 运行时判断设备支持情况,选择合适的资源下载:

if (SystemInfo.SupportsTextureFormat(TextureFormat.ASTC_5x5) && SystemInfo.SupportsTextureFormat(TextureFormat.ASTC_6x6) && CheckSupportOpenGLES3())
{// 下载ASTC版本资源
}
else
{// 下载ETC2版本资源
}

3.3 纹理效果测试与优化

除了兼容性优化外,还针对纹理的视觉效果进行了测试。

  • 半透明渐变纹理问题

    • 发现某些带有半透明渐变的图片在使用ASTC压缩后会出现明显的“色带”(banding)现象。

    • 解决方案:对于这类资源,继续使用 ETC2 或者 RGBA32

  • 高精度纹理优化

    • 某些对细节要求较高的纹理可以使用 ASTC 4x4 或 ASTC 5x5 替代 RGBA32。

    • 结果表明,这样的替换方案在大多数情况下都能保持良好的画质,同时大幅减少内存占用。

4. 优化成果总结

经过以上优化,取得了以下成果:

  • 内存占用降低了30% 以上,有效减少了RAM压力。

  • ASTC 6x6 block的包体大小甚至比ETC2还小点,由于有部分精度为5x5和4x4以及保留不压缩的格式,至少在包体大小没有变大甚至有优化的情况下,实现了更精细的精度控制。

  • 加载性能优化,由于ASTC的高效压缩,资源的磁盘占用也相应减少。

  • 兼容性良好,通过自动检测设备支持情况,确保了游戏在不同设备上的稳定运行。

  • 视觉效果优化,针对特定场景调整了压缩方案,避免了画质损失。

5. 结论

本次优化充分利用了ASTC的压缩优势,使项目在保证兼容性的同时,大幅降低了内存占用。对于现代移动游戏来说,合理选择纹理压缩格式可以带来显著的性能收益,也值得在后续的优化中持续关注和改进。

相关文章:

【Unity3D优化】使用ASTC压缩格式优化内存

在Unity3D手游开发中,合理选择纹理压缩格式对于优化内存占用、提高渲染效率至关重要。本文将记录近期在项目内进行的图片压缩格式优化过程,重点介绍从ETC2到ASTC 5x5的优化方案及其带来的收益。 1. 现状分析:从ETC2到ASTC 6x6 block 在项目…...

iptables网络安全服务详细使用

iptables防火墙概念说明 开源的基于数据包过滤的网络安全策略控制工具。 centos6.9 --- 默认防火墙工具软件iptables centos7 --- 默认防火墙工具软件firewalld(zone) iptables主要工作在OSI七层的二、三、四层,如果重新编译内核&…...

MiC建筑引领未来:中建海龙的探索与实践

随着全球城市化进程的加速推进,建筑行业正面临着前所未有的挑战与机遇。如何高效、环保地建造高质量的建筑,成为了行业内外普遍关注的焦点。在此背景下,MiC(Modular Integrated Construction,模块化集成建筑&#xff0…...

清华精品资料:DeepSeek从入门到精通、DeepSeek赋能职场

今天电脑天空给大家推荐2份清华大学专家编写的DeepSeek的使用手册,分别是《DeepSeek从入门到精通》和《DeepSeek赋能职场》。 《DeepSeek从入门到精通》是一本系统化的技术指南,旨在帮助用户从零基础到精通掌握通用人工智能模型DeepSeek的核心功能与应用…...

Nginx进阶篇 - nginx多进程架构详解

文章目录 1. nginx的应用特点2. nginx多进程架构2.1 nginx多进程模型2.2 master进程的作用2.3 进程控制2.4 worker进程的作用2.5 worker进程处理请求的过程2.6 nginx处理网络事件 1. nginx的应用特点 Nginx是互联网企业使用最为广泛的轻量级高性能Web服务器,其特点是…...

SpringBoot初始化8个常用方法

在 Spring Boot 中,初始化方法通常是在应用程序启动时被调用的,可以用来执行应用启动时的一些准备工作。以下是几种常见的初始化方法: 一、顺序 1. 图解 ┌─────────────────────────────┐│ Spring Boot…...

boolen盲注和时间盲注

获取当前数据库名 import requestsdef inject_database(url):namemax_length20low{a: 97, z: 122, A: 65, Z: 90, 0: 48, 9: 57, _: 95}high{97: a, 122: z, 65: A, 90: Z, 48: 0, 57: 9, 95: _}for i in range(1, max_length 1):low_val32high_val122while low_val < hi…...

CTF-web:java-h2 堆叠注入rec -- N1ctf Junior EasyDB

代码存在sql注入 // 处理登录表单的POST请求PostMapping({"/login"})public String handleLogin(RequestParam String username, RequestParam String password, HttpSession session, Model model) throws SQLException {// 验证用户凭据if (this.userService.valid…...

TUSB422 MCU 软件用户指南

文章目录 TUSB422 MCU 软件用户指南 目录表格图表1. 介绍2. 配置2.1 通用配置2.2 USB-PD 3.0 支持2.3 VDM 支持 3. 代码 ROM/RAM 大小优化4. 通过 UART 调试4. 移植到其他微控制器 TUSB422 MCU 软件用户指南 摘要 本文档是 TUSB422 微控制器基于 Type-C 端口控制&#xff08;…...

BUU37 [DASCTF X GFCTF 2024|四月开启第一局]web1234100

Hint1&#xff1a;本题的 flag 不在环境变量中 Hint2&#xff1a;session_start&#xff08;&#xff09;&#xff0c;注意链子挖掘 题目&#xff1a; 扫描出来www.zip class.php <?phpclass Admin{public $Config;public function __construct($Config){//安全获取基…...

常见的排序算法:插入排序、选择排序、冒泡排序、快速排序

1、插入排序 步骤&#xff1a; 1.从第一个元素开始&#xff0c;该元素可以认为已经被排序 2.取下一个元素tem&#xff0c;从已排序的元素序列从后往前扫描 3.如果该元素大于tem&#xff0c;则将该元素移到下一位 4.重复步骤3&#xff0c;直到找到已排序元素中小于等于tem的元素…...

vue学习9

1.文章分类页面-element-plus表格 基本架子-PageContainer封装 按需引入的彩蛋&#xff0c;components里面的内容都会自动注册 用el-card组件&#xff0c;里面使用插槽或具名插槽 文章分类渲染 & loading处理 序号&#xff1a; <el-table-column type"index"…...

TDengine 性能测试工具 taosBenchmark

简介工具获取运行 无参数模式命令行模式配置文件模式 命令行参数配置文件参数 通用配置参数写入配置参数 数据库相关超级表相关标签列与数据列写入行为相关 查询配置参数 执行指定查询语句查询超级表 订阅配置参数数据类型对照表 配置文件示例 写入 JSON 示例查询 JSON 示例订阅…...

【xdoj离散数学上机】T283

递归函数易错&#xff1a; 防止出现递归死循环&#xff01; 题目 题目&#xff1a;求诱导出的等价关系的关系矩阵 问题描述 给定有限集合上二元关系的关系矩阵&#xff0c;求由其诱导出的等价关系的关系矩阵。 输入格式 第一行输入n&#xff0c;表示矩阵为n阶方阵&#xff0c…...

Javaweb中,使用Servlet编写简单的接口

案例&#xff1a;网页提交用户名和密码信息&#xff0c;后端校验密码长度需在6-12位之间 后端部分 WebServlet("/valid") public class SimpleServlet extends HttpServlet{public void service(HttpServletRequest req, HttpServletResponse resp) throws IOExcepti…...

GESP5级语法知识(十):初级数论(三)

埃氏筛法&#xff1a; #include <iostream> using namespace std; const int N1e61; int pri[N]; void prime(int n){for(int i2;i*i<n;i){if(pri[i]0){ // 如果i为素数for(int jii;j<n;ji){pri[j]1; // 将i的倍数标记为合数}}} } int main(){int n;cin>>n;…...

“PEP 8: W292 no newline at end of file“报错 IntelliJ IDEA自动添加空行问题

"PEP 8: W292 no newline at end of file"报错 IntelliJ IDEA自动添加空行问题 在使用IntelliJ IDEA的过程中&#xff0c;经常会发现不管是对于代码文件或者纯文本文件&#xff0c;在保存时中会在文件末尾加上一个空行&#xff0c;提交GIT对比检查时&#xff0c;总是…...

ComfyUI工作流 FluxRedux基础换装

文章目录 FluxRedux基础换装SD模型Node节点工作流程效果展示开发与应用FluxRedux基础换装 该工作流的目标是实现服装换装功能,利用多种深度学习模型和图像处理技术,通过用户输入的服装图像和模特图像,生成逼真的换装效果图。整个工作流涵盖了从图像加载、模型编码、条件生成…...

【机器学习】常见采样方法详解

在机器学习领域&#xff0c;数据采样&#xff08;Sampling&#xff09;是一项至关重要的技术。它不仅影响模型的训练效率&#xff0c;还直接关系到模型的性能与泛化能力。本文将从基础概念出发&#xff0c;逐步深入介绍机器学习中常见的采样方法&#xff0c;帮助读者全面理解并…...

使用瑞芯微RK3588的NPU进行模型转换和推理

使用边缘设备进行算法落地时&#xff0c;通常要考虑模型推理速度&#xff0c;NVIDA系列平台可以使用TensorRT和CUDA加速&#xff0c;瑞芯微RK3588的板子上都是Arm的手机GPU&#xff0c;虽然没有类似CUDA的加速计算方式&#xff0c;但是提供了NPU进行加速推理&#xff0c;本文说…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...