> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-pt/modelacao-3d-e-animacoes/materials.md).

# Materiais

Saiba quais propriedades de material e texturas são suportadas em modelos 3D importados para o Decentraland.

Os materiais são incorporados num *.gltf* ou *.glb* arquivo.

{% hint style="info" %}
**💡 Dica**: Instale o [plugin Decentraland Tools Blender](https://extensions.blender.org/add-ons/decentraland-tools/). Inclui várias funções úteis para o ajudar a editar e exportar modelos 3D, wearables e Emotes.
{% endhint %}

Este documento refere-se a materiais importados num modelo 3D. Para materiais definidos por código para aplicar em formas primitivas, veja [**materials**](https://docs.decentraland.org/creator/development-guide/materials/) .

{% hint style="warning" %}
**📔 Observação**: Atualmente não é possível alterar dinamicamente os materiais de um modelo 3D a partir do código da tua cena, a menos que seja uma forma primitiva.
{% endhint %}

## Suporte a Shaders

Nem todos os shaders podem ser usados em modelos importados para o Decentraland. Certifica-te de que usas um dos seguintes:

* **Materiais standard:** são suportados quaisquer shaders, por exemplo diffuse, specular, transparency, etc.
* **Materiais PBR (Physically Based Rendering)**: Este shader é mais flexível, pois inclui propriedades como diffuse, roughness, metalness e emission que te permitem configurar como um material interage com a luz.

A imagem abaixo mostra dois modelos idênticos, criados com as mesmas cores e textures. O modelo à esquerda usa todos os *PBR* materiais, alguns deles incluem *metalness*, *transparency*, e *emissiveness*. O modelo à direita usa todos os *standard* materiais, alguns incluindo *transparency* e *emissiveness*.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-738840e87d1016d69373d87362184c128540bb34%2F30-materials.png?alt=media\&token=95bf7877-e0b9-4633-8ea4-b05b0701cb84)

### Propriedades PBR que atualmente funcionam com o Decentraland Engine

> * Cor base
> * Metálico
> * Rugosidade
> * Especular
> * Emissivo
> * Intensidade de emissão
> * Alpha
> * Normal

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-4f7c30911e7f3f423d3bf4232caf391c4f3c21ea%2F60-principledBSDF.png?alt=media\&token=9b405e12-51d2-4624-bc81-e7bbcba52b04)

Para visualizar como estas propriedades se comportam no mundo, podes ir a este [mundo de teste](decentraland://?realm=TestEnvironment.dcl.eth) para encontrar diferentes objetos e materiais e ver como interagem com as luzes e o ambiente do mundo.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-59533ef54ae1e8b023b1aac7c29c2e946bee5c6c%2F55-testing-environment.png?alt=media\&token=c5a58e89-8858-44d4-9bf6-2020c2a865f2)

### Cor Base/Diffuse

Define a cor base da superfície do objeto. Por si só, não é afetada pela iluminação, por isso é combinada com outros nós como roughness, metallic, specular, etc.

### Metálico

Um shader metálico refere-se a um tipo de técnica de rendering usada para simular o aspeto de superfícies metálicas. Um shader metálico tem em conta as propriedades físicas dos metais e a forma como interagem com a luz para produzir as qualidades brilhantes e refletoras características do metal.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-72df7dbe44a99add0601d2210ac6c8158cec7bd1%2F61-metallic-material.png?alt=media\&token=dbe9ebe8-ffe6-495c-b5b4-84f3476f99d2)

### Rugosidade

Os materiais de roughness estão relacionados com a simulação realista de como a luz interage com a superfície do material. Normalmente, os mapas de roughness são usados para dar aos modelos uma gama de "suavidade" ou "rugosidade" nas suas superfícies. Normalmente usa-se um mapa de textura em tons de cinzento para fornecer este tipo de informação.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-9b8a24c451b1e14c95191185dccb686499f8a4ac%2F63-roughness.png?alt=media\&token=985a3a6a-48ca-49b9-95ec-29c3bb90c6f5)

Esta propriedade faz a transição entre um modelo de material não metálico e metálico. Um valor de 1.0 dá uma reflexão specular totalmente colorida pela cor base, sem reflexão diffuse ou transmissão. Em 0.0, o material consiste numa camada base diffuse ou transmissiva, com uma camada de reflexão specular no topo.

### Especular

Num shader Physically-Based Rendering (PBR), as propriedades specular referem-se à forma como a luz interage com uma superfície em termos de refletividade e brilho. A reflexão specular é a reflexão da luz semelhante a um espelho numa superfície. Em PBR, esta propriedade é usada para controlar quanta luz uma superfície reflete de forma semelhante a um espelho. Materiais como metais normalmente têm alta reflexão specular, criando realces nítidos e brilhantes, enquanto materiais não metálicos como plásticos têm reflexão specular mais baixa, resultando em realces mais amplos e suaves.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-912bbeaffb8c4725d9f60b946fc7fe5775df37bb%2F62-specular.png?alt=media\&token=a4191c28-b26d-47e3-acd3-881bcbfe7932)

