Material Spatial¶
Introducción¶
SpatialMaterial
es un material 3D y su objetivo es que los artistas busquen la mayoría de las características en un material. Además, puede convertirse a código de shader y modificarse si se necesita agregar funcionalidades adicionales.
Este tutorial intentará cubrir la mayoría de los parámetros presentes en SpatialMaterial
.
There are 4 ways to add a SpatialMaterial
to an object. It can be added in
the Material property of the mesh. It can be added in the Material property of
the node using the mesh (such as a MeshInstance node), the Material Override property
of the node using the mesh, and the Material Overlay.

Si se añade un material a la propia malla, cada vez que se utilice esa malla tendrá ese material. Si añade un material al nodo usando la malla, el material sólo será usado por ese nodo, también anulará la propiedad de material de la malla. Si se añade un material en la propiedad Material Override del nodo, sólo será usado por ese nodo. También anulará la propiedad material regular del nodo y la propiedad material de la malla.
The Material Overlay property will render a material over the current one being used by the mesh. As an example, this can be used to put a transparent shield effect on a mesh.
Indicadores¶
Los materiales spatial tienen muchos indicadores que determinan la utilización general de un material.

Transparente¶
En Godot, los materiales no son transparentes a menos que se configuren específicamente de esta forma. La razón principal es que los materiales transparentes son renderizados usando una técnica diferente (ordenados de atrás hacia adelante y renderizados en orden).
Esta técnica es menos eficiente (ocurren muchos cambios de estado) y hace que los materiales sean inutilizables con muchos efectos intermedios y posteriores (como SSAO, SSR, etc.) que requieren una geometría perfectamente opaca.
Por esta razón, los materiales en Godot se muestran opacos a menos que se especifique lo contrario. Los principales ajustes que permiten la transparencia son:
Opción Transparent (esta)
Modo de mezcla (blend mode) configurado en otro que no sea "Mix"
Activar el desvanecimiento de la distancia o la proximidad
Usar la sombra para la opacidad¶
La iluminación modifica el alfa para que las áreas sombreadas sean opacas y las no sombreadas sean transparentes. Útil para superponer sombras a una cámara en AR.
Unshaded (Sin sombra)¶
En la mayoría de los casos, es común que los materiales se vean afectados por la iluminación (shaded).
Algunas veces, uno puede querer mostrar sólo el albedo (color) e ignorar el resto. Al activar esta opción, se eliminarán todo el shading y se mostrará el color puro, sin iluminación.

Vertex Lighting (Iluminación de vértices)¶
Godot tiene un coste por píxel más o menos constante (gracias al paso previo de profundidad o depth pre-pass). Todos los cálculos de iluminación se realizan ejecutando el shader de iluminación en cada píxel.
Dado que estos cálculos son costosos, el rendimiento puede reducirse considerablemente en algunos casos particulares, como el dibujo de varias capas de transparencia (común en los sistemas de partículas). Cambiar a iluminación por vértice (per-vertex) puede ayudar en estos casos.
Además, en dispositivos móviles o de gama baja, el cambio a vertex lighting puede aumentar considerablemente el rendimiento del renderizado.

Hay que tener en cuenta que cuando la vertex lighting está activado, sólo directional lighting (iluminación direccional) puede producir sombras (por razones de rendimiento).
Sin prueba de profundidad¶
Para que los objetos cercanos aparezcan sobre objetos lejanos, se realiza una prueba de profundidad. Deshabilitarlo tiene como resultado que los objetos aparezcan por encima (o por debajo) de todo lo demás.
Desactivar esto tiene más sentido para dibujar indicadores en el espacio del mundo (world space), y funciona muy bien con la propiedad "Render Priority" de Material (ver abajo).

