La página Tipos de datos de materiales presentó las cuatro formas en que se representan los datos en el Editor de material. Para crear Materiales con eficacia, no solo es necesario conocer estos tipos de datos, sino también saber manejarlos y controlar cómo viaja la información a través del grafo del material.
En este documento se abordan dos temas.
- Manejar tipos de datos: Cómo combinar floats en un vector multicanal y, a la inversa, cómo aislar información extraída de un tipo de datos mayor.
- Aritmética del grafo de material: Reglas y procesos para ejecutar operaciones aritméticas en un material con diferentes tipos de datos.
Manejo de tipos de datos
El hecho de que una información se origine como un único tipo de datos no significa que sea invariable. Por ejemplo, puedes combinar o Anexar dos Parámetros escalares (floats) en un mismo vector de dos canales (float2) a fin de pasarlos a una entrada que requiera datos de dos canales. A la inversa, puedes utilizar una Máscara de componentes para obtener un subconjunto específico de canales de un vector mayor.
Las Expresiones materiales que se especifican en esta sección ofrecen formas de combinar y separar los datos para controlar la forma en que fluye la información a través de tu grafo de material.
AnexarVector
Una expresión material AnexarVector combina los datos de la Entrada A con los datos de la Entrada B y da como resultado un vector multicanal (float2, float3, o float4). En este ejemplo, se anexan dos constantes para obtener un float2: (1, 2).
Ejemplo de uso
El nodo Anexar suele ser útil cuando quieres poder modificar dos valores de forma independiente, pero es necesario pasarlos a una entrada que requiere datos multicanal. El gráfico siguiente ofrece a los creadores una forma de controlar el mosaico o la Escala UV de una textura en una instancia de Material, pero solo de manera uniforme.
El punto débil de este ejemplo es que el Grafo del material solo contiene un parámetro, mientras que las Coordenadas UV tienen dos canales. Con esta solución no es posible controlar la anchura y la altura de la textura de forma independiente.
Para solucionarlo, puedes usar AnexarVector. Crea un Parámetro escalar aparte para cada eje y luego trasládalo al nodo Anexar. El nodo Anexar combina los dos parámetros en un float2, que luego se multiplica por las Coordenadas de textura.
Como Mosaico X y Mosaico Y se parametrizan por separado, ahora puedes controlar la anchura y la altura de la textura de forma independiente.
Orden al anexar
La expresión AnexarVector combina los datos en el orden en que se adjuntan al nodo. Los datos de la Entrada B siempre se anexan al final de los datos de la Entrada A. Observa las dos imágenes siguientes.

