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.6 CGPROGRAM / ENDCG

Esta publicación está disponible en...

Todas las secciones que revisamos anteriormente están escritas en el lenguaje declarativo ShaderLab, nuestro desafío real en lenguaje de programación de gráficos comienza aquí con la declaración de CGPROGRAM o HLSLPROGRAM.

Por defecto, podemos apreciar que Unity ha incluido la palabra CG a nuestro programa. Con respecto a esto, la documentación oficial (versión 2021.2) dice que:

“Unity utilizó originalmente el lenguaje Cg, de ahí el nombre de algunas palabras y extensiones .cginc, pero el software ya no utiliza este lenguaje, sin embargo, las palabras aún siguen incluidas y el código aún sigue compilando por temas de compatibilidad”.

Como se menciona anteriormente, es probable que en versiones futuras nuestro shader aparezca con la declaración de HLSLPROGRAM en vez de CGPROGRAM ya que HLSL es actualmente el lenguaje de programación de gráficos oficial (de hecho Shader Graph está basado en este lenguaje).

De todas maneras podemos actualizar nuestro shader simplemente reemplazando la palabra CGPROGRAM por HLSLPROGRAM y ENDCG por ENDHLSL, logrando así que nuestro programa compile tanto en Built-in RP como en Universal y High Definition RP.

Si deseamos llevar a cabo la actualización del programa a HLSL, tendremos que cambiar algunas configuraciones y además incluir algunas rutas a nuestro shader lo que hará más complejo nuestro entendimiento sobre esta materia

Pass    // Cg version
{
        CGPROGRAM 
        ENDCG
}

Pass    // HLSL version
{
        HLSLPROGRAM 
        ENDHLSL
}

Todas las funciones necesarias para que nuestro shader compile estarán escritas dentro del campo de CGPROGRAM y ENDCG. Aquellas funciones que están fuera de este fragmento serán tomadas por Unity como propiedades pertenecientes a ShaderLab, y si no corresponden a este lenguaje entonces nuestro programa no va a compilar.

Shader “InspectorPath / shaderName”
{
    Properties {} ...
    SubShader
    {
        Tags { “RenderType”=”Opaque”} 
        Pass
        {
            CGPROGRAM 
            // all our functions written here
            ENDCG
        }
    }
}

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.