2017-05-27 49 views
0

如何取消激活Unity中A值(ARGB)的添加?我有一個從多個部分fugurine。當部件重疊時,像圖片一樣添加不透明度。謝謝enter image description hereUnity 2D - 取消A值的添加

+0

你需要編寫一個着色器將融入所需的方式在兩個透明物體。而且我會說實話,我不確定你是否可以。* – Draco18s

+0

或者使用緩衝區? – Adam

+0

你必須去除/標準化緩衝區中的alpha值,但是,這也可以。 – Draco18s

回答

0

我發現了一個着色器基達做的工作:

Shader "Custom/FlatTransparent" { 
    Properties { 
     _Color("Main Color", Color) = (1,1,1,1) 
     _MainTex("Base (RGB) Trans (A)", 2D) = "white" {} 
    } 

    SubShader { 
     Tags{ "Queue" = "Transparent" "IgnoreProjector" = "False" "RenderType" = "Transparent" } 

     Pass { 
      ColorMask A 
      Blend SrcAlpha OneMinusSrcAlpha 

      CGPROGRAM 
      #pragma vertex vert 
      #pragma fragment frag 

      fixed4 _Color; 

      float4 vert(float4 vertex : POSITION) : SV_POSITION { 
       return UnityObjectToClipPos(vertex); 
      } 

      fixed4 frag() : SV_Target { 
       return _Color; 
      } 
      ENDCG 
     } 

     Pass { 
      ColorMask RGB 
      Blend SrcAlpha OneMinusSrcAlpha 

      CGPROGRAM 
      #pragma vertex vert 
      #pragma fragment frag 

      sampler2D _MainTex; 
      fixed4 _Color; 

      struct appdata { 
       float4 vertex : POSITION; 
       float2 uv : TEXCOORD0; 
      }; 

      struct v2f { 
       float2 uv : TEXCOORD0; 
       float4 vertex : SV_POSITION; 
      }; 

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

      fixed4 frag(v2f i) : SV_Target{ 
       fixed4 col = _Color * tex2D(_MainTex, i.uv); 
       return col; 
      } 
      ENDCG 
     } 
    } 

    Fallback "Diffuse" 
} 

要正常工作,三個條件必須得到滿足:

  • 精靈必須有自己的材料設爲具有此着色器的材質
  • 精靈需要位於不同的z座標
  • 並且alpha在着色器內部設置,而不是在精靈,所以每個精靈都有相同的阿爾法

我不是很擅長着色器,所以我無法弄清楚如何沒有這兩個最終的限制。如果有人能改善它,請分享。

來源:Transparent Solid Color ShaderShaderLab: Blending