找回密碼
 注冊帳號

掃一掃,訪問微社區

著色器 在實現擦玻璃功能時遇到問題,請朋友幫忙看看

0
回復
504
查看
打印 上一主題 下一主題
[ 復制鏈接 ]
5熟悉之中
689/1000
排名
5714
昨日變化

11

主題

170

帖子

689

積分

Rank: 5Rank: 5

UID
89846
好友
5
蠻牛幣
833
威望
0
注冊時間
2015-4-7
在線時間
256 小時
最后登錄
2019-10-14
QQ
100蠻牛幣
本帖最后由 這個不錯 于 2019-7-26 11:46 編輯

我想實現 一個擦玻璃上水珠的功能 ,參考了刮刮樂的工程  http://www.ssnjd.tw/thread-113128-1-1.html
在他的基礎上添加透明度,并且增加了一個判斷
[C#] 純文本查看 復制代碼
Shader "Unity/Chapter 8/AlphaBlend"{
        Properties
        {
                _MainTex("Texture", 2D) = "white" {}
                _Mask("Mask",2D) = "white"{}
        }
                SubShader
                {
                        Tags { "RenderType" = "Transparent"  "Queue" = "Transparent" }
                        LOD 100
                        Blend SrcAlpha OneMinusSrcAlpha
                        Pass
                        {
                                CGPROGRAM
                                #pragma vertex vert
                                #pragma fragment frag

                                #include "UnityCG.cginc"
                                struct appdata
                                {
                                        float4 vertex : POSITION;
                                        float4 texcoord : TEXCOORD0;

                                };

                                struct v2f
                                {
                                        float2 uv : TEXCOORD2;
                                        float4 pos : SV_POSITION;
                                };

                                sampler2D _MainTex;
                                float4 _MainTex_ST;
                                sampler2D _Mask;

                                v2f vert(appdata v)
                                {
                                        v2f o;
                                        o.pos = UnityObjectToClipPos(v.vertex);                
                                        o.uv = v.texcoord;
                                        return o;
                                }

                                fixed4 frag(v2f i) : SV_Target
                                {
                                        fixed4 texColor = tex2D(_MainTex,i.uv);
                                        fixed4 maskColor = tex2D(_Mask, i.uv);

                                        if (maskColor.r >0.5) {
                                                texColor.a = 1 - maskColor.a;
                                        }

                                        return        texColor; 
                                }
                                ENDCG
                        }
                }
                        Fallback "Transparent/VertexLit"
}



但是呢實現得效果是這樣的



擦上面的時候,下面的也改變了。我使用的是U3D自帶的Plane。
自學了shader一段時間,勉強能做點修改,但是這種問題沒遇到過,希望有人能給點建議哈。
源碼地址
問題.txt (114 Bytes, 下載次數: 23)


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊帳號

本版積分規則

捕鱼王怎么进不去 118彩票app官网 二十一点赢钱策略 加拿大pc28软件购买 红中彩票手机版登录 重庆时时开奖直播 彩票大小单双软件 单机抢庄牌九 北京pk赛车购买网址 旧重庆时时开彩结果 mg藏分不让出款 百人炸金花规则 北京pk10计划免费 宝来娱乐哪里下载 北京pk赛车开奖记录 重庆时时开奖官方同步 吉林快三精准计划图