Voltar para o Blog
Quest Log

Materiais e Texturas na Unity: Lit, Albedo e Normal Map

Caixote de madeira 3D com cantoneiras de metal ao lado de quatro mapas de textura: cor, metálico, normal e oclusão

Unity materials no URP pelos slots do Lit: Base Map, Metallic e Smoothness, Normal Map e Occlusion, com um caixote de exemplo e o import de textura certo.

Ferramenta:Unity

Materiais e Texturas na Unity: Lit, Albedo e Normal Map

Unity materials são assets que dizem ao shader como desenhar uma superfície. No URP, o shader padrão é o Universal Render Pipeline/Lit, e entender um material é entender os slots dele: Base Map (a cor), Metallic Map com Smoothness (o quanto é metal e o quanto brilha), Normal Map (relevo falso) e Occlusion Map (sombra de contato). Aqui você monta um caixote de madeira com cantoneiras de metal usando os quatro, configura o import de cada textura do jeito certo e resolve os três problemas que todo mundo encontra: material rosa, normal invertida e tudo brilhando como plástico molhado.

O import da textura é metade do resultado. Um normal map importado como imagem comum ou um mapa de metallic marcado como sRGB estraga o material, e o Inspector não grita.

Material, shader e textura: quem é quem

Três peças que tutoriais tratam como sinônimo:

  • Shader: o programa que roda na GPU e calcula a cor de cada pixel a partir da luz, da câmera e de parâmetros. Você raramente escreve um; usa os do URP ou monta no Shader Graph.
  • Material: um asset .mat que escolhe um shader e preenche os parâmetros dele. "Madeira do caixote" é um material. Vários objetos podem compartilhar o mesmo material, e é bom que compartilhem.
  • Textura: uma imagem. Ela só faz sentido dentro de um slot de material. A mesma imagem pode ser cor num material e máscara em outro.

Criar um material: no Project, Create > Material. Ele já vem com o shader Universal Render Pipeline/Lit num projeto URP. Arraste o material para o objeto na cena ou para o campo Materials do Mesh Renderer.

A textura depende do UV do modelo para saber onde cada pixel cai na superfície. Se o UV estiver mal feito, nenhum material conserta; o post sobre texturas e UV mapping explica essa base.

Materiais na Unity com URP Lit: os slots principais

Selecione o material. O Inspector do Lit tem quatro blocos:

Surface Options

  • Workflow Mode: Metallic (padrão) ou Specular.
  • Surface Type: Opaque ou Transparent. Vidro e água usam Transparent; o resto, Opaque.
  • Render Face: Front (padrão), Back ou Both. Both serve para folhas e tecido de um lado só.
  • Alpha Clipping: recorta pixels abaixo de um Threshold de alfa. É o jeito barato de fazer grade, folha e cerca sem transparência real.
  • Receive Shadows: recebe sombra de outros objetos.

Surface Inputs: Base Map, Metallic Map, Smoothness com Source, Normal Map, Height Map, Occlusion Map, Emission, Tiling e Offset.

Detail Inputs: uma segunda camada de textura e normal, com máscara, para detalhe fino de perto.

Advanced Options: Specular Highlights, Environment Reflections, Sorting Priority e Enable GPU Instancing.

O caixote de exemplo usa estas texturas, todas em 1024 x 1024:

ArquivoConteúdoSlot
T_Caixote_BaseColor.pngcor da madeira e do metalBase Map
T_Caixote_MetallicSmooth.pngR = metallic, A = smoothnessMetallic Map
T_Caixote_Normal.pngrelevo das tábuas e pregosNormal Map
T_Caixote_AO.pngsombra nos vãos entre tábuasOcclusion Map

Albedo/Base Map e cor

O Base Map é a cor da superfície sem luz nenhuma: o que antes se chamava albedo. Arraste a textura para o quadradinho à esquerda do nome. O campo de cor ao lado multiplica a textura: branco mantém a cor original, qualquer outra tinge.

Regra de ouro do Base Map num material PBR: sem sombra e sem brilho pintados. A sombra vem da luz da cena e do Occlusion Map; o brilho vem do Smoothness. Uma textura de madeira com sombra pintada fica certa num ângulo e errada em todos os outros.

O Tiling repete a textura. Num chão de 10 x 10 metros, Tiling (10, 10) com uma textura de 1 metro mantém a escala real. No caixote, deixe (1, 1), porque o UV já está feito para ele.

Metallic, Smoothness e o canal alfa

