unity游戏优化之ETC压缩和 Alpha通道处理,让飞起来【NGUI篇

原文地址 http://www.taidous.com/forum.php?mod=viewthread&tid=23762&wuid=44585

 

前言  在unity中。带有透明通道的图片压缩后。均会出现一定的质量的下降。并且带有透明通道的图片占用内存较大。之前一直没有想到解决方案。最近看了一个游戏项目。里面有一个很好的解决方案。我研究了一下。就分享出来了。
  它的具体就是将透明通道和图片内容剥离开来。在用Shader合并。这样就能减少一半的大小。
效果及方法  首先。我们将图片放入tp中。类型悬着tga。然后导出。如下:
<ignore_js_op> 

  导出后。我们得到一个tga图片和一个txt配置。我们将tga用ps打开。然后找到图片的通道处:如下:
<ignore_js_op> 
  如上。我们选中Alpha 1.右键。删除该透明通道。然后将图片存储为bmp图片。
  然后。我们可以在菜单中后退一步。或者重新打开没有删除透明通道的图片。执行如下操作。
  1.选中Alpha1. 按 ctrl + c 复制改透明通道。
  2.选中 红 通道。ctrl + v 粘贴通道。绿 蓝 通道执行同样的操作。
  3.删除Alpha 1 透明通道。将图片保存为bmp。

  最后得到如下文件
<ignore_js_op> 
  我们将图片移到Unity中。做成图集。然后给图集的材质球赋值我们的shader(Shader代码在最下)。
<ignore_js_op> 
  然后我们来对比下。普通的和剥离的效果区别:
<ignore_js_op> 
  效果没什么变化。然后。我们在看下另一个数据:
<ignore_js_op> 

<ignore_js_op> 

  一张只有没剥离的四分之一。然后在加一张透明通道。也只是1M。
  最后。我们看下内存监察的数据图:
<ignore_js_op> 
  1+1 ?= 8   数学不是很好。你们算算。
Shader代码

[AppleScript]  纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Shader "Test/UIETC"
{
     Properties
         {
                  _MainTex ( "Base (RGB)" , 2 D ) = "white" { }
                  _AlphaTex ( "AlphaTex" , 2 D ) = "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"
 
                         sampler 2 D _MainTex;
                         sampler 2 D _AlphaTex;
 
                         float _AlphaFactor;
                 
                         struct v 2 f
                         {
                                 float 4  pos : SV_POSITION;
                                 float 2  uv : TEXCOORD 0 ;
                                 float 4 color : COLOR;
                         } ;
 
                         half 4 _MainTex_ST;
                         half 4 _AlphaTex_ST;
 
                         v 2 f vert ( appdata_full v )
                         {
                                 v 2 f o;
                                 o.pos = mul ( UNITY_MATRIX_MVP , v.vertex ) ;
                                 o.uv =  v.texcoord;
                                 o.color = v.color;
                                 return o;
                         }
 
                         half 4 frag ( v 2 f i ) : COLOR
                         {
                                 half 4 texcol = tex 2 D ( _MainTex , i.uv ) ;
 
                                 half 4 result = texcol;
 
                                 result .a = tex 2 D ( _AlphaTex , i.uv ) * i.color.a ;
 
                                 return result ;
                         }
                         ENDCG
                  }
     }
}

 

转载于:https://www.cnblogs.com/caolin/p/4616406.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值