开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

问答求助

关注:430

当前位置:游戏蛮牛 技术专区 问答求助

_____________________________________________________________________________________________________________
问答求助版块规则:

  1、问题尽量描述清楚
      2、代码要放在代码块里
      3、附件最好放到云盘,然后把链接放到TXT文档里,上传TXT文档。【最好没有附件,你懂得】
      4、本版块回复不得无意义,如:顶、呵呵、不错......以及擦边!【真的会扣分的哦】严重者,封IP!
      5、问题得到解决,请选择最佳答案。
      6、若问题是你自己解决了,可以联系管理员,返还蛮牛币,写下你的答案,另有蛮牛币奖赏。
_____________________________________________________________________________________________________________
查看: 787|回复: 26

[技术讨论] UGUI的图片MASK能实现支持半透明通道的遮罩效果吗

[复制链接]  [移动端链接]
7日久生情
1806/5000
排名
1078
昨日变化
4

3

主题

382

帖子

1806

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
46577
好友
1
蛮牛币
2139
威望
0
注册时间
2014-9-24
在线时间
635 小时
最后登录
2017-6-29
发表于 2016-12-23 10:12:53 | 显示全部楼层 |阅读模式
5蛮牛币
我很好奇,原版mask都只能以图片自身像素范围,无视alpha通道,有办法支持alpha吗


回复

使用道具 举报

6蛮牛粉丝
1245/1500
排名
4852
昨日变化
3

2

主题

776

帖子

1245

积分

Rank: 6Rank: 6Rank: 6

UID
92518
好友
1
蛮牛币
2466
威望
0
注册时间
2015-4-15
在线时间
277 小时
最后登录
2017-4-6
发表于 2016-12-23 11:46:43 | 显示全部楼层
你可以直接Ctrl+D复制一张遮罩图,把原图换成一张纯色不带透明的图,再把mask上的show mash graphic取消就行了,当然,原图的mask就不用了

回复

使用道具 举报

7日久生情
1806/5000
排名
1078
昨日变化
4

3

主题

382

帖子

1806

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
46577
好友
1
蛮牛币
2139
威望
0
注册时间
2014-9-24
在线时间
635 小时
最后登录
2017-6-29
 楼主| 发表于 2016-12-26 09:48:50 | 显示全部楼层
825 发表于 2016-12-23 11:46
你可以直接Ctrl+D复制一张遮罩图,把原图换成一张纯色不带透明的图,再把mask上的show mash graphic取消就 ...

不好意思,没太明白

回复

使用道具 举报

6蛮牛粉丝
1245/1500
排名
4852
昨日变化
3

2

主题

776

帖子

1245

积分

Rank: 6Rank: 6Rank: 6

UID
92518
好友
1
蛮牛币
2466
威望
0
注册时间
2015-4-15
在线时间
277 小时
最后登录
2017-4-6
发表于 2016-12-26 09:57:28 | 显示全部楼层
llupll 发表于 2016-12-26 09:48
不好意思,没太明白

怎么不明白了,已经一步一步的教你做了,这都不明白,那我也没办法了

回复

使用道具 举报

7日久生情
1806/5000
排名
1078
昨日变化
4

3

主题

382

帖子

1806

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
46577
好友
1
蛮牛币
2139
威望
0
注册时间
2014-9-24
在线时间
635 小时
最后登录
2017-6-29
 楼主| 发表于 2016-12-26 10:41:57 | 显示全部楼层
825 发表于 2016-12-26 09:57
怎么不明白了,已经一步一步的教你做了,这都不明白,那我也没办法了

你原图指的是遮罩图还是被遮罩的图,复制出来的遮罩和原来的遮罩怎么用,上下,顺序?

回复

使用道具 举报

6蛮牛粉丝
1245/1500
排名
4852
昨日变化
3

2

主题

776

帖子

1245

积分

Rank: 6Rank: 6Rank: 6

UID
92518
好友
1
蛮牛币
2466
威望
0
注册时间
2015-4-15
在线时间
277 小时
最后登录
2017-4-6
发表于 2016-12-26 11:14:31 | 显示全部楼层
llupll 发表于 2016-12-26 10:41
你原图指的是遮罩图还是被遮罩的图,复制出来的遮罩和原来的遮罩怎么用,上下,顺序? ...

原图指的是遮罩图,总的来说就是原本的遮罩图已经不再做遮罩的作用了,只是起到一个显示的作用,让人误以为是遮罩图,真正的遮罩图是复制原遮罩图的一张纯色图然后取消show mash graphic,复制是保证遮罩图和原遮罩图大小一样,这样就可以“支持”alpha啦

回复

使用道具 举报

7日久生情
1646/5000
排名
1894
昨日变化
6

11

主题

562

帖子

1646

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
116338
好友
8
蛮牛币
5046
威望
0
注册时间
2015-8-2
在线时间
529 小时
最后登录
2017-6-29
发表于 2017-1-7 19:53:22 | 显示全部楼层
把shader改了不就得了,说到底不还是shader在控制

回复

使用道具 举报

7日久生情
1806/5000
排名
1078
昨日变化
4

3

主题

382

帖子

1806

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
46577
好友
1
蛮牛币
2139
威望
0
注册时间
2014-9-24
在线时间
635 小时
最后登录
2017-6-29
 楼主| 发表于 2017-1-9 11:37:46 | 显示全部楼层
颤抖的舒肤佳 发表于 2017-1-7 19:53
把shader改了不就得了,说到底不还是shader在控制

所以我发帖就是求什么shader,怎么写的

回复

使用道具 举报

7日久生情
1646/5000
排名
1894
昨日变化
6

11

