La página Tipos de datos del Material presentó las cuatro formas en que se representan los datos en el Editor de materiales. Para crear Materiales de manera efectiva, es necesario no solo conocer estos tipos de datos, sino también cómo manipularlos y controlar la forma en que la información viaja a través de tu Gráfico de material.
En este documento se discuten dos temas.
- Cómo manipular tipos de datos: Cómo combinar floats en un vector multicanal y, a la inversa, cómo aislar información de un tipo de datos más grande.
- Aritmetica del Gráfico de material: Reglas y procesos para realizar operaciones aritméticas en un Material con diferentes tipos de datos.
Cómo manipular tipos de datos
Solo porque una parte de la información se origina como un tipo de datos no significa que esto deba permanecer así. Por ejemplo, puedes combinar o Append dos Parámetros escalares (floats) en un vector de dos canales (float2) para pasarlos a una entrada que requiera datos de dos canales. Por el contrario, puedes utilizar ComponentMask para recuperar un subconjunto específico de canales de un vector más grande.
Las Expresiones materiales documentadas en esta sección brindan formas de combinar y separar datos para controlar la forma en que la información fluye a través de tu Gráfico material.
AppendVector
Una Expresión de material AppendVector combina los datos en Entrada A con los datos en Entrada B y genera un vector multicanal (float2, float3 o float4). En este ejemplo, se añaden dos Constantes para generar un float2: (1, 2).
Ejemplo de caso de uso
El nodo Append suele ser útil cuando deseas tener la capacidad de modificar dos valores de forma independiente, pero necesitas pasarlos a una entrada que requiere datos multicanal. El siguiente gráfico brinda a los artistas una forma de controlar el Diseño o la escala UV de una textura en una instancia de material, pero solo de manera uniforme.
La desventaja de este ejemplo es que el Gráfico de material solo contiene un parámetro, pero las coordenadas UV tienen dos canales. Con esta solución, no puedes controlar el ancho y el alto de la textura de forma independiente.
Puedes resolver esto utilizando un AppendVector. Crea un parámetro escalar separado para cada eje y luego pásalo al nodo Append. El nodo Append combina los dos parámetros en un float2, que luego se multiplica por las Coordenadas de textura.
Dado que Diseño X y Diseño Y se parametrizan por separado, ahora puedes controlar el ancho y la altura de la textura de forma independiente.
Append Order
La expresión AppendVector combina datos en el orden en que se adjuntan al nodo. Los datos en la Entrada B siempre se añaden al final de los datos en la Entrada A. Observa las dos imágenes a continuación.

