Textures

Aprende cómo funcionan las textures en Decentraland

Las texturas son una parte clave del pipeline de arte 3D para lograr el aspecto y la sensación que deseas para tu escena. En esta sección encontrarás todo lo que necesitas saber para crear tus texturas, limitaciones, nodos en Blender y cómo optimizarlas para que rindan al máximo.

Limitaciones

Restricciones de tamaño de textura

Actualmente el Explorer de Decentraland comprime las texturas a un máximo de 1024 px para fines de optimización utilizando un Asset Bundle Converter después de que la escena se carga en los servidores de contenido. ¡Asegúrate de tener en cuenta estas limitaciones al crear tus activos!

Otro punto importante a tener en cuenta es que las texturas siempre deben ser potencias de dos; cualquier textura que no siga esta especificación puede causar problemas al renderizar la escena.

Los tamaños de textura deben usar números de ancho y alto (en píxeles) que coincidan con los siguientes números:

1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024

Esta secuencia está compuesta por potencias de dos: f(x) = 2 ^ x . 512 px es el tamaño máximo que permitimos para una textura. Este es un requisito bastante común entre otros motores de render, se debe a optimizaciones internas de los procesadores gráficos.

El ancho y la altura no necesitan tener el mismo número, pero ambos deben pertenecer a esta secuencia.

El tamaño recomendado para texturas es 1024x1024, hemos encontrado que este es el tamaño óptimo para ser transportado por redes domésticas y para ofrecer experiencias razonables de carga/calidad.

Ejemplos de otros tamaños válidos:

32x32px
64x32px
512x256px
512x512px
1024x1024px

Por otro lado, existe un límite de texturas por parcela:

UVMapping

UVmapping es el proceso de desplegar las caras de tu modelo 3D en una coordenada 2D que se usará más tarde para añadir los diferentes mapas a tus activos. Es una parte clave del proceso de creación. Hacer un unwrap correcto de tus modelos es un factor clave para aprovechar la resolución de tus modelos y además organizará tus mapas para que sean flexibles de modificar.

Para saber más sobre UV Unwrapping puedes ver este increíble video realizado por la Blender Foundation:

Video Previewarrow-up-right

