Material Rosa na Unity: Por Que Fica Pink e Como Corrigir

Unity materials are pink? Diagnóstico em 5 minutos: shader de outro pipeline, asset da Built-In, pipeline asset ausente, shader com erro ou stripping na build.
Material Rosa na Unity: Por Que Fica Pink e Como Corrigir
Quando Unity materials are pink, a engine está dizendo que não consegue desenhar aquele material com o shader que ele usa. As quatro causas são: shader feito para outro render pipeline, asset da Asset Store feito para a Built-In, Render Pipeline Asset não atribuído e shader com erro de compilação. Se acontece só na build, é uma quinta: o shader foi removido no stripping. Este guia mostra como descobrir qual é em menos de 5 minutos e a correção de cada uma, no Unity 6.3 LTS.
Antes de tudo: se a cor é ciano (azul claro) e some depois de alguns segundos, não é erro. O editor mostra ciano enquanto compila um shader em segundo plano. O problema é o magenta que fica.
Por que o material fica rosa na Unity
A Unity tem um shader de erro interno. Quando um material não pode ser renderizado (o shader não existe, não compila ou não é compatível com o pipeline ativo), ela troca pelo shader de erro, que pinta tudo de magenta chapado. É de propósito: a cor é feia o bastante para ninguém deixar passar.
O diagnóstico rápido, nesta ordem:
- Selecione o material rosa e olhe o campo Shader no topo do Inspector.
- Se o nome é Standard, Legacy Shaders/..., Mobile/... ou Particles/Standard..., é shader da Built-In num projeto URP: causas 1 e 2.
- Se o nome é Hidden/InternalErrorShader, o shader original sumiu ou quebrou: causa 4, ou um pacote que foi removido.
- Se o shader é do URP (Universal Render Pipeline/Lit, por exemplo) e mesmo assim tudo está rosa, inclusive objetos novos: causa 3.
- Se no editor está certo e na build fica rosa: última seção.
Causa 1: shader de outro render pipeline
Cada render pipeline tem seus shaders. O Standard da Built-In não funciona no URP, e o Universal Render Pipeline/Lit do URP não funciona na Built-In. O mesmo vale para o HDRP. Num projeto URP, todo material com shader da Built-In aparece rosa.
Isso acontece quando você:
- Segue um tutorial antigo, feito na Built-In, e cria material com o shader que ele mostra.
- Copia materiais de outro projeto.
- Importa modelo 3D (FBX) com materiais embutidos gerados para a Built-In em versões antigas.
A correção para um material: selecione, clique no campo Shader e escolha Universal Render Pipeline > Lit (ou Simple Lit, Unlit, conforme o caso). Arraste de novo a textura para Base Map se ela não vier junto.
Para muitos materiais, não faça na mão: use o conversor, na seção mais abaixo.
Causa 2: asset da Asset Store feito para Built-In
É o caso mais comum de quem pega pacote gratuito. Muitos assets antigos, inclusive os bons, foram feitos para a Built-In, e os materiais vêm com Standard ou com shaders próprios do autor.
O roteiro:
- Leia a página do asset. Veja as versões da Unity e os render pipelines suportados. Muitos trazem um
.unitypackageextra para URP dentro da pasta, com nome comoURP_SupportouURP Materials. Importe esse pacote. - Se os materiais usam Standard, o Render Pipeline Converter resolve.
- Se usam shader próprio do autor (nome como
AuthorName/Foliage), o conversor não mexe. Troque por um shader do URP ou refaça o efeito no Shader Graph. - Se nada disso der certo, procure uma alternativa já compatível com URP. O post sobre onde encontrar assets gratuitos para jogos lista fontes confiáveis e o que conferir antes de baixar.
Vale criar o hábito de testar asset novo num projeto vazio de URP antes de importar no projeto principal. Dez minutos de teste evitam uma tarde limpando material quebrado.
Causa 3: Render Pipeline Asset não atribuído
Se tudo está rosa, inclusive cubos novos com o material padrão, o projeto provavelmente está sem pipeline ativo ou com pipeline errado.
- Abra Edit > Project Settings > Graphics. O campo Default Render Pipeline precisa ter um URP Asset.
- Abra Edit > Project Settings > Quality. Cada nível de qualidade tem um campo Render Pipeline Asset, que sobrescreve o padrão. Selecione cada nível e confira. Um nível vazio usa o padrão do Graphics; um nível apontando para outro asset muda o pipeline quando o jogo troca de qualidade.
Se o URP Asset não existe, crie no Project com Create > Rendering > URP Asset (with Universal Renderer) e atribua. Isso acontece muito quando alguém apaga a pasta Settings achando que era lixo, ou num projeto que foi criado em Built-In e teve o pacote do URP instalado sem configurar.
O sintoma invertido também existe: projeto Built-In (campo vazio) com materiais do URP, que vieram de um pacote ou de um tutorial novo. Aí a solução é decidir o pipeline do projeto, e não trocar material por material.
Esse tipo de problema, em que o projeto quebra visualmente por uma configuração escondida, é o que mais faz quem aprende sozinho perder dias. No curso de Unity o projeto nasce em URP configurado, e você entende o papel de cada asset de pipeline antes de precisar consertar um.
Causa 4: shader com erro de compilação
Se o shader é compatível com o pipeline e ainda assim o material está rosa, o shader não compila.
- Selecione o shader (não o material) no Project. O Inspector mostra os erros de compilação, com linha.
- Para Shader Graph, abra o grafo: o nó com problema fica com contorno vermelho, e passar o mouse mostra o erro. Uma causa comum é o grafo sem o target Universal em Graph Inspector > Graph Settings > Active Targets.
- Shader escrito à mão para a Built-In com surface shader (
#pragma surface) não compila no URP. Precisa ser reescrito para o URP ou refeito no Shader Graph.
Também aparece rosa quando o shader depende de um arquivo .hlsl ou .cginc que foi apagado, ou de um pacote que foi removido. O Console mostra o erro de include com o caminho que falta.
Corrigindo em massa com o Converter
Para dezenas ou centenas de materiais com shaders padrão da Built-In, use o Render Pipeline Converter:
- Commit no Git antes. A conversão é irreversível.
- Window > Rendering > Render Pipeline Converter, escolha Built-In Render Pipeline to URP.
- Marque Material Upgrade e Read-only Material Converter.
- Initialize Converters, revise a lista, Convert Assets.
O Material Upgrade troca Standard e os shaders padrão pelos equivalentes do URP e copia cores e texturas. Ele não converte materiais com shader customizado. Para a migração completa de um projeto (post-processing, luzes, configurações), o passo a passo está no guia de como converter um projeto Built-In para URP.
Para achar o que sobrou rosa depois do conversor, este script de editor lista os materiais suspeitos. Ele precisa ficar numa pasta chamada Editor.
Arquivo Assets/Editor/PinkMaterialFinder.cs:
using UnityEditor;
using UnityEngine;
public static class PinkMaterialFinder
{
private static readonly string[] BuiltInPrefixes =
{
"Standard", "Legacy Shaders/", "Mobile/", "Nature/", "Particles/Standard"
};
[MenuItem("Tools/Listar materiais incompatíveis")]
private static void ListIncompatibleMaterials()
{
string[] guids = AssetDatabase.FindAssets("t:Material", new[] { "Assets" });
int found = 0;
foreach (string guid in guids)
{
string path = AssetDatabase.GUIDToAssetPath(guid);
Material material = AssetDatabase.LoadAssetAtPath<Material>(path);
if (material == null)
{
continue;
}
Shader shader = material.shader;
if (IsSuspicious(shader))
{
string shaderName = shader != null ? shader.name : "(sem shader)";
Debug.LogWarning($"{path} usa '{shaderName}'", material);
found++;
}
}
Debug.Log($"Materiais suspeitos encontrados: {found}");
}
private static bool IsSuspicious(Shader shader)
{
if (shader == null || shader.name == "Hidden/InternalErrorShader")
{
return true;
}
if (ShaderUtil.ShaderHasError(shader))
{
return true;
}
foreach (string prefix in BuiltInPrefixes)
{
if (shader.name.StartsWith(prefix))
{
return true;
}
}
return false;
}
}
Rode pelo menu Tools > Listar materiais incompatíveis. Cada aviso no Console, ao ser clicado, destaca o material no Project.
Rosa só na build: shader removido no stripping
No editor está tudo certo e, na build, um efeito aparece rosa. A causa clássica: a Unity só inclui na build os shaders usados por materiais que estão nas cenas da build ou em pastas Resources. Um shader carregado só por código, com Shader.Find("Custom/MeuEfeito"), não tem nenhum material apontando para ele, então fica de fora.
Correções:
- Always Included Shaders. Em Edit > Project Settings > Graphics, adicione o shader à lista Always Included Shaders. Use com moderação: cada shader dessa lista vai para a build com todas as variantes, o que aumenta tamanho e tempo de build.
- Referência por material. Em vez de
Shader.Find, guarde um material num campo[SerializeField]de um componente da cena. O material puxa o shader para a build.
Existe um primo desse problema, o stripping de variantes. A Unity remove da build as variantes de shader que acha que não serão usadas (as opções da seção Shader stripping das Graphics settings, mais o que o URP Asset desliga). Se você liga uma keyword por código em tempo de jogo, como material.EnableKeyword("_EMISSION"), e nenhum material da build usava essa variante, o efeito some ou aparece errado. Deixe um material na build com a opção já ligada, ou registre as variantes numa Shader Variant Collection.
Por fim, confira a plataforma: um shader escrito sem suporte à API gráfica do alvo (OpenGL ES num Android antigo, WebGL) compila no editor do Windows e falha no aparelho.
Próximo passo
Da próxima vez que o magenta aparecer, abra o material e leia o nome do shader antes de qualquer outra coisa: ele aponta para a causa em segundos. Se o seu projeto ainda está na Built-In, considere a migração para URP com calma; o contexto do anúncio está no post sobre o Unity 6.5 e a Built-In descontinuada. E guarde o script de editor deste guia no seu projeto: ele vira o primeiro passo de toda importação de asset novo.
Perguntas frequentes
Por que o material fica rosa na Unity?
Rosa (magenta) é a cor que a Unity usa quando não consegue renderizar um material com o shader dele. As causas mais comuns são shader feito para outro render pipeline, como um shader da Built-In num projeto URP, render pipeline asset não atribuído e shader com erro de compilação.
Como corrigir textura rosa de asset da Asset Store?
Veja se o asset tem versão para URP e importe essa versão. Se os materiais usam o shader Standard, rode o Render Pipeline Converter (Window > Rendering > Render Pipeline Converter) com o Material Upgrade. Se o shader é próprio do asset, troque por um shader do URP ou refaça no Shader Graph.
Por que o material fica rosa só na build?
Geralmente o shader foi removido da build porque nenhum material incluído o referencia, por exemplo um shader carregado com Shader.Find. Coloque o shader em Always Included Shaders nas Graphics settings ou garanta que um material incluído na build o use.
Qual a diferença entre o objeto rosa e o objeto azul ciano no editor?
Ciano é temporário: o editor mostra essa cor enquanto compila o shader em segundo plano, e ela some sozinha. Magenta indica que o shader não pode ser usado e não some sem correção.


