2015-11-27 4 views
1

Я работаю в Unity с последней версией Unity 5.2.2, и я спрашиваю, можно ли создать шейдер альфа-маски, который может исчезать в маске. Сейчас у меня есть этот шейдерUnity Alpha Diffuse Mask Shader

Shader "MaskedTexture" 
{ 
    Properties 
    { 
     _MainTex ("Base (RGB)", 2D) = "white" {} 
     _Mask ("Culling Mask", 2D) = "white" {} 
     _Cutoff ("Alpha cutoff", Range (0,1)) = 0.1 
    } 
    SubShader 
    { 
     Tags {"Queue"="Transparent"} 
     Lighting Off 
     ZWrite Off 
     Blend SrcAlpha OneMinusSrcAlpha 
     AlphaTest GEqual [_Cutoff] 
    Pass 
    { 
    SetTexture [_Mask] {combine texture} 
    SetTexture [_MainTex] {combine texture, previous} 
    } 
    } 
} 

enter image description here

Мне нужно добавить цвет СВОЙСТВ или что-то? Я хочу просто убрать этот объект, чтобы он больше не виден. Я не могу просто отключить его, он на самом деле должен постепенно исчезать.

Спасибо.

ответ

2

Фигурные его.

Shader "MaskTexture" 
{ 
    Properties 
    { 
    _Color ("Main Color", Color) = (1, 1, 1, 1) 
    _MainTex ("Base (RGB) Transparency (A)", 2D) = "" { } 
     _Mask ("Culling Mask", 2D) = "white" {} 
    } 
    SubShader 
    { 
     Tags { "RenderType" = "Transparent" "Queue" = "Transparent" } 
     Lighting Off 
     ZWrite Off 
     Blend SrcAlpha OneMinusSrcAlpha 
     AlphaTest GEqual [_Cutoff] 
     Pass 
     { 

     SetTexture [_Mask] {combine texture} 

     SetTexture [_MainTex] { combine texture, previous } 

     SetTexture [_MainTex] { 
      constantColor [_Color] 
      combine previous * constant 
     } 
     } 
    } 
} 
0

Я не знаю, как вы делаете маскировку, но обычно я бы использовал пиксельный элемент для этого. Я нашел этот blogpost, и я думаю, что это полезно для вас. http://bensilvis.com/unity3d-unlit-alpha-mask-shader/

Я использовал код и добавил дополнительное значение для альфы, чтобы настроить количество маскировки.

// - no lightmap support 
// - no per-material color 

Shader "AlphaMask" { 
Properties { 
_alphaValue ("Alpha Value", Range (0, 1)) = 1 
_MainTex ("Base (RGB)", 2D) = "white" {} 
_AlphaTex ("Alpha mask (R)", 2D) = "white" {} 

} 

SubShader { 
    Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"} 
LOD 100 

ZWrite Off 
Blend SrcAlpha OneMinusSrcAlpha 

Pass { 
    CGPROGRAM 
     #pragma vertex vert 
     #pragma fragment frag 

     #include "UnityCG.cginc" 

     struct appdata_t { 
      float4 vertex : POSITION; 
      float2 texcoord : TEXCOORD0; 
     }; 

     struct v2f { 
      float4 vertex : SV_POSITION; 
      half2 texcoord : TEXCOORD0; 
     }; 

     sampler2D _MainTex; 
     sampler2D _AlphaTex; 
     float _alphaValue; 

     float4 _MainTex_ST; 

     v2f vert (appdata_t v) 
     { 
      v2f o; 
      o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); 
      o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); 
      return o; 
     } 

     fixed4 frag (v2f i) : SV_Target 
     { 
      fixed4 col = tex2D(_MainTex, i.texcoord); 
      fixed4 col2 = tex2D(_AlphaTex, i.texcoord); 

      //Uncomment for only alpha of mask 
      //float alpha = col2.r+_alphaValue; 
      //return fixed4(col.r, col.g, col.b,alpha); 
      return fixed4(col.r, col.g, col.b,_alphaValue); 
     } 
    ENDCG 
} 
} 
} 

Надежда это то, что вы ищете

+0

Привет, спасибо, но это не то, что я ищу, я не хочу, чтобы установить альфа только маски, я хочу, чтобы установить альфа и в то же время – Jenny

+0

затем заменить те линии в конце от: float alpha = col2.r + _alphaValue; удалите эту строку return fixed4 (col.r, col.g, col.b, alpha); изменить это lineto return fixed4 (col.r, col.g, col.b, _alphaValue); –

Смежные вопросы