- En la primera diapositiva, el resultado anexado es (0.05, 0.2, 0.8), o azul claro, como muestra la vista previa del nodo.
- En la segunda diapositiva, el resultado anexado es (0.8, 0.05, 0.2), o rosa, como muestra la vista previa del nodo.
AnexarMuchos
AnexarMuchos es una Función material que funciona de la misma manera que la expresión AnexarVector, pero permite combinar hasta cuatro valores float/escalares separados en un vector multicanal.
Una ventaja añadida de la función AnexarMuchos es que proporciona tres pines de salida diferentes. Esta opción te ofrece acceso a algunos o todos los canales anexados, en función de lo que necesites en una situación determinada.
El nodo AnexarMuchos solo acepta entradas de valores float/escalares. Si pasas un float2, float3 o float4 al nodo AnexarMuchos, se descartarán todos los valores excepto el primero.
Máscara de componentes
La expresión material Máscara de componentes tiene una finalidad opuesta a la de los nodos Anexar que hemos visto antes. En lugar de combinar datos, la Máscara de componentes ofrece una forma de separar los datos en sus partes componentes o canales.
Una Máscara de componentes funciona como una puerta. Para cualquier dato conectado a su entrada, puedes elegir exactamente qué canales pueden pasar a la salida. La imagen siguiente muestra una Constante4Vector que contiene los valores (0, 1, 0.7, 0.5). Al seleccionar el nodo Máscara en el grafo, aparecen cuatro casillas de verificación en el Panel de detalles.
Estas casillas de verificación determinan qué canales de salida utilizará el nodo. Actualmente no hay ninguna marcada, por lo que el nodo de Máscara no producirá ninguna información. Si intentas conectarlo a una entrada descendente, el nodo arrojará un error.
Estas casillas de verificación te permiten filtrar la información y utilizar solo los canales que necesitas.
Supongamos que quieres utilizar el valor del canal A para controlar la opacidad de un Material. Tendrías que activar el canal A marcando la casilla de verificación y luego conectar el pin de salida de la Máscara a la Entrada de opacidad.
La Máscara de componentes descarta los canales R, G, y B porque no están seleccionados y produce solo el valor del canal A; en este caso, 0.5.
Aritmética del grafo de material
La segunda forma principal de manejar datos en un grafo de material es mediante operaciones matemáticas. Todas las operaciones aritméticas habituales están disponibles en el Editor de material.
Las cuatro Expresiones materiales aritméticas. Puedes consultar más información en la página Expresiones materiales matemáticas.
La finalidad básica de los nodos aritméticos debería ser relativamente evidente. Por ejemplo, si envías valores constantes de 0.3 y 0.2 a un nodo Añadir, el nodo Añadir calcula 0.3 + 0.2 y da como resultado un valor de 0.5. La aritmética entre dos valores constantes es sencilla 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 grafo de material como valores float individuales. Por ello, es importante que comprendas las reglas y los procesos para ejecutar operaciones aritméticas entre diversos tipos de datos en un Material. Hay dos temas de preocupación principales.
- No todos los tipos de datos son compatibles entre sí para las operaciones aritméticas.
- Las operaciones aritméticas funcionan de forma diferente según los tipos de datos de que se trate.
Tipos de datos compatibles e incompatibles
El ejemplo anterior mostraba una sencilla operación de suma entre dos valores float: 0.3 + 0.2 = 0.5. Esta operación funciona porque ambos valores utilizan el mismo tipo de datos. ¿Qué ocurriría si se introdujera un tipo de datos diferente en 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 da como resultado un nuevo float2.
-
La aritmética entre un float y cualquier float mayor es válida. Por ejemplo, float + float3 da como resultado 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 arroja un error.
En otras palabras, la aritmética entre dos tipos de datos diferentes es posible, pero solo si uno de los tipos de datos es un float. En el gráfico siguiente, la operación 0.3 + (1,2) es válida. El float se añade a ambos valores del float2, y el resultado es un nuevo float2 con valores de 1.3, 2.3).
Sin embargo, la aritmética entre datos no equivalentes float2, float3 o float4 arroja un error.
La siguiente tabla resume la compatibilidad de tipos de datos para la aritmética del grafo de material.
| Tipo de datos | Tipos de datos compatibles para la 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 distintos tipos de datos. Las dos situaciones siguientes demuestran cómo funciona la aritmética cuando uno o ambos tipos de datos son mayores que un float.
Aritmética entre tipos de datos equivalentes
Cuando la aritmética tiene lugar entre tipos de datos equivalentes (float2 + float2, por ejemplo), se opera en cada valor de la Entrada A con el valor correspondiente de la Entrada B. El ejemplo siguiente muestra la suma entre dos expresiones Constante2Vector.
Expresadas en forma expandida, hay dos operaciones de suma separadas. Se suman los primeros valores de cada nodo: (1 + 2). A continuación, se suman los segundos valores de cada nodo (3 + 3). El resultado es un nuevo float2: (2, 6).
El siguiente recuadro 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 se ejecuta una operación aritmética entre un float y cualquier tipo de dato mayor, se utiliza el float repetidamente para cada cálculo por separado. En la imagen siguiente, se multiplica una Constante por una Constante3Vector.
Como se muestra en la ilustración, el valor de la Constante se multiplica por cada valor de la Constante3Vector. Hay tres expresiones de multiplicación separadas: (2 3), (2 1) y (2 * 2). El producto es un float3: (6, 2, 4).
El hecho de que el float esté en la Entrada A o en la Entrada B no influye en la multiplicación ni en la suma, pero sí en la división y la resta.
En la imagen anterior, el valor de la Constante (2) se resta de cada valor de la Constante3Vector (6, 4, 3). En notación matemática: (6 - 2), (4 - 2), (3 - 2). El float3 resultante es (4, 2, 1).
Si se invirtiera el orden de entrada, los resultados serían diferentes.
Dado que el float es ahora el número superior en el nodo de resta, todas las operaciones aritméticas se invierten: (2 - 6), (2 - 4), (2 - 3). El float3 resultante es (-4, -2, -1).
Conclusión
Los conceptos y técnicas expuestos en esta página son un componente clave en la mayoría de la lógica de grafos de material que utilizarás para crear Materiales. Las páginas de referencia enlazadas a continuación pueden servirte para comprender mejor las operaciones matemáticas y de manejo de datos en el Editor de material.