Material Spatial

Introdução

SpatialMaterial é um material 3D padrão que visa fornecer a maioria dos recursos que os artistas procuram em um material, sem a necessidade de escrever código de shader. No entanto, ele pode ser convertido em código de shader se for necessária funcionalidade adicional.

Este tutorial explica a maioria dos parâmetros presentes no SpatialMaterial.

Existem 4 maneiras de adicionar um SpatialMaterial a um objeto. Ele pode ser adicionado na propriedade Material da malha. Ele pode ser adicionado na propriedade Material do nó usando a malha (como um nó MeshInstance), na propriedade Substituição de material do nó usando a malha e na Sobreposição de material.

../../_images/add_material.png

Se você adicionar um material à própria malha, toda vez que a malha for usada, ela terá esse material. Se você adicionar um material ao nó usando a malha, o material será usado apenas por esse nó e também substituirá a propriedade do material da malha. Se um material for adicionado na propriedade Sobreposição de material do nó, ele será usado apenas por esse nó. Ele também substituirá a propriedade de material regular do nó e a propriedade de material da malha.

A propriedade Material Overlay renderizará um material sobre o atual sendo usado pela malha. Por exemplo, isso pode ser usado para colocar um efeito de escudo transparente em uma malha.

Sinalizadores

Os materiais espaciais têm muitos sinalizadores que determinam o uso geral de um material.

../../_images/spatial_material1.png

Transparente

Em Godot, os materiais não são transparentes, a menos que especificamente configurados para ser. A principal razão por trás disso é que os materiais transparentes são renderizados usando uma técnica diferente (classificados de trás para frente e renderizados em ordem).

Esta técnica é menos eficiente (muitas mudanças de estado acontecem) e torna os materiais inutilizáveis com muitos efeitos de médio e pós-processamento (como SSAO, SSR, etc.) que exigem geometria perfeitamente opaca.

Por esta razão, os materiais no Godot são assumidos como opacos, a menos que especificado de outra forma. As principais configurações que permitem a transparência são:

  • Sinalizador Transparente (este)

  • Modo de mesclagem definido como diferente de "Mix"

  • Ativando o desaparecimento de distância ou proximidade

Use sombra para opacidade

A iluminação modifica o alfa para que as áreas sombreadas sejam opacas e as áreas não sombreadas sejam transparentes. Útil para sobrepor sombras em câmera de RA.

Sem sombra

Na maioria dos casos, é comum que os materiais sejam afetados pela iluminação (shaded).

No entanto, em alguns casos, você pode querer mostrar apenas o albedo (cor) e ignorar o resto. Ativar esse sinalizador removerá todo o sombreamento e exibirá cores puras e não iluminadas.

../../_images/spatial_material26.png

Vertex Lighting (Iluminacão de vértices)

Godot tem um custo mais ou menos uniforme por pixel, graças à pré-passagem de profundidade. Todos os cálculos de iluminação são feitos executando o shader de iluminação em cada pixel.

Como esses cálculos são custosos, o desempenho pode ser reduzido consideravelmente em alguns casos extremos, como desenhar várias camadas de transparência (o que é comum em sistemas de partículas). Mudar para a iluminação por vértice pode ajudar nesses casos.

Além disso, em dispositivos mais simples ou móveis, a mudança para iluminação de vértice pode aumentar consideravelmente o desempenho de renderização.

../../_images/spatial_material2.png

Tenha em mente que quando a iluminação do vértice está habilitada, somente a iluminação direcional pode produzir sombras (por razões de desempenho).

Sem Teste de Profundidade

Para que objetos próximos apareçam sobre objetos distantes, é realizado um teste de profundidade. Desativá-lo tem como resultado objetos aparecendo sobre (ou abaixo) de todo o resto.

Desativar isso faz mais sentido para desenhar indicadores no espaço do mundo e funciona muito bem com a propriedade Render Priority do Material (veja o final desta página).

../../_images/spatial_material3.png

Usar Point Size (Tamanho de ponto)

Esta opção só é eficaz quando a geometria renderizada é feita de pontos (geralmente é feita de triângulos quando importados de DCCs 3D). Se assim for, então esses pontos podem ser redimensionados (ver abaixo).

