您的位置:首页 > 其它

当打包一个特别大的图集时候该怎么减小图集大小?

2017-03-16 22:24 344 查看
http://blog.csdn.net/sinat_20559947/article/details/50257259

在unity中。带有透明通道的图片压缩后。均会出现一定的质量的下降。并且带有透明通道的图片占用内存较大。之前一直没有想到解决方案。最近看了一个游戏项目。里面有一个很好的解决方案。我研究了一下。就分享出来了。

它的具体就是将透明通道和图片内容剥离开来。在用Shader合并。这样就能减少一半的大小。

效果及方法

首先。我们将图片放入tp中。类型悬着tga。然后导出。如下:







导出后。我们得到一个tga图片和一个txt配置。我们将tga用ps打开。然后找到图片的通道处:如下:



如上。我们选中Alpha 1.右键。删除该透明通道。然后将图片存储为bmp图片。

然后。我们可以在菜单中后退一步。或者重新打开没有删除透明通道的图片。执行如下操作。

1.选中Alpha1. 按 ctrl + c 复制改透明通道。

2.选中 红 通道。ctrl + v 粘贴通道。绿 蓝 通道执行同样的操作。

3.删除Alpha 1 透明通道。将图片保存为bmp。

 

最后得到如下文件



我们将图片移到Unity中。做成图集。然后给图集的材质球赋值我们的shader(Shader代码在最下)。



然后我们来对比下。普通的和剥离的效果区别:



效果没什么变化。然后。我们在看下另一个数据:



一张只有没剥离的四分之一。然后在加一张透明通道。也只是1M。

最后。我们看下内存监察的数据图:



Shader代码

[csharp] view
plain copy

Shader "Test/UIETC"   

{  

    Properties   

    {  

         _MainTex ("Base (RGB)", 2D) = "white" { }  

         _AlphaTex("AlphaTex",2D) = "white"{}  

         }  

    SubShader  

    {  

   

         Tags  

         {  

            "Queue" = "Transparent+1"  

         }  

         Pass  

         {  

            Lighting Off  

            ZTest Off  

            Blend SrcAlpha OneMinusSrcAlpha  

            Cull Off  

            CGPROGRAM  

            #pragma vertex vert  

            #pragma fragment frag  

  

            #include "UnityCG.cginc"  

   

            sampler2D _MainTex;  

            sampler2D _AlphaTex;  

   

            float _AlphaFactor;  

          

            struct v2f   

            {  

                float4  pos : SV_POSITION;  

                float2  uv : TEXCOORD0;  

                float4 color :COLOR;  

            };  

   

            half4 _MainTex_ST;  

            half4 _AlphaTex_ST;  

   

            v2f vert (appdata_full v)  

            {  

                v2f o;  

                o.pos = mul (UNITY_MATRIX_MVP, v.vertex);  

                o.uv =  v.texcoord;  

                o.color = v.color;  

                return o;  

            }  

   

            half4 frag (v2f i) : COLOR  

            {  

                half4 texcol = tex2D (_MainTex, i.uv);  

   

                half4 result = texcol;  

   

                result.a = tex2D(_AlphaTex,i.uv)*i.color.a ;  

   

                return result;  

            }  

            ENDCG  

         }  

    }  

}  

工程下载地址

链接:http://pan.baidu.com/s/1jGtKLMY 密码:lxhw
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