Saltar al contenido principal

Grafos de materiales

Los tipos de material estándar cubren casi todo lo que necesita un proyecto. Cuando no, puedes construir un material como grafo: conectas nodos y el editor los compila en un shader de verdad.

Recurre a él cuando quieras algo que un material fijo no puede expresar: una textura que se desplaza, una disolución, un holograma, agua, un color que cambia con el ángulo de visión, una bandera que ondea.

Cada nodo con sus puertos: referencia de nodos de shader — 95 nodos.

Todo material ya es un grafo

Los tipos integrados no son un sistema aparte con un grafo atornillado encima: standard, physical, toon y los demás son ellos mismos puntos dentro de este mismo espacio. Así que un material en grafo no es un ciudadano de segunda: pasa por el mismo camino, recibe la misma iluminación y funciona en móvil.

Cómo está formado un grafo

Un grafo va de las entradas, pasando por las matemáticas, hasta las salidas.

CategoríaQué vive ahí
inputUV, la normal de la superficie, tiempo, posición, texturas, qué instancia se dibuja
constnúmeros y colores fijos que escribes
matharitmética y curvas sobre números sueltos
vectorconstruir, separar, mezclar y transformar vectores y colores
lighttérminos de iluminación que moldeas tú
postnodos que muestrean el fotograma renderizado — ver efectos de pantalla
outputel aspecto real de la superficie

Las salidas de superficie

El nodo de salida es donde termina tu grafo, y sus entradas son la descripción física de la superficie:

SalidaSignifica
baseColorel color de la superficie
metallic0 para un dieléctrico, 1 para metal desnudo — rara vez intermedio
roughness0 liso como un espejo, 1 completamente mate
normalalimenta tu propia normal para añadir detalle de superficie
emissivela luz que emite la propia superficie
alphatransparencia
clearcoat · clearcoatRoughnessuna capa de laca por encima
ior · transmission · thicknessrefracción, para vidrio y líquidos

Todo lo que dejes sin conectar conserva su valor por defecto, y el compilador lo pliega: una salida que no usas no cuesta nada.

Trabajar con instancias

Existen dos nodos de entrada específicamente para objetos instanciados: instanceId te da qué copia se está dibujando, e instanceColor el tinte de esa copia.

Esto es lo que evita que mil objetos parezcan un solo objeto

Mete instanceId en una función de dispersión y cada copia recibirá su propio tinte, tamaño o fase de animación, desde una única llamada de dibujado. Un campo de hierba donde cada brizna se mece ligeramente distinto cuesta lo mismo que uno donde todas se mecen igual.

Ambos leen valores por defecto razonables en una malla normal, así que un grafo que los use nunca se rompe por emplearse en un sitio sin instanciación.

Efectos de pantalla

Un grafo que muestrea el fotograma renderizado no es un material de superficie en absoluto: es un efecto a pantalla completa aplicado sobre toda la escena. Etalonaje, viñeteados, desenfoques, líneas de barrido.

El motor lo detecta por su cuenta: usa un nodo que lea el fotograma y el grafo pasa a ser un efecto en vez de algo que pones sobre un objeto. Varios efectos en una escena se ejecutan en el orden que tú les des.

Texturas y espacio de color

Un nodo de textura muestrea un recurso de imagen. Las imágenes de color se decodifican por ti para que las matemáticas trabajen sobre valores de color reales.

Marca como datos las texturas de datos

Una textura que lleva números en vez de color —un mapa de roughness, una máscara, un mapa de alturas— tiene que marcarse como tal, o se le aplicará corrección de color y tus valores saldrán sutilmente mal. Es la causa número uno de «mi mapa de roughness no se parece en nada a lo que debería».

Un script no puede meterse dentro de un grafo

Los scripts no tienen acceso al componente de grafo, así que no puedes fijar un parámetro de grafo desde código.

Limita menos de lo que parece, porque las dos cosas que la gente quiere están cubiertas:

QuieresHazlo así
Algo que se anime solousa la entrada time dentro del grafo: latidos, desplazamientos y destellos van ahí
Algo movido por el estado del juegomueve en su lugar una ranura de material normal: un script puede escribir emissiveIntensity, color, opacity, roughness

Así, una baliza que late para siempre es un grafo que lee time; una baliza que se enciende más cuando el jugador puntúa es un script que escribe emissiveIntensity en un material estándar.

Consejos prácticos

Parte de un preajuste. Duplicar un material estándar como grafo te da un punto de partida correcto y completo. Empezar desde un lienzo vacío significa volver a deducir una iluminación que no hacía falta deducir.

Vigila lo que añades. Un grafo corre para cada píxel, en cada fotograma. Una lectura de textura es barata; un bucle no. Si los fotogramas por segundo caen tras una edición, el sospechoso es el último nodo que añadiste.

Guárdalo como recurso y todos los objetos que lo usan se actualizarán a la vez, lo que también significa un único sitio que arreglar cuando el aspecto no es el que querías.


Siguiente: Partículas — fuego, humo, chispas y polvo.