2017-09-12 104 views
1

我似乎对它的绘图顺序或类似的东西有一些问题。Alpha通道在顶点着色器上无法正常工作

使用顶点颜色的Im。

如果我再次将底部顶点的alpha设置为1,我仍然会在柱子的顶部得到该绘制问题。

如果我设置队列不透明它呈现正确,但是所述α呈现为白色(这将被期望作为在不透明的队列中没有透明胶片)

Shader "Custom/VertexColors2" { 
    Properties { 
     _Color ("Color", Color) = (0,0,0,0) 
     _MainTex ("Albedo (RGB)", 2D) = "white" {} 
     _GridTex ("Grid Texture", 2D) = "white" {} 
     _Glossiness ("Smoothness", Range(0,1)) = 0.5 
     _Metallic ("Metallic", Range(0,1)) = 0.0 
    } 
    SubShader { 
     Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"} 

     CGPROGRAM 
     #pragma surface surf Standard alpha 
     #pragma target 3.5 

     sampler2D _MainTex; 
     sampler2D _GridTex; 

     struct Input { 
      float2 uv_MainTex; 
      float4 color : COLOR; 
      float3 worldPos; 
     }; 

     half _Glossiness; 
     half _Metallic; 
     fixed4 _Color; 

     void surf (Input IN, inout SurfaceOutputStandard o) { 
      fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color; 

      float2 gridUV = IN.worldPos.xz; 
      gridUV.x *= 1/(4 * 8.66025404); 
      gridUV.y *= 1/(2 * 15.0); 
      fixed4 grid = tex2D(_GridTex, gridUV); 

      o.Albedo = c.rgb * IN.color * grid; 
      o.Metallic = _Metallic; 
      o.Smoothness = _Glossiness; 
      o.Alpha = IN.color.a; 
     } 
     ENDCG 
    } 
    FallBack "Standard" 
} 

Picture of the draw issue

回答

0

我结束了加入在cg开始之前通过,它似乎正在做我想做的事,但仍需要稍微调整一下。

Shader "Custom/VertexColors2" { 
    Properties { 
     _Color ("Color", Color) = (0,0,0,0) 
     _MainTex ("Albedo (RGB)", 2D) = "white" {} 
     _GridTex ("Grid Texture", 2D) = "white" {} 
     _Glossiness ("Smoothness", Range(0,1)) = 0.5 
     _Metallic ("Metallic", Range(0,1)) = 0.0 
    } 
    SubShader { 
     Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Opaque"} 
     LOD 200 

     Pass { 
      Cull Off 
      Blend One OneMinusSrcAlpha 
     } 
      ZWrite Off 

      CGPROGRAM 
      #pragma surface surf Standard fullforwardshadows alpha:blend 
      #pragma target 3.5 

      sampler2D _MainTex; 
      sampler2D _GridTex; 

      struct Input { 
       float2 uv_MainTex; 
       float4 color : COLOR; 
       float3 worldPos; 
      }; 

      half _Glossiness; 
      half _Metallic; 
      fixed4 _Color; 

      void surf (Input IN, inout SurfaceOutputStandard o) { 
       fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color; 

       float2 gridUV = IN.worldPos.xz; 
       gridUV.x *= 1/(4 * 8.66025404); 
       gridUV.y *= 1/(2 * 15.0); 
       fixed4 grid = tex2D(_GridTex, gridUV); 

       o.Albedo = c.rgb * IN.color * grid; 
       o.Metallic = _Metallic; 
       o.Smoothness = _Glossiness; 
       o.Alpha = IN.color.a; 
      } 
      ENDCG 
    } 
    FallBack "Diffuse" 
} 

enter image description here