Triplanar Global

Ao usar o mapeamento triplanar (veja abaixo, nas configurações UV1 e UV2), o triplanar é calculado no espaço local do objeto. Esta opção faz com que o triplanar funcione no espaço mundial.

Tamanho Fixo

Isso faz com que o objeto seja renderizado no mesmo tamanho, independentemente da distância. Isso é útil principalmente para indicadores (sem teste de profundidade e alta prioridade de renderização) e alguns tipos de billboards.

Não Receber Sombras

Faz com que o objeto não receba nenhum tipo de sombra que de outra forma seria lançada sobre ele.

Desativar a luz ambiente

Faz com que o objeto não receba qualquer tipo de iluminação ambiente que de outra forma o iluminaria.

Garanta os Normais Corretos

Corrige normais quando uma escala não uniforme é usada.

Cor do vértice

Essa configuração permite escolher o que é feito por padrão para cores de vértice que vêm do seu aplicativo de modelagem 3D. Por padrão, eles são ignorados.

../../_images/spatial_material4.png

Use como Albedo

Escolhendo esta opção significa que a cor do vértice é usada como cor albedo.

É sRGB

A maioria dos DCCs 3D provavelmente exportará cores de vértice como sRGB, portanto, alternar essa opção os ajudará a parecer corretos.

Parâmetros

SpatialMaterial também possui vários parâmetros configuráveis para ajustar muitos aspectos da renderização:

../../_images/spatial_material5.png

Modo Difuso

Especifica o algoritmo usado pela dispersão difusa da luz ao atingir o objeto. O padrão é Burley. Outros modos também estão disponíveis:

  • Burley: Modo padrão, o algoritmo difuso Disney Principled PBS original.

  • Lambert: Não é afetado pela rugosidade.

  • Lambert Wrap: Amplia o Lambert para cobrir mais de 90 graus quando a rugosidade aumenta. Funciona muito bem para o cabelo e simula a dispersão de baixo custo da superfície subterrânea. Esta implementação conserva energia.

  • Oren Nayar: Esta implementação visa levar em conta a micro-superfície (via rugosidade). Funciona bem para materiais semelhantes ao barro e alguns tipos de tecido.

  • Toon: Fornece um corte duro para iluminação, com alisamento afetado pela rugosidade. Recomenda-se que você desative a contribuição do céu das configurações de luz ambiente do seu ambiente ou desative a luz ambiente no material espacial para obter um efeito melhor.

../../_images/spatial_material6.png

Modo Especular

Especifica como o blob especular será renderizado. O blob especular representa a forma de uma fonte de luz refletida no objeto.

  • ShlickGGX: O blob mais comum utilizado pelos motores PBR 3D atualmente.

  • Blinn: Comum em motores da geração anterior. Não vale a pena usar hoje em dia, mas deixado aqui por uma questão de compatibilidade.

  • Phong: O mesmo que acima.

  • Toon: Cria um blob toon, que muda de tamanho dependendo da rugosidade.

  • Desativado: Às vezes, o reflexo atrapalha. Vá embora!

../../_images/spatial_material7.png

Modo de mesclagem

Controla o modo de mesclagem do material. Lembre-se de que qualquer modo diferente de Mix força o objeto a passar pelo pipeline transparente.

  • Mix: Modo de mesclagem padrão, alfa controla o quanto o objeto é visível.

  • Add: O objeto é misturado de forma aditiva, bom para chamas ou alguns efeitos semelhantes a fogo.

  • Sub: O objeto é subtraído.

  • Mul: O objeto é multiplicado.

../../_images/spatial_material8.png

Cull Mode

Determina qual lado do objeto não é desenhado quando as faces traseiras são renderizadas:

  • Back: A parte de trás do objeto é retirada quando não visível (padrão).

  • Front: A frente do objeto é cortada quando não é visível.

  • Disabled: Utilizado para objetos com dupla face (não é realizado nenhuma retirada).

Nota

Por padrão, o Blender tem a eliminação de faces desabilitada nos materiais e irá exportar os materiais para combinar como eles renderizam no Blender. Isso significa que os materiais na Godot terão seu modo de eliminação definido como Desativado. Isso pode diminuir o desempenho, uma vez que as faces posteriores serão renderizadas, mesmo quando estão sendo selecionadas por outras faces. Para resolver isso, habilite Backface Culling na aba Materiais do Blender, então exporte a cena para glTF novamente.

