Pixel Perfect Camera na Unity: Pixel Art Nítido em Qualquer Tela
Unity Pixel Perfect Camera no URP 2D: Assets PPU e Reference Resolution para 320x180, Crop Frame, Grid Snapping e o jitter com câmera seguindo o jogador.
Pixel Perfect Camera na Unity: Pixel Art Nítido em Qualquer Tela
A Unity Pixel Perfect Camera é o componente do URP que mantém cada pixel da sua arte como um bloco quadrado do mesmo tamanho na tela, em qualquer resolução. Você coloca o componente na Main Camera, informa quantos pixels da arte cabem numa unidade do mundo (Assets Pixels Per Unit) e qual resolução o jogo "finge" ter (Reference Resolution, como 320x180). Ele calcula o zoom inteiro certo e evita pixels esticados, tremidos ou com tamanhos diferentes.
Este guia mostra como escolher esses dois números, como configurar o componente no Unity 6.3 LTS passo a passo, o que cada opção faz de verdade e por que o sprite treme quando a câmera segue o jogador.
O que a Pixel Perfect Camera da Unity resolve
Pixel art é feita numa grade pequena: um personagem de 16x16, um tile de 16x16. Na tela de um monitor Full HD, cada pixel da arte precisa virar um quadrado de vários pixels reais. Se esse fator for inteiro (3x, 4x, 6x), todo pixel da arte vira um quadrado igual. Se for fracionário (3,7x), alguns pixels viram quadrados de 3 e outros de 4. A arte fica "irregular", com linhas mais grossas em alguns pontos, e treme quando se move.
A câmera ortográfica comum da Unity não sabe nada disso: ela mostra uma área do mundo e escala para a tela, com qualquer fator. A Pixel Perfect Camera força o fator inteiro, alinha os sprites à grade de pixels e, se você quiser, renderiza o jogo numa textura de baixa resolução antes de ampliar.
Se você quer entender o mesmo problema fora da engine (exportar e ampliar arte sem borrar), o post sobre ampliar pixel art sem borrar cobre a parte do arquivo.
Escolhendo PPU e resolução de referência (320x180, 640x360)
Assets Pixels Per Unit (PPU) é quantos pixels da arte equivalem a 1 unidade do mundo. A regra prática: use o tamanho do seu tile. Tiles de 16x16, PPU 16. Tiles de 32x32, PPU 32. Assim, um tile ocupa exatamente 1 unidade, o que deixa a física, o Tilemap e as contas de posição simples. O valor tem que ser o mesmo no componente e no Pixels Per Unit do import de todos os sprites.
Reference Resolution é a resolução em que o jogo foi desenhado. As duas mais práticas para monitor 16:9:
| Referência | 1280x720 | 1920x1080 | 2560x1440 | 3840x2160 |
|---|---|---|---|---|
| 320x180 | 4x | 6x | 8x | 12x |
| 640x360 | 2x | 3x | 4x | 6x |
Nas quatro resoluções mais comuns, as duas escalam por inteiro sem sobra. 320x180 com PPU 16 mostra 20 tiles de largura por 11,25 de altura, bom para plataforma de tela única. 640x360 mostra o dobro, bom para top-down com mais mundo à vista ou para arte com personagens maiores (32x32).
Em telas que não são múltiplo (1366x768, telas ultrawide, celulares), o componente escolhe o maior inteiro que cabe e sobra borda. O que fazer com essa borda é a configuração de Crop Frame, mais abaixo.
Um detalhe útil: com Reference Resolution de 180 pixels de altura e PPU 16, o Orthographic Size equivalente é 180 / (2 x 16) = 5,625. O componente calcula isso sozinho, mas a conta ajuda a planejar o tamanho das fases.
Configurando o componente no URP 2D passo a passo
O componente faz parte do URP. Ele vem pronto no template Universal 2D do Unity Hub. Não instale o pacote separado 2D Pixel Perfect: a documentação avisa que ele é para a Built-In Render Pipeline, e a Built-In foi marcada como descontinuada no Unity 6.5.
- Confirme que os sprites estão importados certo: Filter Mode em Point (no filter), Compression em None e Pixels Per Unit igual ao do componente. O passo a passo completo está em importar pixel art na Unity sem borrar.
- Selecione a Main Camera, confira se Projection está em Orthographic.
- Add Component, busque Pixel Perfect Camera e adicione.
- Assets Pixels Per Unit: 16 (ou o tamanho do seu tile).
- Reference Resolution: X 320, Y 180.
- Crop Frame: comece com None.
- Grid Snapping: comece com Pixel Snapping.
- Rode o jogo e abra o Game view numa resolução fixa (1920x1080). O campo Current Pixel Ratio mostra a escala aplicada; em Full HD com 320x180 deve aparecer 6:1.
Se o Current Pixel Ratio mostrar algo inesperado, o Game view provavelmente está em "Free Aspect" com tamanho quebrado. Escolha uma resolução fixa no menu do Game view.
Upscale Render Texture, Crop Frame e Grid Snapping: o que cada opção faz
Grid Snapping tem três opções:
- None: sem alinhamento. O componente só calcula o zoom inteiro.
- Pixel Snapping: alinha a renderização dos sprites à grade de pixels, sem mudar a posição real do Transform. Um sprite em x = 1,03 é desenhado como se estivesse no pixel exato. A física e a lógica continuam com o valor real.
- Upscale Render Texture: renderiza a cena inteira numa textura do tamanho da Reference Resolution (ou um pouco maior, para telas mais largas) e amplia essa textura para a tela. Tudo vira pixel de verdade: sprites girados, escalados, partículas e luzes 2D ficam dentro da grade. É o visual mais fiel a um console antigo.
Crop Frame decide o que fazer com a sobra quando a tela não é múltiplo exato:
- None: mostra mais mundo na sobra. Mais área visível em algumas telas.
- Pillarbox: barras pretas nas laterais.
- Letterbox: barras em cima e embaixo.
- Windowbox: barras em todos os lados. O jogo mostra exatamente a Reference Resolution em qualquer tela. Bom para jogo em que a área visível é parte do design (puzzle, plataforma de tela única).
- Stretch Fill: estica para preencher a tela. Aqui a escala deixa de ser inteira, e aparece a opção Filter Mode: Point mantém o pixel duro, mas pode cintilar; Retro AA suaviza a borda do pixel com filtro bilinear e reduz a cintilação.
Para um jogo competitivo, Windowbox evita que quem tem monitor maior veja mais do mapa. Para um jogo de exploração, None costuma ser aceitável.
Configurar a câmera é meia hora. O que toma semanas é o resto do pipeline de um jogo em pixel art: importação, Tilemap, animação, colisão alinhada à grade e uma câmera que segue sem tremer, tudo funcionando junto. Se você quer percorrer esse caminho com um projeto completo, o curso de Unity organiza essa sequência.
Pixel perfect com Cinemachine seguindo o jogador
Com Cinemachine, o Pixel Perfect Camera e a CinemachineCamera disputam o Orthographic Size. A solução oficial é a extensão Cinemachine Pixel Perfect: selecione cada CinemachineCamera, Add Extension > CinemachinePixelPerfect. Ela lê as configurações do Pixel Perfect Camera da Main Camera e escolhe o Orthographic Size pixel perfect mais próximo do enquadramento de cada câmera virtual.
Limitações documentadas que valem saber antes de montar o jogo:
- Durante o blend entre duas CinemachineCameras, a imagem não é pixel perfect. Volta a ser quando a transição termina. Em troca de sala rápida, quase ninguém percebe; em blend lento de 2 segundos, aparece.
- Com Upscale Render Texture ligado, há menos resoluções pixel perfect disponíveis, e o enquadramento pode ficar visivelmente diferente do que você ajustou.
Dead zone, damping e Confiner 2D combinam bem com essa extensão. Só evite damping zero: a câmera colada no jogador passa a mudar de posição a cada frame em frações de pixel, e o snap fica mais visível.
Erros comuns: jitter, pixels esticados e bordas pretas
O sprite do jogador treme quando a câmera segue. É o caso mais comum, e tem duas causas que se somam. A primeira é física sem interpolação: o Rigidbody2D anda no passo de física e a câmera anda no frame. Ligue Interpolate no Rigidbody2D. A segunda é a câmera parar em posições entre pixels: o cenário encaixa na grade e o jogador também, mas em momentos diferentes, e eles parecem tremer um em relação ao outro. Com Pixel Snapping, use damping moderado na câmera (não zero, não altíssimo). Com Upscale Render Texture, o movimento lento da câmera vira degraus de 1 pixel da arte (6 pixels de tela em Full HD), o que pode parecer travado em pan lento.
Pixels de tamanhos diferentes. A escala não é inteira. Confira: Crop Frame em Stretch Fill, sprite com PPU diferente do componente, objeto com Scale fracionária no Transform (um sprite com scale 1,5 sempre vai ter pixels desiguais, a não ser com Upscale Render Texture) ou Game view em Free Aspect.
Bordas pretas em volta do jogo. É o Crop Frame fazendo o trabalho dele em telas que não são múltiplo exato. Se incomoda, troque para None e desenhe o cenário um pouco além da área de referência.
Linhas finas entre tiles. Normalmente é importação (compressão, Filter Mode) ou falta de padding no atlas, não a câmera. O guia de importação trata disso.
Arte borrada mesmo com o componente. O Filter Mode do sprite ainda está em Bilinear. O componente não corrige filtro de textura.
Quando NÃO usar pixel perfect
Pixel perfect é uma restrição, e restrição tem custo. Pense duas vezes quando:
- O jogo tem zoom suave. Zoom contínuo e escala inteira são incompatíveis; o zoom vai em degraus.
- A arte gira ou escala muito (projéteis girando, personagem que estica no pulo). Sem Upscale Render Texture, a rotação mostra pixel serrilhado fora da grade; com ela, tudo fica preso à grade da referência.
- O jogo mistura pixel art com UI ou efeitos em alta resolução. A UI normalmente fica fora da câmera pixel perfect (Canvas em Screen Space Overlay), o que funciona bem, mas efeitos de mundo em HD perdem detalhe com Upscale Render Texture.
- Os sprites têm densidades diferentes (personagem de 32 PPU em cenário de 16 PPU). Pixel perfect exige a mesma densidade em tudo, e isso é decisão de arte, não de câmera. O guia de pixel art para jogos fala sobre escolher a escala antes de desenhar.
Próximo passo
Monte uma cena de teste com um Tilemap de 16 PPU, um personagem e a Pixel Perfect Camera em 320x180. Teste as três opções de Grid Snapping com o personagem andando e a câmera seguindo, em 1280x720 e 1920x1080 no Game view. Escolha pelo que você vê em movimento, não parado. Depois revise a importação dos sprites no guia de importar pixel art sem borrar, que é onde metade dos problemas de nitidez realmente começa.
Perguntas frequentes
Preciso instalar o pacote 2D Pixel Perfect no Unity 6?
Não, se o projeto usa URP. O componente Pixel Perfect Camera já vem no Universal Render Pipeline e no template Universal 2D. O pacote separado 2D Pixel Perfect funciona só com a Built-In Render Pipeline, que foi marcada como descontinuada no Unity 6.5.
Qual resolução de referência usar para pixel art na Unity?
320x180 e 640x360 são as mais práticas porque escalam por número inteiro para 1280x720, 1920x1080 e 2560x1440. 320x180 vira 6x em Full HD e 640x360 vira 3x. Resoluções como 256x224 funcionam, mas sobram bordas em monitor 16:9.
Por que meus pixels ficam com tamanhos diferentes na tela?
A imagem está sendo escalada por um fator não inteiro. Isso acontece com Crop Frame em Stretch Fill, com a câmera sem Pixel Perfect Camera ou com sprites de PPU diferente do Assets Pixels Per Unit. Escala inteira, PPU igual em todos os sprites e Crop Frame em Windowbox ou None resolvem.
Pixel Perfect Camera funciona com Cinemachine?
Sim, com a extensão Cinemachine Pixel Perfect adicionada em cada CinemachineCamera. Ela ajusta o Orthographic Size para o valor pixel perfect mais próximo. Durante o blend entre duas câmeras a imagem não fica pixel perfect, e volta ao normal quando a transição termina.