Usar Point Size (Tamaño de punto)¶
Esta opción sólo es efectiva cuando la geometría representada está hecha de puntos (generalmente sólo está hecha de triángulos cuando se importa desde DCCs 3D). Si es así, entonces los puntos pueden ser dimensionados (ver abajo).
World Triplanar (Mundo Triplanar)¶
Cuando se utiliza el mapeo triplanar (ver abajo, en los ajustes UV1 y UV2), el triplanar se calcula en el espacio local del objeto (local space). Esta opción hace que los triplanares trabajen en el espacio del mundo.
Fixed Size (Tamaño fijo)¶
Esto hace que el objeto renderizado tenga el mismo tamaño sin importar la distancia. Es especialmente útil para indicadores (sin prueba de profundidad y alta prioridad de renderizado) y algunos tipos de billboards.
Do Not Receive Shadows (No recibir sombras)¶
Hace que el objeto no reciba ningún tipo de sombra que de otro modo sería proyectada sobre él.
Desactivar Luz Ambiental¶
Hace que el objeto no reciba ningún tipo de luz ambiental que de otro modo sería lo iluminaría.
Asegura Normales Correctas¶
Fija las normales cuando se utiliza una escala no uniforme.
Color del vértice¶
Esta opción permite elegir lo que se hace por defecto en los colores de los vértices que provienen de su aplicación de modelado 3D. Por defecto, se ignoran.

Use as Albedo (Usar como Albedo)¶
Esta opción hace que el color del vértice se utiliza como color del albedo.
Es sRGB¶
La mayoría de los DCCs 3D probablemente exportarán los colores de los vértices como sRGB, por lo que activar esta opción ayudará a que se vean correctamente.
Parámetros¶
SpatialMaterial
también tiene varios parámetros que pueden configurarse para ajustar muchos aspectos del renderizado:

Diffuse Mode (Modo difuso)¶
Especifica el algoritmo utilizado por la dispersión difusa de la luz al golpear el objeto. El predeterminado es Burley. También hay otros modos disponibles:
Burley: Modo predeterminado, el algoritmo difuso original de Disney Principled PBS.
Lambert: No se ve afectado por la rugosidad.
Lambert Wrap: Extiende Lambert para cubrir más de 90 grados cuando la rugosidad es mayor. Funciona muy bien para el cabello y simula la dispersión a bajo costo de la superficie. Esta implementación es para conservar energía.
Oren Nayar: El objetivo de esta implementación es tener en cuenta el microsurfacing (a través de la rugosidad). Funciona bien con materiales similares a la arcilla y algunos tipos de tela.
Toon: Proporciona un acabado duro para la iluminación, con alisado afectado por la rugosidad. Se recomienda desactivar la influencia del cielo en la configuración de la luz ambiental del entorno o desactivar la luz ambiental en el material spatial para lograr un mejor efecto.

Specular Mode (Modo Specular)¶
Especifica cómo se renderizará el specular blob. El specular blob representa la forma de una fuente de luz reflejada en el objeto.
**ShlickGGX:**El blob más común usado por los motores PBR 3D hoy en día.
Blinn: Común en motores de generaciones anteriores. No vale la pena usarlo hoy en día, pero lo hemos dejado por motivos de compatibilidad.
Phong: Igual que arriba.
Toon: Crea un blob toon, que cambia de tamaño dependiendo de la rugosidad.
Disabled: A veces, el reflejo molesta. ¡Desaparece!

Modo de Fusión¶
Controla el modo de mezcla para el material. Hay que tener en cuenta que cualquier otro modo que no sea Mix obliga al objeto a pasar por el pipeline transparente.
Mix: Modo de mezcla por defecto, alpha controla cuánto es visible el objeto.
Add: El objeto es mezclado de manera aditiva, bueno para efectos de destellos o similares al fuego.
Sub: El objeto es substraído.
Mul: El objeto es multiplicado.

