["Consejos para el desarrollo de Unity Shaders y efectos especiales de pantalla"] Aprendizaje y finalización: con respecto a los problemas de visualización de los colores de los vértices del modelo

Hoy se produjo un problema al imitar un sombreador de superficie que muestra los colores de los vértices del modelo. El compilador informó el siguiente error:

'vert': parámetro de salida 'o' no completamente inicializado
Compilando el programa Vertex con DIRECTIONAL
Platform define: UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UN ITY_LIGHT_PROBE_PROXY_VOLUME

Después de comprobarlo, descubrí que se debía a que faltaba una línea de código.
La razón más detallada es que el objetivo de renderizado del sombreador está definido como Directx 11. Parece que Unity5.x ahora tiene por defecto Directx 11.
La renderización con Directx 11 requiere una inicialización adecuada de la salida de los colores de los vértices.
Es necesario agregar UNITY_INITIALIZE_OUTPUT (entrada, nombre) para la inicialización.

A continuación se muestra el código del sombreador.

Shader "SurfaceShader/VertColor" 
    {
        Properties
        {
            _MainTint("Global Color Tint", Color) = (1, 1, 1, 1)
        }

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

            CGPROGRAM
            #pragma surface surf Lambert vertex:vert

            float4 _MainTint;

            struct Input
            {
                float2 uv_MainTex;
                float4 vertColor;
            };

            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)
            {
                o.Albedo = IN.vertColor.rgb * _MainTint.rgb;
            }

            ENDCG
        }
    }

La siguiente imagen es el efecto del sombreador predeterminado de Unity5.x.
sombreador predeterminado
A continuación se muestra el mismo modelo usando un sombreador de color de vértice.
Modelo que muestra el color del vértice.
El último es la bola de material utilizada.
Sombreador de color de vértice

En el proceso de copia de este sombreador, además de los problemas de inicialización anteriores, también ocurrió otro problema.

#pragma surface surf Lambert vertex:vert

Esta es vertex:vertla parte del código. Debido a que estoy acostumbrado a usar C# para ingresar un campo con espacios, lo escribí al principio. Sin embargo, se mostrará una vertex : vert
advertencia, diciendo que esta parte es una instrucción #pragma no reconocida y causará el sombreador se ejecute de forma anormal.

Finalmente, lo que sé sobre el color de los vértices del modelo hasta ahora es que se puede configurar a través de Maya. No sé si es posible con 3dMax. Usando esta tecnología se puede reducir el número de texturas hasta cierto punto y almacenar las requeridas. información directamente sobre los vértices del modelo.

Supongo que te gusta

Origin blog.csdn.net/EverNess010/article/details/79778004
Recomendado
Clasificación