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.
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ía | Qué vive ahí |
|---|---|
| input | UV, la normal de la superficie, tiempo, posición, texturas, qué instancia se dibuja |
| const | números y colores fijos que escribes |
| math | aritmética y curvas sobre números sueltos |
| vector | construir, separar, mezclar y transformar vectores y colores |
| light | términos de iluminación que moldeas tú |
| post | nodos que muestrean el fotograma renderizado — ver efectos de pantalla |
| output | el 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:
| Salida | Significa |
|---|---|
baseColor | el color de la superficie |
metallic | 0 para un dieléctrico, 1 para metal desnudo — rara vez intermedio |
roughness | 0 liso como un espejo, 1 completamente mate |
normal | alimenta tu propia normal para añadir detalle de superficie |
emissive | la luz que emite la propia superficie |
alpha | transparencia |
clearcoat · clearcoatRoughness | una capa de laca por encima |
ior · transmission · thickness | refracció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.
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.
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».
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:
| Quieres | Hazlo así |
|---|---|
| Algo que se anime solo | usa la entrada time dentro del grafo: latidos, desplazamientos y destellos van ahí |
| Algo movido por el estado del juego | mueve 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.