Materiais
Saiba quais propriedades de material e texturas são suportadas em modelos 3D importados para o Decentraland.
Os materiais são incorporados em um .gltf ou .glb arquivo.
Este documento refere-se a materiais que são importados em um modelo 3D. Para materiais definidos via código para aplicar em formas primitivas, veja materials .
📔 Nota: Você não pode atualmente alterar dinamicamente os materiais de um modelo 3D a partir do código da sua cena, a menos que seja uma forma primitiva.
Suporte a Shader
Nem todos os shaders podem ser usados em modelos que são importados para Decentraland. Certifique-se de usar um dos seguintes:
Materiais padrão: qualquer shader é suportado, 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 permitem configurar como um material interage com a luz.
A imagem abaixo mostra dois modelos idênticos, criados com as mesmas cores e texturas. 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.

Propriedades PBR que atualmente funcionam com o Decentraland Engine
Base Color
Metallic
Roughness
Specular
Emissive
Emission Strength
Alpha
Normal

Para visualizar como essas propriedades se comportam no mundo você pode ir para este testing world para encontrar diferentes objetos e materiais e como eles interagem com luzes e ambiente do mundo.

Base/Diffuse Color
Define a cor base da superfície do objeto. Por si só não sofre qualquer influência da iluminação, por isso é combinada com outros nós como roughness, metallic, specular, etc.
Metallic
Um shader metallic refere-se a um tipo de técnica de renderização usada para simular a aparência de superfícies metálicas. Um shader metallic leva em conta as propriedades físicas dos metais e como eles interagem com a luz para produzir as qualidades características brilhantes e reflexivas do metal.

Roughness
Materiais de roughness estão relacionados à simulação realista de como a luz interage com a superfície do material. Normalmente mapas de roughness são usados para dar aos modelos uma faixa de "suavidade" ou "rugosidade" em suas superfícies. Normalmente usa-se um mapa de textura em tons de cinza para fornecer esse tipo de informação.

Esta propriedade faz uma mistura entre um modelo de material não metálico e metálico. Um valor de 1.0 dá uma reflexão totalmente specular tingida com a cor base, sem reflexão difusa ou transmissão. Em 0.0 o material consiste em uma camada base difusa ou transmissiva, com uma camada de reflexão specular por cima.
Specular
Em um shader PBR (Physically-Based Rendering), as propriedades specular referem-se a como a luz interage com uma superfície em termos de sua refletividade e brilho. A reflexão specular é a reflexão em espelho da luz sobre uma superfície. No PBR, essa propriedade é usada para controlar quanto a superfície reflete a luz de forma espelhada. Materiais como metais tipicamente têm alta reflexão specular, criando destaques nítidos e brilhantes, enquanto materiais não metálicos como plásticos têm reflexão specular mais baixa, resultando em destaques mais amplos e suaves.

Alpha
Você pode definir um material como transparent. Materiais transparentes podem ser vistos através em graus variados, dependendo do seu alpha. Para fazer isso, ative a propriedade de transparência do material e então 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 modelos idênticos criados com materiais standard. O da esquerda usa apenas materiais opacos, o da direita usa materiais tanto transparentes quanto opacos em algumas de suas partes.
💡 Lembre-se que usar materiais transparentes é sempre mais caro em termos de desempenho do que materiais diffuse. Sempre tente manter os materiais transparentes o mais baixo possível.

Existem dois modos principais de transparência diferentes: Alpha Clip e Alpha Blend. As principais diferenças são:
Alpha Clip: Alpha Clip renderiza valores absolutos sendo 0 ou 1 dado um limiar de corte (clip threshold) de um valor em escala de cinza. A cor anterior será sobrescrita pela cor da superfície, mas somente se o valor alpha estiver acima do valor Clip Threshold.

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.

