有没有办法在Unity中将顶点颜色的网格的某些颜色渲染为透明的?

时间:2019-06-18 14:59:51

标签: unity3d colors shader mesh vertex-shader

我有一个.fbx 3D网格物体,已作为Unity中的GameObject导入。它具有顶点颜色。我正在尝试使网格的某些部分呈现为透明,理想情况下,一旦用户选择一个选项即可。

作为参考,这是我正在使用的网格的屏幕截图。

https://imgur.com/a/FY8Z38r

我已经在Unity中编写了一个着色器,该着色器已附加到此GameObject的材质上,从而可以显示网格的顶点颜色。

Shader "Custom/VertexColor" { 
    // Where it will appear inside of the Shader Dropdown Menu of the Material / Name of the shader

    SubShader{
        Tags { "RenderType" = "Opaque" }
        LOD 200


        CGPROGRAM
        #pragma surface surf Lambert vertex:vert
        #pragma target 3.0

        struct Input {
            float4 vertColor;
        };

        float _CutoutThresh;

        void vert(inout appdata_full v, out Input o) {
            UNITY_INITIALIZE_OUTPUT(Input, o);
            o.vertColor = v.color;
        }

        void surf(Input IN, inout SurfaceOutput o) {

            #include "UnityCG.cginc

            o.Albedo = IN.vertColor.rgb;
            clip(IN.vertColor.r = 0.5); // Discards any pixel whose interpolated vertex color in the red channel is less than 0.5
        }
        ENDCG
    }
    FallBack "Diffuse"
}

具体来说,这行在这里: 剪辑(IN.vertColor.g = 0.5); //丢弃绿色通道中插值顶点颜色小于0.5的所有像素

我希望这一行会丢弃任何非绿色像素,但我的GameObject看起来仍然一样。

1 个答案:

答案 0 :(得分:0)

如果值小于零,HLSL的clip函数将丢弃像素。

您正在寻找的东西将是这样的:

clip( IN.vertColor.g < 0.5f ? -1:1 );