Есть ли способ сделать определенные цвета сетки вершинного цвета прозрачными в Unity? - PullRequest
0 голосов
/ 18 июня 2019

У меня есть 3D-сетка .fbx, которую я импортировал как объект GameObject в Unity.У него есть цвета вершин.Я пытаюсь заставить некоторые части сетки отображаться как прозрачные, в идеале, когда пользователь выбирает параметр так.

Для справки, вот скриншот меша, который я использую.

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"
}

В частности, эта строка здесь: clip (IN.vertColor.g = 0.5);// Отбрасывает любой пиксель, чей интерполированный цвет вершины в зеленом канале меньше 0,5

Я ожидал, что эта строка отбросит любые не зеленые пиксели, но мой GameObject все еще выглядит так же.

1 Ответ

0 голосов
/ 18 июня 2019

Функция клипа HLSL отбрасывает пиксель, если значение меньше нуля.

То, что вы ищете, будет выглядеть примерно так:

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