Volver a la página principal
lunes 12 mayo 2025
1

Uso de los Tags en la sección SubShader de Unity

Cuando empecé a crear mis propios Shaders en Unity, uno de los conceptos que más tardé en entender fueron los Tags en la sección SubShader. Estos pequeños elementos tienen un gran impacto en cómo se comportan nuestros materiales dentro del pipeline de renderizado. No son visibles a simple vista en el juego, pero sí controlan cosas como el orden de renderizado, el tipo de sombra, el tratamiento del alpha y mucho más.

En este artículo quiero contarte cómo funcionan, qué tipos de tags existen y cómo usarlos estratégicamente para mejorar el control y rendimiento visual de tus materiales personalizados en Unity. 🚀

¿Qué son los Tags en un SubShader?

Los Tags son metadatos que se colocan en la sección SubShader o dentro de los Pass para darle instrucciones al sistema de renderizado de Unity sobre cómo tratar ese Shader. Actúan como banderas de configuración para que Unity sepa cuándo y cómo usar un determinado SubShader.

Estos tags afectan cosas como:

  • El orden en que se dibuja un objeto (render queue)
  • Si debe o no recibir sombras
  • Si es transparente, opaco, o se comporta como un UI
  • Si se debe escribir en el z-buffer, etc.

Sintaxis básica de los Tags

SubShader {
    Tags { "RenderType"="Opaque" "Queue"="Geometry" }
    //...
}

Los tags se declaran con el formato "Clave"="Valor" y se colocan dentro de un bloque Tags.

🧠 Importante: Algunos tags son leídos por Unity directamente, otros son leídos por ciertos componentes como la cámara, el sistema de partículas, el UI o incluso herramientas de postprocesado.

Principales Tags usados en SubShaders

🔹 "RenderType"

Este tag le dice a Unity de qué tipo es el material, por ejemplo, si es opaco, transparente o si pertenece a un tipo especial (como UI o efectos).

Valores comunes:

  • "Opaque" – Material sólido, sin transparencia.
  • "Transparent" – Con soporte de transparencia, como vidrios o UI.
  • "TransparentCutout" – Usa alfa para recortes, como hojas o mallas con huecos.
  • "Background" – Para skyboxes y fondos.
  • "Overlay" – Para efectos de pantalla o capas superiores.
Tags { "RenderType"="Transparent" }

Esto es especialmente útil para efectos de postprocesado que necesitan filtrar materiales por tipo.

🔹 "Queue"

Define el orden de renderizado del objeto en la escena. Unity dibuja primero los objetos más cercanos a la cámara en la queue más baja, y los más lejanos o complejos después.

Colas comunes:

  • "Background" = 1000
  • "Geometry" = 2000
  • "AlphaTest" = 2450
  • "Transparent" = 3000
  • "Overlay" = 4000

También puedes especificar un offset:

Tags { "Queue"="Transparent+100" }

Esto puede ser útil si quieres que tu objeto se dibuje después que otros objetos transparentes.

🎯 Tip útil: Usa valores personalizados como "Queue"="Geometry+1" para garantizar que un objeto se renderice justo después del resto de la geometría.

🔹 "IgnoreProjector"

Este tag evita que los Projectors de Unity afecten al material. Es útil si quieres que una textura proyectada (como una sombra) no se aplique sobre ciertos objetos.

Tags { "IgnoreProjector"="True" }

Lo he usado en juegos donde los efectos visuales deben mantenerse limpios de sombras o deformaciones proyectadas. Muy útil en interfaces y efectos especiales. ⚡

🔹 "CanUseSpriteAtlas"

Este tag indica si un shader personalizado puede usar el sistema de Sprite Atlas de Unity (usado en 2D).

Tags { "CanUseSpriteAtlas"="True" }

Ideal para cuando estás creando shaders para juegos 2D con muchos sprites optimizados. 🎮

🔹 "DisableBatching"

Desactiva el dynamic batching, que es una técnica para mejorar el rendimiento uniendo objetos similares. Si tu Shader tiene mucha lógica personalizada, puede que prefieras desactivarlo.

Tags { "DisableBatching"="True" }

Úsalo con cuidado: si tu material no se puede compartir bien entre objetos (por ejemplo, si cambia con frecuencia), mejor desactivar el batching. 🧱

🔹 "ForceNoShadowCasting"

Impide que el objeto emita sombras, sin necesidad de modificar los componentes del render.

Tags { "ForceNoShadowCasting"="True" }

Esto puede ser clave en objetos de partículas o efectos visuales que no deben interactuar con las luces como lo haría una geometría real.

Ejemplo completo de uso de Tags

Shader "Custom/TransparenteSinSombra" {
    SubShader {
        Tags {
            "Queue"="Transparent"
            "RenderType"="Transparent"
            "IgnoreProjector"="True"
            "ForceNoShadowCasting"="True"
        }

        Pass {
            // Aquí va tu código HLSL/CG
        }
    }
}

Este shader:

  • Se renderiza en la capa transparente
  • No es afectado por proyectores
  • No emite sombras
  • Y se comporta como un material transparente en efectos postproceso

💡 Ideal para efectos visuales como halos, luces volumétricas o UI personalizada.

¿Dónde NO debes poner Tags?

Aunque puedes usar Tags también dentro de cada Pass, en la mayoría de los casos los tags que afectan al sistema de renderizado general (como Queue o RenderType) deben ir en la sección SubShader, no dentro del Pass. ⚠️

¿Puedo crear mis propios Tags personalizados?

Sí, puedes crear tags personalizados como "MyCustomTag"="Value", pero Unity no los usará a menos que tú los leas manualmente desde un script. Esto es útil si necesitas almacenar información adicional para efectos o herramientas personalizadas.

Tags { "MyEffectType"="Hologram" }

Luego puedes acceder a ese valor desde C# con:

string tag = material.GetTag("MyEffectType", false);

✨ ¡Perfecto para motores gráficos personalizados o herramientas internas!

Conclusión

Los Tags en la sección SubShader de Unity son una herramienta clave para controlar el comportamiento de tus materiales dentro del motor. Aunque al principio parecen detalles técnicos menores, con el tiempo te das cuenta de su importancia para efectos visuales, optimización y compatibilidad con otros sistemas de Unity.

Personalmente, aprendí a usarlos a medida que mis efectos se volvían más complejos. A veces un pequeño tag, como "ForceNoShadowCasting", puede ahorrarte horas de depuración y mejorar mucho el resultado visual. No subestimes su poder. 🔥

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer