Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Using decals

Nota

Decals are only supported in the Forward+ and Mobile renderers, not the Compatibility renderer.

If using the Compatibility renderer, consider using Sprite3D as an alternative for projecting decals onto (mostly) flat surfaces.

Los Decals son texturas proyectadas que se aplican sobre superficies opacas o transparentes en 3D. Esta proyección ocurre en tiempo real y no depende de la generación de mallas. Esto permite mover los decals en cada frame con solo un pequeño impacto en el rendimiento, incluso cuando se aplican sobre mallas complejas.

Aunque los decals no pueden añadir detalle geométrico real sobre la superficie proyectada, pueden hacer uso del renderizado basado en la física para proporcionar propiedades similares a los materiales PBR completos.

En esta pagina aprenderá:

  • Cómo configurar decals en el editor 3D.

  • Cómo crear decals durante el juego en una escena 3D (como impactos de bala).

  • Cómo equilibrar la configuración de los decals entre el rendimiento y la calidad.

Ver también

The Godot demo projects repository contains a 3D decals demo.

Si buscas escribir texto 3D arbitrario sobre una superficie, utiliza Texto 3D colocado cerca de la superficie en lugar de un nodo Decal.

Casos de uso

Decoración estática

A veces, la forma más rápida de añadir detalle de textura a una escena es utilizar decals. Este es especialmente el caso de los detalles orgánicos, como parches de tierra o arena esparcidos sobre una superficie grande. Los decals pueden ayudar a romper la repetición de las texturas en las escenas y hacer que los patrones parezcan más naturales. A una escala menor, los decals también pueden utilizarse para crear variaciones de detalle en los objetos. Por ejemplo, se pueden usar para añadir tuercas y pernos sobre geometría de superficies duras.

Dado que los decals pueden inyectar sus propias propiedades PBR sobre las superficies proyectadas, también pueden utilizarse para crear huellas o charcos de agua.

Suciedad añadida sobre la geometría del nivel utilizando decals

Suciedad añadida sobre la geometría del nivel utilizando decals

Elementos de jugabilidad dinámicos

Los decals pueden representar efectos de juego temporales o persistentes, tales como impactos de bala y quemaduras de explosión.

Utilizando un nodo AnimationPlayer o un script, se puede hacer que los decals se desvanezcan con el tiempo (y luego eliminarlos usando queue_free()) para mejorar el rendimiento.

Blob shadows

Las sombras circulares (blob shadows) se utilizan con frecuencia en proyectos para móviles (o para seguir un estilo artístico retro), ya que la iluminación en tiempo real suele ser demasiado costosa en dispositivos móviles de gama baja. Sin embargo, al confiar en el baked de mapas de luz con luces totalmente estáticas, los objetos dinámicos no proyectarán ninguna sombra de esas luces. Esto hace que los objetos dinámicos en escenas con mapas de luz se vean planos en comparación con la iluminación en tiempo real, haciendo que parezcan casi como si estuvieran flotando.

Gracias a las sombras circulares (blob shadows), los objetos dinámicos aún pueden proyectar una sombra aproximada. Esto no solo ayuda con la percepción de profundidad en la escena, sino que también puede ser un elemento de jugabilidad, especialmente en los juegos de plataformas 3D. La longitud de la sombra circular puede extenderse para que el jugador sepa dónde aterrizará si cae directamente hacia abajo.

Incluso con iluminación en tiempo real, las sombras circulares (blob shadows) pueden seguir siendo útiles como una forma de oclusión ambiental para situaciones en las que el SSAO es demasiado costoso o demasiado inestable debido a su naturaleza de espacio de pantalla. Por ejemplo, las sombras de la parte inferior de los vehículos están muy bien representadas mediante el uso de sombras circulares.

Comparativa de la sombra circular (blob shadow) bajo el objeto

Comparativa de la sombra circular (blob shadow) bajo el objeto

Guia inicio rápido

Creating decals in the editor

  1. Create a Decal node in the 3D editor.

  2. En el inspector, expanda la sección Texturas y cargue una textura en Texturas > Albedo.

  3. Mueve el nodo Decal hacia un objeto y luego rótalo para que el decal sea visible (y tenga la orientación correcta). Si el decal aparece reflejado, intenta rotarlo 180 grados. Puedes comprobar si la orientación es la correcta aumentando Parameters > Normal Fade a 0.5. Esto evitará que el Decal se proyecte en superficies que no estén orientadas hacia él.

  4. Si tu decal está destinado a afectar solo a objetos estáticos, configúralo para evitar que afecte a objetos dinámicos (o viceversa). Para ello, cambia la propiedad Cull Mask del decal para excluir ciertas capas. Después de hacer esto, modifica los nodos MeshInstance3D de tus objetos dinámicos para cambiar sus capas de visibilidad. Por ejemplo, puedes moverlos de la capa 1 a la capa 2 y, a continuación, desactivar la capa 2 en la propiedad Cull Mask del decal.