Metallic diz se a superfície é metal (1) ou não (0). Valores intermediários quase nunca existem na vida real; usam-se só em transição, como metal sujo ou enferrujado. No caixote, a madeira é 0 e as cantoneiras são 1.

Smoothness diz o quão polida é a superfície. Alto dá reflexo nítido, baixo espalha a luz. Madeira crua fica em 0,2 a 0,3; metal polido, 0,8 a 0,9.

Os dois podem ser um número único (sliders) ou uma textura. No workflow Metallic, a textura do slot Metallic Map é lida assim:

  • Canal R: metallic.
  • Canal A (alfa): smoothness, quando Source está em Metallic Alpha (o padrão).

A outra opção de Source é Albedo Alpha, que lê o smoothness do alfa do Base Map. Útil quando o material não tem metal nenhum e você quer economizar uma textura.

Se o seu pacote de textura veio com Roughness em vez de Smoothness (comum em exportação de Substance Painter, ArmorPaint e bibliotecas PBR), inverta o mapa: smoothness = 1 menos roughness. No GIMP, Cores > Inverter; no Krita, Ctrl+I. Faça isso no mapa de roughness antes de combiná-lo no alfa.

Ao importar essa textura, desmarque sRGB (Color Texture). Ela guarda dados, não cor; com sRGB ligado, a Unity aplica correção de gama e os valores de metal e brilho ficam errados.

Normal Map: importar como Normal map

O normal map é a textura azul-arroxeada que finge relevo: as tábuas parecem ter frestas e os pregos parecem saltados, sem um triângulo a mais.

  1. Selecione T_Caixote_Normal.png no Project.
  2. No Import Settings, mude Texture Type para Normal map e clique em Apply.
  3. Arraste para o slot Normal Map do material. O número ao lado é a intensidade; 1 é o valor do arquivo.

Se você esquecer o passo 2, o material mostra o aviso de que a textura não está marcada como normal map, com o botão Fix Now. Clique. Sem isso, a Unity lê a textura como cor e a iluminação fica errada.

Duas opções do tipo Normal map:

  • Create from Grayscale: gera o normal map a partir de uma imagem em tons de cinza (um mapa de altura), com o slider Bumpiness. Resolve rápido, mas fica inferior a um normal map assado de um modelo detalhado.
  • Flip Green Channel: inverte o canal verde. É a correção para normal map feito na convenção DirectX. A Unity usa a convenção OpenGL (verde para cima). Se o relevo parece "afundado" onde deveria estar saltado, é isso.

O Occlusion Map vai no slot de mesmo nome. O URP lê o canal verde dessa textura, então um AO em tons de cinza funciona direto. Importe também com sRGB desmarcado.

Configurar um caixote bonito é a parte gratificante. O que costuma travar é o projeto inteiro: dezenas de materiais organizados, cenário com iluminação que não estoura, personagem com textura que não fica rosa no build e um jogo que roda liso. Cada peça isolada tem tutorial; o encaixe delas num jogo publicável é o que quase ninguém mostra.

Curso de Unity
Quer fazer seu primeiro jogo na Unity?

No curso de Unity 6 da CursoGame.Dev você vai do zero ao primeiro jogo, com um desafio prático em cada level e suporte individual no WhatsApp quando travar.

Conhecer o curso de Unity
Suporte no WhatsAppAcesso vitalícioGarantia de 7 dias

Configurar import de textura: sRGB, compressão, tamanho

Resumo do Import Settings para cada mapa:

MapaTexture TypesRGB (Color Texture)
Base MapDefaultligado
Metallic/SmoothnessDefaultdesligado
Normal MapNormal map(não se aplica)
OcclusionDefaultdesligado
EmissionDefaultligado

E para todos:

  • Max Size: o maior tamanho que a Unity usa. Uma textura de 4096 com Max Size 1024 entra no jogo em 1024. Caixote pequeno não precisa de 2048; personagem principal talvez precise.
  • Compression: Normal Quality na maioria. High Quality para normal map de herói e textura de UI. Compressão baixa em normal map gera blocos visíveis na luz rasante.
  • Generate Mipmaps: ligado em textura 3D. Sem mipmap, superfície distante "cintila".
  • Wrap Mode: Repeat para texturas que se repetem (chão, parede), Clamp para decalques e UI.

Use as abas de plataforma (Android, iOS) para reduzir o Max Size só no mobile, sem mexer no PC.

Se você vem do Godot, o equivalente é o StandardMaterial3D, com os mesmos conceitos de PBR e nomes um pouco diferentes; o post de material 3D PBR no Godot faz o mapeamento.

