Shader Graph na Unity: Primeiro Shader sem Código

Unity Shader Graph no URP do zero: Lit Shader Graph, propriedades no material, textura com cor, brilho pulsante com Time e Sine e versão Sprite Lit.
Shader Graph na Unity: Primeiro Shader sem Código
O Unity Shader Graph é o editor visual de shaders da Unity: em vez de escrever HLSL, você liga nós num grafo e vê o resultado na hora. Aqui você cria um Lit Shader Graph no URP, expõe propriedades para o material (cor, textura, velocidade), monta um brilho pulsante com os nós Time e Sine e depois adapta o mesmo efeito para sprites 2D. No fim você tem um material que pisca suavemente, ótimo para item coletável, cristal de energia ou interruptor ativo.
Tudo aqui foi feito no Unity 6.3 LTS com URP. O manual do Unity 6.3 aponta para o Shader Graph 17.3, que vem junto com o pacote do URP.
O que é o Shader Graph na Unity
Um shader é o programa que roda na GPU e decide a cor de cada pixel de um objeto. Escrever shader à mão exige HLSL e conhecer a estrutura interna do render pipeline. O Shader Graph troca isso por nós: um nó de textura, um nó de multiplicação, um nó de tempo, ligados por fios. Por baixo, ele gera o código.
Três coisas para saber antes de abrir:
- Ele depende do render pipeline. Shader Graph é feito para URP e HDRP. A Built-In Render Pipeline foi marcada como descontinuada no Unity 6.5, e a Unity recomenda URP para todo projeto novo.
- Grafo é asset, material é instância. O grafo define o que o shader faz e quais controles ele tem. O material guarda os valores (qual cor, qual textura). Vários materiais usam o mesmo grafo com valores diferentes.
- O conceito é o mesmo em toda engine. Se você já viu shaders na Godot, a lógica de UV, cor e tempo é idêntica; o post sobre shaders na Godot para iniciantes mostra o mesmo raciocínio em código.
Criando o primeiro Lit Shader Graph
- No Project, clique com o botão direito e escolha Create > Shader Graph > URP > Lit Shader Graph. Chame de
SG_PulseGlow. Também existe Create > Shader Graph > From Template, que abre um navegador de modelos prontos; para aprender, comece do Lit. - Dois cliques abrem a janela do Shader Graph.
- Clique com o botão direito no asset
SG_PulseGlowe escolha Create > Material. A Unity já cria o material com o shader atribuído. Chame deM_PulseGlow. - Arraste o material para um cubo ou esfera na cena.
Lit significa que o shader reage às luzes da cena (sombra, especular, iluminação global). Unlit ignora luz e mostra a cor pura, bom para efeitos, interfaces e estilos chapados. A escolha fica em Graph Inspector > Graph Settings > Material, e dá para trocar depois.
Nós, conexões e o Master Stack
A janela tem quatro áreas:
- Blackboard (à esquerda): as propriedades do shader, os controles que aparecem no material.
- Graph Inspector (à direita): configurações do grafo (Graph Settings) e do nó ou propriedade selecionada (Node Settings).
- Main Preview (canto inferior): a prévia do resultado numa esfera.
- Workspace: onde os nós vivem.
No meio do workspace fica o Master Stack, a saída do shader. Ele tem dois blocos. O Vertex mexe na forma do objeto (Position, Normal, Tangent). O Fragment decide a cor de cada pixel: Base Color, Normal, Metallic, Smoothness, Emission, Ambient Occlusion e, em superfícies transparentes, Alpha.
Para criar um nó, aperte a barra de espaço com o mouse no workspace (ou clique com o botão direito e Create Node) e digite o nome. Para conectar, arraste da porta de saída (direita do nó) para a porta de entrada (esquerda de outro nó ou de um bloco do Master Stack). As cores das portas indicam o tipo: Float, Vector2, Vector3, Vector4, textura.
Propriedades expostas no material
Agora as propriedades que o artista vai ajustar no material, sem abrir o grafo:
- No Blackboard, clique em + e escolha Texture2D. Nome:
Base Map. - +, Color. Nome:
Tint. Valor padrão branco. - +, Color. Nome:
Glow Color. No Graph Inspector, mude Mode para HDR, para aceitar intensidade acima de 1. - +, Float. Nome:
Pulse Speed. Valor padrão2. - Para cada propriedade, selecione e confira no Graph Inspector, aba Node Settings, se Show In Inspector está ligado. No Shader Graph 17.3 é essa opção que faz a propriedade aparecer no material.
Cada propriedade tem também um Reference (o nome interno, como _Glow_Color). É esse nome que um script usa para mudar o valor em tempo de jogo, então troque para algo limpo: _GlowColor na Glow Color e _PulseSpeed na Pulse Speed (o script mais abaixo usa esse nome).
Agora ligue a textura com a cor:
- Arraste
Base Mapdo Blackboard para o workspace. - Crie um nó Sample Texture 2D e ligue
Base Mapna entrada Texture. - Arraste
Tintpara o workspace. - Crie um nó Multiply. Ligue a saída RGBA do Sample Texture 2D na entrada A e
Tintna entrada B. - Ligue a saída do Multiply em Base Color do Master Stack.
- Clique em Save Asset no canto superior esquerdo.
No material M_PulseGlow, aparecem Base Map, Tint, Glow Color e Pulse Speed. Arraste uma textura para Base Map e veja a cor tingida.
Shader é a parte em que arte e código se encontram, e é onde muita gente que aprende sozinha trava, porque não sabe se o problema está no grafo, no material, na luz ou no pipeline. No curso de Unity você aplica shaders e efeitos dentro de um jogo completo, com URP configurado do jeito certo desde o primeiro projeto.
Exemplo: brilho pulsante com Time e Sine
A ideia: o canal Emission faz o objeto emitir luz própria. Se a intensidade da emissão sobe e desce com o tempo, o objeto pulsa.
Monte esta cadeia de nós:
- Time: a saída Time é o tempo em segundos desde o começo, sempre crescendo.
- Multiply:
Timena entrada A, a propriedadePulse Speedna entrada B. Isso controla a velocidade da pulsação. - Sine: recebe o resultado e devolve um valor que oscila entre -1 e 1.
- Remap: entrada do Sine. Configure In Min Max como
-1e1e Out Min Max como0e1. Agora o valor vai de 0 (apagado) a 1 (aceso), sem passar por negativo. - Multiply: o resultado do Remap na entrada A e
Glow Colorna entrada B. - Ligue a saída em Emission no Master Stack.
- Save Asset.
Por que o Remap: emissão negativa não existe e escurece o objeto de um jeito estranho. Converter -1..1 para 0..1 deixa a pulsação ir de "sem brilho" até "brilho total". Se quiser que o objeto nunca apague totalmente, use 0.3 no mínimo do Out.
O nó Time também tem a saída Sine Time pronta, mas ela não deixa você controlar a velocidade com uma propriedade, por isso a cadeia Time, Multiply, Sine.
A emissão em HDR só vira "brilho que vaza" com o efeito Bloom ligado no post-processing do URP. Sem Bloom, o objeto fica claro, mas sem halo. Para ajustar a velocidade por código, use o Reference da propriedade:
Arquivo PulseSpeedController.cs:
using UnityEngine;
public class PulseSpeedController : MonoBehaviour
{
private static readonly int PulseSpeedId = Shader.PropertyToID("_PulseSpeed");
[SerializeField] private Renderer targetRenderer;
[SerializeField] private float alertSpeed = 8f;
public void SetAlert(bool alert)
{
float speed = alert ? alertSpeed : 2f;
targetRenderer.material.SetFloat(PulseSpeedId, speed);
}
}
O Shader.PropertyToID evita procurar a propriedade pelo texto a cada chamada. E renderer.material cria uma cópia do material só para aquele objeto, então os outros cristais da cena continuam com a velocidade normal.
Shader Graph para 2D (Sprite Lit)
Para sprites, o caminho é quase o mesmo, com outro tipo de grafo:
- Create > Shader Graph > URP > Sprite Lit Shader Graph (reage às Light 2D do URP) ou Sprite Unlit Shader Graph (ignora luz).
- No Blackboard, crie a propriedade Texture2D e, no Graph Inspector, troque o Reference para
_MainTex. O Sprite Renderer passa a textura do sprite automaticamente para a propriedade com esse nome. - Ligue
_MainTexnum Sample Texture 2D. A saída RGBA vai em Base Color, e a saída A vai em Alpha, senão o fundo transparente do sprite fica opaco. - Para o brilho pulsante, multiplique o resultado do Remap pela cor de brilho e some (nó Add) ao RGBA antes de ligar em Base Color. Em sprite, somar cor costuma ficar mais legível do que usar Emission.
Crie o material, arraste para o campo Material do Sprite Renderer e pronto.
Erros comuns: material rosa e propriedade que não aparece
O material ficou rosa (magenta). A Unity mostra magenta quando o shader não pode ser usado: o grafo tem erro (algum nó fica vermelho, e o erro aparece ao passar o mouse), o projeto não está com URP ativo, ou o grafo não tem o target Universal em Graph Settings. Se o grafo está certo, confira em Edit > Project Settings > Graphics se há um URP Asset atribuído.
A propriedade não aparece no material. Show In Inspector desligado ou grafo não salvo. Feche o grafo, veja se a Unity pede para salvar, e confira.
O script não muda nada. O nome em SetFloat não bate com o Reference da propriedade (não com o nome de exibição). Pulse Speed é o nome; _PulseSpeed é a referência.
O brilho não brilha. Falta Bloom no post-processing, ou a câmera está com Post Processing desligado, ou a cor de brilho não está em HDR.
O sprite ficou com fundo preto ou branco. Faltou ligar a saída A da textura em Alpha.
Próximo passo
Com o brilho pulsante funcionando, troque o Time por um valor controlado por script (a vida do inimigo, a carga de uma arma) e veja o mesmo grafo virar feedback de gameplay. Depois, estude como esse trabalho é dividido num time: o post sobre o que faz um artista técnico mostra onde shaders entram na produção. E o próximo efeito clássico para treinar é o dissolve, que usa ruído e o canal Alpha; ele está no guia de shader de dissolve no Shader Graph.
Perguntas frequentes
O que é o Shader Graph da Unity?
É um editor visual de shaders: você liga nós (textura, cor, tempo, matemática) num grafo e a Unity gera o código do shader. Ele funciona com URP e HDRP; na Built-In Render Pipeline o suporte é limitado e ela foi marcada como descontinuada no Unity 6.5.
Qual versão do Shader Graph vem com o Unity 6.3?
O manual do Unity 6.3 aponta para o Shader Graph 17.3. O pacote vem junto quando você usa URP ou HDRP, então em geral não é preciso instalar nada à parte.
Por que a propriedade do Shader Graph não aparece no material?
No Shader Graph 17.3 a propriedade só aparece no Inspector do material se a opção Show In Inspector estiver ligada no Graph Inspector. Confira também se você clicou em Save Asset, porque o material só enxerga a versão salva do grafo.
Shader Graph funciona em jogo 2D?
Sim. No URP, crie um Sprite Lit Shader Graph (reage às luzes 2D) ou Sprite Unlit (ignora luz). A entrada principal é a textura do sprite, que precisa ter o nome de referência _MainTex para o Sprite Renderer preencher sozinho.


