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.

You can add a SpatialMaterial to an object by choosing «New SpatialMaterial» in the Material property of the Inspector.

Indicadores

Los materiales spatial tienen muchos indicadores que determinan la utilización general de un material.

../../_images/spatial_material1.png

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

Use Shadow to Opacity

Lighting modifies the alpha so shadowed areas are opaque and non-shadowed areas are transparent. Useful for overlaying shadows onto a camera feed in 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.

../../_images/spatial_material26.png

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.

../../_images/spatial_material2.png

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).

../../_images/spatial_material3.png

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.

Disable Ambient Light

Hace que el objeto no reciba ningún tipo de luz ambiental que de otro modo sería lo iluminaría.

Ensure Correct Normals

Fixes normals when non-uniform scaling is used.

Vertex Color (Color de vértice)

Este menú 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.

../../_images/spatial_material4.png

Use as Albedo (Usar como Albedo)

Esta opción hace que el color del vértice se utiliza como color del albedo.

Is 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:

../../_images/spatial_material5.png

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.
../../_images/spatial_material6.png

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!
../../_images/spatial_material7.png

Blend Mode

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.
../../_images/spatial_material8.png

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).

Depth Draw Mode

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.
../../_images/material_depth_draw.png

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.

Billboard Mode

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.
../../_images/spatial_material9.png

Las opciones anteriores sólo están habilitadas para Particle Billboard.

Billboard Keep Scale

Enables scaling a mesh in billboard mode.

Grow

Hace que los vértices del objeto crezcan en la dirección señalada por sus normales:

../../_images/spatial_material10.png

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:

../../_images/spatial_material11.png

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.

../../_images/spatial_material12.png

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.

../../_images/spatial_material13.png

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.

../../_images/spatial_material14.png

Emission

Emission especifica cuánta luz es emitida por el material (hay que tener en cuenta que esto no ilumina la geometría circundante a menos que se utilicen GI Probes). Este valor se añade a la imagen final resultante y no se ve afectado por otras luces de la escena.

../../_images/spatial_material15.png

Normalmap

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 R y G se utilizan para mapas normales, con el fin de lograr una mayor compatibilidad.

../../_images/spatial_material16.png

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.

../../_images/spatial_material17.png

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

This feature is only available when using the GLES3 backend.

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.

Anisotropy

This feature is only available when using the GLES3 backend.

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.

../../_images/spatial_material18.png

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.

../../_images/spatial_material19.png

Profundidad

This feature is only available when using the GLES3 backend.

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.

../../_images/spatial_material20.png

Subsurface Scattering

This feature is only available when using the GLES3 backend.

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.

../../_images/spatial_material21.png

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.

../../_images/spatial_material22.png

Refraction

This feature is only available when using the GLES3 backend.

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.

../../_images/spatial_material23.png

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.

../../_images/spatial_material24.png

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.

../../_images/spatial_material25.png

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.

../../_images/spatial_material_proxfade.gif

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).