Unity性能优化之编辑器检查——贴图

2024-09-01 20:32

本文主要是介绍Unity性能优化之编辑器检查——贴图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

优化选项

图片资源一般可做如下优化设置

  • 打包图集
  • mipmap不必要时选择关闭
  • Read/Write Enabled不必要时关闭
  • 纹理压缩

图集打包的可以参考Unity性能优化之图集打包;mipmap是多级渐变纹理,Unity会生成多张不同像素的纹理以优化性能,因此不必要时就不要设置mipmap防止增加内存;Read/Write Enabled开启时可能会存在内存拷贝以便io操作,因此尽量不要开启;纹理压缩比较复杂,下文讲解。

 

纹理压缩

资源优化一直是游戏性能优化的重要内容,对于贴图资源来说,除了打包图集以外,还可以根据游戏效果和需求对贴图进行压缩。

贴图压缩的好处有

  1. 减少包体大小
  2. 降低内存损耗,提高加载速度

Unity的贴图压缩方案

格式平台不支持机型像素深度尺寸要求画质备注
RGBA32Android/iOS32★★★★★极高的清晰度,原图不压缩
RGB24Android/iOS24★★★★★极高的清晰度,不支持透明通道
RGBA16Android/iOS16★★★★色阶/色差比较明显,对渐变类图支持不好
RGB16Android/iOS16★★★★色阶/色差比较明显,对渐变类图支持不好;不支持透明通道
ETCAndroid非OpenGLES2.0的机型4长宽为2次方★★★不支持透明通道
ETC2AndroidAndroid4.3以下4,带A的8长宽为2次方★★★支持透明通道,画质适中,基本满足大部分UI需求
PVRTCiOS4长宽相等,均为2次方★★★支持透明通道,对长方形贴图不适用
ASTCiOSiPhone5S、iPad mini2、iPad Air3.56(6X6)、5.12(5X5)★★★支持透明通道,多种方式可选,基本满足大部分UI需求

注:

1. 可以根据像素深度计算内存占用大小,比如一张800*800使用RGBA32压缩格式带透明通道的贴图,内存占用情况为

(800 * 800 * 4) / 1024 / 1024 = 2.44MB

 

2. iOS的ASTC有多种压缩格式,上述表格只列举了两种(5X5和6X6),其余格式如下,

压缩策略的选择

压缩策略主要是针对不同用法的贴图选择最佳压缩格式,对于清晰度要求极高的就可以选用RGBA32,否则尽量选择其他方案以优化内存。一般可以分为三个方向:

  • 高清晰无压缩:RGBA32,除非贴图效果不尽人意,否则尽量少用这种格式。
  • 中清晰中压缩:RGB(A)16,物品贴图、头像、卡牌、标签等,不能使用于带颜色渐变的贴图。
  • 低清晰高压缩:ETC4和PVRTC,UI、卡牌、标签等,Unity默认使用的格式,基本满足大部分需求,清晰度不足时可以转用RGB(A)16。

 

实现编辑器自动检查

使用编辑器代码对导入的贴图资源进行自动检查,避免每导入一张贴图就设置一次压缩格式,方便维护和拓展。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class MyTextureProcessor : AssetPostprocessor
{void OnPreprocessTexture(){//非该路径下的Texture不设置if (!assetPath.StartsWith("Assets/MyTexture")) return;TextureImporter import = assetImporter as TextureImporter;if (import == null) return;import.textureType = TextureImporterType.Sprite;    //设置图片为精灵类型importer.spritePackingTag = "Texture/GUI";    //图集打包importer.mipmapEnabled = false;     //关闭mipmapimporter.isReadable = false;        //关闭Read/Write EnabledTextureImporterPlatformSettings settings = new TextureImporterPlatformSettings();settings.name = "Android";      //设置需要压缩的平台settings.overridden = true;     //勾上overridesettings.textureCompression = TextureImporterCompression.Compressed;    //正常压缩    settings.format = TextureImporterFormat.RGBA32;     //选择RGBA32压缩格式settings.maxTextureSize = 2048;                     //分辨率设置为2048import.SetPlatformTextureSettings(settings);}
}

将上述代码复制到新建的C#文件中,新导入的图片就会自动完成压缩而无需手动设置。

 

 

参考链接

https://docs.unity3d.com/ScriptReference/AssetPostprocessor.html
https://docs.unity3d.com/ScriptReference/AssetPostprocessor.OnPreprocessTexture.html

https://www.jianshu.com/p/512d068dcddd
https://www.jianshu.com/p/1fb639cfdc62
https://blog.csdn.net/swj524152416/article/details/54911103
https://blog.csdn.net/bobodan123/article/details/70316538
https://mp.weixin.qq.com/s/jXLfXqtUHpkZfZ1popwHZA

这篇关于Unity性能优化之编辑器检查——贴图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127973

相关文章

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl