Importar Pixel Art na Unity sem Borrar: Filter e Compression
Pixel art borrada na Unity? Checklist de importação: Filter Mode Point, Compression None, Pixels Per Unit do tile, Sprite Mode e um Preset para não repetir.
Importar Pixel Art na Unity sem Borrar: Filter e Compression
Se a sua pixel art na Unity está blurry (borrada), o culpado é o filtro de textura: a Unity importa todo PNG com Filter Mode em Bilinear, que mistura pixels vizinhos ao ampliar. A correção é selecionar o sprite, trocar o Filter Mode para Point (no filter), colocar Compression em None e clicar em Apply. Com mais dois campos (Pixels Per Unit e Sprite Mode) e um Preset salvo, você nunca mais repete isso arquivo por arquivo.
Este guia é um checklist de importação para o Unity 6.3 LTS: o que cada campo faz, qual valor usar em pixel art e por quê, como criar um Preset por pasta e como resolver os três defeitos que aparecem mesmo depois de acertar o filtro.
Por que a pixel art fica borrada na Unity
Um sprite de 16x16 aparece na tela de um monitor Full HD ocupando dezenas ou centenas de pixels reais. A GPU precisa decidir a cor de cada pixel da tela que cai "entre" dois pixels da arte. Com filtro Bilinear, ela faz uma média dos vizinhos. Em fotos e arte pintada, isso suaviza. Em pixel art, destrói: a borda dura de um contorno preto vira um degradê cinza.
Com filtro Point, a GPU pega o pixel da arte mais próximo, sem média. O bloco continua bloco.
Existe uma segunda fonte de sujeira, mais discreta: a compressão. Os formatos comprimidos de GPU trabalham em blocos de 4x4 pixels e aproximam as cores. Numa foto ninguém nota. Num sprite com paleta de 8 cores, aparecem cores que você não desenhou e manchas nas bordas.
E uma terceira, que não é da importação: escala não inteira na tela. Essa é da câmera, e o guia da Pixel Perfect Camera cuida dela.
Filter Mode Point (no filter): a configuração que mais importa
Selecione o PNG no Project. No Inspector aparecem as configurações de importação (Texture Import Settings). Para pixel art:
- Texture Type: Sprite (2D and UI). Em projetos com template 2D, já vem assim.
- Filter Mode: Point (no filter). As outras opções são Bilinear e Trilinear.
- Clique em Apply no rodapé do Inspector. Sem Apply, nada muda.
Outros campos que afetam a nitidez, no mesmo painel (alguns ficam em Advanced):
- Generate Mipmap: desmarcado. Mipmaps são versões menores da textura usadas quando ela aparece pequena ou longe. Em jogo 2D com câmera fixa, só gastam memória e podem trazer a versão reduzida e borrada.
- Wrap Mode: Clamp. Com Repeat, a borda do sprite pode "puxar" cor do lado oposto e aparecer uma linha fina.
- Alpha Is Transparency: marcado em sprites com transparência. Ajuda a evitar halo nas bordas.
Compression None e Max Size: evitando artefatos de cor
Ainda no Inspector, na parte de baixo, fica o painel por plataforma, com a aba Default e abas de override (Android, iOS, Web, etc.).
- Max Size: o tamanho máximo, em pixels, que a textura importada pode ter. Se a sua sprite sheet tem 4096 de largura e o Max Size está em 2048, a Unity reduz a imagem pela metade na importação. Em pixel art isso é fatal: pixels somem ou viram dois tons. Deixe o Max Size maior ou igual ao maior lado do arquivo.
- Resize Algorithm: Mitchell (padrão) ou Bilinear. Só importa se a imagem for reduzida, e em pixel art você não quer que ela seja.
- Format: deixe Automatic.
- Compression: None. As opções são None, Low Quality, Normal Quality e High Quality. Qualquer opção diferente de None aproxima cores.
- Use Crunch Compression: desmarcado.
O custo de Compression None é memória. Sem compressão em RGBA de 32 bits, cada pixel ocupa 4 bytes: uma sprite sheet de 512x512 ocupa 1 MB. Pixel art raramente passa de algumas folhas de 1024x1024, e para a maioria dos jogos 2D o custo é pequeno. Se o jogo for para celular e a memória apertar, teste override por plataforma, olhando o resultado em zoom.
Se você está escolhendo a paleta agora, saiba que menos cores não reduz o tamanho em memória sem compressão, mas ajuda muito a arte a sobreviver se um dia você precisar comprimir. O post de paleta de cores para pixel art mostra como montar uma.
Pixels Per Unit: como escolher e manter consistente
Pixels Per Unit (PPU) diz quantos pixels da imagem ocupam 1 unidade do mundo da Unity. O padrão é 100, pensado para arte em alta resolução. Com PPU 100, um personagem de 16x16 fica com 0,16 unidade de altura, minúsculo, e você vai ser tentado a aumentar a Scale do Transform. Não faça isso: Scale fracionária é uma das causas de pixel irregular.
A regra: PPU igual ao tamanho do tile. Tiles de 16x16, PPU 16; tiles de 32x32, PPU 32. Um tile vira 1 unidade, o Tilemap encaixa sem conta, a física usa números redondos (um pulo de 3 tiles é 3 unidades) e a Pixel Perfect Camera recebe o mesmo valor em Assets Pixels Per Unit.
O que importa mais que o número é a consistência: todo sprite do jogo com o mesmo PPU. Um chefe desenhado em 32 PPU num jogo de 16 PPU aparece com metade do tamanho, e se você "corrigir" com Scale 2, os pixels dele ficam com o dobro do tamanho dos pixels do cenário. Decida a escala antes de desenhar, como explica o guia de pixel art para jogos.
Sprite Mode:
- Single: um sprite por arquivo (um ícone, um fundo).
- Multiple: vários sprites no mesmo arquivo (sprite sheet, tileset). Depois de Apply, clique em Open Sprite Editor e fatie. O botão só aparece com o pacote 2D Sprite instalado; se não estiver, o Inspector mostra o botão para instalar.
- Polygon: um sprite com malha poligonal.
Para tileset e animação, Multiple. Mesh Type em Full Rect em tiles evita cortes na malha que às vezes aparecem como linhas.
Acertar a importação é o primeiro dia de um jogo em pixel art. Depois vêm Tilemap, animação, colisão, câmera e UI, e cada um tem a sua armadilha. Fazer isso sozinho, de tutorial em tutorial, costuma gerar um projeto que funciona em partes e nunca junta. Um curso de Unity com um jogo completo do zero dá a ordem e o porquê de cada etapa.
Criando um Preset de importação para pixel art
Configurar cada PNG à mão é como você vai esquecer um. O Preset guarda as configurações de um importador e aplica em outros.
Criar o Preset:
- Configure um sprite com tudo acima (Point, None, PPU 16, Multiple, sem mipmap, Clamp) e clique em Apply.
- No topo do Inspector, clique no ícone de preset selector (o ícone de sliders, no canto superior direito).
- Na janela Select Preset, escolha Create New, salve como
PixelArt16.presetnuma pasta comoAssets/Settings/Presets.
Aplicar em sprites que já existem: selecione os PNGs no Project, abra o preset selector e escolha o PixelArt16. Clique em Apply.
Tornar padrão para uma pasta:
- Edit > Project Settings > Preset Manager.
- Add Default Preset e escolha o importador de textura (TextureImporter).
- No campo Preset, coloque o
PixelArt16. - No campo Filter, limite a uma pasta com a sintaxe glob, entre aspas e sensível a maiúsculas, por exemplo
glob:"Assets/Art/Pixel/**"(o**inclui subpastas). - Teste: arraste um PNG novo para essa pasta e confira o Inspector. Se não aplicou, ajuste o caminho do filtro até aplicar.
Detalhe da documentação: o preset padrão vale para assets novos, na importação. Clicar em Reimport num asset que já existe não aplica o preset. Para os antigos, use o preset selector como acima, ou Reset no menu de contexto do importador.
Se o projeto tem arte com densidades diferentes (UI em 32 e mundo em 16), crie dois presets e duas regras de pasta.
Erros comuns: linhas entre tiles, sprite cortado e cores lavadas
Linhas finas entre tiles ao mover a câmera. A GPU amostra um pixel do tile vizinho na sprite sheet por erro de arredondamento. Correções, em ordem: Filter Mode Point e Compression None (o filtro bilinear é o gatilho mais comum); empacotar os tiles num Sprite Atlas com padding (2 a 4 pixels); Pixel Perfect Camera com Pixel Snapping; desligar o anti-aliasing (MSAA) no URP Asset. Em último caso, adicione 1 pixel de borda repetida em volta de cada tile na arte.
Sprite cortado ou com pedaço de outro sprite. Fatiamento errado no Sprite Editor (Pixel Size diferente do tile, Offset ou Padding errados) ou Max Size menor que a imagem, que redimensiona tudo e desalinha a grade.
Cores lavadas ou diferentes do arquivo. Compressão ligada. Se a compressão já está em None, confira o espaço de cor do projeto e se o sRGB (Color Texture) está marcado, que é o correto para sprite de cor.
Pixel art nítida no editor e borrada no build. Um override de plataforma (aba Android, por exemplo) está com compressão ou Max Size diferente do Default. Abra cada aba e confira.
Sprite tremendo ou com pixels de tamanhos diferentes. Não é importação, é escala na tela. Vai para a câmera.
Próximo passo: Pixel Perfect Camera
Pegue um tileset e um personagem, aplique o Preset, monte uma sala com Tilemap e mova a câmera. Se ainda aparecer pixel desigual ou tremido em movimento, o problema saiu da importação e foi para a câmera: siga para a Pixel Perfect Camera na Unity. E quando for exportar imagens do jogo para a página da loja ou para redes sociais, lembre que a mesma regra vale fora da engine: amplie por número inteiro, com o filtro "vizinho mais próximo" do editor de imagem.
Perguntas frequentes
Por que minha pixel art fica borrada na Unity?
Porque o Filter Mode padrão da textura é Bilinear, que mistura as cores de pixels vizinhos ao ampliar. Para pixel art, mude para Point (no filter) no Inspector do sprite e clique em Apply. Se ainda tiver manchas de cor, a compressão também precisa ir para None.
Qual Pixels Per Unit usar para pixel art na Unity?
Use o tamanho do seu tile: 16 para tiles de 16x16, 32 para tiles de 32x32. Assim um tile ocupa exatamente uma unidade do mundo. O importante é usar o mesmo valor em todos os sprites do jogo e no componente Pixel Perfect Camera.
Como aplicar as mesmas configurações de importação em vários sprites?
Selecione vários sprites no Project, mude os campos de uma vez e clique em Apply. Para arquivos novos, crie um Preset a partir de um sprite configurado e registre como padrão no Preset Manager, com um filtro de pasta, para que todo PNG que entrar ali já venha certo.
Compression None deixa o jogo pesado?
Deixa as texturas maiores na memória, mas pixel art costuma ter arquivos pequenos. Uma sprite sheet de 512x512 sem compressão em RGBA de 32 bits ocupa 1 MB de memória. Para a maioria dos jogos 2D, a nitidez vale esse custo.
