En nuestro shader podemos encontrar al menos tres pragmas que vienen escritos por defecto. Estas son directivas de procesador y están incluidas en nuestro programa Cg o HLSL. Su función es ayudar a nuestro shader a reconocer y compilar ciertas funciones que de otra manera no podrían ser reconocidas como tal.
El #pragma vertex vert permite que el vertex shader stage llamado vert pueda compilar en la GPU como vertex shader. Esto es fundamental, ya que sin esta línea de código la GPU no podrá reconocer a la función “vert” como el vertex shader stage, por ende, no podremos utilizar información de nuestros objetos y tampoco pasar información al fragment shader stage para proyectarlas en pantalla.
Si prestamos atención al pase que viene incluido en el shader USB_simple_color, encontraremos la siguiente línea de código relacionada al concepto explicado previamente.
// allow me to compile the "vert" function as a vertex shader.
#pragma vertex vert
// use "vert" as vertex shader.
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o, o.vertex);
return o;
}
La directiva #pragma fragment frag cumple la misma función que el pragma vertex, con la diferencia que este permite que el fragment shader stage llamado “frag” pueda compilar en el código como fragment shader.
// allow me to compile the "frag" function as a fragment shader.
#pragma fragment frag
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
UNITY_APPLY_FOG(i.fogCoords, col);
return col;
}
A diferencia de las directivas anteriores, el #pragma multi_compile_fog tiene una doble función. Por una parte, multi_compile se refiere a un shader variant la cual nos permite generar variantes con funcionalidades distintas dentro de nuestro shader. Por otro lado, la palabra “_fog” habilita las funcionalidades para fog desde la ventana Lighting en Unity, esto quiere decir que, si vamos a dicha pestaña, sección Environment / Other Setting, podremos activar o desactivar las opciones de fog para nuestro shader.