Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Using decals
Nota
Decalques são suportados apenas nos renderizadores Forward+ e Mobile, não no renderizador Compatibility.
Se estiver usando o renderizador de Compatibilidade, considere usar o Sprite3D como alternativa para projetar decalques em superfícies (principalmente) planas.
Decals são texturas projetadas que se aplicam em superfícies opacas ou transparentes em 3D. Essa projeção acontece em tempo real e não depende da geração de malhas. Isso permite mover decals a cada frame com apenas um pequeno impacto no desempenho, mesmo quando aplicados em malhas complexas.
Embora decalques (Decals) não possam adicionar detalhes geométricos reais à superfície projetada, eles ainda podem recorrer ao uso de renderização baseada em física para fornecer propriedades semelhantes a materiais completos de PBR.
On this page, you'll learn:
Como configurar decalques no editor 3D.
Como criar decalques durante o jogo em uma cena 3D (como impactos de balas).
Como equilibrar a configuração do decalque entre desempenho e qualidade.
Ver também
O repositório de projetos de demonstração do Godot contém uma demonstração de decalques 3D.
Se você deseja escrever texto 3D arbitrário sobre uma superfície, use Texto 3D colocado próximo a uma superfície em vez de um nó Decal.
Casos de uso
Static decoration
Às vezes, a maneira mais rápida de adicionar detalhes de textura a uma cena é usar decalques. Isso é especialmente verdadeiro para detalhes orgânicos, como manchas de sujeira ou areia espalhadas em uma superfície grande. Os decalques podem ajudar a quebrar a repetição de texturas em cenas e fazer com que os padrões pareçam mais naturais. Em uma escala menor, os decalques também podem ser usados para criar variações de detalhes para objetos. Por exemplo, os decalques podem ser usados para adicionar porcas e parafusos sobre a geometria de uma superfície rígida.
Como decals podem injetar suas próprias propriedades de PBR sobre as superfícies projetadas, eles também podem ser usados para criar pegadas ou poças de água.
Sujeira adicionada sobre a geometria do nível usando decalques
Elementos de jogabilidade dinâmicos
Os decalques podem representar efeitos de jogo temporários ou persistentes, como impactos de balas e queimaduras de explosões.
Usando um nó AnimationPlayer ou um script, decals podem ser configurados para desaparecer com o tempo (e depois serem removidos usando queue_free()) para melhorar o desempenho.
Blob shadows
Sombras blob são frequentemente usadas em projetos para dispositivos móveis (ou para seguir um estilo artístico retrô), já que a iluminação em tempo real tende a ser muito custosa em dispositivos móveis de baixo desempenho. No entanto, ao depender de lightmaps pré-calculados com luzes totalmente bakeadas, objetos dinâmicos não projetarão nenhuma sombra dessas luzes. Isso faz com que objetos dinâmicos em cenas com lightmaps pareçam planos em comparação com a iluminação em tempo real, quase dando a impressão de que estão flutuando.
Graças às sombras blob, objetos dinâmicos ainda podem projetar uma sombra aproximada. Isso não apenas ajuda na percepção de profundidade na cena, como também pode ser um elemento de gameplay, especialmente em jogos de plataforma 3D. O comprimento da sombra blob pode ser estendido para indicar ao jogador onde ele irá aterrissar caso caia diretamente para baixo.
Mesmo com iluminação em tempo real, sombras blob ainda podem ser úteis como uma forma de oclusão de ambiente para situações em que o SSAO é muito custoso ou instável devido à sua natureza em espaço de tela. Por exemplo, as sombras na parte inferior de veículos são bem representadas usando sombras blob.
Comparação de sombra blob sob o objeto
Guia de início rápido
Creating decals in the editor
Create a Decal node in the 3D editor.
In the inspector, expand the Textures section and load a texture in Textures > Albedo.
Mova o nó Decal em direção a um objeto e, em seguida, gire-o para que o decal fique visível (e na orientação correta). Se o decal aparecer espelhado, tente girá-lo em 180 graus. Você pode verificar se ele está na orientação correta aumentando Parameters > Normal Fade para 0.5. Isso impedirá que o Decal seja projetado em superfícies que não estejam voltadas para ele.
Se o seu decal for destinado a afetar somente objetos estáticos, configure-o para evitar que afete objetos dinâmicos (ou vice-versa). Para isso, altere a propriedade Cull Mask do decal para excluir certas camadas. Depois disso, modifique os nós MeshInstance3D de seus objetos dinâmicos para mudar suas camadas de visibilidade. Por exemplo, você pode movê-los da camada 1 para a camada 2 e, em seguida, desativar a camada 2 na propriedade Cull Mask do decal.
Decal node properties
Extensões: O tamanho do decal. O eixo Y determina o comprimento da projeção do decal. Mantenha o comprimento da projeção o mais curto possível para melhorar as oportunidades de descarte (culling) e, consequentemente, o desempenho.
Texturas
Albedo: O mapa de albedo (difuso/cor) a ser usado para o decal. Na maioria das situações, esta é a textura que você deve definir primeiro. Se estiver usando um mapa normal ou ORM, um mapa de albedo deve ser definido para fornecer um canal alfa. Esse canal alfa será usado como uma máscara para determinar o quanto os mapas normal/ORM irão afetar a superfície subjacente.
Normal: O mapa normal a ser usado para o decalque. Ele pode ser usado para aumentar a percepção de detalhe no decalque, modificando como a luz reage a ele. O impacto dessa textura é multiplicado pelo canal alfa da textura de albedo (mas não pelo Albedo Mix).
ORM: O mapa de Oclusão/Rugosidade/Metálico a ser usado para o decal. Este é um formato otimizado para armazenar mapas de materiais PBR. O mapa de Oclusão de Ambiente é armazenado no canal vermelho, o mapa de rugosidade no canal verde e o mapa metálico no canal azul. O impacto dessa textura é multiplicado pelo canal alfa da textura de albedo (mas não pelo Albedo Mix).
Emission: A textura de emissão a ser usada para o decalque. Diferente do Albedo, essa textura parecerá brilhar no escuro.
Parâmetros
Energia de Emissão: O brilho da textura de emissão.
Modulate: Multiplica a cor das texturas de albedo e emissão. Use isso para colorir decals (por exemplo, para decals de tinta ou para aumentar a variação ao randomizar a modulação de cada decal).
Albedo Mix: A opacidade da textura de albedo. Diferente de usar uma textura de albedo com um canal alfa mais transparente, reduzir esse valor abaixo de
1.0não diminui o impacto da textura normal/ORM sobre a superfície subjacente. Defina este valor como0.0ao criar decals apenas de normal/ORM, como pegadas ou poças de água.Normal Fade: Faz o decal desaparecer se o ângulo entre o AABB do decal e a superfície alvo se tornar muito grande. Um valor de
0.0projeta o decal independentemente do ângulo, enquanto um valor de0.999limita o decal a superfícies quase perpendiculares. Definir Normal Fade para um valor maior que0.0tem um pequeno custo de desempenho devido aos cálculos adicionais de ângulo normal.
Vertical Fade
Upper Fade: A curva ao longo da qual o decal desaparecerá à medida que a superfície se afasta do centro do AABB (na direção do ângulo de projeção do decal). Somente valores positivos são válidos.
Lower Fade: A curva ao longo da qual o decal desaparecerá à medida que a superfície se afasta do centro do AABB (na direção oposta ao ângulo de projeção do decal). Somente valores positivos são válidos.
Distance Fade
Enabled: Controla se o desvanecimento por distância (uma forma de LOD) está habilitado. O decal desaparecerá ao longo de Begin + Length, após o que será descartado e não será enviado para o shader. Use isso para reduzir o número de decals ativos em uma cena e, assim, melhorar o desempenho.
Begin: A distância da câmera na qual o decalque começa a desaparecer (em unidades 3D).
Length: A distância ao longo da qual o decal desaparece (em unidades 3D). O decal se torna lentamente mais transparente ao longo dessa distância e fica completamente invisível no final. Valores mais altos resultam em uma transição de desaparecimento mais suave, o que é mais adequado quando a câmera se move rapidamente.
Cull Mask
Cull Mask: Especifica em quais camadas de VisualInstance3D este decal será projetado. Por padrão, decals afetam todas as camadas. Isso é usado para que você possa especificar quais tipos de objetos recebem o decal e quais não recebem. Isso é especialmente útil para garantir que objetos dinâmicos não recebam acidentalmente um Decal destinado ao terreno sob eles.
Decal rendering order
Por padrão, os decalques são ordenados com base no tamanho de seu AABB e na distância até a câmera. AABBs que estão mais próximos da câmera são renderizados primeiro, o que significa que a ordem de renderização dos decals pode às vezes parecer mudar dependendo da posição da câmera, caso alguns decals estejam posicionados no mesmo local.
Para resolver isso, você pode ajustar a propriedade Sorting Offset na seção VisualInstance3D do inspetor do nó Decal. Esse deslocamento não é uma ordem de prioridade rígida, mas sim uma diretriz que o renderizador usará, já que o tamanho do AABB ainda afeta como a ordenação dos decals funciona. Portanto, valores mais altos irão sempre resultar no decal sendo desenhado acima de outros decals com um deslocamento de ordenação menor.
Se você quiser garantir que um decal seja sempre renderizado acima de outros decals, é necessário definir sua propriedade Sorting Offset para um valor positivo maior que o comprimento do AABB do maior decal que possa se sobrepor a ele. Para que esse decal seja desenhado atrás de outros decals, em vez disso, defina o Sorting Offset para o mesmo valor negativo.
Comparação de Sorting Offset do VisualInstance3D em Decals
Tweaking performance and quality
O desempenho da renderização de decals é determinado principalmente pela sua cobertura na tela, mas também pela sua quantidade. Em geral, alguns decals grandes que cobrem a maior parte da tela serão mais caros de renderizar do que muitos decals pequenos espalhados pela cena.
Para melhorar o desempenho de renderização, você pode habilitar a propriedade Distance Fade conforme descrito acima. Isso fará com que decals distantes desapareçam quando estiverem longe da câmera (podendo ter pouco ou nenhum impacto na renderização final da cena). Usando grupos de nós, você também pode evitar que decals decorativos não essenciais sejam instanciados com base na configuração do usuário.
Como os decalques são renderizados também impacta no desempenho. A configuração avançada do projeto Rendering > Textures > Decals > Filter permite controlar como as texturas de decal devem ser filtradas. Nearest/Linear não utiliza mipmaps. No entanto, os decals parecerão granulados à distância. Nearest/Linear Mipmaps terão uma aparência mais suave à distância, mas os decals parecerão borrados quando vistos de ângulos oblíquos. Isso pode ser resolvido usando Nearest/Linear Mipmaps Anisotropic, que fornece a maior qualidade, mas também é mais lento para renderizar.
Se o seu projeto tiver um estilo de pixel art, considere definir o filtro para um dos valores Nearest para que os decals usem filtragem por vizinho mais próximo. Caso contrário, mantenha em Linear.
Limitações
Decals não podem afetar propriedades de materiais além das listadas acima, como altura (para parallax mapping).
Por razões de desempenho, decals usam somente lógica de renderização fixa. Isso significa que decals não podem usar shaders personalizados. No entanto, shaders personalizados nas superfícies projetadas conseguem ler as informações que são substituídas por decals sobre elas, como roughness e metallic.
Ao usar o renderizador Avançado+, o Godot utiliza uma abordagem de clustering para a renderização de decals. Quantos decals forem desejados podem ser adicionados (desde que o desempenho permita). No entanto, ainda existe um limite padrão de 512 elementos agrupados que podem estar presentes na visão atual da câmera. Um elemento agrupado é uma omni light, uma spot light, um decal ou uma reflection probe. Esse limite pode ser aumentado ajustando Max Clustered Elements em Configurações de Projeto > Renderização > Limites > Cluster Builder.
Ao usar o renderizador Mobile, apenas 8 decals podem ser aplicados em cada resource de Mesh individual. Se houver mais decals afetando uma única mesh, nem todos serão renderizados nela.