zoukankan      html  css  js  c++  java
  • Unity通过RGBA图生成alpha通道的图

    https://blog.csdn.net/linxinfa/article/details/87861218

    关于为什么要拆分的解释 

    Unity在android上默认机制是当所用的平台支持ETC2时,会使用ETC2,当仅支持ETC1时会拆分alpha通道而ios下通常不需要拆分alpha的,如果是考虑到贴图的大小非要拆分的话,是需要自己来实现的。简单的实现思路:写个插件来读取原贴图,分别获取颜色值和alpha,存储在两张贴图中。shader也需稍作修改,采样两张纹理,根据alpha纹理来混合颜色

    前言
    在Unity项目中,我们为了优化图片的压缩大小,会采用将RGBA图分离成一张ETC压缩格式的RGB图和一张alpha图的方式。

    Unity图集压缩优化:RGBA分离成ETC和alpha(附shader代码):https://blog.csdn.net/linxinfa/article/details/88680013

    Editor脚本 
    我们可以写一个Editor工具来完成 【生成alpha图】这样的工作。

    代码如下:

    //GenAlphaTexture.cs

    using UnityEngine;
    using UnityEditor;
    using System.IO;

    public class GenAlphaTexture
    {
    [MenuItem("GameTools/GenAlphaTexture")]
    public static void StartGenAlphaTexture()
    {
    var textures = Selection.GetFiltered<Texture2D>(SelectionMode.DeepAssets);
    foreach (var t in textures)
    {
    var path = AssetDatabase.GetAssetPath(t);

    // 如果提示图片不可读,需要设置一下isReadable为true, 操作完记得再设置为false
    // var imp = AssetImporter.GetAtPath(path) as TextureImporter;
    // imp.isReadable = true;
    // AssetDatabase.ImportAsset(path);


    var newTexture = new Texture2D(t.width, t.height, TextureFormat.RGBA32, false);
    var colors = t.GetPixels32();
    var targetColors = newTexture.GetPixels32();
    for (int i = 0, len = colors.Length; i < len; ++i)
    {
    var c = colors[i];
    targetColors[i] = new Color32(c.a, c.a, c.a, c.a);
    }
    newTexture.SetPixels32(targetColors);

    string fname = path.Split('.')[0] + "_a.png";
    File.WriteAllBytes(fname, newTexture.EncodeToPNG());

    // imp.isReadable = false;
    // AssetDatabase.ImportAsset(path);
    AssetDatabase.Refresh();
    }
    }
    }
    把上面的脚本放到Unity工程目录:Assets/Editor目录中

    然后选中要处理的图片,然后点击菜单GameTools/GenAlphaTexture,就会在同目录中生成一张alpha通道的图。

    我们把原图和生成的alpha图的压缩格式都设置成ETC 4 bits,这样大小加起来比原图大小还要小一半。

    如果是iOS平台,因为没有ETC压缩格式,可以用PVRTC的压缩格式,但是必须是正方形尺寸的图片,否则就用RGB 16 bit的压缩格式。

    平台 Android iOS
    正方形图片 ETC 4 bits  PVRTC 4 bits
    长方形图片 ETC 4 bits  RGB 16 bit



  • 相关阅读:
    一条SQL的执行流程
    LinkedList源码解析
    MinorGC前检查
    AbstractList源码分析
    JVM常用命令
    CountDownLatch源码解析
    ReentrantLock源码解析
    HTTPS简单介绍
    工厂方法模式
    观察者模式
  • 原文地址:https://www.cnblogs.com/nafio/p/12419224.html
Copyright © 2011-2022 走看看