### Alpha

Podes definir um material para ser *transparent*. Os materiais transparentes podem ser vistos através deles em vários graus, dependendo da sua *alpha*: Para fazer isso, ativa a propriedade de transparência do material e depois define o seu *alpha* para a quantidade desejada. Um alpha de 1 tornará o material completamente opaco; um alpha de 0 torná-lo-á invisível.

A imagem abaixo mostra dois modelos idênticos criados com materiais standard. O da esquerda usa apenas materiais opacos; o da direita usa materiais transparentes e opacos em algumas das suas partes.

{% hint style="warning" %}
💡 Lembra-te de que usar materiais transparentes é sempre mais exigente em termos de desempenho do que materiais diffuse. Tenta sempre manter o número de materiais transparentes tão baixo quanto possível.
{% endhint %}

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-694975c9963d924b8da300a18d8a47e2025e1fdb%2F31-transparent-materials.png?alt=media\&token=1e3e274e-aa56-42cb-ad6b-55aa737ce3fa)

Existem dois modos principais de transparência: *Alpha Clip* e *Alpha Blend*. As principais diferenças são:

* **Alpha Clip:** Alpha Clip renderiza valores absolutos de 0 ou 1, dado um limiar de clip de um valor em tons de cinzento. A cor anterior será substituída pela cor da superfície, mas apenas se o valor de alpha estiver acima do valor de Clip Threshold.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-b8eaf93cbe426a7c331301aed0a8da693bae547c%2F33-alpha-clip.png?alt=media\&token=42ae0e0d-cfaf-4326-b977-96dad3aa0ae2)

* **Alpha Blend:** Alpha Blend interpola os valores entre 0 e 1. Podes usar alpha blending para sobrepor a cor da superfície por cima da cor anterior.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-87bb91f45cccee6600d3251887c7ae629b726336%2F34-alpha-blend.png?alt=media\&token=ceb355aa-473d-41d9-8b85-c592709dda6b)

{% hint style="warning" %}
**🔥Dica de otimização🔥** A menos que queiras especificamente ter um nível intermédio de transparência, **é sempre mais eficiente para rendering usar \_Alpha Clip***\*\* em vez de \*\****Alpha Blend**\_**.**
{% endhint %}

{% hint style="warning" %}
**⚠️ Problemas de ordenação**

Quando usas modos de blend transparentes no teu jogo, é crucial considerar a ordem em que a mistura de cores acontece. Isto porque a cor final de saída pode ser significativamente afetada pela ordem da mistura. Atualmente, o engine só suporta ordenação por objeto, o que significa que ordena automaticamente todas as superfícies transparentes com base na origem do objeto. No entanto, a ordenação por fragmento (pixel) e a ordenação por triângulo não são atualmente suportadas.

Para evitar problemas relacionados com a ordenação, é melhor evitar usar objetos com alpha clip e alpha blend na mesma mesh. Isto pode ajudar a evitar artefactos de mistura inesperados e garantir que o teu jogo tenha o melhor aspeto possível.
{% endhint %}

### Emissivo

Também podes tornar um material *emissive*. Os materiais emissive emitem a sua própria luz. Nota que, quando renderizados, não iluminam realmente os objetos próximos na cena; apenas parecem ter um brilho difuso à sua volta.

A imagem abaixo mostra dois modelos idênticos criados com materiais standard. O da direita tem materiais emissive brilhantes em algumas das suas superfícies.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-116cf9169c3fda356bf068bd4cab46462e0828fe%2F34-emissive-materials.png?alt=media\&token=f7d29865-054f-4af2-8332-921865b00577) ![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-bdb40cfa388909cc3ada13c89fff4b3aa9b5f46e%2F35-emissive-nodes.png?alt=media\&token=5981d050-b6c3-47a9-b245-63274e7489ed)

*Para tornar um material emissive no Blender, basta adicionar um `emission` shader ao material.*

### Emissive Strength

Intensidade da luz emitida. Um valor de 1.0 garante que o objeto na imagem tenha exatamente a mesma cor que a Emission Color, ou seja, torna-o ‘shadeless’.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-d7442e553d308821f6f2069fced7e8139a562396%2F52-emissive-materials.png?alt=media\&token=2f790c5f-b75f-45ad-afea-1c2d3cec2ef8)

