Consigue un 20% de descuento usando el código RELEASE en la compra de tu libro. Por tiempo limitado.

Introducción al lenguaje de programación de shaders

3.3.3. Cg / HLSL fragment shader stage

Esta publicación está disponible en...

Nuestra siguiente función y última en el Pass corresponde al fragment shader stage que en nuestro shader aparece con el nombre “frag”. La razón por la cual podemos determinar que frag es la función del fragment shader stage, se debe a que ha sido declarada como tal en el #pragma fragment.

#pragma fragment frag
fixed4 frag (v2f i) : SV_Target
{
    // fragment shader functions here 
}

La palabra “fragment” quiere decir fragmento. Este se refiere a un píxel en pantalla; a un fragmento individual o a un grupo de ellos que en su conjunto cubren el área de un objeto. El fragment shader stage va a procesar cada píxeles en la pantalla del computador en relación al objeto que estamos visualizando.

Vamos a analizar la estructura de la función frag. Esta inicia con el tipo de dato “fixed4” lo que significa que tendremos que retornar un vector de cuatro dimensiones.

Por otra parte, recordemos que este shader está actualmente escrito en Cg, o sea, que va a compilar sólo en Built-in RP. Si deseamos que nuestro shader compile tanto en Universal RP como en High Definition RP tendremos que cambiar este tipo de dato por “half4 o float4”, de otra manera nuestro programa podría generar un error.

// Cg language 
fixed4 frag (v2f i) : SV_Target {} ...

// HLSL language 
half4 frag (v2f i) : SV_Target {} ...

Luego del tipo de dato, continúa el nombre el cual es “frag” y como argumento posee una variable nombrada “i” que es de tipo “v2f”.

A diferencia del vertex shader stage, esta función posee un output llamado “SV_Target” el cual corresponde al color de salida del shader. En versiones anteriores de Direct3D (versión 9 hacia abajo) el output de color en el fragment shader aparecía con la semántinca COLOR, sin embago, en versiones actuales (versión 10 en adelante) esta semántica es actualizada por SV_Target, la cual significa “system value target color”.

Dentro del fragment shader stage podemos encontrar un vector tipo fixed4 llamado “col” que es igual a la función tex2D, en donde, como argumento recibe la textura _MainTex y el input de coordenadas UV. Básicamente lo que hace esta operación es almacenar una textura dentro del vector col. Básicamente lo que hace esta operación es almacenar una textura dentro del vector col.

La razón por la que este vector posee cuatro dimensiones se debe a dos condiciones: La primera, porque la función frag es un vector de cuatro dimensiones, esto quiere decir que tendremos que retornar un vector de igual cantidad de dimensiones, y la segunda se debe a que dentro del vector col vamos a almacenar los colores de la textura en sus canales RGBA, por lo tanto, si la textura que utilicemos tiene canal alpha (transparencia), entonces este se verá reflejado en el objeto.

fixed4 frag (v2f i) : SV_Target
{
    // save the texture inside col 
    fixed4 col = tex2D(_MainTex, i.uv); 
    // return the colour of the texture 
    return col;    
}

Siguenos para mantenerte informado sobre todas las novedades, actualizaciones y más.

Únete al grupo para compartir tus experiencias con otros desarrolladores.

¡Suscríbete a nuestro canal y sigue aprendiendo sobre desarrollo de juegos!

jettelly-logo

Jettelly Team

Somos un equipo de desarrolladores independientes con más de 9 años de experiencia en videojuegos. Como estudio independiente, hemos desarrollado Nom Noms el que publicamos con Hyperbeard en 2019. Actualmente estamos desarrollando La Biblia de Shader en Unity.

Síguenos en nuestras redes sociales.