Modo de Desenho de Profundidade

Especifica quando a renderização de profundidade deve ocorrer.

  • Somente opaco (padrão): A profundidade é desenhada apenas para objetos opacos.

  • Sempre: O desenho de profundidade é desenhado tanto para objetos opacos quanto transparentes.

  • Nunca: Nenhum desenho de profundidade ocorre (não confunda isso com a opção Sem Teste de Profundidade acima).

  • Depth Pre-Pass: Para objetos transparentes, uma passagem opaca é feita primeiro com as partes opacas, então a transparência é desenhada acima. Use esta opção com grama transparente ou folhagem de árvore.

../../_images/material_depth_draw.png

Largura da linha

Ao desenhar linhas, especifique a largura das linhas que estão sendo desenhadas. Essa opção não está disponível na maioria dos hardwares modernos.

Tamanho do ponto

Ao desenhar pontos, especifique o tamanho do ponto em pixels.

Modo Billboard

Habilita o modo billboard para desenhar materiais. Isso controla como o objeto fica voltado para a câmera:

  • Disabled: Modo Billboard está desativado.

  • Ativado: O modo Billboard está habilitado, o eixo -Z do objeto estará sempre de frente para a câmera.

  • Y-Billboard: o eixo X do objeto sempre estará alinhado com a câmera.

  • Partículas: Mais adequado para sistemas de partículas, pois permite especificar opções de animação.

../../_images/spatial_material9.png

As opções acima estão habilitadas apenas para o Particle Billboard.

Billboard Keep Scale

Permite dimensionar uma malha no modo billboard.

Crescer

Aumenta os vértices do objeto na direção apontada por suas normais:

../../_images/spatial_material10.png

Isto é comumente usado para criar esboços de baixos custos. Adicionar um segundo passe de material, torná-lo preto e sem sombras, reverse culling (Cull Front), e aumentar um pouco o tamanho:

../../_images/spatial_material11.png

Usar Alpha Scissor

Quando não é necessária transparência além de 0 ou 1, é possível estabelecer um limite para evitar que o objeto renderize pixels semitransparentes.

../../_images/spatial_material12.png

Isso renderiza o objeto por meio do pipeline opaco, que é mais rápido e permite usar efeitos intermediários e pós-processamento, como SSAO, SSR, etc.

Cores de materiais, mapas e canais

Além dos parâmetros, o que define os próprios materiais são as cores, texturas e canais. Godot suporta uma extensa lista deles. Eles são descritos em detalhes abaixo:

Albedo

Albedo é a cor base do material, sobre a qual operam todas as outras configurações. Quando ajustado para Unshaded, esta é a única cor que é visível. Nas versões anteriores do Godot, este canal era chamado Diffuse. A mudança de nome aconteceu principalmente porque, em PBR (Physically Based Rendering), esta cor afeta muito mais os cálculos do que apenas o caminho de iluminação difusa.

A cor e a textura do albedo podem ser usadas em conjunto à medida que são multiplicadas.

O alpha channel em cor e textura albedo também é usado para a transparência do objeto. Se você usar uma cor ou textura com alpha channel, certifique-se de ativar a transparência ou alpha scissoring para que ela funcione.

Metálico

O Godot usa um modelo metálico em vez de modelos concorrentes devido a sua simplicidade. Este parâmetro define o quão reflexivo é o material. Quanto mais reflexivo, menos difusa/luz ambiente afeta o material e mais luz é refletida. Este modelo é chamado de "conservação de energia".

O parâmetro Specular é uma quantidade geral para a refletividade (ao contrário de Metallic, isto não economiza energia, portanto deixe-o em 0.5 e não o toque a menos que seja necessário).

A refletividade interna mínima é 0.04, portanto é impossível tornar um material completamente sem reflexão, tal como na vida real.

../../_images/spatial_material13.png

Rugosidade