Cull Mode¶
Determina qué lado del objeto no se dibuja cuando se procesan las backfaces:
Back: La parte posterior del objeto no es dibujada cuando no es visible (por defecto).
Front: La parte frontal del objeto no es dibujada cuando no es visible.
Disabled: Utilizado para objetos de doble cara (no se realiza ningún proceso de culling).
Nota
By default, Blender has backface culling disabled on materials and will export materials to match how they render in Blender. This means that materials in Godot will have their cull mode set to Disabled. This can decrease performance since backfaces will be rendered, even when they are being culled by other faces. To resolve this, enable Backface Culling in Blender's Materials tab, then export the scene to glTF again.
Modo de Dibujo Profundo¶
Especifica cuándo se debe realizar el renderizado de profundidad.
Opaque Only (predeterminado): Sólo se dibuja la profundidad en objetos opacos.
Always: El dibujo de profundidad se realiza tanto para objetos opacos como transparentes.
Never: No se realiza ningún dibujo de profundidad (nota: no confundir con la opción No Depth Test anterior).
Depth Pre-Pass: En el caso de los objetos transparentes, primero se hace un pase opaco con las partes opacas y luego se dibuja la transparencia por encima. Esta opción se puede utilizar con césped transparente o follaje de árboles.

Line Width (Ancho de línea)¶
Al dibujar líneas, especifica un ancho de las líneas que se están dibujando. Esta opción no está disponible en la mayoría del hardware moderno.
Point Size (Tamaño de puntos)¶
Cuando se dibujen puntos, hay que especificar el tamaño del punto en píxeles.
Modo Billboard¶
Activa billboard mode para materiales de dibujo. Esto controla la forma en que el objeto mira hacia la cámara:
Disabled: Billboard mode está desactivado.
Enabled: Billboard mode está activado, el eje -Z del objeto siempre estará mirando a la cámara.
Y-Billboard: el eje X del objeto siempre estará alineado con la cámara.
Particles: Usado en sistemas de partículas, porque permite especificar opciones de animación.

Las opciones anteriores sólo están habilitadas para Particle Billboard.
Billboard Keep Scale¶
Permite escalar una malla en modo cartelera.
Grow¶
Hace que los vértices del objeto crezcan en la dirección señalada por sus normales:

Esto se utiliza comúnmente para crear contornos de bajo costo. Añade una segunda pasada al material, hazlo negro y sin sombrear, invierte el desechado de caras (Cull Front), y añade algo de tamaño:

Usar Alpha Scissor¶
Cuando no se necesita una transparencia distinta de 0 o 1, es posible establecer un umbral para evitar que el objeto muestre píxeles semi transparentes.

Esto renderiza el objeto a través del pipeline opaco que es más rápido y permite realizar efectos de medio y post proceso como SSAO, SSR, etc.
Color de materiales, mapas y canales¶
Además de los parámetros, lo que define a los materiales mismos son los colores, texturas y canales. Godot soporta una extensa lista de ellos. A continuación se describen con más detalle:
Albedo¶
Albedo es el color base del material, sobre lo que trabaja todo lo demás. Cuando se establece en Unshaded, este es el único color que es visible. En versiones anteriores de Godot, este canal se llamaba Diffuse. El cambio de nombre se produjo principalmente porque, en PBR (Physically Based Rendering), este color afecta a muchos más cálculos que sólo la ruta de iluminación difusa.
El color y la textura del albedo se pueden utilizar juntos a medida que se multiplican.
El Alpha channel en el color y la textura del albedo también se utiliza para la transparencia del objeto. Si se utiliza un color o una textura con alpha channel, asegúrate de habilitar la transparencia o alpha scissoring para que funcione.
Metallic¶
Godot utiliza un modelo metálico en lugar de otros conocidos, por su simplicidad. Este parámetro define qué tan reflectantes son los materiales. Cuanto más reflectante es, menos es afectado por la luz difusa/ambiental y mayor es el reflejo. Este modelo se llama "energy-conserving" (conservador de energía).
El parámetro Specular es sólo una cantidad general para la reflectividad (a diferencia de Metallic, éste no ahorra energía, así que simplemente déjalo en 0.5
y no lo toques a menos que lo necesites).
El mínimo de reflectividad interna es de 0.04
, por lo que (al igual que en la vida real) es imposible hacer un material completamente antirreflectante.

