Materials
Saiba que propriedades de material e textures são suportadas em modelos 3D importados para o Decentraland.
Os materiais são incorporados num .gltf ou .glb ficheiro.
💡 Dica: Instale o plugin Decentraland Tools Blender. Inclui várias funções úteis para o ajudar a editar e exportar modelos 3D, wearables e emotes.
Este documento refere-se a materiais que são importados num modelo 3D. Para materiais definidos via código para aplicar em formas primitivas, consulte materiais .
📔 Nota: Atualmente, não pode alterar dinamicamente os materiais de um modelo 3D a partir do código da sua cena, a menos que seja uma forma primitiva.
Suporte de Shader
Nem todos os shaders podem ser usados em modelos importados para o Decentraland. Certifique-se de que utiliza um dos seguintes:
Materiais standard: quaisquer shaders são suportados, 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 textures. O modelo à esquerda usa apenas PBR materiais, alguns deles incluem metalness, transparency, e emissiveness. O modelo à direita usa apenas standard materiais, alguns incluindo transparency e emissiveness.
Propriedades PBR que atualmente funcionam com a Engine do Decentraland
Base Color
Metallic
Roughness
Specular
Emissive
Emission Strength
Alpha
Normal
Para visualizar como estas propriedades se comportam no mundo, pode ir a este mundo de teste para encontrar diferentes objetos e materiais e ver como interagem com as luzes e com o ambiente do mundo.
Base/Diffuse Color
Define a cor base da superfície do objeto. Por si só, não é afetada pela iluminação, por isso é combinada com outros nodes, como roughness, metallic, specular, etc.
Metallic
Um metallic shader refere-se a um tipo de técnica de rendering usada para simular o aspeto de superfícies metálicas. Um metallic shader 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.
Roughness
Os materiais roughness estão relacionados com a simulação realista de como a luz interage com a superfície do material. Normalmente, os roughness maps são usados para dar aos modelos um intervalo de "suavidade" ou "rugosidade" nas suas superfícies. Normalmente é usado um texture map em escala de cinzentos para fornecer informação deste tipo.
Esta propriedade mistura entre um modelo de material não metálico e metálico. Um valor de 1.0 proporciona uma reflexão specular totalmente tingida com a base color, sem reflexão diffuse nem transmissão. Em 0.0, o material consiste numa camada base diffuse ou transmissiva, com uma camada de reflexão specular por cima.
Specular
Num shader de Physically-Based Rendering (PBR), as propriedades specular referem-se à forma como a luz interage com uma superfície em termos da sua refletividade e brilho. A reflexão specular é a reflexão da luz numa superfície em forma de espelho. Em PBR, esta propriedade é usada para controlar quanta luz uma superfície reflete de forma espelhada. 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 menor reflexão specular, resultando em realces mais amplos e suaves.
Alpha
Pode definir um material como transparente. Os materiais transparentes podem ser vistos através em graus variados, dependendo do seu alpha. Para fazer isto, ative a propriedade de transparência do material e depois defina 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.
💡 Lembre-se de que usar materiais transparentes é sempre mais dispendioso em termos de desempenho do que materiais diffuse. Tente sempre manter os materiais transparentes o mais reduzidos possível.
Existem dois modos principais de transparência: Alpha Clip e Alpha Blend. As principais diferenças são:
Alpha Clip: O Alpha Clip renderiza valores absolutos de 0 ou 1, dado um limiar de corte de um valor em escala de cinzentos. 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.
Alpha Blend: O Alpha Blend interpola os valores entre 0 e 1. Pode usar alpha blending para sobrepor a cor da superfície à cor anterior.
🔥Dica de otimização🔥 A menos que queira especificamente poder ter um nível intermédio de transparência, é sempre mais performante para o rendering usar _Alpha Clip** em vez de **Alpha Blend_.
⚠️ Problemas de Sorting
Quando usa modos de transparent blend no seu jogo, é crucial considerar a ordem pela qual a mistura de cores acontece. Isto porque a cor final resultante pode ser significativamente afetada pela ordem da mistura. Atualmente, a Engine apenas suporta sorting por objeto, o que significa que ordena automaticamente todas as superfícies transparentes com base na origem do objeto. No entanto, sorting por fragmento (pixel) e sorting por triângulo não são atualmente suportados.
Para evitar problemas relacionados com sorting, o melhor é evitar usar objetos com alpha clip e alpha blend na mesma mesh. Isto pode ajudar a prevenir artefactos inesperados de blending e garantir que o seu jogo tem o melhor aspeto possível.
Emissive
Também pode tornar um material emissive. Os materiais emissive emitem a sua própria luz. Note 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.
Para tornar um material emissive no Blender, basta adicionar um shader de emission ao material.
Intensidade Emissive
Intensidade 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".
Pode verificar no mundo de teste como a emission strength se comporta no mundo
Normal
O node "normal" num shader PBR é um componente fundamental usado para controlar as normais da superfície de um material. As normais são vetores que definem a direção perpendicular a uma superfície num ponto específico, e desempenham um papel crucial na determinação de como a luz interage com a superfície.
Vertex Painting
O vertex painting de modelos 3D não é atualmente suportado pela Engine do Decentraland.
Limitações de materiais
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 ter em conta que cada material representa um draw call por objeto, por isso é crucial manter os materiais no mínimo possível e tentar reutilizá-los tanto quanto possível, recorrendo a técnicas como Texture Atlases; isto também beneficiará a cena, dando um estilo coeso entre os assets da sua cena.
Nomeação de materiais
Para ter um pipeline artístico organizado e saudável, recomendamos que dê nomes adequados aos seus materiais. Uma forma de o fazer é usar este método de convenção.
Assim, por exemplo, digamos 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,
🟢 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", o que torna a cena e os modelos realmente difíceis de acompanhar e analisar.
Substituir materiais glTF
Pode substituir os materiais de um glTF modelo usando o GltfNodeModifiers component no código da sua cena. Consulte Modificar materiais glTF para mais detalhes.
Boas práticas para materiais
Se a sua cena incluir vários modelos que usam a mesma Texture, referencie a Texture como um 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 suas textures incorporadas por predefinição, mas pode usar glTF pipeline para a extrair para fora.
Nota: Depois de referenciar um ficheiro para uma texture que não será incorporada, certifique-se 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, tente usar sempre Alpha clip em vez de Alpha blend, a menos que precise especificamente de ter um material parcialmente transparente (como vidro). Isto evitará problemas em que a Engine renderiza o modelo errado à frente do outro.
Como regra geral, lembre-se de definir sempre backface culling nos seus materiais. Isto tornará a sua cena mais performante, dado que a Engine irá renderizar apenas a face visível dos seus modelos. Só desative backface culling caso precise que um modelo seja renderizado em ambos os lados (por exemplo, um grupo de folhas de uma árvore feito com planos 3D).
Use as default textures , que são pré-carregadas pelos jogadores, fazendo com que os seus assets renderizem muito mais depressa.
Leia este artigo para uma visão detalhada de um pipeline artístico completo que usa textures PBR em modelos glTF.
Pode encontrar uma referência detalhada sobre como criar materiais compatíveis com glTF com o Blender em a documentação do Blender .
Encontre textures PBR gratuitas e de alta qualidade em cgbookcase .
Atualizado