Hay otro gran tutorial de nivel intermedio para unwrap de UVs hecho por [Blender Guru] (https://www.youtube.com/@blenderguru) que explica cómo desplegar un modelo más complejo:

Video Previewarrow-up-right

Mapas

En el sección de materialesarrow-up-right explicamos cómo Decentraland trabaja con los shaders PBR. En esta sección te mostraremos cómo cada mapa de textura modifica el shader y el aspecto del objeto 3D que luego será exportado al world.

Mapas Diffuse

Este es el color base de la superficie del objeto. Tener una paleta de colores equilibrada entre tus modelos es clave para lograr un aspecto y sensación coherentes en tu experiencia.



¡Aquí hay un genial generador de paletas gratuito por si lo necesitas!

  • Coolors: https://coolors.co/

O alguna inspiración de paletas provista por películas increíbles:

  • Movies in Color: https://moviesincolor.com/

Mapas Metallic

En un mapa Metallic, el mapa en escala de grises representa el grado de metalicidad que posee un objeto, siendo blanco completamente metálico y negro no metálico. En el siguiente ejemplo vemos cómo la luz afecta al modelo y cómo interactúa con el entorno.



En la imagen podemos ver cómo las partes oscuras de la textura afectan al modelo. Las franjas oscuras son opacas, mientras que la franja blanca se comporta según las propiedades del shader metálico y el gris es una mezcla entre ambos.

Mapas Roughness

En un mapa de roughness, las áreas más oscuras corresponden a superficies más lisas, mientras que las áreas más brillantes corresponden a superficies rugosas. Esta representación en escala de grises es utilizada por los motores de render para determinar cómo la luz debe dispersarse o reflejarse en distintos puntos de la superficie.




Mapas Transparentes

Alpha Clip

Alpha Clip en Blender, cuando se usa con una textura, implica usar el canal alfa de la textura para determinar qué partes del material deben ser visibles. Los píxeles con valores alfa por encima de un umbral especificado se muestran, mientras que los que están por debajo del umbral se descartan, creando un efecto de recorte basado en la información de transparencia de la textura.

En el siguiente ejemplo usamos un material con alpha clip, usando 2 texturas: el color diffuse y la textura alpha en blanco y negro conectando el color al canal alfa.





Como resultado podemos ver que las áreas pintadas en negro son descartadas mientras que las áreas blancas se renderizan

Alpha Blend

Alpha Blend te permite elegir valores intermedios por región.

Alpha Blend en Blender, cuando se usa con una textura, implica mezclar las áreas transparentes y opacas de la textura en función de su canal alfa. Esto permite que la textura combine de forma suave porciones visibles y translúcidas, interactuando de forma natural con el fondo u otros objetos en la escena.



Mientras que Alpha Clip renderiza valores siendo 0 o 1 (según un umbral específico), Alpha Blend interpola los valores entre 0 y 1. En el ejemplo anterior el material con alpha blend muestra la transición de gradiente completa mientras que el alpha clip excluye parte de la textura según el umbral de clip

circle-exclamation

Mapas Emissive

Un mapa emissive es un tipo de mapa de textura usado para controlar la auto-iluminación o la luz emitida por una superficie en una escena 3D. Es un componente del shader que determina cuánta luz (y el color de la luz) emite una parte particular de un modelo 3D, independientemente de las fuentes de luz externas. Los mapas emissive se usan comúnmente para simular materiales u objetos que aparentan emitir su propia luz.



En este ejemplo podemos ver el uso de un mapa emissive combinado con la intensidad emissive en un entorno que usa postprocesado de brillo para probar aproximadamente cómo se comporta lo emissive en world.

Mapas Normal

Un normal map es un tipo de textura usado en gráficos 3D para simular detalles finos de la superficie y crear la ilusión de geometría compleja sin alterar realmente la geometría subyacente de un modelo. Se usa comúnmente para mejorar el realismo de modelos low-poly añadiendo la apariencia de bultos, hendiduras y otras irregularidades de la superficie. También permite mantener los propios objetos más ligeros, ya que muchos detalles pueden proporcionarse en la capa de normal map en lugar de con geometría compleja.




Para añadir un normal map a tu material usando el Shader Editor, necesitarás conectar el Normal Map node entre la textura y el Principled BSDF shader.


circle-exclamation

Optimizando Texturas

El proceso de optimizar texturas trae muchos beneficios al renderizar la escena en el explorer, pero también es una buena forma de mantener el estilo de tu escena consistente y más flexible en el proceso de diseño. Algunos de estos beneficios son:

  • Tener texturas optimizadas en tamaño y compresión hará que la escena funcione mucho más fluida y rápida, facilitando su descarga y su renderizado (especialmente para jugadores con conexión a Internet lenta).

  • Reduce la cantidad de memoria y potencia de procesamiento para renderizar tu experiencia, resultando en una mejor experiencia de usuario para tus jugadores.

  • Ahorra espacio en los servidores de contenido de la comunidad.

  • Usando Texture Atlases y/o Trim Sheets te dará más flexibilidad para iterar la creación de tu escena y coherencia de estilo entre los objetos. Usando estas técnicas puedes intercambiar texturas fácilmente, ajustar colores o patrones en lugar de hacerlo individualmente para cada modelo.

  • Compartir texturas entre modelos permite tener menos texturas por escena, reduciendo drásticamente las draw calls en el juego. Si trabajas con glbs (con texturas embebidas) encontrarás un extractor en las siguientes guías para extraer las texturas de éstos, redirigiendo los modelos para usar la misma textura.

Texturas compartidas entre modelos glTF

Una práctica sabia y común para optimizar tu escena es compartir texturas y materiales entre modelos en la escena. Hacer esto reducirá drásticamente las draw calls y tu escena de Decentraland funcionará mucho más fluida.

La siguiente herramienta basada en glTF pipelinearrow-up-right, ofrece algunas optimizaciones que harán los modelos 3D más ligeros y más rápidos de descargar para los jugadores en tu escena.

Mac: MAC GLB Extractorarrow-up-right

PC: PC GLB Extractorarrow-up-right

Convierte el formato .gltf a .glb, que es binario y por tanto ocupa mucho menos. También coloca los archivos de textura fuera del modelo 3D, lo que te permite usar la misma textura en varios modelos.

📔 Nota: el formato .glb por defecto siempre tiene las texturas embebidas en el archivo. El engine no puede reconocer dos texturas embebidas como la misma; necesitan ser archivos externos que compartan el mismo hash.

Cómo usar GLB Texture Extractor

En esta escena de ejemplo, tenemos una simple escena sci-fi en Blender.



Esta escena contiene el entorno base para los modelos estáticos pero también hay otros dos assets, un droide y una nave espacial que queremos exportar por separado para moverlos luego por código, de modo que puedan interactuar con los jugadores. En este caso usamos 4 texturas (una para el suelo, un atlas de color para la mayoría de los assets, una emissive y una textura sci-fi de UI para los paneles)




Una vez que exportamos todos estos assets a la carpeta models tenemos 3 modelos: la escena estática del entorno, la nave espacial y el droide.



Pero tenemos un problema: los archivos .glb tienen las texturas embebidas, así que si exportas diferentes assets que reutilizan las texturas, estas se duplicarán cada vez que haya un nuevo asset en la carpeta. Para evitar tener texturas duplicadas podemos usar esta herramienta útil.

circle-exclamation

En Mac

Una vez que hayas exportado todos los assets a tu carpeta models puedes arrastrar el archivo del script a ella.



1 - Abre la carpeta en la terminal arrastrando la carpeta a la terminal.



2 - Arrastra texture-extractor.sh a la terminal.



3 - Ejecuta el comando. Puede tomar algunos segundos procesar todos los assets. Después de eso, verás algo como esto:



4 - Ve a tu carpeta models y habrá una nueva carpeta llamada "out" en la que verás tus nuevos assets con las texturas extraídas.



5 - Reemplaza todos los assets por los nuevos. Además, una vez que termines borra "texture-extractor.sh" y la carpeta vacía "out".



En Windows

Una vez que hayas exportado todos los assets a tu carpeta models puedes arrastrar el archivo del script dentro de ella.



1 - Haz doble clic en glb_texture_extract.bat para extraer los archivos. Si Windows te advierte sobre una aplicación no reconocida, ve a More Info y luego a Run anyway.




2 - El script generará una carpeta llamada out; allí encontrarás todos los nuevos archivos .glb con sus texturas extraídas.



5 - Reemplaza todos los assets con los nuevos. Una vez finalizado, elimina el script "texture-extractor.bat" y la carpeta vacía "out".

Si sigues todos los pasos tu escena será mucho más rápida y los assets compartirán la misma textura. Cuando trabajamos con varios assets y escenas grandes la mejora es bastante notable. ¡Con esta herramienta puedes ahorrar bastantes megabytes de información!

circle-exclamation

Texture Atlas/ Trim Sheets

Un texture atlas es un único archivo de imagen que contiene datos de varias imágenes más pequeñas empaquetadas juntas. En lugar de tener una textura para cada malla, varias mallas comparten una textura mayor.

Puedes crear un texture atlas antes de hacer el asset, lo que significa que el asset se UV-unwrapea según el texture atlas. Esto requiere una planificación temprana al crear la textura.

Alternativamente, puedes crear el texture atlas después de que el asset esté terminado fusionando texturas en software de pintura. Sin embargo, esto también significa que las islas UV deben reorganizarse según la textura.

A continuación hay una imagen que muestra varios objetos 3D que usan un conjunto de texturas:




Otra forma de hacer Atlases es el uso de Trim Sheets, una técnica común en modelado 3D y desarrollo de juegos que los grandes estudios e industria usan para asegurar consistencia visual y un pipeline de arte eficiente. Trim Sheets es el uso de una sola imagen o textura que contiene múltiples pequeños detalles o elementos que pueden aplicarse a diferentes partes de un modelo. Esta técnica es muy útil al crear escenas grandes y debe considerarse en la primera etapa del pipeline de arte.



Un ejemplo en collage de un Trim Sheet que usa una textura diffuse, normal y emissive.

Hay un gran tutorialarrow-up-right por Jennifer McGarryarrow-up-right que explica el uso de Trim Sheets usando Blender!

Nomenclatura de Texturas

Es crucial nombrar nuestras texturas correctamente. Tener una nomenclatura correcta para la textura hará:

  • Hacer tu pipeline de arte más eficiente, flexible, organizado, fácil de orientar y modificar si es necesario.

  • Evitar solapamientos de texturas con el mismo nombre al usar el texture extractor u otras herramientas.

  • Evitar problemas de superposición de texturas al usar Asset Bundles.

  • Una forma más eficiente de apuntar a problemas al analizar la escena.

Cómo nombrar correctamente tus Texturas:

  • Nombre del asset debería representar claramente lo que es la textura.

  • Los nombres de texturas deberían comenzar con el prefijo T_.

  • El nombre de la textura debería terminar con el sufijo que define el tipo de textura:

    • _D - Diffuse/ Color Map

    • _A - Alpha Texture

    • _MT - Metallic

    • _R - Roughness

    • _N - Normal Map

    • _E - Emission

Ejemplo: Si es un mapa diffuse de una textura de ladrillo para una pared, el nombre T_BrickWall_D podría ser apropiado. Si es un Normal Map del mismo asset el nombre podría ser T_BrickWall_N

Ejemplos:

  • 🟢 Prefiere comenzando el nombre de textura con - T_Parquet_D, T_Floor_R, T_Pipes_MT,

  • 🔴 Evita comenzando el nombre de textura con - Image_, sprite_,Untitled

Herramientas Opcionales

Hay muchos addons y herramientas externas que facilitan el trabajo al crear assets para hacer el pipeline más rápido y eficiente; algunas son gratuitas y otras de pago, por nombrar algunas:

UVTools

  • UV Packer (Free):https://www.uv-packer.com/blender/

  • Zen UV: https://blendermarket.com/products/zen-uv

  • Uvpackmaster 3: https://blendermarket.com/products/uvpackmaster

Compresores de Imagen

Hay varios compresores de imagen en línea que puedes usar para hacer tus texturas más ligeras. Por nombrar algunos:

  • CompressPNG: https://compresspng.com/

  • TinyPNG: https://tinypng.com/

  • FreeConvert: https://www.freeconvert.com/

Última actualización