- En la primera diapositiva, el resultado adjunto es (0.05, 0.2, 0.8), o azul claro como muestra la vista previa del nodo.
- En la segunda diapositiva, el resultado adjunto es (0.8, 0.05, 0.2), o rosa como muestra la vista previa del nodo.
AppendMany
AppendMany es una Función material que actúa de la misma manera que la expresión AppendVector, pero puedes combinar hasta cuatro valores de float o escalares separados en un vector multicanal.
Un beneficio adicional de la función AppendMany es que proporciona tres pines de salida diferentes. Esto te da acceso a algunos o todos los canales adjuntos, según lo que necesites para una situación determinada.
El nodo AppendMany solo acepta valores de float o escalares en sus entradas. Si pasa un float2, float3 o float4 al nodo AppendMany, se descartan todos los valores excepto el primero.
Máscara de componente
La Expresión de material Máscara de componente tiene el propósito opuesto a los nodos Append documentados anteriormente. En lugar de combinar datos, Máscara de componente proporciona una forma de separar los datos en sus componentes o canales.
Una Máscara de componente funciona como una puerta. Para cualquier dato conectado a la entrada, puedes elegir exactamente qué canales pueden pasar a través de la salida. La siguiente imagen muestra un Constant4Vector que contiene valores de (0, 1, 0.7, 0.5). Cuando seleccionas el nodo Máscara en el gráfico, se muestran cuatro casillas de verificación en el Panel de detalles.
Estas casillas de verificación determinan qué canales emitirán el nodo. Actualmente, ninguno está marcado, por lo que el nodo Máscara no generará ninguna información. Si intentas conectarlo a una entrada descendente, el nodo mostrará un error.
Estas casillas de verificación te brindan una forma de filtrar información y usar solo los canales que necesitas.
Supongamos que deseas utilizar el valor en el canal A para controlar la opacidad de un Material. Habilitarías el canal A marcando la casilla, luego conectarías el pin de salida de la Máscara a la Entrada de opacidad.
La Máscara de componente descarta los canales R, G y B porque no están marcados y genera solo el valor en el canal A, en este caso 0.5.
Aritmética del Gráfico de material
La segunda manera principal de manipular datos en un Gráfico de material es a través de operaciones matemáticas. Todas las operaciones aritméticas comunes están disponibles en el Editor de materiales.
Las cuatro Expresiones aritméticas de material . Lee más en la página Expresiones matemáticas de material.
El propósito básico de los nodos aritméticos debería ser relativamente evidente. Por ejemplo, si conectas valores constantes de 0,3 y 0,2 en un nodo Añadir, el nodo Añadir calcula 0,3 + 0,2 y genera un valor de 0,5 . La aritmética entre dos valores constantes es simple y directa.
Sin embargo, como se demuestra en la página de tipos de datos, la información no siempre viaja a través del Gráfico de materiales como valores float individuales. Debido a esto, es importante comprender las reglas y procesos para realizar operaciones aritméticas entre varios tipos de datos en un Material. Hay dos áreas principales de preocupación.
- No todos los tipos de datos son compatibles entre sí para operaciones aritméticas.
- Las operaciones aritméticas funcionan de manera diferente según los tipos de datos involucrados.
Tipos de datos compatibles e incompatibles
El ejemplo anterior mostró una operación de suma simple entre dos valores float, como lo sería 0,3 + 0,2 = 0,5. Esta operación funciona porque ambos valores son el mismo tipo de datos. ¿Qué sucede si se pasa un tipo de datos diferente a una de las entradas? Estos tres puntos resumen la compatibilidad entre tipos de datos:
-
La aritmética entre tipos de datos equivalentes siempre es válida. Por ejemplo, float2 + float2 devuelve un nuevo float2.
-
La aritmética entre un float y cualquier punto flotante más grande es válida. Por ejemplo, float + float3 devuelve un nuevo float3.
-
La aritmética entre dos tipos de datos no equivalentes no es válida. Por ejemplo, float2 + float3 no es válido y devuelve un error.
En otras palabras, la aritmética en dos tipos de datos diferentes es posible, pero solo si uno de los tipos de datos es un float. En el siguiente gráfico, la operación 0.3 + (1,2) es válida. El float se añade a ambos valores en el float2, y el resultado es un nuevo float2 con valores de 1.3, 2.3).
Sin embargo, la aritmética entre datos float2, float3 o float4 no equivalentes devuelve un error.
La siguiente tabla resume la compatibilidad de tipos de datos para la aritmética del Gráfico de material.
| Tipo de datos | Tipos de datos compatibles para aritmética |
|---|---|
| Float | Cualquiera |
| Float2 | Float, Float2 |
| Float3 | Float, Float3 |
| Float4 | Float, Float4 |
Reglas aritméticas entre tipos de datos
También es necesario comprender cómo se realizan los cálculos aritméticos entre diferentes tipos de datos. Los dos escenarios a continuación demuestran cómo funciona la aritmética cuando uno o ambos tipos de datos son más grandes que un punto flotante.
Aritmética entre tipos de datos equivalentes
Cuando la aritmética ocurre entre tipos de datos equivalentes (float2 + float2), cada valor en la Entrada A es operado por el valor correspondiente en la Entrada B. El siguiente ejemplo muestra la suma entre dos expresiones Constant2Vector.
Escrito en forma larga, hay dos operaciones de suma separadas. Los primeros valores de cada nodo se suman: (1 + 2). Luego se suman los segundos valores de cada nodo (3 + 3). El resultado es un nuevo float2: (2, 6).
El siguiente gráfico muestra un ejemplo aritmético para cada uno de los cuatro tipos de datos.
| Entrada A, Entrada B | Datos de entrada | Notación matemática | Datos resultantes |
|---|---|---|---|
| Float, Float | (4) / (2) | 4 / 2 = 2 | 8 |
| Float2, Float2 | (1, 3) + (2, 3) | (1 + 2), (3 + 3) | (3, 6) |
| Float3, Float3 | (3, 2, 0.5) * (2, 1, 2) | (3 x 2), (2 x 1), (0.5 x 2) | (6, 2, 1) |
| Float4, Float4 | (2, 2, 2, 3) - (1, 1, 2, 2,) | (2 - 1), (2 - 1), (2 - 2), (3 - 2) | (1, 1, 0, 1) |
Aritmética entre un Float y un Vector
Cuando ocurre aritmética entre un float y cualquier tipo de datos más grande, el float se utiliza repetidamente para cada cálculo por separado. En la imagen de abajo, una Constante y un Constant3Vector se multiplican juntos.
Como se muestra en la ilustración, el valor de Constante se multiplica por cada valor de Constant3Vector. Hay tres expresiones de multiplicación separadas: (2 3), (2 1) y (2 *2). El producto es un float3: (6, 2, 4).
No tiene relación con la multiplicación y la suma el hecho de que el punto flotante esté en la entrada A o en la entrada B, pero es importante para la división y la resta.
En la imagen de arriba, el valor en Constante (2) se resta de cada valor en Constant3Vector (6, 4, 3). Escrito en notación matemática: (6 - 2), (4 - 2), (3 - 2). El float3 resultante es (4, 2, 1).
Si tuvieras que invertir el orden de entrada, los resultados serían diferentes.
Dado que el float ahora es el número superior en el nodo de resta, cada operación aritmética se invierte: (2 - 6), (2 - 4), (2 - 3). El float3 resultante es (-4, -2, -1).
Conclusión
Los conceptos y técnicas de esta página son un componente clave en la mayor parte de la lógica del Gráfico de material que utilizarás para crear Materiales. Las páginas de referencia a continuación pueden ayudarte a aumentar la comprensión de las operaciones matemáticas y de manipulación de datos en el Editor de materiales.