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.
A continuación se muestra el mismo modelo usando un sombreador de color de vértice.
El último es la bola de material utilizada.
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:vert
la 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.