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.1.5. Queue Tags

Esta publicación está disponible en...

Por defecto, este Tag no aparece gráficamente como línea de código en el shader. Esto se debe a que es compilado de manera automática en la GPU debido a que está directamente relacionado con el orden de procesamiento de objetos en cada material.

Tags { “Queue” = ”Geometry” }

Este Tag guarda una estrecha relación entre la cámara y la GPU.

Cada vez que posicionamos un objeto en nuestra escena, pasamos su información hacia la GPU (e.g. posición de los vértices, normales, color, etc). En el caso del Game View es exactamente lo mismo, con la diferencia que la información que le enviamos a la GPU corresponde al objeto que se encuentra dentro del frustum de la cámara. Una vez que la información se encuentra dentro de la GPU, enviamos esta data a la VRAM y le pedimos que dibuje el objeto en nuestra pantalla.

El proceso de dibujar un objeto se denomina «draw call«. Mientras más pases tenga un shader, más draw calls habrá en el rendering. Un pase es equivalente a un draw call, por lo tanto, si tenemos un shader con dos pases en su interior, entonces sólo ese material va a generar dos draw calls en la GPU.

Ahora bien, ¿cómo la GPU dibuja estos elementos en la pantalla? Para resumir un poco esta pregunta, la GPU va a dibujar en primer lugar aquellos objetos que se encuentren más lejanos a la cámara y aquellos elementos más cercanos a la misma serán dibujados al final. Este cálculo se hará en relación a la distancia entre el objeto y la cámara, siguiendo el eje “Z” de la misma.

Screen render (1 draw call)
Screen render (2 draw call)

(Fig. 023. Como podemos ver en la imagen, el triángulo se dibuja primero en la pantalla debido a que se encuentra más lejos de la cámara. Al final se dibuja el cuadrado y ambos generan 2 draw calls)

Unity posee una cola de procesamiento llamada “Render Queue” la cual nos permite modificar el orden de procesamiento de los objetos en la GPU. Existen dos maneras de modificar el Render Queue:

  1. A través de las propiedades del material en el inspector.
  2. O mediante el Tag«Queue«.

Si modificamos el valor de Queue en el shader, el valor por defecto del Render Queue en el material también será modificado.

Esta propiedad cuenta con valores de orden que van desde el 0 al 5000, en donde “0” corresponde al elemento más lejano y “5000” al elemento más cercano a la cámara. Estos valores de orden cuentan con grupos predefinidos, los cuales son:

  • Background.
  • Geometry.
  • AlphaTest.
  • Transparent.
  • Overlay.
//Goes from 0 to 1499, default value 1000. 
Tags {"Queue" = "Background"}
//Goes from 1500 to 2399, default value 2000.
Tags {"Queue" = "Geometry"}
//Goes from 2400 to 2699, default value 2450.
Tags {"Queue" = "AlphaTest"}
//Goes from 2700 to 3599, default value 3000.
Tags {"Queue" = "Transparent"}
//Goes from 3600 to 5000, default value 4000.
Tags {"Queue" = "Overlay"}

Background es utilizado principalmente para elementos que se encuentren muy lejanos a la cámara (e.g. skybox).

Geometry es el valor por defecto en el Queue y es utilizado para los objetos opacos en la escena (e.g. primitivas y objetos en general).

AlphaTest es utilizado en objetos semitransparentes que deben estar por delante de un objeto opaco, pero detrás de un objeto transparente (e.g. un cristal, pasto o vegetación).

Transparent es utilizado para elementos transparentes que deben estar por sobre los demás elementos.
Finalmente Overlay corresponde a aquellos elementos que están por sobre todo en la escena (e.g. imágenes de UI).

   Shader “InspectorPath / shaderName”
{
    Properties {} …
    SubShader
    {
        Tags { "Queue" = "Geometry" } 
    }
}

High Definition RP utiliza el Render Queue de una manera distinta a Built-in RP ya que los materiales no exponen directamente esta propiedad en el Inspector, este en cambio introduce dos métodos de control los cuales son:

  1. Orden por material.
  2. Y orden por Renderer.

En su conjunto, HDRP utiliza estos dos métodos de orden para el control del procesamiento de objetos.

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.