La instanciación de materiales en Unreal Engine se usa para cambiar la apariencia de un material sin incurrir en una recompilación costosa del material.
Mientras que un material típico no se puede cambiar sin recompilar (algo que debe suceder antes del juego), un material parametrizado se puede editar en una instancia de material sin esa recompilación. Esto tiene numerosas ventajas para el flujo de trabajo y puede mejorar el rendimiento de los materiales.
Una instancia de material se abre en el editor de instancias de material. Puedes personalizar los atributos enumerados en Grupos de parámetros de esta interfaz.
Ciertos tipos de materiales instanciados pueden incluso cambiar durante el juego como respuesta a eventos en el juego (p. ej., un árbol cuyo material se ennegrece y se carboniza mientras se quema). Esto permite una flexibilidad visual extrema en los elementos artísticos.
Herencia de material
La relación entre materiales e instancias de material es una relación jerárquica objeto primario-objeto secundario. Una instancia de material hereda todos sus atributos del material principal (o maestro). Por ejemplo, este es el gráfico de materiales para una de las utilerías de silla encontrada en el contenido de inicio:
Todas las instancias de material creadas de M_Chair heredan todos los atributos del gráfico que se muestra arriba.
Observa las convenciones de nomenclatura utilizadas anteriormente. Esta es una buena práctica que puedes adoptar para identificar con facilidad los materiales principales y las instancias de material en el explorador de contenido.
- El prefijo M_ denota un material principal, como en M_Chair.
- El prefijo MI_ denota una instancia de material, como en los dos ejemplos que se ilustran a la derecha.
Debido a que heredan sus atributos del material principal, las instancias de material recién creadas aparecen idénticas para el material principal cuando se aplican a objetos en el nivel. En la imagen siguiente, la silla de la izquierda tiene aplicado el material principal, mientras que las sillas del centro y de la derecha usan instancias de material sin cambios.
El beneficio de flujo de trabajo clave de las instancias de material es que puedes personalizarlas rápidamente en el editor de instancias de material sin jamás editar el gráfico de nodos o recompilar el material.
En el video a continuación, las dos instancias de material se abren en el explorador de contenido y se editan en el editor de instancias de material. Los cambios aparecen de inmediato en la ventanilla principal, mientras que para un material estándar, la recompilación podría tardar un minuto, según la complejidad.
Parametrización de materiales
Es importante saber que no puedes editar cada característica única de una instancia de material de forma predeterminada. Para hacer que los atributos de material sean editables en una instancia, debes designarlos como parámetros en el material principal. Esto se denomina parametrización del material.
Un parámetro se crea como cualquier otro nodo de datos en el editor de materiales y contiene la misma información que su contraparte no parametrizada.
Por ejemplo, una expresión Constante contiene un único valor de punto flotante, y con frecuencia se usa para controlar las entradas de material, como Rugosidad y Metálico. La versión parametrizada de este nodo se denomina Parámetro escalar.
Expresión Constante del material (1) y parámetro escalar (2).
Ten en cuenta que el parámetro escalar también se convierte en un valor con nombre que sirve como conducto para enviar valores de datos a la instancia de material. Es importante que asignes a cada parámetro un nombre descriptivo exclusivo en el panel Detalles. Selecciona el nodo en el gráfico de materiales para acceder a sus propiedades en el panel Detalles.
En el ejemplo anterior, el nombre del parámetro es Rugosidad y tiene un valor predeterminado de 0,25.
En el material parametrizado simple que se muestra debajo, un parámetro vectorial está conectado a la entrada Color base, mientras que los parámetros escalares están conectados a Metálico y Rugosidad.
Para ilustrar mejor la idea de parametrización, también se pasa un valor de constante de 0,5 a la entrada Especular.
Cuando se abre en el editor de instancias de material, los tres parámetros están expuestos y se pueden editar, pero no sucede lo mismo con la constante. Los valores que deseas exponer a los artistas deben ser parámetros, y los valores que deseas que nadie cambie deben permanecer como constantes.
Los parámetros para Color base, Metálico y Rugosidad son editables en el editor de instancias de material, mientras que el valor de la constante no se expone a los artistas.
Tipos de parámetros
Los parámetros se pueden usar en cualquier lugar del gráfico de materiales para impulsar un amplio rango de efectos de materiales.
Algunos de los tipos de parámetros clave se documentan a continuación, y aquí se proporciona una lista completa de Expresiones de parámetros.
Parámetros escalares
Un parámetro escalar es un parámetro que contiene un único valor de punto flotante. Los parámetros escalares pueden impulsar cualquier efecto de acuerdo con valores únicos, como se ve en los ejemplos Rugosidad y Metálico anteriores.
Los parámetros escalares también se usan a menudo para controlar el factor de multiplicación de un atributo.
En este gráfico, un parámetro escalar se multiplica por un color sólido, y el resultado se conecta a la entrada Color emisivo. El valor del parámetro escalar controla la fuerza del efecto emisivo. Los valores más altos aumentan el brillo de la emisión.
Parámetros vectoriales
Un parámetro vectorial es un parámetro que contiene un valor de vector de 4 canales o de cuatro valores de punto flotante.
En general, estos se usan para proporcionar colores configurables, pero también podrían usarse para representar datos posicionales o impulsar algún efecto que requiera varios valores.
Parámetros de textura
El parámetro de textura de uso más común es TextureSampleParameter2D, que permite cambiar texturas dentro de una instancia de material.
Hay varios tipos adicionales de parámetros de textura disponibles. Cada uno es específico del tipo de textura que acepta o la manera en la que se usa. Por ejemplo:
- TextureSampleParameterCube acepta TextureCube o mapa de cubo.
- TextureSampleParameterFlipbook acepta FlipbookTexture.
- TextureSampleParameterMeshSubUV acepta una instancia de Texture2D que se usa para efectos sub-uv con un emisor de mallas.
- TextureSampleParameterMeshSubUV acepta una instancia de Texture2D que se usa para efectos de fusión sub-uv con un emisor de mallas.
Consulta Referencia de expresión de material para una lista completa de parámetros de textura.
Parámetros estáticos
Los parámetros estáticos se aplican en tiempo de compilación, así que se pueden editar en el editor de instancias de material, pero no desde el script ni en tiempo de ejecución.
Se pueden usar para enmascarar ramas de un material. Por ejemplo, un parámetro StaticSwitch toma dos entradas. Muestra los resultados del primer valor si el valor del parámetro es true, y del segundo si es false. Esto produce código más óptimo, ya que la rama que se enmascaró con un parámetro estático no se ejecuta en tiempo de ejecución.
Consulta Parámetro de interruptor estático y Parámetro de máscara de componente estático para obtener información sobre los tipos de parámetros estáticos específicos.
Un nuevo material se compila para cada combinación de parámetros estáticos en el material base que se usan en las instancias.
Esto puede llevar a una cantidad excesiva de sombreadores que deben realizar la compilación. Prueba minimizar la cantidad de parámetros estáticos en el material y la cantidad de permutaciones de esos parámetros estáticos que en realidad se usan.
Constante y dinámica de instancia
Hay dos tipos de instancias de material disponibles en Unreal Engine:
- Constante de instancia de material: se calcula solo antes del tiempo de ejecución.
- Dinámica de instancia de material: se puede calcular (y editar) en tiempo de ejecución.
Constante de instancia de material
Una constante de instancia de material es un material instanciado que se calcula una sola vez, antes del tiempo de ejecución. Esto significa que no puede cambiar durante el juego. Aunque permanece constante en todo el juego, sigue teniendo una ventaja de rendimiento porque no requiere compilación.
Por ejemplo, si el juego tiene una variedad de autos con distintos trabajos de pintura cuyos colores no cambiarán durante el juego, la práctica recomendada es crear un material maestro que represente los aspectos básicos de una pintura de auto genérica. Luego, hay que crear las constantes de instancia de material para representar las variaciones en distintos tipos de autos, como diferentes colores, niveles variados de rugosidad, etc. Este enfoque se demostró con el ejemplo de la silla antes en esta página.
Las constantes de instancia de material se crean en el explorador de contenido y se editan desde el editor de instancias de material.
Dinámica de instancia de material
Una dinámica de instancia de material (MID) es un material instanciado que se puede calcular durante el juego (en tiempo de ejecución). Esto significa que a medida que juegas, puedes usar script (ya sea código compilado o script visual de blueprint) para cambiar los parámetros del material, y así modificar el material en todo el juego. Las posibles aplicaciones para esto son interminables, desde mostrar distintos niveles de daño a cambiar colores de pintura en una visualización arquitectónica.
Las MID se crean dentro de script, ya sea desde un material parametrizado o una constante de instancia de material. En el blueprint, tomaríamos un material determinado que tuviera propiedades parametrizadas y lo suministraríamos a través del nodo Crear instancia de material dinámica. El resultado de ese nodo luego se aplica al objeto en cuestión con el nodo Establecer material. Esto produce un material nuevo que se puede cambiar durante el juego.
Creación y uso de instancias de material
La creación y el uso de instancias de material es un proceso de dos pasos. Primero debes crear un material principal que use expresiones de parámetro para las propiedades que deseas anular en una instancia de material. Luego puedes crear una instancia de material y personalizar las propiedades en el editor de instancias de material.
Para aprender cómo crear un material parametrizado y usarlo en una instancia de material, lee aquí: Creación y uso de instancias de material.