# Materials

Os Materials são incorporados em um *.gltf* ou *.glb* ficheiro.

Este documento se refere a materials que são importados em um modelo 3D. Para materials definidos via código para serem aplicados a formas primitivas, veja [**materials**](https://docs.decentraland.org/creator/development-guide/materials/) .

{% hint style="warning" %}
**📔 Nota**: Você não pode alterar dinamicamente os materials de um modelo 3D a partir do código da sua scene no momento, a menos que seja uma forma primitiva.
{% endhint %}

## Suporte a Shader

Nem todos os shaders podem ser usados em models importados para Decentraland. Certifique-se de usar um dos seguintes:

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

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

![](/files/9861b937b357867bad1c9e3b6c48ffd6631275d3)

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

> * Cor Base
> * Metálico
> * Rugosidade
> * Specular
> * Emissive
> * Força de Emission
> * Alpha
> * Normal

![](/files/11c3030d03e979d07981d5e35b7251302b0313e9)

Para visualizar como essas propriedades se comportam no world, você pode ir até este [world de teste](decentraland://?realm=TestEnvironment.dcl.eth) para encontrar diferentes objetos e materials e como eles interagem com as luzes e o ambiente do world.

![](/files/7ff1fe064bc194709a4b740b30feb625a83abefa)

### Cor Base/Diffuse

Define a cor base da superfície do objeto. Por si só, não sofre nenhum efeito da 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 a aparência de superfícies metálicas. Um shader metálico leva em conta as propriedades físicas dos metais e como eles interagem com a luz para produzir as qualidades brilhantes e reflexivas características do metal.

![](/files/04f18ab70c3f43e0cd0d0d19cd309de2ff2b6dc1)

### Rugosidade

Materials de roughness estão relacionados à 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 models uma faixa de "suavidade" ou "rugosidade" em suas superfícies. Um mapa de textura em tons de cinza é normalmente usado para fornecer informações desse tipo.

![](/files/737fb1d28d410b18ee6a14f2104aa8a844939443)

Essa propriedade faz a mistura entre um model de material não metálico e metálico. Um valor de 1.0 produz uma reflexão especular totalmente refletiva, tingida pela cor base, sem reflexão difusa nem transmissão. Em 0.0, o material consiste em uma camada base difusa ou transmissiva, com uma camada de reflexão especular por cima.

### Specular

Em um shader Physically-Based Rendering (PBR), as propriedades specular se referem a como a luz interage com uma superfície em termos de sua refletividade e brilho. A reflexão especular é a reflexão espelhada da luz em uma superfície. Em PBR, essa propriedade é usada para controlar quanta luz uma superfície reflete de maneira espelhada. Materials como metais normalmente têm alta reflexão especular, criando highlights nítidos e brilhantes, enquanto materials não metálicos como plásticos têm reflexão especular menor, resultando em highlights mais amplos e suaves.

![](/files/e01bcdd3cbda2d40c80c65ce49d3ef0e3dce3b90)

### Alpha

Você pode definir um material como *transparente*. Materials transparentes podem ser vistos através deles em graus variados, dependendo de sua *alpha*. Para fazer isso, ative a propriedade de transparência do material e depois defina seu *alpha* para a quantidade desejada. Um alpha de 1 tornará o material completamente opaco, um alpha de 0 o tornará invisível.

A imagem abaixo mostra dois models idênticos criados com materials padrão. O da esquerda usa apenas materials opacos, o da direita usa tanto materials transparentes quanto opacos em algumas de suas partes.

{% hint style="warning" %}
💡 Lembre-se de que usar materials transparentes é sempre mais caro em termos de desempenho do que materials diffuse. Tente sempre manter os materials transparentes o mais baixo possível.
{% endhint %}

![](/files/3bf7dd5c07fd66bd232bcd706198de66836292ce)

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

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

![](/files/d62945e02d643e14064caf0cd674ec67a86795d4)

* **Alpha Blend:** Alpha Blend interpola os valores entre 0 e 1. Você pode usar alpha blending para sobrepor a cor da superfície sobre a cor anterior.

![](/files/65f48dd627a5d0d8e8a62851aeb6cb1ed162d514)

{% hint style="warning" %}
**🔥Dica de Otimização🔥** A menos que você queira especificamente ser capaz de ter um nível intermediário de transparência, **é sempre mais performático para rendering usar \_Alpha Clip***\*\* em vez de \*\****Alpha Blend**\_**.**
{% endhint %}

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

Quando você usa modos de blend transparentes no seu jogo, é crucial considerar a ordem em que a mistura de cores acontece. Isso ocorre porque a cor de saída final pode ser significativamente afetada pela ordem de blending. Atualmente, o engine suporta apenas ordenação por objeto, o que significa que ele ordena automaticamente todas as superfícies transparentes com base na origem do objeto. No entanto, ordenação por fragmento (pixel) e ordenação por triangle não são suportadas no momento.

Para evitar problemas relacionados à ordenação, é melhor evitar usar objetos com ambos alpha clip e alpha blend no mesmo Mesh. Isso pode ajudar a prevenir artefatos de blending inesperados e garantir que seu jogo tenha a melhor aparência.
{% endhint %}

### Emissive

Você também pode tornar um material *emissive*. Materials emissive emitem sua própria luz. Observe que, ao serem renderizados, eles não iluminam realmente os objetos próximos na scene; apenas parecem ter um brilho difuso ao redor deles.

A imagem abaixo mostra dois models idênticos criados com materials padrão. O da direita tem materials emissive brilhantes em algumas de suas superfícies.

![](/files/61ab7243db6b17d1fe547587427ead356b86b7bc) ![](/files/2f7eaa4b8190f8f33e2c5e620d5ddc96b7544657)

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

### Força Emissiva

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

![](/files/ffc47e834ca3e80ab4ca3e825b38e0e637208d41)

*Você pode verificar no* [*world de teste*](decentraland://?realm=TestEnvironment.dcl.eth) *como a força de emissão se comporta no world*

### Normal

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

![](/files/1a6d39ea9400f2208bf8b6f6b5aa66870eb838f1)

## Pintura de Vértices

A pintura de vértices de models 3D não é atualmente suportada pelo engine do Decentraland.

## Limitações de Material

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

> log2(n+1) x 20 Quantidade de materials na scene. Isso inclui materials importados como parte dos models.

É importante levar em conta que cada material representa um draw call por objeto, então é crucial manter a quantidade de materials o menor possível e tentar reutilizar materials ao máximo, usando técnicas como Texture Atlases. Isso também vai beneficiar a scene, trazendo um estilo coeso entre os assets da sua scene.

## Nomeação de Material

Para ter um pipeline de arte organizado e saudável, recomendamos nomear seus materials corretamente. Uma forma de fazer isso é usar este método de convenção.

```
<Objeto>_<Classificação>_<Subclassificação(opcional)>_<_MAT>
```

Então, por exemplo, digamos que fizemos 2 trees diferentes: uma emissive e brilhante para a primavera e outra fria e metálica para o inverno. Poderíamos nomear os materials: *"TreeSpring\_Emissive\_MAT"* e outra *"TreeWinter\_Metallic\_MAT"*

Em conclusão,

* 🟢 **Prefira** usar nomes que comecem com o objeto e a classificação: *"Wood\_Oak\_MAT"*, *"SciFiFence\_Metallic\_MAT"*, etc.
* 🔴 **Evite** usar nomes como *"Material009"*, *"material1"*, que tornam a scene e os models muito difíceis de rastrear e analisar.

## Substituir materials glTF

Você pode substituir os materials de um *glTF* model usando o [GltfNodeModifiers](/creator/content-creator-pt/scenes-sdk7/essenciais-de-conteudo-3d/materials.md#modify-gltf-materials) componente no código da sua scene. Veja [Modificar materials glTF](/creator/content-creator-pt/scenes-sdk7/essenciais-de-conteudo-3d/materials.md#modify-gltf-materials) para mais detalhes.

## Melhores Práticas Para Materials

* Se a sua scene incluir vários models que usam a mesma texture, referencie a texture como um arquivo externo em vez de tê-la incorporada no modelo 3D.

Textures incorporadas são duplicadas para cada model e aumentam o tamanho da scene. *.glb* files têm suas textures incorporadas por padrão, mas você pode usar [**glTF pipeline**](https://github.com/AnalyticalGraphicsInc/gltf-pipeline) para extraí-la para fora.

> Observação: Depois de referenciar um arquivo para uma texture que não será incorporada, certifique-se de que esse arquivo não será movido nem renomeado, pois caso contrário a referência ao arquivo será perdida. O arquivo também deve estar dentro da pasta da scene para que seja enviado junto com a scene.

* Ao definir a transparência de um material, tente sempre usar *Alpha clip* em vez de *Alpha blend*, a menos que você precise especificamente de um material parcialmente transparente (como vidro). Isso evitará problemas em que o engine renderiza o model errado na frente do outro.
* Como regra geral, lembre-se de sempre definir *backface culling* em seus materials. Isso tornará sua scene mais performática, já que o engine vai renderizar apenas a face visível de seus models. Desmarque apenas *backface culling* no caso de precisar que um model seja renderizado em ambos os lados (por exemplo, um grupo de folhas de uma tree feito com planos 3D).

![](/files/fb8b6417531250e599d6808557b49695161a9501)

* Use as texturas padrão do Decentraland [**default textures**](https://github.com/decentraland/builder-assets/tree/master/textures) , que são pré-carregadas pelos players, fazendo seus assets renderizarem muito mais rápido.
* Leia [**este artigo**](https://www.khronos.org/blog/art-pipeline-for-gltf) para uma visão detalhada de um pipeline de arte completo que usa texturas PBR em models glTF.
* Você pode encontrar uma referência detalhada sobre como criar materials compatíveis com glTF no Blender em [**a documentação do Blender**](https://docs.blender.org/manual/en/latest/addons/import_export/scene_gltf2.html) .
* Encontre texturas PBR gratuitas e de alta qualidade em [**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-pt/modelacao-e-animacoes-3d/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.