Decal node properties

  • Extensiones: El tamaño del decal. El eje Y determina la longitud de la proyección del decal. Mantén la longitud de la proyección lo más corta posible para mejorar las oportunidades de descarte (culling) y, por lo tanto, mejorar el rendimiento.

Texturas

  • Albedo: El mapa de albedo (difuso/color) que se utilizará para el decal. En la mayoría de las situaciones, esta es la textura que querrás configurar primero. Si utilizas un mapa de normales o un mapa ORM, debes configurar un mapa de albedo para proporcionar un canal alfa. Este canal alfa se utilizará como máscara para determinar cuánto afectarán los mapas de normales/ORM a la superficie subyacente.

  • Normal: El mapa de normales que se utilizará para el decal. Esto puede usarse para aumentar el detalle percibido en el decal al modificar cómo reacciona la luz ante él. El impacto de esta textura se multiplica por el canal alfa de la textura de albedo (pero no por el Albedo Mix).

  • ORM: El mapa de Oclusión/Rugosidad/Metalicidad (ORM) que se utilizará para el decal. Este es un formato optimizado para almacenar mapas de materiales PBR. El mapa de Oclusión Ambiental (Ambient Occlusion) se almacena en el canal rojo, el mapa de rugosidad (roughness) en el canal verde y el mapa de metalicidad (metallic) en el canal azul. El impacto de esta textura se multiplica por el canal alfa de la textura de albedo (pero no por el Albedo Mix).

  • Emission: La textura de emisión que se utilizará para el decal. A diferencia del Albedo, esta textura parecerá brillar en la oscuridad.

Parámetros

  • Emission Energy: El brillo de la textura de emisión.

  • Modulate: Multiplica el color de las texturas de albedo y de emisión. Utiliza esto para tintar los decals (por ejemplo, para decals de pintura, o para aumentar la variación aleatorizando la modulación de cada decal).

  • Albedo Mix: La opacidad de la textura de albedo. A diferencia de usar una textura de albedo con un canal alfa más transparente, disminuir este valor por debajo de 1.0 no reduce el impacto de la textura de normales/ORM en la superficie subyacente. Establécelo en 0.0 cuando crees decals que solo contengan normales/ORM, como huellas o charcos de agua.

  • Normal Fade: Desvanece el Decal si el ángulo entre el AABB del Decal y la superficie de destino se vuelve demasiado grande. Un valor de 0.0 proyecta el decal independientemente del ángulo, mientras que un valor de 0.999 limita el decal a superficies que sean casi perpendiculares. Establecer Normal Fade en un valor superior a 0.0 tiene un pequeño coste de rendimiento debido a los cálculos adicionales de los ángulos de las normales.

Desvanecimiento vertical

  • Desvanecimiento Superior: La curva sobre la cual el decal se desvanecerá a medida que la superficie se aleje del centro del AABB (hacia el ángulo de proyección del decal). Solo los valores positivos son válidos.

  • Desvanecimiento Inferior: La curva sobre la cual el decal se desvanecerá a medida que la superficie se aleje del centro del AABB (en dirección opuesta al ángulo de proyección del decal). Solo los valores positivos son válidos.

Distancia de desvanecimiento

  • Activado: Controla si el desvanecimiento por distancia (una forma de LOD) está activado. El decal se desvanecerá a lo largo de Begin + Length, tras lo cual será descartado (culled) y no se enviará en absoluto al shader. Utiliza esto para reducir el número de decals activos en una escena y, por lo tanto, mejorar el rendimiento.

  • Inicio: La distancia desde la cámara a la que el decal comienza a desvanecerse (en unidades 3D).

  • Longitud: La distancia a lo largo de la cual el decal se desvanece (en unidades 3D). El decal se vuelve gradualmente más transparente a lo largo de esta distancia y es completamente invisible al final. Los valores más altos dan como resultado una transición de desvanecimiento más suave, lo cual es más adecuado cuando la cámara se mueve rápido.

