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.0.8. MPD Toggle

Esta publicación está disponible en...

Dentro de ShaderLab no podemos utilizar propiedades de tipo booleana, en cambio, podemos encontrar el Toggle que cumple la misma función. Este drawer nos va a permitir cambiar de un estado a otro utilizando una condición dentro de nuestro shader. Para ejecutarlo, primero debemos agregar la palabra Toggle entre corchetes y luego declarar nuestra propiedad, teniendo en cuenta que debe ser de tipo Float.

Su valor por defecto debe ser entero, ya sea, cero o uno, ¿por qué razón? Porque cero simboliza apagado (OFF) y uno simboliza encendido (ON).

Su sintaxis es la siguiente:

[Toggle] _PropertieName (“Display Name”, Float) = 0

Como podemos ver: agregamos el Toggle entre corchetes, luego declaramos la propiedad, a continuación el nombre de aparición en el Inspector, seguido del tipo de dato Float y finalmente inicializamos la propiedad en “apagado” dado que agregamos un cero en su valor por defecto.

Algo que debemos considerar al trabajar con este drawer es que, si deseamos implementarlo en nuestro código, tendremos que utilizar el #pragma shader_feature. Este pertenece a los shader variants y su funcionalidad es generar distintas condiciones según el estado en el que se encuentre (habilitado o deshabilitado). Para entender su implementación realizaremos la siguiente operación:

Shader “InspectorPath / shaderName”
    {
    Properties 
    {
        _Color (“Color”, Color) = (1, 1, 1, 1)    
        // declare Toggle drawer 
        [Toggle] _Enable (“Enable ?”, Float) = 0        
    } 
    SubShader
    {
        Pass
        {
            CGPROGRAM
            ...
            // declare pragma 
            #pragma shader_feature _ENABLE_ON
            ...
            float4 _Color;    
            ...
            half4 frag (v2f i) : SV_Target
            {
                half4 col = tex2D(_MainTex, i.uv);    
    
                // generate condition  
                #if _ENABLE_ON            
                    return col;        
                #else
                    return col * _Color;        
                #endif
            }
            ENDCG
        }
    }
}

En el ejemplo anterior, declaramos una propiedad tipo Toggle llamada “_Enable”. Luego agregamos al shader_feature que se encuentra en el CGPROGRAM, sin embargo, a diferencia de la propiedad en nuestro programa, el Toggle se ha declarado como “_ENABLE_ON”, ¿a qué se debe esto? Las variantes que agreguemos en shader_feature son “constantes” por ende se escriben en su totalidad con mayúsculas, esto quiere decir que, por ejemplo, si nuestra propiedad se hubiese llamado _Change, entonces debería ser agregada como “_CHANGE” en el shader variant. La palabra _ON corresponde al estado por defecto del Toggle, entonces, si la propiedad _Enable está activa, retornaremos el color de la textura por defecto en el fragment shader stage, de otra manera, multiplicaremos la propiedad _Color a la misma.

Cabe mencionar que shader_feature no posee la capacidad de compilar múltiples variantes para una aplicación, ¿qué quiere decir esto? Unity no incluirá en el build final aquellas variantes que no estemos utilizando, lo que significa que no podremos pasar de un estado a otro en tiempo de ejecución. Para ello tendremos que utilizar el drawer KeywordEnum que cuenta con el shader variant “multi_compile”.

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.