# Materials

Los materiales están incrustados en un *.gltf* o *.glb* archivo.

Este documento se refiere a materiales que se importan en un modelo 3D. Para materiales definidos mediante código que se apliquen sobre formas primitivas, consulta [**materials**](https://docs.decentraland.org/creator/development-guide/materials/) .

{% hint style="warning" %}
**📔 Nota**: Actualmente no puedes cambiar dinámicamente los materiales de un modelo 3D desde el código de tu scene, a menos que se trate de una forma primitiva.
{% endhint %}

## Compatibilidad con Shader

No todos los shaders pueden usarse en modelos que se importan en Decentraland. Asegúrate de usar uno de los siguientes:

* **Materiales estándar:** se admiten shaders, por ejemplo diffuse, specular, transparencia, etc.
* **Materiales PBR (Physically Based Rendering)**: Este shader es más flexible, ya que incluye propiedades como diffuse, roughness, metalness y emission que te permiten configurar cómo interactúa un material con la luz.

La imagen de abajo muestra dos modelos idénticos, creados con los mismos colores y texturas. El modelo de la izquierda usa todos los *PBR* materiales, algunos de ellos incluyen *metalness*, *transparency*, y *emissiveness*. El modelo de la derecha usa todos los *standard* materiales, algunos incluyen *transparency* y *emissiveness*.

![](/files/e948a2feb1c2a0fc7789e6ccb2d64513246d0f01)

### Propiedades PBR que actualmente funcionan con el Engine de Decentraland

> * Color Base
> * Metallic
> * Roughness
> * Specular
> * Emissive
> * Emission Strength
> * Alpha
> * Normal

![](/files/02ed81cbb6216d342d9986eb191902b1dc63edd3)

Para visualizar cómo se comportan estas propiedades en el mundo, puedes ir a este [mundo de pruebas](decentraland://?realm=TestEnvironment.dcl.eth) para encontrar diferentes objetos y materiales y cómo interactúan con las luces y el entorno del mundo.

![](/files/3849b2722867cf2dad5ee59d1defd495fa40bfc1)

### Color Base/Diffuse

Define el color base de la superficie del objeto. Por sí solo no tiene ningún efecto por la iluminación; por eso se combina con otros nodos como roughness, metallic, specular, etc.

### Metallic

Un shader metálico se refiere a un tipo de técnica de renderizado usada para simular la apariencia de superficies metálicas. Un shader metálico tiene en cuenta las propiedades físicas de los metales y cómo interactúan con la luz para producir las características cualidades brillantes y reflectantes del metal.

![](/files/8935879ba4c1c6670436cb0a015a79d6b522431f)

### Roughness

Los materiales roughness están relacionados con la simulación realista de cómo la luz interactúa con la superficie del material. Normalmente los mapas de roughness se usan para dar a los modelos un rango de "suavidad" o "rugosidad" en sus superficies. Normalmente se usa un mapa de textura con valores en escala de grises para proporcionar información de este tipo.

![](/files/df9fb8bb654760bafdccae9270e834ebeb2784ba)

Esta propiedad combina entre un modelo de material no metálico y uno metálico. Un valor de 1.0 da una reflexión especular completa teñida con el color base, sin reflexión difusa ni transmisión. En 0.0 el material consiste en una capa base difusa o transmisiva, con una capa de reflexión especular encima.

### Specular

En un shader Physically-Based Rendering (PBR), las propiedades especulares se refieren a cómo la luz interactúa con una superficie en términos de reflectividad y brillo. La reflexión especular es la reflexión de la luz sobre una superficie como si fuera un espejo. En PBR, esta propiedad se usa para controlar cuánta luz refleja una superficie de manera similar a un espejo. Materiales como los metales suelen tener una reflexión especular alta, creando reflejos nítidos y brillantes, mientras que los materiales no metálicos como los plásticos tienen una reflexión especular más baja, dando como resultado reflejos más amplios y suaves.

![](/files/57b229cddcee7f4062699f68468755daf427f0a0)

### Alpha

Puedes configurar un material para que sea *transparente*. Los materiales transparentes pueden verse a través de ellos en distintos grados, dependiendo de su *alpha*. Para hacerlo, activa la propiedad de transparencia del material y luego establece su *alpha* al valor deseado. Un alpha de 1 hará que el material sea completamente opaco, un alpha de 0 lo hará invisible.

La imagen de abajo muestra dos modelos idénticos creados con materiales estándar. El de la izquierda usa solo materiales opacos, el de la derecha usa tanto materiales transparentes como opacos en algunas de sus partes.

{% hint style="warning" %}
💡 Recuerda que usar materiales transparentes siempre es más costoso en términos de rendimiento que los materiales diffuse. Intenta siempre mantener los materiales transparentes al mínimo posible.
{% endhint %}

![](/files/6d61b07041dd8afab607b6da5e849983fcc75e06)

Hay dos modos principales de transparencia diferentes: *Alpha Clip* y *Alpha Blend*. Las principales diferencias son:

* **Alpha Clip:** Alpha Clip renderiza valores absolutos de 0 o 1 dado un umbral de recorte de un valor en escala de grises. El color anterior será sobrescrito por el color de la superficie, pero solo si el valor alpha está por encima del valor de Clip Threshold.

![](/files/edc1fd739963ed0ccf1efbe6206b65214737ee57)

* **Alpha Blend:** Alpha Blend interpola los valores entre 0 y 1. Puedes usar alpha blending para superponer el color de la superficie sobre el color anterior.

![](/files/6201b50b3ce71bab3deb10747180e784bd159385)

{% hint style="warning" %}
**🔥Consejo de optimización🔥** A menos que quieras específicamente poder tener un nivel intermedio de transparencia, **siempre es más eficiente para el renderizado usar \_Alpha Clip***\*\* en lugar de \*\****Alpha Blend**\_**.**
{% endhint %}

{% hint style="warning" %}
**⚠️ Problemas de ordenamiento**

Cuando usas modos de transparencia blend en tu juego, es crucial considerar el orden en que se realiza la mezcla de colores. Esto se debe a que el color final de salida puede verse significativamente afectado por el orden de mezcla. Actualmente, el Engine solo admite ordenamiento por objeto, lo que significa que ordena automáticamente todas las superficies transparentes según el origen del objeto. Sin embargo, el ordenamiento por fragmento (pixel) y el ordenamiento por triángulo no están admitidos actualmente.

Para evitar problemas relacionados con el ordenamiento, lo mejor es evitar usar objetos con alpha clip y alpha blend en el mismo mesh. Esto puede ayudar a evitar artefactos de mezcla inesperados y garantizar que tu juego se vea lo mejor posible.
{% endhint %}

### Emissive

También puedes hacer que un material sea *emissive*. Los materiales emissive emiten su propia luz. Ten en cuenta que, al renderizarse, en realidad no iluminan a los objetos cercanos de la scene, solo parecen tener un resplandor difuso a su alrededor.

La imagen de abajo muestra dos modelos idénticos creados con materiales estándar. El de la derecha tiene materiales emissive brillantes en algunas de sus superficies.

![](/files/f379a84a85a2d305355f3c786f55602ea20a522b) ![](/files/cac80f4dfde350cea23a35a33434f0d102c12f30)

*Para hacer que un material sea emissive en Blender, simplemente añade un `emission` shader al material.*

### Emissive Strenght

Intensidad de la luz emitida. Un valor de 1.0 garantizará que el objeto en la imagen tenga exactamente el mismo color que el Emission Color, es decir, lo convierte en ‘shadeless’.

![](/files/48b33f3f60295e8ac1d7667cd18399669b191b77)

*Puedes comprobar en el* [*mundo de pruebas*](decentraland://?realm=TestEnvironment.dcl.eth) *cómo se comporta la emisión strenght en el mundo*

### Normal

El nodo "normal" en un shader PBR es un componente fundamental usado para controlar las normales de superficie de un material. Las normales son vectores que definen la dirección perpendicular a una superficie en un punto específico, y desempeñan un papel crucial al determinar cómo la luz interactúa con la superficie.

![](/files/a365a59b176f40aad578c48fdfd2713a9ea3fd9a)

## Pintura de vértices

La pintura de vértices de modelos 3D no está admitida actualmente por el Engine de Decentraland.

## Limitaciones de materiales

Ten en cuenta que los límites de materiales por parcel son:

> log2(n+1) x 20 Cantidad de materiales en la scene. Incluye los materiales importados como parte de los modelos.

Es importante tener en cuenta que cada material representa un draw call por objeto, así que es crucial mantener la cantidad de materiales lo más baja posible e intentar reutilizar materiales tanto como sea posible mediante técnicas como Texture Atlases; esto también beneficiará a la scene al tener un estilo cohesivo entre los assets de tu scene.

## Nomenclatura de materiales

Para tener un pipeline de arte organizado y saludable, recomendamos nombrar tus materiales correctamente. Una forma de hacerlo es usar este método de convención.

```
<Object>_<Classification>_<Sub-Classification(optional)>_<_MAT>
```

Por ejemplo, digamos que hicimos 2 árboles diferentes, uno que es emissive y brillante para primavera y otro frío y metálico para invierno. Podríamos nombrar los materiales: *"TreeSpring\_Emissive\_MAT"* y otro *"TreeWinter\_Metallic\_MAT"*

En conclusión,

* 🟢 **Prefiere** usar nombres que comiencen con el objeto y la clasificación: *"Wood\_Oak\_MAT"*, *"SciFiFence\_Metallic\_MAT"*, etc.
* 🔴 **Evita** usar nombres como *"Material009"*, *"material1"*, que hacen que la scene y los modelos sean realmente difíciles de rastrear y analizar.

## Sobrescribir materiales glTF

Puedes sobrescribir los materiales de un *glTF* modelo usando el [GltfNodeModifiers](/creator/content-creator-es/scenes-sdk7/esenciales-de-contenido-3d/materials.md#modify-gltf-materials) componente en el código de tu scene. Consulta [Modificar materiales glTF](/creator/content-creator-es/scenes-sdk7/esenciales-de-contenido-3d/materials.md#modify-gltf-materials) para más detalles.

## Mejores prácticas para materiales

* Si tu scene incluye varios modelos que usan la misma textura, referencia la textura como un archivo externo en lugar de tenerla incrustada en el modelo 3D.

Las texturas incrustadas se duplican para cada modelo y aumentan el tamaño de la scene. *.glb* los archivos tienen sus texturas incrustadas por defecto, pero puedes usar [**glTF pipeline**](https://github.com/AnalyticalGraphicsInc/gltf-pipeline) para extraerla fuera.

> Nota: Después de referenciar un archivo para una textura que no se incrustará, asegúrate de que ese archivo no se mueva ni se renombre, ya que de lo contrario se perderá la referencia al archivo. El archivo también debe estar dentro de la carpeta de la scene para que se cargue junto con la scene.

* Al establecer la transparencia de un material, intenta usar siempre *Alpha clip* en lugar de *Alpha blend*, a menos que necesites específicamente tener un material parcialmente transparente (como vidrio). Esto evitará problemas en los que el Engine renderiza el modelo equivocado delante del otro.
* Como regla general, recuerda establecer siempre *backface culling* en tus materiales. Esto hará que tu scene sea más eficiente, ya que el Engine solo va a renderizar la cara visible de tus modelos. Solo desactívalo *backface culling* en caso de que necesites que un modelo se renderice por ambos lados (por ejemplo, un grupo de hojas de un árbol hecho con planos 3D).

![](/files/204e6522b1fe6d2a9f4257577aa3377e67459509)

* Usa las [**texturas predeterminadas de Decentraland**](https://github.com/decentraland/builder-assets/tree/master/textures) , que ya están precargadas por los jugadores, haciendo que tus assets se rendericen mucho más rápido.
* Lee [**este artículo**](https://www.khronos.org/blog/art-pipeline-for-gltf) para una visión detallada de un pipeline de arte completo que usa texturas PBR en modelos glTF.
* Puedes encontrar una referencia detallada sobre cómo crear materiales compatibles con glTF con Blender en [**la documentación de Blender**](https://docs.blender.org/manual/en/latest/addons/import_export/scene_gltf2.html) .
* Encuentra texturas PBR gratuitas y de alta calidad en [**cgbookcase**](https://cgbookcase.com/) .


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-es/modelado-3d-y-animaciones/materials.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