Cull Mask

  • Cull Mask (Máscara de exclusión): Especifica en qué capas de VisualInstance3D se proyectará este decal. Por defecto, los decals afectan a todas las capas. Esto se utiliza para que puedas especificar qué tipos de objetos reciben el decal y cuáles no. Es especialmente útil para garantizar que los objetos dinámicos no reciban accidentalmente un Decal destinado al terreno que se encuentra debajo de ellos.

Decal rendering order

Por defecto, los decals se ordenan en función del tamaño de su AABB y de la distancia a la cámara. Las AABB que están más cerca de la cámara se renderizan primero, lo que significa que el orden de renderizado de los decals a veces puede parecer que cambia dependiendo de la posición de la cámara si algunos decals están situados en la misma ubicación.

Para resolver esto, puedes ajustar la propiedad Sorting Offset en la sección VisualInstance3D del inspector del nodo Decal. Este desplazamiento no es un orden de prioridad estricto, sino una guía que el renderizador utilizará, ya que el tamaño del AABB sigue afectando a cómo funciona el ordenamiento de los decals. Por lo tanto, los valores más altos siempre darán como resultado que el decal se dibuje por encima de otros con un desplazamieto de ordenamiento menor.

Si quieres asegurarte de que un decal se renderice siempre por encima de otros decals, debes establecer su propiedad Sorting Offset en un valor positivo superior a la longitud del AABB del decal más grande que pueda solaparse con él. Para que este decal se dibuje por debajo de otros decals en su lugar, establece el Sorting Offset en el mismo valor pero negativo.

Comparativa del Sorting Offset de VisualInstance3D en Decals

Comparativa del Sorting Offset de VisualInstance3D en Decals

Ajustar el rendimiento y la calidad

El rendimiento del renderizado de los decals viene determinado principalmente por su cobertura de pantalla, pero también por su número. En general, unos pocos decals grandes que cubran la mayor parte de la pantalla serán más costosos de renderizar que muchos decals pequeños que estén esparcidos.

Para mejorar el rendimiento del renderizado, puedes activar la propiedad Distance Fade (Desvanecimiento por distancia) como se describió anteriormente. Esto hará que los decals distantes se desvanezcan cuando estén lejos de la cámara (donde pueden tener un impacto escaso o nulo en el renderizado final de la escena). Utilizando grupos de nodos, también puedes evitar que se generen decals decorativos no esenciales basándote en la configuración del usuario.

La forma en que se renderizan los decals también tiene un impacto en el rendimiento. El ajuste de configuración avanzada Renderizado > Texturas > Decals > Filtro permite controlar cómo se deben filtrar las texturas de los decals. Nearest/Linear (Punto más cercano/Lineal) no utiliza mipmaps; sin embargo, los decals se verán granulados a lo lejos. Nearest/Linear Mipmaps se verán más suaves a la distancia, pero los decals se verán borrosos cuando se vean desde ángulos oblicuos. Esto se puede resolver utilizando Nearest/Linear Mipmaps Anisotropic, que proporciona la mayor calidad, pero también es más lento de renderizar.

Si tu proyecto tiene un estilo pixel art, considera establecer el filtro en uno de los valores Nearest (Punto más cercano) para que los decals utilicen el filtrado de vecino más cercano. De lo contrario, mantente en Linear (Lineal).

Limitaciones

Los decals no pueden afectar a otras propiedades del material que no sean las listadas anteriormente, como la altura (para el mapeado por paralaje/parallax mapping).

Por razones de rendimiento, los decals utilizan una lógica de renderizado puramente fija. Esto significa que los decals no pueden usar shaders personalizados. Sin embargo, los shaders personalizados en las superficies proyectadas pueden leer la información que ha sido sobreescrita por los decals que tienen encima, como la rugosidad (roughness) y la propiedad metálica (metallic).

Cuando se utiliza el renderizador Forward+, Godot emplea un enfoque de clustering para el renderizado de decals. Se pueden añadir tantos decals como se desee (siempre que el rendimiento lo permita). Sin embargo, existe un límite predeterminado de 512 elementos agrupados (clustered elements) que pueden estar presentes en la vista de cámara actual. Un elemento agrupado es una luz omnidireccional, una luz focal, un decal o una sonda de reflexión. Este límite puede aumentarse ajustando Max Clustered Elements en Configuración del Proyecto > Renderizado > Límites > Constructor de Clústeres.

Cuando se utiliza el renderizador Mobile, solo se pueden aplicar 8 decals sobre cada recurso de malla individual. Si hay más de 8 decals afectando a una sola malla, no todos ellos se renderizarán sobre dicha malla.