Roughness¶
Roughness (rugosidad) afecta principalmente a la forma en que se produce el reflejo. Un valor de 0 lo convierte en un espejo perfecto, mientras que un valor de 1 difumina completamente el reflejo (simulando una microsuperficie natural). Los tipos más comunes de materiales se pueden lograr con la combinación correcta de Metallic y Roughness.

Emission¶
Emission especifica cuánta luz es emitida por el material (Ten en cuenta que esto no incluye la luz que rodea a la geometría a menos que se utilice Usando GIProbe). Este valor se añade a la imagen final resultante y no se ve afectado por otra iluminación en la escena.

Normal map¶
El mapeo de normales (normal mapping) permite establecer una textura que representa detalles de forma más precisos. Esto no modifica la geometría, sólo el ángulo de incidencia de la luz. En Godot, sólo los canales rojo (red) y verde (green) se utilizan para mapas normales, con el fin de lograr una mayor compatibilidad.

Nota
Godot requires the normal map to use the X+, Y+ and Z+ coordinates, this is known as OpenGL style. If you've imported a material made to be used with another engine it may be DirectX style, in which case the normal map needs to be converted so its Y axis is flipped.
Más información sobre mapa de normales (incluyendo la tabla de orden de coordenadas para motores populares) se puede encontrar aquí.
Rim¶
Algunos tejidos tienen micropelículas que hacen que la luz se disperse a su alrededor. Godot emula esto con el parámetro Rim. A diferencia de otras implementaciones de iluminación de bordes que sólo utilizan el canal de emisión, éste en realidad tiene en cuenta la luz (si no hay luz, no hay borde). Esto hace que el efecto sea mucho más creíble.

El tamaño del Rim depende de Roughness, y hay un parámetro especial para especificar cómo debe ser coloreado. Si Tint es 0
, el color de la luz se utiliza para el Rim. Si tint es 1, entonces se utiliza el albedo del material. El uso de valores intermedios generalmente funciona mejor.
Clearcoat¶
Esta característica sólo está disponible cuando se utiliza el backend GLES3.
El parámetro Clearcoat se utiliza principalmente para añadir una pasada secundaria de recubrimiento transparente al material. Esto es común en la pintura de automóviles y juguetes. En la práctica, es un specular blob más pequeño añadido sobre el material existente.
The effect is extremely subtle in Godot 3 releases, and may require specific lighting or looking at a material a specific way to notice a difference. This can be seen in the image below where clearcoat is turned on in the right.

Nota
The effect will be more noticeable in Godot 4.
Anisotropy¶
Esta característica sólo está disponible cuando se utiliza el backend GLES3.
Esto cambia la forma del specular blob y lo alinea con el espacio tangencial. Anisotropy se utiliza comúnmente con cabello, o para hacer que materiales como el aluminio pulido sean más realistas. Funciona especialmente bien cuando se combina con flowmaps.

Ambient Occlusion¶
Es posible especificar un mapa de oclusión ambiental bakeado. Este mapa afecta la cantidad de luz ambiental que llega a cada superficie del objeto (no afecta la luz directa por defecto). Si bien es posible utilizar la oclusión ambiental en el espacio de la pantalla (SSAO) para generar Ambient Occlusion, nada superará la calidad de un mapa de AO bien bakeado. Se recomienda prebakear Ambient Occlusion siempre que sea posible.

Profundidad¶
Esta característica sólo está disponible cuando se utiliza el backend GLES3.
Establecer un mapa de profundidad a un material genera una búsqueda ray-marched para emular el desplazamiento adecuado de las cavidades a lo largo de la dirección de la vista. Esto no es una verdadera geometría añadida, sino una ilusión de profundidad. Puede que no funcione para objetos complejos pero produce un efecto de profundidad realista para texturas. Para obtener mejores resultados, se debe utilizar Depth junto con normal mapping.

Subsurface Scattering¶
Esta característica sólo está disponible cuando se utiliza el backend GLES3.
Este efecto emula la luz que penetra la superficie de un objeto, se dispersa y luego sale. Es útil para hacer pieles realistas, mármol, líquidos de colores, etc.