🔥Dica de Otimização🔥 A menos que você especificamente queira ter um nível intermediário de transparência, é sempre mais performático para renderização usar _Alpha Clip** em vez de **Alpha Blend_.
⚠️ Problemas de Ordenação
Quando você usa modos de blend transparente no seu jogo, é crucial considerar a ordem na qual a mistura de cores acontece. Isso porque a cor final de saída pode ser significativamente afetada pela ordem de blend. Atualmente, o engine suporta apenas ordenação por objeto, o que significa que ele automaticamente ordena todas as superfícies transparentes com base na origem do objeto. No entanto, ordenação por fragmento (pixel) e por triângulo não são atualmente suportadas.
Para evitar problemas relacionados à ordenação, é melhor evitar usar objetos com alpha clip e alpha blend na mesma malha. Isso pode ajudar a prevenir artefatos de blend inesperados e garantir que seu jogo tenha a melhor aparência possível.
Emissive
Você também pode tornar um material emissive. Materiais emissive emitem sua própria luz. Observe que quando renderizados, eles não iluminam realmente objetos próximos na cena, apenas parecem ter um brilho borrado ao redor.
A imagem abaixo mostra dois modelos idênticos criados com materiais standard. O da direita tem materiais emissive brilhantes em algumas de suas superfícies.


Para tornar um material emissive no Blender, simplesmente adicione um emission shader ao material.
Emissive Strenght
Força da luz emitida. Um valor de 1.0 garantirá que o objeto na imagem tenha exatamente a mesma cor que a Emission Color, ou seja, torná-lo 'shadeless'.

Você pode checar no testing world como o emission strenght se comporta no mundo
Normal
O nó "normal" em um shader PBR é um componente fundamental usado para controlar as normais de superfície de um material. Normais são vetores que definem a direção perpendicular a uma superfície em um ponto específico, e desempenham um papel crucial em determinar como a luz interage com a superfície.

Vertex Painting
Pintura de vértices (vertex painting) de modelos 3D não é atualmente suportada pelo engine do Decentraland.
Limitações de Material
Tenha em conta que os limites de materiais por parcel são:
log2(n+1) x 20 Quantidade de materiais na cena. Inclui materiais importados como parte de modelos.
É importante considerar que cada material representa uma draw call por objeto, então é crucial manter os materiais no mínimo possível e tentar reutilizar materiais tanto quanto possível usando técnicas como Texture Atlases; isso também beneficiará a cena tendo um estilo coeso entre os assets da sua cena.
Nomeação de Materiais
Para ter um pipeline de arte organizado e saudável recomendamos nomear seus materiais adequadamente. Uma forma de fazer isso é usar este método de convenção.
Então, por exemplo, digamos que fizemos 2 árvores diferentes, uma que é 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,
🟢 Prefira usar nomes começando com o objeto e a classificação: "Wood_Oak_MAT", "SciFiFence_Metallic_MAT", etc.
🔴 Evite usar nomes como "Material009", "material1", o que torna a cena e os modelos realmente difíceis de rastrear e analisar.
Substituir materiais glTF
Você pode sobrescrever os materiais de um arquivo glTF model por meio do uso do GltfNodeModifiers componente no código da sua cena. Veja Modify glTF materials para mais detalhes.
Melhores Práticas para Materiais
Se sua cena inclui múltiplos modelos que usam a mesma textura, referencie a textura como um arquivo externo em vez de tê-la incorporada no modelo 3D.
Texturas incorporadas são duplicadas para cada modelo e aumentam o tamanho da cena. .glb arquivos têm suas texturas incorporadas por padrão, mas você pode usar glTF pipeline para extraí-la para fora.
Nota: Após referenciar um arquivo para uma textura que não será incorporada, certifique-se de que esse arquivo não será movido ou renomeado, caso contrário a referência ao arquivo será perdida. O arquivo também deve estar dentro da pasta da cena para que seja enviado junto com a cena.
Ao definir a transparência de um material, tente sempre usar Alpha clip em vez de Alpha blend, a menos que você precise especificamente ter um material parcialmente transparente (como vidro). Isso evitará problemas onde o engine renderiza o modelo errado na frente do outro.
Como regra prática, lembre-se de sempre definir backface culling em seus materiais. Isso tornará sua cena mais performante, já que o engine irá renderizar apenas a face visível dos seus modelos. Apenas desmarque backface culling caso você precise que um modelo seja renderizado em ambos os lados (por exemplo, um conjunto de folhas de uma árvore feito por planos 3D).

Use as default textures do Decentraland, que são pré-carregadas pelos players, fazendo com que seus assets renderizem muito mais rápido.
Leia este artigo para uma visão detalhada de um pipeline de arte completo que usa texturas PBR em modelos glTF.
Você pode encontrar uma referência detalhada sobre como criar materiais compatíveis com glTF no Blender em Blender’s documentation .
Encontre texturas PBR gratuitas e de alta qualidade em cgbookcase .
Atualizado