Rugosidade afeta a maneira como a reflexão acontece. Um valor de 0 faz dele um espelho perfeito, enquanto que um valor de 1 embaça completamente a reflexão (simulando o microsurfacing natural). Os tipos mais comuns de materiais podem ser obtidos com a combinação correta de Metálico e Rugosidade.

../../_images/spatial_material14.png

Emissão

Emissão especifica quanta luz é emitida pelo material (lembre-se de que isso não inclui a geometria ao redor da luz, a menos que Usando o GIProbe sejam usados). Esse valor é adicionado à imagem final resultante e não é afetado por outra iluminação na cena.

../../_images/spatial_material15.png

Mapa Normal

O mapeamento normal permite definir uma textura que representa um detalhe de forma mais fina. Isto não modifica a geometria, apenas o ângulo de incidência da luz. No Godot, apenas os canais vermelho e verde dos mapas normais são usados para uma melhor compressão e compatibilidade mais ampla.

../../_images/spatial_material16.png

Nota

O Godot requer que o normal map use as coordenadas X+, Y- e Z+. Em outras palavras, se você importou um material feito para ser usado com outro motor, pode ser necessário converter o normal map para que seu eixo Y seja invertido. Caso contrário, a direção do normal map pode parecer estar invertida no eixo Y.

Mais informações sobre normal maps (incluindo uma tabela de ordem de coordenadas para motores populares) podem ser encontradas aqui (em Inglês).

Aro

Alguns tecidos têm pequenos micropêlos que fazem com que a luz se espalhe ao seu redor. Godot emula isso com o parâmetro Rim. Ao contrário de outras implementações de iluminação de borda, que usam apenas o canal de emissão, esta realmente leva em consideração a luz (sem luz significa que não há borda). Isso torna o efeito consideravelmente mais realista.

../../_images/spatial_material17.png

O tamanho do "Rim" depende da rugosidade e existe um parâmetro especial para especificar como ele deve ser colorido. Se Tint for 0, a cor da luz é usada para o aro. Se Tint for 1, então o albedo do material é usado. Usar valores intermediários geralmente funciona melhor.

Clearcoat

Esta característica só está disponível quando se utiliza o backend GLES3.

O parâmetro Clearcoat é usado para adicionar uma passagem secundária de revestimento transparente ao material. Isto é comum em pintura de automóveis e brinquedos. Na prática, é um especular blob menor adicionada em cima do material existente.

O efeito é extremamente sutil nas versões Godot 3, e pode exigir iluminação específica ou olhar para um material numa maneira específica para notar diferença. Isso pode ser visto na imagem abaixo onde o clearcoat é ligado à direita.

../../_images/clearcoat_comparison.png

Nota

O efeito será mais perceptível no Godot 4.

Anisotrópico

Esta característica só está disponível quando se utiliza o backend GLES3.

Isso altera a forma do blob especular e o alinha ao espaço tangente. A anisotropia é comumente usada com cabelos ou para tornar materiais como o alumínio escovado mais realistas. Funciona especialmente bem quando combinado com flowmaps.

../../_images/spatial_material18.png

Oclusão de Ambiente

É possível especificar um mapa de oclusão de ambiente pré-calculado. Este mapa afeta quanta luz ambiente atinge cada superfície do objeto (não afeta a luz direta por padrão). Embora seja possível usar Screen-Space Ambient Occlusion (SSAO) para gerar oclusão de ambiente, nada supera a qualidade de um mapa AO bem gerado e gravado. Recomenda-se a oclusão do ambiente seja pré-calculada sempre que possível.

../../_images/spatial_material19.png

Profundidade

Esta característica só está disponível quando se utiliza o backend GLES3.

A colocação de um mapa de profundidade em um material produz uma busca com raios para emular o deslocamento adequado das cavidades ao longo da direção da vista. Isto não é uma verdadeira geometria acrescentada, mas uma ilusão de profundidade. Pode não funcionar para objetos complexos, mas produz um efeito de profundidade realista para texturas. Para melhores resultados, Profundidade deve ser usado junto com o mapeamento normal.

../../_images/spatial_material20.png

Dispersão Subsuperficial

Esta característica só está disponível quando se utiliza o backend GLES3.

Este efeito emula a luz que penetra na superfície de um objeto, se dispersa e depois sai. É útil para criar pele realista, mármore, líquidos coloridos, etc.

