两个对象之间透明(网格?)

时间:2015-05-18 09:44:36

标签: unity3d shader cg

我是Shader编程中的新手。 我创建了一个带有径向渐变的简单着色器,当它们相交时,我希望增加交叉度。 我想要这样的效果: 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
    }
}

是的,也许代码不是那么美,但对于测试来说它很有用。 谢谢你的回答!

2 个答案:

答案 0 :(得分:1)

只需使用添加剂混合代替alpha混合。

Blend SrcAlpha OneBlend One One

答案 1 :(得分:0)

试试这个

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