Funciones de materiales permiten empaquetar partes de un Gráfico de materiales en un recurso reutilizable que puedes compartir a una biblioteca e insertar fácilmente en otros materiales. Su propósito es optimizar la creación del Material al brindar acceso instantáneo a las redes de nodos de Material más utilizadas.
Por ejemplo, la función Blend_Overlay que se muestra a continuación contiene toda la red de Expresión de material que se muestra en el lado derecho de la imagen. En lugar de construir esta red de nodos una y otra vez, puedes insertarla directamente en el gráfico desde la biblioteca de Funciones de materiales.
Las funciones se editan en el Editor de materiales como un Material normal, pero con algunas restricciones sobre los nodos que puedes utilizar. Cuando se utilizan correctamente, pueden reducir la redundancia del Material, lo que a su vez reduce el esfuerzo de mantenimiento del artista. Las Funciones de materiales mantienen sincronizadas las expresiones duplicadas, evitando los errores inevitables que surgen cuando se pierde un duplicado durante una modificación.
Las Funciones de materiales son una clase de recurso distinta en el Explorador de contenido. Sus gráficos son similares a los de Materiales, pero difieren en un aspecto importante. En lugar de un nodo de Material principal, las Funciones de materiales tienen nodos FunctionOutput, que aparecen como pines de salida en el nodo de Función de materiales final cuando se utiliza en un Material.
Puede ser útil pensar una Función de materiales como una carcasa de un proyecto electrónico. Puedes añadir tantas entradas y salidas como consideres necesarias. El corazón de la función es la red de Expresión de material entre esas entradas y salidas. Este ejemplo toma dos capas y las fusiona como una Fusión de pantalla de Photoshop. La función abstrae los detalles de un artista, por lo que no es necesario que conozcan los detalles técnicos de una fusión de pantalla para utilizar una operación de fusión de pantalla.
Nodos de entrada (1) y salida (2) de la Función de material.
Como puedes ver arriba, lo que suceda entre la entrada y la salida depende completamente de ti y será definido por cualquier red de nodos de la Expresión de material estándar. Una vez que insertes una Función de materiales en un Material, solo verás el nodo de Llamada de función de material de con sus entradas y salidas. El resto del gráfico está oculto dentro de la función.
Biblioteca de funciones materiales
Cuando termines la Función de material, puedes publicarla en la Biblioteca de funciones materiales para facilitar el acceso durante la creación del material. La Biblioteca de funciones de materiales se encuentra dentro de la Paleta en el lado derecho del Editor de materiales. La Paleta contiene una lista categorizada y filtrable de las Funciones de materiales disponibles. Esta lista se completa con cualquier función cargada, pero también con cualquier Funciones de materiales predeterminadas que se encuentren en la Base de datos del navegador de contenido.
Puedes pasar el cursor sobre estas entradas para ver su Descripción como texto emergente, o arrastrar y soltar alguna en el Material.
Para que una Función de materiales aparezca en la Biblioteca de funciones materiales, se debe marcar la propiedad Exponer en biblioteca. En el Editor de función de material, deselecciona todos los nodos haciendo clic en un espacio vacío en el gráfico para mostrar las propiedades base de la Función de material. La opción Exponer a biblioteca se encuentra en el panel Detalles.
Para obtener una lista completa de las funciones existentes dentro de la Biblioteca de funciones materiales de forma predeterminada, consulta la [Referencia de funciones materiales] (designing-visuals-rendering-and-graphics/materials/material-functions/reference).
Nodos relacionados a funciones
A continuación se muestran los nodos de Expresión de material que se relacionan con las Funciones de materiales, junto con su propósito:
- MaterialFunctionCall - Permite utilizar una función externa de otro Material o función. Los nodos de entrada y salida de la función externa se convierten en entradas y salidas del nodo de llamada de la función.
- FunctionInput - Solo se puede colocar en una Función de materiales, donde define uno de los pines de entrada de la función.
- FunctionOutput - Solo se puede colocar en una Función de materiales, donde define uno de los pines de salida de la función.
- TextureObject - Útil para proporcionar una textura predeterminada para una entrada de función de textura dentro de una función. Este nodo en realidad no toma muestras de la textura, por lo que debe utilizarse junto con un nodo TextureSample.
- TextureObjectParameter - Define un parámetro de textura y genera el objeto de textura, utilizado en Materiales que llaman a una función con entradas de textura. Este nodo en realidad no toma muestras de la textura, por lo que debe utilizarse junto con un nodo TextureSample.
- StaticSwitch - Realiza una elección de tiempo de compilación entre dos entradas, según el valor de la entrada.
- StaticBool - Útil para proporcionar un valor binario predeterminado para una entrada de función binaria estática dentro de una función. Este nodo no cambia entre nada, por lo que debe utilizarse en conjunto con un nodo StaticSwitch.
- StaticBoolParameter - Define un parámetro binario estático y genera el valor binario estático que se utiliza en Materiales que llaman a una función con entradas binarias estáticas. Este nodo no cambia entre nada, por lo que debe utilizarse junto con un nodo StaticSwitch.
Entrada y salida
Dado que las funciones materiales son redes de nodos encapsulados, depende del usuario asegurarse de que los datos puedan entrar y salir de ellas. Esto se maneja a través de los nodos FunctionInput y FunctionOutput. Comprender estos nodos es fundamental para utilizar las Funciones de materiales.
Dentro de la propia Función de material, los nodos FunctionInput y FunctionOutput aparecen así:
Cuando la Función de materiales se utiliza en un Material, los nodos FunctionInput y FunctionOutput aparecen como pines de entrada y salida en el nodo de función de material:
Nodos FunctionInput
Como se indicó, los nodos FunctionInput sirven como puerta a través de la cual los datos ingresan a una Función de material. Una función determinada puede tener cualquier número de estos nodos de entrada, cada uno de los cuales se corresponde con un pin de entrada en el nodo de Llamada de función de material.
Los nodos FunctionInput tienen las siguientes propiedades y pines de datos:
| Elemento | Descripción |
|---|---|
| Propiedades | |
| Nombre de entrada | El nombre de la entrada, que es visible como un pin de salida en la Función de materiales cuando se utiliza dentro de un Material. |
| Descripción | Una descripción de la entrada, que es visible como texto emergente cuando pasa el mouse sobre el pin de entrada correspondiente en el nodo de la Función de materiales. |
| Tipo de salida | Esto define qué tipo de datos acepta la entrada. Ver Tipos de entrada debajo. |
| Valor de vista previa | Esto sirve como un medio de prueba y una forma de ayudar a visualizar lo que la función está haciendo durante el proceso de construcción. Cualquier valor ingresado aquí se usa como si se pasara desde una entrada fuera de la función. |
| Usar valor de vista previa como predeterminado | Esta casilla de verificación permite que el conjunto de datos en el valor de vista previa actúe como el valor predeterminado. Esto es útil si no deseas obligar al usuario a proporcionar una entrada en la función para este valor. |
| Ordenar prioridad | Este número se utiliza para controlar el orden en que se muestran los pines de entrada en el nodo de la Función de material. El orden es de menor a mayor. |
| Pines de entrada | |
| Vista previa | Los datos pasados a esta entrada reemplazan la propiedad Valor de vista previa. Al igual que con tu propiedad asociada, esto es útil para probar la función durante la construcción y configurar valores predeterminados. |
| Pines de salida | |
| (Unlabled) | This provides the output for the incoming data that will be processed by the function. |
Nodos FunctionOutput
Un nodo FunctionOutput proporciona los medios por los cuales los datos dentro de una Función de materiales salen de la función para su uso posterior en un Material. En otras palabras, genera el resultado final de la función Material. Al igual que con los nodos FunctionInput, una función puede tener cualquier número de nodos de salida, lo que lleva a cualquier número de pines de salida potenciales.
Cuando se selecciona un nodo FunctionOutput, se puede acceder a las siguientes propiedades en el panel Detalles.
| Elemento | Descripción |
|---|---|
| Salida de Función de expresión de material | |
| Nombre de salida | El nombre de la salida, que es visible como un pin de salida en la Función de materiales cuando se usa dentro de un Material. |
| Descripción | Una descripción de la salida, que se muestra como texto emergente cuando pasa el mouse sobre el pin de salida correspondiente en el nodo de la Función de materiales. |
| Expresión material | |
| Ordenar prioridad | Este número se utiliza para controlar el orden en que se muestran los pines de salida en el nodo de la Función de material. El orden es de menor a mayor. |
| Descripción | Este campo de descripción define el texto en la Burbuja de comentarios del nodo. Esto solo es visible dentro del editor de Función de material. |
| Pines de salida | |
| (Unlabled) | This provides the output for the incoming data that will be processed by the function. |
Tipos de entrada
Las entradas tienen un tipo específico requeridas de cualquier expresión conectada a ellas. Para configurar el tipo de entrada, seleccione un nodo FunctionInput en el editor de Función de materiales y usa el menú desplegable Tipo de entrada para seleccionar una opción.
Cuando se llama en un Material, el tipo de entrada se muestra como una abreviatura junto a los conectores de entrada. En este caso, ambas entradas eran de Vector3, por lo que se muestra V3. Cualquier cosa conectada a una entrada cuando se utiliza en un Material debe ser convertible al tipo de entrada correcto, o recibirá un error.
A continuación se muestran los tipos de entrada disponibles y sus abreviaturas asociadas:
| Tipo de entrada | Abreviatura |
|---|---|
| Escalar | S |
| Vector2 | V2 |
| Vector3 | V3 |
| Vector4 | V4 |
| Texture2D | T2D |
| TextureCube | TCube |
| Texture2DArray | T2dArr |
| VolumeTexture | TVol |
| StaticBool | B |
| MaterialAttributes | MA |
| TextureExternal | TExt |
Common Properties
Mientras editas una Función de material, si deseleccionas todos los nodos o haces clic en el fondo del Gráfico de material, las propiedades básicas de la función estarán visibles en el panel Detalles.
| Elemento | Descripción |
|---|---|
| Propiedades | |
| Descripción | Esta descripción se mostrará como texto emergente cuando los usuarios pasen el mouse sobre la Función de materiales en la paleta, o cuando pasen el mouse sobre el cuerpo del nodo de Llamada de función dentro del Editor de materiales. |
| Exponer a la biblioteca | Si esta casilla está marcada, la Función de materiales aparecerá dentro de la lista de Funciones de materiales dentro de la paleta del Editor de materiales para que puedas insertarla en Materiales. Es posible que debas reiniciar el editor para que aparezca una nueva función. |
| Categorías de la biblioteca | Esta matriz contiene todas las categorías de la pestaña Funciones de materiales en las que aparecerá esta función. |
Vista previa
Al editar una Función de material, la ventana de vista previa muestra el nodo que se estás previsualizando. Puedes hacer clic con el botón derecho en cualquier nodo y elegir Comenzar vista previa del nodo para obtener una vista previa de los resultados de la red del Material hasta ese punto.
La mayoría de las veces querrás obtener una vista previa de la salida de la función o el resultado final de la Función de material. El nodo de salida Función de materiales se previsualiza de forma predeterminada.
Vista previa de la entrada de la función
Los nodos de entrada de la función tienen algunas opciones para especificar valores de vista previa, ya que no conocen los valores reales que los artistas usarán dentro del material. Cada entrada tiene un Valor de vista previa incorporado que puedes utilizar para mostrar una constante para los tipos de entrada de un float. Las entradas de la función también tienen un conector de "Vista previa" que te permite anular el valor integrado con cualquier valor que coincida con el tipo de entrada. En este ejemplo, las muestras de textura se utilizan para proporcionar un valor de vista previa para las dos entradas de Vector3.
Ten en cuenta que la entrada tiene una opción en el panel de detalles para Utilizar el valor de vista previa como predeterminado. Cuando está habilitado, el valor de vista previa se usa cada vez que se llama a la función en un Material y no hay nada conectado a esa entrada. El valor de vista previa actúa como respaldo y evita errores de compilación cuando no hay nada conectado a la entrada. Esto hace que la entrada sea una entrada opcional, por lo que se dibuja en gris.
Parámetros
Puedes usar [Parámetros] (designing-visuals-rendering-and-graphics/materials/material-instances) en una Función de materiales como lo harías en un Material normal. Estos parámetros se pasan directamente a cualquier Material para su utilización. Hay algunas ligeras diferencias en el procedimiento para usar los parámetros de textura.
Parámetros de textura
Para utlizar un parámetro de textura dentro de una Función de material, crea un nodo FunctionInput* y cambia el tipo de datos a Texture2D. Conéctalo al pin de anulación del objeto de textura en un nodo Muestra de textura**.
Cuando usa esa Función de materiales en un Material, coloca un nodo TextureObjectParameter y conéctalo al pin de entrada Texture2D en la Función de material.
Parámetro booleano estático
De manera similar, para los parámetros del interruptor estático, crea un FunctionInput y cambia el tipo de entrada a StaticBool. Conéctalo a un nodo StaticSwitch:
En el Material que utiliza la función, coloca un nodo StaticBoolParameter y conéctalo a la entrada que acepta un Static Bool (Habilitar Tiling en este ejemplo).
Organización
Por diseño, las Funciones de materiales a menudo son utilizadas por muchos artistas y compañeros de equipo que no participaron en la creación de la función en sí. Por lo tanto, es importante proporcionar una buena documentación de lo que hacen las funciones y qué valores se necesitan para sus entradas y salidas. Por esta razón, las funciones tienen varios campos de documentación además del nombre de la función y los nombres de entrada/salida:
Descripción de la función
Las Funciones de materiales tienen un campo Descripción donde puedes documentar lo que hace la función. Para agregar una descripción, haz clic en un área vacía en el Gráfico de materiales mientras editas una Función de material. Esto mostrará las propiedades de la función en el panel Detalles, donde puedes ingresar una descripción en el campo.
El texto de descripción se muestra como texto emergente cuando pasas el mouse sobre el nodo de Llamada de función de material dentro de un Gráfico de material.
Descripciones de entrada y salida
Puedes agregar un nombre y una descripción para los pines de entrada y salida en tu Función de material. Mientras editas una función de material, selecciona un nodo de entrada o salida en el Gráfico de material. En el panel de detalles, completa los campos Nombre de entrada y Descripción.
Cuando esta Función de materiales se usa en un Material, cada pin de entrada muestra el nombre que ingresaste, y la descripción se muestra como información sobre herramientas cuando pasas el mouse sobre la entrada.
Mientras editas una Función de material, todas las herramientas para organizar y documentar el Gráfico de material están disponibles. Lee aquí sobre organizar un Gráfico de materiales.
Propagación
Cuando editas una Función de materiales y haces clic en el botón Guardar para volver a compilar y aplicar los cambios, la nueva versión se propaga a cualquier Material cargado o función que haga referencia a esta Función de material. Cualquier material descargado que haga referencia a la función se actualizará con los cambios la próxima vez que se cargue.
¡Cuando se elimina una entrada o salida de una función y los cambios se propagan, se romperán todos los enlaces a estos conectores eliminados en Materiales que usan la función! Es importante tener esto en cuenta antes de volver a compilar una Función material, porque la propagación no se puede deshacer. Cuantos más materiales se utilicen en una función, mayor será el potencial de rotura, así que ten cuidado.
Todos los materiales cargados que usan la función se marcarán como sucios cuando se propague el cambio de función, lo que se puede utilizar para ver qué paquetes se pueden volver a guardar para evitar mayores tiempos de carga. Puede encontrar todos los materiales cargados que utilizan una función haciendo clic derecho en el Explorador de contenido y eligiendo Buscar materiales utilizando esto.
Cómo anidar funciones
Puedes anidar funciones de Material dentro de otras funciones y encadenarlas arbitrariamente. La única advertencia es que las Funciones de materiales no se pueden anidar de tal manera que creen una dependencia circular.
Errores de compilación
Si hay errores dentro de una Función de material, se genera un cuadro de diálogo de error de compilación cuando intentas compilar el material. También aparece un mensaje de error rojo en la parte superior de la Función de materiales que no se compiló correctamente. Puedes pasar el mouse sobre el mensaje de error para ver un texto emergente que describe el error de compilación. En este ejemplo, la Función de materiales no está recibiendo datos en ninguna de sus entradas, lo que hace que la compilación falle.
Puedes evitar los errores anteriores proporcionando valores de vista previa para tus entradas y luego activando la propiedad Usar valor de vista previa como predeterminado de cada entrada. Sin embargo, esta práctica puede servir como un arma de doble filo, ya que no habrá una alerta muy obvia (como un mensaje de error) para recordarte que has dejado una entrada desconectada.
Funciones de materiales predeterminadas
Unreal Engine incluye varias docenas de funciones de material predeterminadas prefabricadas. Se puede acceder a estas desde la Paleta del editor de materiales, o el menú de búsqueda del botón derecho.
Si desea editar una de las Funciones de materiales predeterminadas, puedes encontrar los recursos en el Explorador de contenido dentro de la carpeta Motor > Contenido > Funciones.
Si se realizan y guardan cambios en una Función material predeterminada, esos cambios existirán en todas las instancias de la función. Por este motivo, se recomienda enfáticamente que hagas una copia duplicada de las funciones predeterminadas cuando desees realizar cambios.
Para obtener más información sobre las Funciones de materiales predeterminadas incluidas con Unreal Engine, consulta la [Referencia de Funciones de materiales] (designing-visuals-rendering-and-graphics/materials/material-functions/reference).