Unity性能优化之编辑器检查——贴图
优化选项
图片资源一般可做如下优化设置
- 打包图集
- mipmap不必要时选择关闭
- Read/Write Enabled不必要时关闭
- 纹理压缩
图集打包的可以参考Unity性能优化之图集打包;mipmap是多级渐变纹理,Unity会生成多张不同像素的纹理以优化性能,因此不必要时就不要设置mipmap防止增加内存;Read/Write Enabled开启时可能会存在内存拷贝以便io操作,因此尽量不要开启;纹理压缩比较复杂,下文讲解。
纹理压缩
资源优化一直是游戏性能优化的重要内容,对于贴图资源来说,除了打包图集以外,还可以根据游戏效果和需求对贴图进行压缩。
贴图压缩的好处有
- 减少包体大小
- 降低内存损耗,提高加载速度
Unity的贴图压缩方案
格式 | 平台 | 不支持机型 | 像素深度 | 尺寸要求 | 画质 | 备注 |
RGBA32 | Android/iOS | 无 | 32 | 无 | ★★★★★ | 极高的清晰度,原图不压缩 |
RGB24 | Android/iOS | 无 | 24 | 无 | ★★★★★ | 极高的清晰度,不支持透明通道 |
RGBA16 | Android/iOS | 无 | 16 | 无 | ★★★★ | 色阶/色差比较明显,对渐变类图支持不好 |
RGB16 | Android/iOS | 无 | 16 | 无 | ★★★★ | 色阶/色差比较明显,对渐变类图支持不好;不支持透明通道 |
ETC | Android | 非OpenGLES2.0的机型 | 4 | 长宽为2次方 | ★★★ | 不支持透明通道 |
ETC2 | Android | Android4.3以下 | 4,带A的8 | 长宽为2次方 | ★★★ | 支持透明通道,画质适中,基本满足大部分UI需求 |
PVRTC | iOS | 无 | 4 | 长宽相等,均为2次方 | ★★★ | 支持透明通道,对长方形贴图不适用 |
ASTC | iOS | iPhone5S、iPad mini2、iPad Air | 3.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性能优化之编辑器检查——贴图相关推荐
- unity性能优化 模型、贴图、shader优化方法大全
优化,老生常谈.游戏的优化和网站.软件优化没有任何不同,除了编码质量和使用技巧以外,都是那些空间<>时间.效果<>性能的老套路. 带*号的,都是极其重要的优化手段,就算没用上你 ...
- 【Unity性能优化】静态资源优化——Audio优化
文章目录 写在前面 1. 前言 2. 使用Asset Checker进行资源检测 3. Audio优化 3.1 启用Force to Mono 3.2 压缩格式与采样率 3.3 音乐加载类型 3.4 ...
- Unity 性能优化(力荐)
开始之前先分享几款性能优化的插件: 1.SimpleLOD : 除了同样拥有Mesh Baker所具有的Mesh合并.Atlas烘焙等功能,它还能提供Mesh的简化,并对动态蒙皮网格进行了很好的支持. ...
- Unity性能优化 :合批篇
前言 本系列为一些性能优化的小知识,是日常游戏开发中与性能表现的一些点,本篇为该系列文章的第二篇,前篇链接: 第一篇: Unity性能优化:资源篇 在早期Unity中,对于合批的处理手段主要是下面三种 ...
- Unity - 性能优化 - 包体,内存 - 偏静态资源的优化
文章目录 静态资源优化 - AssetPostprocessor Texture 压缩 Model 网格.动画 压缩 音频压缩 纹理的优化经验 尺寸 通道 发布出来的包资源再次分析 如何工具快速定位静 ...
- 第一章:unity性能优化之内存优化
目录 前言 unity性能优化之内存的优化 一.unity Analysis工具的使用. 二.内存优化方法 1.设置和压缩图片 2.图片格式 3.动画文件 4.模型 5.RenderTexture(R ...
- Unity性能优化 – 脚本篇
最近开始进行Unity性能优化的工作,主要分为三类:CPU.GPU和内存.由于我们游戏的核心战斗是计算密集型,所以主要是受限于CPU.CPU的优化又分为渲染和脚本,本文将着重于脚本优化. 一般来说,优 ...
- Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
http://www.cnblogs.com/alan777/p/6135703.html Unity性能优化(2)-官方教程Diagnosing performance problems using ...
- Unity 性能优化:资源篇
Unity性能优化 大的方面来说,通过Unity对于项目的性能优化大概可以分为下面几个部分: 资源 渲染 程序 项目配置 而在这个部分中,资源的性能优化属于最基础.最有效的优化手段,也是游戏开发者日常 ...
最新文章
- SFTP命令基本使用
- linux下如何实现mysql数据库每天自动备份定时备份
- ARP协议抓包分析 -- wireshark
- 南师大计算机语言学,南师大(语言学,文字学,文献学专业备考建议)
- java 交替_Java 8:使用交替接口公开的类型安全地图生成器
- 论文阅读 - Video Swin Transformer
- centos7 校正linux系统时间_Linux系统:Centos7下搭建ClickHouse列式存储数据库
- 【图像处理】射线爆发算法(Rayburst algorithm)
- 9_less中的层级结构
- JNI 简明教程之手把手教你入门
- 网吧游戏更新与保护解决方案
- Stochastic Weight Averaging (SWA) 随机权重平均
- 笔记本电脑更换固态硬盘
- 2014阿里巴巴实习生招聘-研发工程师笔试题/网络编程小结
- RSA解密-提供enc和pem文件类
- Win10任务栏透明
- YOLO系列总结:YOLOv1, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOX
- 国内外语音识别研究的历史
- unicode转utf8
- RSA 2019观点:SD-WAN已成为必然趋势
热门文章
- mysql using temporary_执行计划中Using filesort,Using temporary相关语句的优化解决_MySQL
- (PHPExcel)读取表格中数据
- JMETER分享UBT
- 服务器 消息 22029,解决SQL Server数据库维护计划失败的问题
- RMAN实战1:RMAN备份数据库、控制文件、参数文件、FRA、归档日志
- CSDN日报20170302——《一个想法:成立草根技术联盟对开发人员进行技术定级解决企业员工招聘难问题!》
- Python面向对象编程中的创建类及其实例化对象等方法.....【超级详细】
- 豆瓣9.1分:软件开发的201个原则
- 计算机常用键盘有几个键失灵,电脑键盘忽然有几个键失灵了
- 计算机事件查看u盘使用情况,关于U盘使用记录的日志文件