Mudar material por script sem duplicar sem querer

Um erro de código comum: mexer em renderer.material cria uma cópia do material para aquele objeto, e cada cópia é um material novo na memória. Para destacar o caixote quando o jogador olha para ele, use MaterialPropertyBlock, que muda um parâmetro só naquele renderer sem criar material. Crie CrateHighlight.cs:

using UnityEngine;

[RequireComponent(typeof(Renderer))]
public class CrateHighlight : MonoBehaviour
{
    private static readonly int BaseColorId = Shader.PropertyToID("_BaseColor");
    private static readonly int EmissionColorId = Shader.PropertyToID("_EmissionColor");

    [SerializeField] private Color highlightColor = new Color(1f, 0.85f, 0.4f);
    [SerializeField] private float emissionIntensity = 0.6f;

    private Renderer targetRenderer;
    private MaterialPropertyBlock propertyBlock;

    private void Awake()
    {
        targetRenderer = GetComponent<Renderer>();
        propertyBlock = new MaterialPropertyBlock();
    }

    public void SetHighlighted(bool highlighted)
    {
        targetRenderer.GetPropertyBlock(propertyBlock);

        if (highlighted)
        {
            propertyBlock.SetColor(BaseColorId, highlightColor);
            propertyBlock.SetColor(EmissionColorId, highlightColor * emissionIntensity);
        }
        else
        {
            propertyBlock.Clear();
        }

        targetRenderer.SetPropertyBlock(propertyBlock);
    }
}

_BaseColor e _EmissionColor são os nomes internos das propriedades do Lit (aparecem no Inspector em modo Debug, pelo menu de três pontos do Inspector). Para a emissão aparecer, ligue Emission no material antes. Um aviso honesto: objeto com property block sai do lote do SRP Batcher. Para um caixote destacado por vez, não faz diferença; para centenas de objetos mudando cor, prefira materiais separados.

Erros comuns: material rosa, normal invertida, tudo brilhando

Material rosa (ou magenta). O shader do material não existe ou não é compatível com o pipeline do projeto. Caso clássico: material com shader Standard do Built-In num projeto URP. Troque para Universal Render Pipeline/Lit, ou use Window > Rendering > Render Pipeline Converter para converter vários de uma vez. O caso completo, com shader customizado e build, está no post sobre material rosa na Unity.

Normal invertida (relevo afundado). Normal map na convenção DirectX. Marque Flip Green Channel no import.

Normal map sem efeito. Texture Type ainda em Default, ou a intensidade do slot está em 0.

Tudo brilhando como plástico molhado. Smoothness alto demais, ou a textura de metallic foi importada com sRGB ligado, o que clareia o alfa. Desligue sRGB e confira o Source.

Metal parece preto. Metal reflete o ambiente; sem reflexo, fica escuro. Adicione um Reflection Probe na cena ou confira se o skybox está contribuindo em Window > Rendering > Lighting > Environment.

Textura borrada de perto. Max Size baixo ou compressão forte. Suba o Max Size só nesse asset.

Próximo passo

Monte o caixote com os quatro mapas e compare lado a lado com uma cópia só com Base Map. A diferença ensina mais que qualquer explicação. Depois, coloque uma luz direcional girando lentamente sobre os dois: é com luz em movimento que você vê se o normal map e o smoothness estão certos.

Perguntas frequentes

Qual a diferença entre material, shader e textura na Unity?

O shader é o programa que calcula a cor de cada pixel. O material é um asset que escolhe um shader e preenche os parâmetros dele. A textura é uma imagem que o material entrega ao shader num desses parâmetros. Vários objetos podem usar o mesmo material.

Como usar normal map na Unity?

Importe a textura com Texture Type em Normal map, depois arraste para o slot Normal Map do material URP Lit e ajuste a intensidade no número ao lado. Se a textura não estiver marcada como normal map, a Unity mostra um botão Fix Now no material.

Onde fica o smoothness no material URP Lit?

No workflow Metallic, o smoothness vem por padrão do canal alfa do Metallic Map (Source: Metallic Alpha). Dá para trocar para Albedo Alpha, que lê o alfa do Base Map. Sem textura, o slider Smoothness define um valor único para a superfície toda.

Metallic ou Specular no URP Lit: qual usar?

Metallic é o padrão e o mais comum em pacotes de textura PBR atuais. Use Specular só se as suas texturas vieram feitas para esse workflow, com um mapa de cor especular. Misturar texturas de um workflow no outro deixa o material com cara errada.