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;     //关闭mipmap
        importer.isReadable = false;        //关闭Read/Write Enabled

        TextureImporterPlatformSettings settings = new TextureImporterPlatformSettings();
        settings.name = "Android";      //设置需要压缩的平台
        settings.overridden = true;     //勾上override
        settings.textureCompression = TextureImporterCompression.Compressed;    //正常压缩    
        settings.format = TextureImporterFormat.RGBA32;     //选择RGBA32压缩格式
        settings.maxTextureSize = 2048;                     //分辨率设置为2048
        import.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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值