2015-05-18 2 views
2

Я новичок в программировании шейдеров. Я создал простой шейдер с радиальным градиентом, и когда они пересекаются, я хочу увеличить транспарентность. Я хотел бы что-то вроде этого эффекта: Image transperent two objectsПрозрачный между двумя объектами (сетки?)

SubShader { 
    Tags { "Queue" = "Geometry+10" } 
    Pass{ 
     ColorMask rgb 
     //ZWrite On 
     Blend Zero OneMinusSrcAlpha 
     CGPROGRAM 
     #pragma vertex vert 
     #pragma fragment frag 
     float4 _Color; 
     float4 _ColorDark; 
     float _Radius; 
     //float _Offset; 
     float _Strength; 
     struct vertexInput { 
      float4 vertex : POSITION; 
     }; 
     struct vertexOutput { 
      float4 pos : SV_POSITION; 
      float4 posInObjectCoords : TEXCOORD0; 
     }; 
     vertexOutput vert(vertexInput input) 
     { 
      vertexOutput output; 
      output.pos = mul(UNITY_MATRIX_MVP, input.vertex); 
      output.posInObjectCoords = input.vertex; 
      return output; 
     } 
     float4 frag(vertexOutput input) : COLOR 
     { 
      float z = input.posInObjectCoords.z * input.posInObjectCoords.z ; 
      float x = input.posInObjectCoords.x * input.posInObjectCoords.x ; 
      float r = _Radius * _Radius; 
      float alf = (x+z)/r; 
      return float4 (_ColorDark.r , _ColorDark.g ,_ColorDark.b, alf * _Strength); 
     } 
     ENDCG 
    } 
} 

Да, возможно, код не так-то красота, но для тестов это полезно. Спасибо за любой ответ!

ответ

1

Просто используйте добавку для смешивания вместо альфа-смешивания.

Blend SrcAlpha One или Blend One One

+0

Спасибо, но это работает только с цветом. И почему аддитивное смешение визуализирует только красные и белые цвета? o.o – nipercop

+0

Поместите его в очередь Transparent render, как @Stas BZ. – Geri

0

Попробуйте

... 
Tags { "Queue" = "Transparent" } 
Pass{ 
    ColorMask rgb 
    //ZWrite On 
    Blend SrcAlpha OneMinusSrcAlpha 
    ... 
+0

Спасибо, но это работа только с сплошным цветом. И не важно. Очередь прозрачна или Geometry, показывает один результат. Для меня, должно быть, геометрия, потому что я буду вырезать по другому предмету эти круги. (Colormask) – nipercop