../../_images/spatial_material21.png

Transmissão

Isto controla quanta luz do lado iluminado (visível à luz) é transferida para o lado escuro (oposto à luz). Isto funciona bem para objetos finos, tais como folhas de plantas, grama, orelhas humanas, etc.

../../_images/spatial_material22.png

Refração

Esta característica só está disponível quando se utiliza o backend GLES3.

Quando a refração está habilitada, ela substitui a mescla alfa e, em vez disso, Godot tenta buscar informações por trás do objeto que está sendo renderizado. Isso permite distorcer a transparência de maneira semelhante à refração na vida real.

../../_images/spatial_material23.png

Detalhe

Godot permite utilizar albedo secundário e mapas normais para gerar uma textura de detalhe, que pode ser misturada de muitas maneiras. Combinando isto com os modos secundário UV ou triplanar, muitas texturas interessantes podem ser alcançadas.

../../_images/spatial_material24.png

Há várias configurações que controlam como os detalhes são usados.

Máscara: A máscara de detalhes é uma imagem em preto e branco usada para controlar onde a mescla ocorre em uma textura. O branco é para as texturas de detalhe, o preto é para as texturas normais do material, diferentes tons de cinza são para a mistura parcial das texturas do material e das texturas de detalhe.

Modo de mescla: Estes quatro modos controlam como as texturas são misturadas entre si.

  • Mix: Combina valores de pixel de ambas as texturas. No preto, mostre apenas a textura do material, no branco, mostre apenas a textura do detalhe. Valores de cinza criam uma mistura suave entre os dois.

  • Add: Adiciona valores de pixel de uma textura com a outra. Ao contrário do modo de mistura, ambas as texturas são completamente misturadas em partes brancas de uma máscara e não em partes cinzas. A textura original é praticamente inalterada em preto

  • Sub: Subtrai os valores de pixel de uma textura com a outra. A segunda textura é completamente subtraída em partes brancas de uma máscara com apenas uma pequena subtração em partes pretas, partes cinza sendo diferentes níveis de subtração com base na textura exata.

  • Mul: Multiplica os números do canal RGB para cada pixel da textura superior com os valores para o pixel correspondente da textura inferior.

Albedo: Aqui é onde você coloca uma textura de albedo que você quer misturar. Se nada estiver neste slot, ele será interpretado como branco por padrão.

Normal: Aqui é onde você coloca uma textura normal que você quer misturar. Se nada estiver neste espaço, será interpretado como um mapa normal plano. Isto ainda pode ser usado mesmo que o material não tenha o mapa normal habilitado.

UV1 e UV2

Godot suporta dois canais UV por material. UV secundário é muitas vezes útil para a oclusão ambiente ou emissão (luz baked). Os UVs podem ser dimensionados e compensados, o que é útil ao usar texturas repetitivas.

Mapeamento Triplanar

Mapeamento triplanar é suportado para UV1 e UV2. Esta é uma maneira alternativa de obter coordenadas de textura, às vezes chamada de "Autotextura". As texturas são amostradas em X, Y e Z e misturadas pelo normal. Mapeamento triplanar pode ser realizado no espaço mundial ou no espaço objeto.

Na imagem abaixo, você pode ver como todos os primitivos compartilham o mesmo material com o triplanar do mundo, de modo que a textura do tijolo continua suavemente entre eles.

../../_images/spatial_material25.png

Desvanecimento de proximidade e distância

Godot permite que os materiais desapareçam pela proximidade uns dos outros, bem como dependendo da distância em relação ao espectador. O desvanecimento por proximidade é útil para efeitos como partículas macias ou uma massa de água com uma mistura suave para as margens. O desvanecimento por distância é útil para eixos de luz ou indicadores que só estão presentes após uma determinada distância.

Tenha em mente que habilitar isso permite a mistura alfa, portanto, abusar deles por uma cena inteira geralmente não é uma boa ideia.

../../_images/spatial_material_proxfade.gif

Prioridade de Renderização

A ordem de renderização dos objetos pode ser alterada, embora isto seja útil principalmente para objetos transparentes (ou objetos opacos que realizam desenho em profundidade, mas sem desenho colorido, como rachaduras no chão).