A la hora de crear recursos en 3D, es posible que te resulte necesario saber definir distintos tipos de superficies dentro de un mismo material. Una forma simple y económica de hacerlo es utilizar una máscara de textura, que define qué partes de una superficie deben estar afectadas por qué parte de un material.
Este tutorial explica cómo se puede utilizar el enmascarado de texturas en los materiales de Unreal Engine.
Máscaras de texturas
Una máscara de textura es una textura de escala de grises o un canal único (R, G, B o A) de una textura, que se utiliza para limitar el área de un efecto dentro de un material.
Con frecuencia, las máscaras están dentro de un solo canal de otra textura, como el canal alfa del mapa difuso o el mapa normal. En otros casos, con frecuencia, un único archivo de imagen contiene las máscaras de Rugosidad, Metálico y Oclusión ambiental, de modo que cada una de ellas ocupa un solo canal.
A esto se le llama empaquetado de canales y es una buena forma de mejorar el rendimiento de los canales reduciendo el número de muestras de textura que el material necesita. Técnicamente, es posible pensar en cualquier canal de cualquier textura como una máscara de textura y utilizarlo como tal.
Este es un ejemplo del aspecto de la máscara de textura de la malla estática SM_Chair disponible en el contenido de inicio.
De hecho, este archivo de imagen contiene una máscara distinta en blanco y negro en cada uno de los cuatro canales de colores (RGBA).
Cómo crear una máscara de textura
Es posible crear una máscara de textura en cualquier programa de manipulación de imágenes en 2D. También se puede hacer bake a las máscaras directamente desde una geometría en tu programa primario de creación de contenido o con una herramienta de texturizado específica, como Marmoset Toolbag, Xnormal o Substance Painter/Designer.
Al crear máscaras a mano, por lo general se empieza por una imagen que muestra el diseño UV de tu malla. En este ejemplo, la intención es enmascarar los cojines del asiento. Los UV correspondientes están resaltados en la imagen siguiente. Para enmascarar una parte específica del modelo, es necesario pintar esa zona de la imagen en color blanco puro y dejar el resto en color negro.
Como se muestra arriba, esto permite aplicar propiedades de superficie específicas en la región enmascarada. En este caso, se utiliza la máscara para aplicar un color naranja a los cojines.
Al crear una máscara de textura, siempre se debe usar negro puro o blanco puro y nunca información en color. Cualquier otro tipo de color puede dar lugar a artefactos extraños al utilizar la máscara dentro de Unreal.
Cómo exportar una máscara de textura
Después de terminar de pintar la máscara de textura, se puede exportar como una sola imagen o bien se puede empaquetar con otras máscaras en los canales R, G, B y A de una sola imagen y exportar la imagen. A este proceso se le suele llamar empaquetado en canales RGB y es el método preferido al crear máscaras, ya que ofrece un rendimiento y un ahorro de memoria considerables con muy poco esfuerzo adicional.
Si vas a empaquetar algo en el canal alfa de una textura, asegúrate de recordar que debes activar alfa al hacer la exportación desde el software de manipulación de imágenes en 2D que utilices. En caso contrario, es posible que no se exporte el canal alfa con la textura.
Cómo usar máscaras de texturas
Es posible utilizar las máscaras de texturas de distintas formas dentro del editor de materiales de Unreal. Los usos habituales incluyen definir una fuente emisora de luz, definir qué partes de una malla son metálicos o no metálicos, o asignar distintos colores a distintas partes de un modelo, como se muestra en el ejemplo de la silla.
En la siguiente sección, se demuestran algunas de las maneras más comunes de usar máscaras de texturas en Unreal Engine.
Máscara emisiva
Uno de los usos más habituales de las máscaras de texturas es controlar las secciones emisivas de un material. Normalmente, esto se consigue creando una textura con una máscara emisiva, que utiliza el blanco puro para definir las secciones del material que deben emitir luz. Por lo general, una máscara emisiva va acompañada de dos parámetros:
Para cambiar el color de la emisión de luz, puedes multiplicar la máscara emisiva por un color definido por un parámetro vectorial.
Para cambiar la intensidad de la luz emisiva, puedes multiplicarla mediante un parámetro escalar. Aumenta el valor del parámetro escalar para aumentar el brillo de la emisión.
Los cuatro nodos resaltados en el gráfico siguiente muestran una máscara emisiva multiplicada por parámetros que controlan el color y el brillo de la luz. La esfera solo emite luz en las zonas correspondientes a las partes blancas de la máscara emisiva. El resto de la esfera muestra la textura en el color de base.
Enmascarado de materiales
Un segundo uso habitual de las máscaras de texturas es almacenar distintos tipos de información de textura en los canales R, G, B, A individuales de la máscara, así como los canales alfa El material de la malla estática SM_Chair que viene con el contenido de inicio es un ejemplo perfecto de esta técnica.
Puedes encontrar la SM_Chair y todo el contenido relacionado con ella seleccionando la carpeta Contenido de inicio del explorador de contenido e introduciendo «chair» en el cuadro de búsqueda. Esto mostrará todo el contenido relacionado con la silla. Si no ves la silla, probablemente se deba a que no has incluido el contenido de inicio en el proyecto. Para resolverlo, deberás crear un proyecto nuevo o probar la Migrating Assets Tool para mover el contenido de la silla desde otro proyecto hasta este.
Al abrir el material de la silla, M_Chair, podemos ver un ejemplo perfecto de los mapas de texturas en acción.
En este material, la máscara de textura, T_Chair_M, se utiliza para asignar propiedades específicas de la superficie a distintas zonas de la malla. La máscara de textura ayuda a definir qué secciones son metálicas o no metálicas y también a asignar distintas rugosidades y valores de colores a distintas partes de la silla.
La imagen siguiente muestra un desglose de cómo se utiliza cada canal de la máscara de textura. A la izquierda se encuentra la imagen RGB compuesta o el aspecto que tiene la imagen si la miras como una textura. La columna del centro muestra las máscaras en blanco y negro que hay dentro de cada canal de color (R, G, B, A, de arriba abajo). Las imágenes de la derecha muestran a qué parte de la silla corresponde la máscara; las partes blancas de la silla corresponden a la sección blanca de la máscara.
Este es un desglose del tipo de información almacenada dentro de cada canal de la máscara de textura de la silla.
Canal rojo: información de oclusión ambiental. En el material, esto se utiliza para ayudar a añadir sombras de contacto sutiles allí donde hay dos superficies próximas entre sí.
Canal verde: máscara metálica. En el material, esto se utiliza para definir qué partes se supone que son metálicas. También se utiliza para ayudar a definir de qué color debe ser el metal.
Canal azul: máscara no metálica. En el material, se utiliza para definir qué partes no son metálicas. Esta máscara también ayuda a definir el color de las partes no metálicas.
Canal alfa: máscara de todo el objeto. Actualmente, el material no lo utiliza.
Cuando se unen todos los elementos, la silla cobra este aspecto en un nivel de Unreal:
Sugerencias y trucos de enmascarado
Las máscaras de texturas son una herramienta muy potente, especialmente cuando se combinan con otras herramientas en Unreal Engine. La sección siguiente presenta algunas sugerencias y trucos para aprovechar al máximo las máscaras de texturas en tu trabajo.
Máscaras de texturas y materiales separados
Usar las instancias de materiales y las máscaras de texturas juntas es una forma excelente de añadir una variedad prácticamente ilimitada a cualquier recurso. Por ejemplo, se puede usar una máscara de textura para definir qué zonas deben tener ciertas propiedades, como el color, y, después, utilizar instancias de material distintas para personalizar estas propiedades en el editor de instancias. Obtén más información sobre Material Instancing here.
El uso de las máscaras de materiales con las instancias de materiales permite a los artistas cambiar fácil y rápidamente el color y otros valores de un material. Este enfoque permite obtener recursos con muchas posibilidades de personalización, como se puede ver en la SM_Chair de la imagen anterior.
Máscaras y artefactos de canal
Debido a una peculiaridad de DirectX, el canal verde de una textura ofrece, con frecuencia, la mejor compresión. Si alguna de tus máscaras sufre artefactos de compresión importantes, intenta colocar la información en el canal verde de la imagen en primer lugar para ver si consigues mejores resultados. Si esto no resuelve el problema, intenta utilizar el canal alfa para almacenar la máscara.
Ten cuidado al intentar utilizar el canal alfa de una textura para almacenar información de una máscara. Añadir un canal alfa a una textura aumenta de forma importante el consumo de memoria de la textura y si lo haces con frecuencia, puedes perder el ahorro que obtienes empaquetando distintas máscaras en los canales RGB de la textura.
sRGB y máscaras de textura
Al empaquetar más de una máscara de textura en una sola textura, debes anular la selección de sRGB en el editor de texturas, ya que no se debe corregir la gamma de las máscaras.
Si se desactiva sRGB en una textura muestreada previamente en un material, no se actualiza el tipo de muestra automáticamente en los nodos del muestreador de texturas 2D. Es necesario asegurarse de ajustar el tipo de nodo con cualquiera de los nodos de muestreador de texturas 2D. Si no se cambia el tipo de muestreador, no se podrá compilar el material y se mostrará el mensaje siguiente en el registro de estadísticas.
Para corregir este error, cambia Tipo de muestreador del valor predeterminado a De color a color lineal y la advertencia desaparecerá. Por precaución, recompila el material para asegurarte de que los cambios hayan funcionado correctamente. Una vez completado, la advertencia desaparecerá.
Conclusión
Las máscaras de texturas son un concepto muy potente que, una vez dominado, permite crear prácticamente infinitas variaciones de cada pequeña pieza de contenido de origen. Recuerda que cualquier archivo de imagen solo dispone de cuatro canales disponibles, así que debes utilizar cada canal correctamente. No olvides desactivar sRGB en las máscaras de textura, ya que puede ayudar en gran medida a mejorar la nitidez de la máscara.