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

2.0.2. Introducción al lenguaje de programación

Esta publicación está disponible en...

Antes de comenzar en la definición de código, debemos tomar en consideración que en Unity existen tres lenguajes de programación asociados al desarrollo de un shader, estos son: HLSL (High Level Shader Language – Microsoft), Cg (C for Graphics – NVIDIA) el cual sigue compilando dentro del shader, pero ya no es utilizado en versiones actuales del software, y ShaderLab (lenguaje declarativo – Unity).

Iniciaremos nuestra aventura trabajando con lenguaje Cg y ShaderLab en Built-in RP para luego dar paso a la introducción de HLSL en Universal RP.

Cg es un lenguaje de programación de alto nivel diseñado para compilar en la mayoría de las GPUs. Este ha sido desarrollado por NVIDIA en colaboración con Microsoft y utiliza una sintaxis muy similar a HLSL. La razón por la que los shaders funcionan con lenguaje Gg se debe a que este puede compilar tanto HLSL como GLSL (OpenGL Shading Language), permitiendo la aceleración y optimización del proceso de creación de materiales para videojuegos.

Cuando creamos un shader, nuestro código compila dentro de un campo llamado CGPROGRAM. Unity actualmente está trabajando en dar mayor soporte y compatibilidad entre Cg y HLSL, por lo tanto, es muy probable que en un futuro cercano estos bloques sean reemplazados por HLSLPROGRAM y ENDHLSL ya que HLSL es oficialmente el lenguaje de programación de shader en versiones actuales de Unity (version 2019 en adelante).

Todos los shaders en Unity (exceptuando Shader Graph y Compute) están escritos dentro de un lenguaje declarativo llamado ShaderLab. La sintaxis de este lenguaje permite mostrar las propiedades de un shader en el inspector de Unity. Esto es muy interesante ya que podremos manipular los valores de variables y vectores en tiempo real, ajustando nuestro shader al resultado que deseamos obtener.

En ShaderLab podemos definir manualmente varias propiedades y comandos, entre ellas se encuentra el bloque Fallback, el cual es compatible en los distintos tipos de rendering pipeline existentes.

El Fallback es un bloque de código fundamental en juegos multiplataforma. Este permite compilar un shader distinto del que ha generado un error. Básicamente, si el shader se rompe en su proceso de compilación, entonces el Fallback retorna un shader distinto, y así, el hardware gráfico puede continuar su trabajo.

En la sección 2.4.2 veremos esta propiedad en detalle.

Otro bloque que podemos encontrar en ShaderLab corresponde al SubShader, el cual nos va a permitir declarar comandos y generar pases. Un shader puede contener más de un SubShader y más de un pase cuando es escrito en Cg, sin embargo, en el caso de HLSL un shader puede contener sólo un pase por SubShader.

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.