主题

562

帖子

1646

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
116338
好友
8
蛮牛币
5046
威望
0
注册时间
2015-8-2
在线时间
529 小时
最后登录
2017-6-29
发表于 2017-1-9 14:06:02 | 显示全部楼层
把它shader中的alpha值得获取通过tex2D(_MaskTex,TRANSFORM_TEX(uv1,_MaskTex)).alpha不就得了,兄弟

回复

使用道具 举报

7日久生情
1806/5000
排名
1078
昨日变化
4

3

主题

382

帖子

1806

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
46577
好友
1
蛮牛币
2139
威望
0
注册时间
2014-9-24
在线时间
635 小时
最后登录
2017-6-29
 楼主| 发表于 2017-1-9 16:51:42 | 显示全部楼层
颤抖的舒肤佳 发表于 2017-1-9 14:06
把它shader中的alpha值得获取通过tex2D(_MaskTex,TRANSFORM_TEX(uv1,_MaskTex)).alpha不就得了,兄弟 ...

兄弟,不太懂shader给个源码好吗

回复

使用道具 举报

7日久生情
1646/5000
排名
1894
昨日变化
6

11

主题

562

帖子

1646

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
116338
好友
8
蛮牛币
5046
威望
0
注册时间
2015-8-2
在线时间
529 小时
最后登录
2017-6-29
发表于 2017-1-9 17:51:01 | 显示全部楼层
Shader "UI_MASK"
{
    Properties
    {
        _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}        _MaskTex("",2D) = "white" {}
    }
    SubShader
    {
        Tags
        {
            //渲染队列位置为3000
            "Queue"="Transparent"
            //接收投影
            "IgnoreProjector"="True"
            //渲染类型为透明物体
            "RenderType"="Transparent"
        }
        LOD 100
        //不写入深度
        ZWrite Off
        //透明混合
        Blend SrcAlpha OneMinusSrcAlpha
        Pass
        {  
            //声明一下为CG语法
            CGPROGRAM
            //定义一个 vertex shader,命名为 vert
            #pragma vertex vert
            //定义一个 fragment shader,命名为 frag
            #pragma fragment frag
            //引用 "UnityCG.cginc"
            #include "UnityCG.cginc"
            //定义输入结构
            struct appdata_t
            {
                //获取模型空间顶点信息
                float4 vertex : POSITION;
                //默认通道中的纹理坐标
                float2 texcoord : TEXCOORD0;
            };
            //定义输出结构
            struct v2f {
                //处理完空间转换后的顶点信息
                float4 vertex : SV_POSITION;
                //纹理坐标
                half2 texcoord : TEXCOORD0;
                half2 texcoord1 : TEXCOORD1;
            };
            //声明主贴图纹理以及遮罩
            sampler2D _MainTex;            sampler2D _MaskTex;
            //声明对应该贴图纹理的平铺偏移值
            float4 _MainTex_ST;
            float4 _MaskTex_ST;
            //vertex shader
            v2f vert (appdata_t v)
            {
                //输出结构
                v2f o;
                //通过模型视投影矩阵,经顶点转换到剪裁空间
                o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                //获取偏移,平铺后的纹理坐标
                o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
                o.texcoord1 = TRANSFORM_TEX(v.texcoord1,_MaskTex);
                return o;
            }
            //fragment shader
            fixed4 frag (v2f i) : SV_Target
            {
                //获取主题图颜色
                fixed4 col = tex2D(_MainTex, i.texcoord);
                //通过纹理的颜色来设置透明值
                col.a = tex2D(_MaskTex, i.texcoord1);
                return col;
            }
            //结束CG
            ENDCG
        }
    }
}


回复

使用道具 举报

7日久生情
1646/5000
排名
1894
昨日变化
6

11

主题

562

帖子

1646

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
116338
好友
8
蛮牛币
5046
威望
0
注册时间
2015-8-2
在线时间
529 小时
最后登录
2017-6-29
发表于 2017-1-9 17:52:36 | 显示全部楼层
而且我印象中它自己好像有这个遮罩效果的shader

回复

使用道具 举报

7日久生情
1806/5000
排名
1078
昨日变化
4

3

主题

382

帖子

1806

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
46577
好友
1
蛮牛币
2139
威望
0
注册时间
2014-9-24
在线时间
635 小时
最后登录
2017-6-29
 楼主| 发表于 2017-1-10 09:30:53 | 显示全部楼层
颤抖的舒肤佳 发表于 2017-1-9 17:52
而且我印象中它自己好像有这个遮罩效果的shader

哥,能看清楚我主题主要说的啥吗

回复

使用道具 举报

7日久生情
1646/5000
排名
1894
昨日变化
6

11

主题

562

帖子

1646

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
116338
好友
8
蛮牛币
5046
威望
0
注册时间
2015-8-2
在线时间
529 小时
最后登录
2017-6-29
发表于 2017-1-10 09:35:51 | 显示全部楼层
llupll 发表于 2017-1-10 09:30
哥,能看清楚我主题主要说的啥吗

原版的是col = tex2D(_MainTex,uv); col .rgb *= col.a;

回复

使用道具 举报

7日久生情
1646/5000
排名
1894
昨日变化
6

11

主题

562

帖子

1646

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
116338
好友
8
蛮牛币
5046
威望
0
注册时间
2015-8-2
在线时间
529 小时
最后登录
2017-6-29
发表于 2017-1-10 09:36:57 | 显示全部楼层
颤抖的舒肤佳 发表于 2017-1-10 09:35
原版的是col = tex2D(_MainTex,uv); col .rgb *= col.a;

原版的反而是带了alpha通道使用啊

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表