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



  • 相关阅读:
    python idea 利用树莓派做家庭报警系统
    Browserslist: caniuse-lite is outdated. Please run next command `npm update`
    maven项目最外层有个红x,项目其他没有x
    要取消:根据 sitemap 的规则[0],当前页面 [pages/index/index] 将被索引
    MySQL的DATE_FORMAT()用法
    maven项目的java和resources等文件夹不在Java Resources的文件夹里,并且缺少Deployment...
    小程序开发demo及资源
    wx.requestSubscribeMessage 订阅消息
    java获取年月日
    goland 文件头自动注释
  • 原文地址:https://www.cnblogs.com/nafio/p/12419224.html
Copyright © 2011-2022 走看看