*Podes verificar no* [*mundo de teste*](decentraland://?realm=TestEnvironment.dcl.eth) *como a Emission Strength se comporta no mundo*

### Normal

O nó "normal" num shader PBR é um componente fundamental usado para controlar os normals de superfície de um material. Normals são vetores que definem a direção perpendicular a uma superfície num ponto específico, e desempenham um papel crucial em determinar como a luz interage com a superfície.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-13d87ebefb8dbb8b4ddc2d72b2d6d3db7181872f%2F50-normal.gif?alt=media\&token=ed3eb3fa-ce46-43ed-aa87-fc7e2e865bf9)

## Vertex Painting

O vertex painting de modelos 3D não é atualmente suportado pelo engine do Decentraland.

## Limitações de Material

Tem em conta que os limites de material por parcel são:

> log2(n+1) x 20 Quantidade de materiais na cena. Inclui materiais importados como parte dos modelos.

É importante ter em conta que cada material representa um draw call por objeto, por isso é crucial manter os materiais o mais reduzidos possível e tentar reutilizar os materiais o máximo possível, usando técnicas como Texture Atlases; isto também vai beneficiar a cena ao criar um estilo coeso entre os assets da tua cena.

## Nomenclatura de Material

Para ter um art pipeline organizado e saudável, recomendamos que nomes os teus materiais corretamente. Uma forma de o fazer é usar este método de convenção.

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

Por exemplo, imaginemos que fizemos 2 árvores diferentes, uma emissive e brilhante para a primavera e outra fria e metálica para o inverno. Poderíamos nomear os materiais: *"TreeSpring\_Emissive\_MAT"* e outra *"TreeWinter\_Metallic\_MAT"*

Em conclusão,

* 🟢 **Prefere** usar nomes que comecem pelo objeto e pela classificação: *"Wood\_Oak\_MAT"*, *"SciFiFence\_Metallic\_MAT"*, etc.
* 🔴 **Evita** usar nomes como *"Material009"*, *"material1"*, o que torna a cena e os modelos muito difíceis de acompanhar e analisar.

## Substituir materiais glTF

Podes substituir os materiais de um *glTF* modelo usando o [GltfNodeModifiers](/creator/content-creator-pt/scenes-sdk7/fundamentos-de-conteudo-3d/materials.md#modify-gltf-materials) componente no código da tua cena. Vê [Modificar materiais glTF](/creator/content-creator-pt/scenes-sdk7/fundamentos-de-conteudo-3d/materials.md#modify-gltf-materials) para mais detalhes.

## Boas práticas para materiais

* Se a tua cena incluir vários modelos que usam a mesma texture, referencia a texture como ficheiro externo em vez de a ter incorporada no modelo 3D.

As textures incorporadas são duplicadas para cada modelo e aumentam o tamanho da cena. *.glb* os ficheiros têm as textures incorporadas por predefinição, mas podes usar [**glTF pipeline**](https://github.com/AnalyticalGraphicsInc/gltf-pipeline) para a extrair para fora.

> Nota: depois de referenciares um ficheiro para uma texture que não será incorporada, certifica-te de que esse ficheiro não será movido nem renomeado, caso contrário a referência ao ficheiro será perdida. O ficheiro também tem de estar dentro da pasta da cena para que seja carregado juntamente com a cena.

* Ao definir a transparência de um material, tenta usar sempre *Alpha clip* em vez de *Alpha blend*, a menos que precises especificamente de ter um material parcialmente transparente (como vidro). Isto evitará problemas em que o engine renderiza o modelo errado à frente do outro.
* Como regra geral, lembra-te de definir sempre *backface culling* nos teus materiais. Isto tornará a tua cena mais performante, uma vez que o engine vai renderizar apenas a face visível dos teus modelos. Só desativa *backface culling* caso precises que um modelo seja renderizado dos dois lados (por exemplo, um conjunto de folhas de uma árvore feito com planos 3D).

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-8039927ba106b4fd2df524ed0986d877aca0a70e%2F59-backface-culling.png?alt=media\&token=6d513fca-f727-4178-87c9-4efe7f0a26ed)

* Usa as [**default textures**](https://github.com/decentraland/builder-assets/tree/master/textures) , que são pré-carregadas pelos players, fazendo com que os teus assets renderizem muito mais depressa.
* Leia [**este artigo**](https://www.khronos.org/blog/art-pipeline-for-gltf) para uma visão detalhada de um art pipeline completo que usa PBR textures em modelos glTF.
* Podes encontrar uma referência detalhada sobre como criar materiais compatíveis com glTF no [**documentação do Blender**](https://docs.blender.org/manual/en/latest/addons/import_export/scene_gltf2.html) .
* Encontra PBR textures gratuitas e de alta qualidade em [**cgbookcase**](https://cgbookcase.com/) .


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.decentraland.org/creator/content-creator-pt/modelacao-3d-e-animacoes/materials.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
