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.2.1. ShaderLab Cull

Esta publicación está disponible en...

Esta propiedad, compatible tanto en Built-in RP como en Scriptable RP, controla que caras de un polígono serán removidas en el procesamiento de la profundidad del píxel. ¿Qué quiere decir esto? Recordemos que un objeto poligonal posee caras internas y caras externas. Por defecto, las caras externas son visibles (Cull Back), sin embargo, podemos activar las caras internas siguiendo el esquema que se muestra a continuación.

  • Cull Off. Ambas caras del objeto son renderizadas.
  • Cull Back. Las caras externas del objeto son renderizadas.
  • Cull Front. Las caras internas del objeto son renderizadas.

Este comando posee tres valores, los cuales son: Back, Front y Off. Por defecto viene configurada la opción “Back”, sin embargo, generalmente la línea de código asociada al culling no es visible en el shader por motivos de optimización. Si deseamos modificar las opciones de culling, debemos agregar la palabra Cull seguido del modo que queremos aplicar.

Shader “InspectorPath / shaderName”
{
    Properties {} ...
    SubShader
    {
        // Cull Off
        // Cull Front
        Cull Back
    }
}

También podemos configurar dinámicamente las opciones de Culling a través del Inspector de Unity, mediante la dependencia “UnityEngine.Rendering.CullMode” la cual se declara desde el drawer Enum y se pasa como argumento en la función.

Shader "InspectorPath/shaderName"
{
    Properties 
    {
        [Enum(UnityEngine.Rendering.CullMode)] 
        _Cull ("Cull", Float) = 0
    }
    SubShader
    {
        Cull [_Cull]
    }
}

Otra opción bastante útil ocurre por medio de la semántica SV_IsFrontFace, la cual nos permite proyectar distintos colores y/o texturas en ambas caras de un mesh. Para ello, simplemente debemos declarar una variable booleana y asignar tal semántica como argumento en el fragment shader stage.

fixed4 frag (v2f i, bool face : SV_IsFrontFace) : SV_Target
{
    fixed4 colFront = tex2D(_FrontTexture, i.uv);
    fixed4 colBack = tex2D(_BackTexture, i.uv);

    return face ? colFront : colBack;
}

Cabe destacar que esta opción funciona únicamente cuando el comando “Cull” ha sido configurado en “Off” previamente.

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.