Transmission¶
Controla cuánta luz del lado iluminado (visible a la luz) se transfiere al lado oscuro (lado opuesto a la luz). Esto funciona bien para objetos delgados como hojas de árboles/plantas, césped, orejas humanas, etc.

Refraction¶
Esta característica sólo está disponible cuando se utiliza el backend GLES3.
Cuando refraction está habilitada, reemplaza alpha blending, y Godot intenta obtener información desde detrás del objeto que se está renderizando en su lugar. Esto permite distorsionar la transparencia de manera similar a la refracción en la vida real.

Detail¶
Godot permite usar un albedo y normal map secundarios para generar texturas detalladas, las cuales pueden ser mezcladas de muchas maneras. Combinado con UV secundario o modo triplanar, se pueden lograr muchas texturas interesantes.

Hay varios ajustes que controlan el uso de los detalles.
Máscara: La máscara de detalle es una imagen en blanco y negro que se utiliza para controlar dónde tiene lugar la mezcla en una textura. El blanco es para las texturas de detalle, el negro es para las texturas materiales regulares, los diferentes tonos de gris son para la mezcla parcial de las texturas materiales y las texturas de detalle.
Modo de fusión: Estos cuatro modos controlan cómo se mezclan las texturas.
Mezclar: Combina los valores de los píxeles de ambas texturas. En negro, sólo muestra la textura del material, en blanco, sólo muestra la textura del detalle. Los valores de gris crean una mezcla suave entre los dos.
Add: Añade los valores de los píxeles de una textura con la otra. A diferencia del modo mix, ambas texturas se mezclan completamente en las partes blancas de una máscara y no en las partes grises. La textura original es mayormente sin cambios en el negro
Sustracción: resta los valores de los píxeles de una textura con la otra. La segunda textura se sustrae completamente en las partes blancas de una máscara con sólo una pequeña sustracción en las partes negras, siendo las partes grises diferentes niveles de sustracción basados en la textura exacta.
Mul: Multiplica los números de canal RGB de cada píxel de la textura superior por los valores del píxel correspondiente de la textura inferior.
Albedo: Aquí es donde pones una textura de albedo que quieres mezclar. Si no hay nada en esta ranura se interpretará como blanco por defecto.
Normal: Aquí es donde pones una textura normal que quieres mezclar. Si no hay nada en esta ranura se interpretará como un mapa plano normal. Esto puede ser usado incluso si el material no tiene el mapa normal habilitado.
UV1 y UV2¶
Godot soporta dos canales UV por material. Los UV secundarios son a menudo útiles para ambient occlusion o emission (baked light). Los UVs pueden ser escalados y desplazados, lo que es útil en texturas con repetición.
Mapeado Triplanar¶
El mapeo triplanar es compatible tanto para UV1 como para UV2. Esta es una forma alternativa de obtener coordenadas de textura, a menudo llamada "Autotexture". Las texturas son muestreadas en X, Y y Z y mezcladas por la normal. El mapeo triplanar puede ser espacio de mundo o espacio de objeto.
En la imagen de abajo, puedes ver cómo todos los primitivos comparten el mismo material con el triplanar del mundo, para que los la textura pueda continuar con suavidad entre las partes.

Desvanecimiento de proximidad y distancia¶
Godot permite que los materiales se desvanezcan por proximidad entre ellos, además de hacerlo por la distancia con el observador. El desvanecimiento por proximidad es útil para efectos como partículas suaves o masas de agua que se mezclen de forma suave con la orilla. El desvanecimiento por distancia es útil para entradas de luz o indicadores que solo están presentes a cierta distancia.
Hay que tener en cuenta que habilitarlos también activa alpha blending, por lo que abusar de ellos durante toda una escena no suele ser una buena idea.

Prioridad de Renderización¶
El orden de renderizado de los objetos se puede cambiar, esto es útil sobre todo para los objetos transparentes (u objetos opacos que dibujan en profundidad pero no en color, como grietas en el suelo).