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

1.1.3. Forward Rendering

Esta publicación está disponible en...

Forward es el Rendering Path por defecto y soporta todas las características típicas de un material, incluye mapas de Normales, iluminación por cada pixel, sombras y más. Posee dos pases (SubShader Pass) distintos que podemos utilizar en nuestro shader desde código. El primero corresponde al pase base (Base Pass) y el segundo al pase adicional (Additional Pass).

En el pase base podemos definir el Light Mode ForwardBase como tal, mientras que en el pase adicional podemos definir el Light Mode ForwardAdd para cálculos de iluminación adicional. Ambas son funciones características de un shader con cálculo de iluminación. El pase base tiene la capacidad de procesar luz direccional Per-Pixel. Si hay múltiples luces direccionales en la escena, la más brillante será quien tenga prioridad. Asimismo, puede procesar Light Probes, iluminación global e iluminación ambiental (sky light).

Como su nombre lo dice, en el pase adicional podemos procesar luces adicionales (Point Light, Spotlight, Area Light) o también sombras que afecten al objeto. ¿Qué quiere decir esto? Si tenemos dos luces en la escena, nuestro objeto será influenciado únicamente por una de ellas, sin embargo, si tenemos definido un pase adicional para esta configuración, entonces será influenciado por ambas.

Un punto que debemos tomar en consideración es que cada pase iluminado va a generar un Draw Call independiente, ¿Qué significa esto? Por definición, un Draw Call es un llamado gráfico que se realiza en la GPU cada vez que deseamos dibujar un elemento en la pantalla de nuestro ordenador. Estos llamados son procesos que requieren una gran cantidad de cálculo, por lo que es necesario que se mantengan al mínimo posible, más aún si estamos trabajando en proyectos para dispositivos móviles.

Para entender este concepto, vamos a suponer cuatro esferas y una luz direccional en nuestra escena. Cada esfera, por su naturaleza, genera un llamado a la GPU, es decir que cada una de ellas va a generar un Draw Call independiente por defecto.

Asimismo, la luz direccional tiene influencia sobre todas las esferas que se encuentran en la escena, por lo tanto, va a generar un Draw Call adicional por cada una.

Esto se debe principalmente a que un segundo pase ha sido incluido en el shader para calcular la proyección de sombras. En consecuencia, cuatro esferas, más una luz direccional generarán ocho llamados gráficos en total.

(Fig. 1.1.3a. En la imagen anterior podemos apreciar el aumento de Draw Calls cuando existen fuentes lumínicas. En el cálculo se incluye el color de ambiente y la fuente de luz como objeto)

Habiendo determinado el pase base, si agregamos un pase adicional en nuestro shader, sumaremos un nuevo Draw Call por cada objeto. En consecuencia, la carga gráfica aumentará con relación a la cantidad de los mismos.

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.