Como recortar uma folha de sprites irregular gerada por IA

Você pediu a um modelo de imagem um ciclo de caminhada de quatro por quatro e recebeu um grande PNG. Parece uma grade. Não é uma grade. Recortá-lo em dezesseis retângulos iguais corta uma cabeça aqui, a ponta de uma espada ali e deixa metade dos quadros fora do centro. Veja por que isso acontece e como ainda extrair quadros utilizáveis da folha.

Por que folhas de sprites de IA nunca seguem uma grade perfeita

Uma folha de sprites tradicional é criada por uma ferramenta. Um artista desenha quadros com tamanho de célula fixo, e um exportador os organiza em deslocamentos exatos de pixels. Todas as células são idênticas, cada sprite fica em uma caixa conhecida, e o recorte é uma questão de aritmética.

Geradores de imagens não funcionam assim. Modelos de difusão como DALL·E, Midjourney e Stable Diffusion geram uma única imagem contínua. Quando você pede "uma folha de sprites de um cavaleiro caminhando, grade 4x4", o modelo produz algo que parece uma folha de sprites porque viu milhares delas. Ele está imitando o estilo visual de uma grade, não calculando os limites das células. Nada no processo de geração garante que a terceira linha comece exatamente 384 pixels abaixo.

As consequências práticas são consistentes:

  • Espaçamento variável. Os espaços entre sprites variam de alguns pixels a algumas dezenas. A variação normalmente se acumula da esquerda para a direita e de cima para baixo, então os quadros do canto inferior direito são os mais problemáticos.
  • Tamanhos de sprites inconsistentes. Um personagem no meio de um passo é mais largo que um parado. O modelo desenha cada pose no tamanho que parece adequado, sem ajustá-la a uma caixa uniforme.
  • Conteúdo fora do centro. Mesmo quando as células são aproximadamente uniformes, o sprite dentro delas raramente está centralizado, então um recorte correto da grade ainda gera quadros que tremem durante a reprodução.
  • Quadros ausentes ou mesclados. Às vezes você recebe quinze sprites em um layout 4x4, ou duas poses que se sobrepõem e parecem uma única massa.
  • Dimensões ímpares da tela. Uma saída de 1024x1024 dividida em três colunas resulta em 341.33 pixels. Algum valor precisa ser arredondado, e os erros de arredondamento se acumulam.
Uma folha de sprites gerada de um cavaleiro com armadura azul, em que as dezesseis poses têm tamanhos e deslocamentos inconsistentes, com espaços de larguras diferentes entre elas em vez de uma grade uniforme
Uma folha gerada típica. À primeira vista, parece um layout 4x4, mas as poses variam de tamanho, os espaços entre elas são irregulares e vários sprites ficam fora do centro de suas células presumidas. Um quadro chega até a ultrapassar a borda da tela.

Por que o recorte com grade fixa falha

O recorte em grade fixa faz uma suposição: a imagem é uma grade de células iguais. Ele divide a largura pelas colunas, a altura pelas linhas e corta. Quando essa suposição vale, o resultado é perfeito e rápido. Quando não vale, o erro não é um ruído aleatório que você pode ignorar. Cada corte cai no lugar errado, e os erros ficam visíveis justamente da forma que mais importa para a animação.

Um quadro com quatro pixels cortados no topo não é apenas um problema estético. Em uma engine de jogos, os quadros são desenhados no mesmo ponto de ancoragem, então um sprite cujo conteúdo fica quatro pixels mais baixo no segundo quadro do que no primeiro vai saltar visivelmente durante a reprodução. Os jogadores percebem isso como um bug, mesmo que não saibam descrevê-lo. Corrigir manualmente depois, quadro a quadro, custa mais tempo do que recortar corretamente desde o início.

Comparação lado a lado: à esquerda, linhas vermelhas de grade com espaçamento uniforme cortam vários personagens; à direita, caixas verdes acompanham o contorno real de cada personagem
A mesma folha recortada de duas formas. Linhas de grade fixas ficam onde o cálculo as coloca, cortando cabeças e armas; a detecção baseada no conteúdo encontra primeiro os limites reais de cada sprite e recorta ao redor deles.
Regra prática: se a folha veio de um gerador de imagens, presuma que é irregular até verificar o contrário. Se veio do Aseprite, TexturePacker ou de um exportador de folhas de sprites, o recorte com grade fixa quase certamente está correto, e você deve usá-lo.

A solução: recorte pelo conteúdo, não pelas coordenadas

Se a grade não consegue indicar onde os sprites estão, os pixels conseguem. Em uma folha com fundo transparente, cada pixel faz parte de um sprite (alfa acima de zero) ou do fundo (alfa zero). Essa única distinção basta para encontrar os sprites sem conhecer a organização previamente.

Como funciona a detecção baseada no conteúdo

  1. Confirme que o fundo é transparente. Amostre os pixels dos cantos. Se forem totalmente transparentes, a folha é uma candidata à detecção automática. Se forem brancos ou de uma cor uniforme, a folha precisa passar primeiro pela remoção de fundo.
  2. Encontre linhas e colunas vazias. Percorra a imagem e registre quais linhas de pixels não contêm nenhum pixel opaco; faça o mesmo com as colunas. Essas faixas vazias são os espaços entre sprites, onde quer que estejam.
  3. Corte no meio de cada espaço de separação. Um espaço de separação é uma faixa, não uma linha. Cortar pelo centro dá a cada sprite vizinho o máximo de espaço livre e tolera um ou dois pixels isolados de antialiasing.
  4. Apare cada parte até sua própria caixa delimitadora. Depois que uma parte estiver isolada, reduza-a ao menor retângulo que contém pixels opacos. Isso remove o preenchimento irregular que fazia as células parecerem diferentes.
  5. Confira o resultado e repita. A primeira passagem costuma deixar problemas: uma parte ainda contém dois sprites porque eles se encostam, ou tem muito mais espaço vazio que as vizinhas. Analisar novamente a saída e subdividir ou aparar outra vez resolve a maioria desses casos.

É isso que o Magic Slice aba do nosso Recortador de folhas de sprites faz. Ele detecta fundos transparentes, encontra os limites dos sprites pelo canal alfa e executa até três passagens de refinamento, verificando se cada recorte produzido tem preenchimento excessivo ou vários sprites e recortando novamente quando necessário. Uma configuração de sensibilidade baixa, média ou alta controla a intensidade da detecção de limites: aumente quando os sprites quase se tocam e diminua quando um único sprite com partes separadas (um escudo flutuante, um efeito de magia) estiver sendo dividido.

Uma folha de sprites com dezesseis personagens carregada no recortador, com as linhas de limite detectadas sobrepostas; as linhas ficam nos espaços transparentes entre os personagens, e não em intervalos uniformes, então as colunas resultam em larguras diferentes

Limites detectados na folha

A saída recortada: dezesseis arquivos de sprites separados, nomeados de sprite_1 a sprite_16, cada um mostrando um único personagem, com dimensões em pixels por arquivo, como 204x257 e 181x260, que diferem entre si

Dezesseis arquivos, cada um aparado

Os limites seguem as faixas vazias entre os personagens, em vez de uma grade uniforme, por isso as colunas saem desiguais. Leia as dimensões abaixo de cada arquivo exportado à direita: elas diferem por dezenas de pixels, exatamente o que a etapa de corte do espaço vazio deve produzir — e exatamente por que a etapa posterior de preenchimento importa.

Se sua folha tem fundo sólido

A detecção de conteúdo precisa de transparência. Se sua folha tiver um fundo branco, preto ou magenta uniforme, passe-a primeiro por um removedor de fundo — o nosso está em /remove-bg e funciona amostrando os pixels dos cantos e limpando todos os pixels suficientemente próximos dessa cor, depois exportando um PNG transparente. Faça isso antes recortar, não depois: remover o fundo uma vez em uma folha é uma operação, enquanto fazer isso em dezesseis quadros separados é ter dezesseis chances de resultados inconsistentes.

Cuidado com fundos que aparecem nos sprites. Se o personagem usa uma camisa branca e o fundo é branco, a remoção baseada nos cantos abrirá buracos na camisa. Nesse caso, peça ao gerador uma cor de fundo que não apareça em nenhuma parte do personagem — magenta vivo e verde neon são as escolhas clássicas justamente por esse motivo.

Linhas manuais de grade: a alternativa que sempre funciona

A detecção automática falha em algumas folhas, e vale a pena saber quando. Sprites que se sobrepõem ou se encostam não podem ser separados pela varredura de faixas vazias, porque não há faixa vazia. Folhas com sombra projetada ou brilho que ocupa toda a tela não têm nenhuma linha totalmente transparente. Folhas em que um único personagem é composto de partes separadas serão divididas além do necessário.

Para todos esses casos, arraste as linhas manualmente. O Manual e predefinições aba começa com uma grade predefinida entre 2x2 e 6x6 — ou uma quantidade personalizada de linhas e colunas, até 20x20 — e permite arrastar cada linha de grade individualmente para onde ela realmente deve ficar. O fluxo de trabalho é:

  1. Escolha a predefinição mais próxima do layout desejado — 4x4 para uma folha de dezesseis quadros, mesmo que o espaçamento real esteja diferente.
  2. Arraste cada linha vertical para o espaço de separação à esquerda ou à direita. Trabalhe da esquerda para a direita para sempre ajustar em relação a uma linha que já corrigiu.
  3. Faça o mesmo com as linhas horizontais, de cima para baixo.
  4. Amplie o quadro mais apertado — normalmente a pose mais larga — e confirme que nenhuma linha o atravessa.
  5. Exporte. PNG preserva a transparência e é a opção indicada para sprites; JPG e WebP também estão disponíveis, mas JPG descarta completamente o canal alfa.

O ajuste manual parece lento, mas não é: uma folha de dezesseis quadros tem apenas seis linhas internas, então você faz seis movimentos, não dezesseis recortes. Comparado a abrir a folha em um editor de imagem e selecionar cada quadro, é muito mais rápido.

Preparando os quadros para uma engine de jogos

Depois de obter PNGs individuais, há dois caminhos para a engine: importá-los como quadros avulsos ou empacotá-los novamente em uma folha limpa e uniforme. A escolha depende da engine e do projeto.

Unity

Para quadros avulsos, adicione os PNGs ao projeto e defina Texture Type como Sprite (2D and UI), Sprite Mode como Single. Defina Filter Mode como Point (no filter) e Compression como None para pixel art — filtragem bilinear em um sprite de 32x32 é o que deixa seu aspecto borrado. Defina Pixels Per Unit de acordo com a grade, selecione todos os quadros e arraste-os para um GameObject para que o Unity gere um Animation Clip automaticamente.

Para uma folha empacotada novamente, use Sprite Mode Multiple e o Sprite Editor. Grid By Cell Size só funciona se a folha reempacotada realmente for uniforme — exatamente o que o reempacotamento oferece e exatamente o que a folha original de IA não tinha.

Godot

No Godot 4, adicione um AnimatedSprite2D, crie um novo SpriteFrames recurso, e use Add Frames from Sprite Sheet para uma folha uniforme ou Add Frames from File(s) para carregar os PNGs individuais diretamente. Quadros avulsos são o caminho mais fácil aqui, porque o importador de folhas de sprites espera células uniformes. Para pixel art, defina o filtro de textura como Nearest — por nó em CanvasItem → Texture → Filter ou globalmente por meio de rendering/textures/canvas_textures/default_texture_filter configuração do projeto.

Ancoragem e alinhamento

Essa é a etapa que as pessoas pulam e depois passam uma tarde depurando. Se você aparou cada quadro até sua própria caixa delimitadora, eles agora têm dimensões diferentes, e a engine centralizará cada um na mesma origem. Um personagem cujo braço se estende no segundo quadro parecerá deslizar para trás, porque a largura extra desloca o centro visual.

A solução é preencher cada quadro novamente até um tamanho comum, com o conteúdo posicionado de forma consistente — normalmente centralizado na horizontal e alinhado embaixo na vertical, para que os pés fiquem no chão. Defina o tamanho comum a partir do maior quadro, arredonde para cima até um número conveniente e preencha o restante com transparência. Aparar e depois preencher pode parecer redundante, mas não é: aparar descarta o preenchimento arbitrário do gerador, e preencher reaplica um preenchimento que você controla.

Solução de problemas

A detecção encontrou partes demais

A sensibilidade está alta demais, ou seus sprites têm elementos separados. Diminua a sensibilidade para que pequenos espaços transparentes dentro de um sprite não sejam tratados como intervalos entre sprites. Se isso não ajudar, mude para linhas manuais — um personagem segurando um objeto separado sempre parecerá dois sprites para uma varredura do alfa.

A detecção encontrou poucas partes

Os sprites estão se tocando, ou um brilho fraco atravessa o espaço entre eles. Aumente a sensibilidade primeiro. Se os sprites realmente se sobrepõem, nenhum método automático vai separá-los; gere a folha novamente pedindo explicitamente espaço livre entre os quadros ou recorte manualmente.

Uma folha de sprites densa com vinte personagens e as linhas de limite detectadas sobrepostas; os personagens ficam próximos uns dos outros e apenas algumas linhas horizontais foram encontradas, então várias linhas de personagens são tratadas como uma única faixa

1. Sensibilidade muito baixa — poucos limites encontrados

A saída com detecção insuficiente: oito arquivos em vez de vinte, dos quais vários são faixas largas de 1557 pixels contendo quatro personagens unidos, em vez de um personagem por arquivo

2. Oito arquivos quando eram esperados vinte

Uma vista aproximada de uma faixa exportada, mostrando quatro personagens unidos em um único arquivo, sem nenhuma coluna totalmente transparente entre eles

3. Motivo: não há uma coluna vazia bem definida entre eles

A mesma faixa recortada novamente com maior sensibilidade, agora separada em quatro arquivos individuais de personagens com quatro larguras diferentes

4. Sensibilidade aumentada — quatro arquivos

Como é uma detecção insuficiente e como corrigir. O sinal é ter menos arquivos que quadros na folha: a varredura não encontrou nenhuma coluna totalmente transparente entre personagens vizinhos e os tratou como um sprite só. Aumentar a sensibilidade faz o corte ocorrer em espaços mais estreitos.

Os quadros têm um contorno sutil do fundo antigo

A remoção de fundo deixou pixels semitransparentes nas bordas tingidos pela cor do fundo antigo. Consulte nosso guia sobre PNGs transparentes e bordas brancas para as correções.

A animação treme na engine

Quase sempre é um problema de ancoragem, não de recorte. Confirme que todos os quadros têm as mesmas dimensões e seguem a mesma convenção de alinhamento, e confira o pivô do sprite na engine.

Nada funciona, a folha está desorganizada

Gerar novamente custa pouco. Prompts que melhoram o resultado de forma consistente: peça explicitamente um fundo transparente, peça espaçamento uniforme e tamanho consistente do personagem, solicite menos quadros por folha (uma 3x3 tem muito mais chance de ser utilizável do que uma 6x6) e gere poses individuais separadamente se a animação importar mais que a praticidade.

Perguntas frequentes

Posso recortar automaticamente uma folha de sprites com fundo branco?

Não diretamente com detecção baseada em alfa, porque não há canal alfa para ler. Remova o fundo primeiro para produzir um PNG transparente e depois recorte. Existem técnicas que trabalham com cor uniforme em vez de alfa, mas são muito mais frágeis quando o objeto compartilha cores com o fundo.

Recortar no navegador causa perda de qualidade da imagem?

Não se exportar para PNG ou WebP. Ambos são sem perdas para esse fim e preservam o canal alfa intacto. JPG tem perdas e não tem alfa, então uma exportação JPG recomprime os pixels e substitui a transparência por uma cor sólida. Para sprites, sempre exporte PNG.

Minhas imagens são enviadas para algum lugar quando uso o recortador?

Não. Todo o processamento acontece no navegador pela API Canvas. A imagem é lida do dispositivo para um canvas, recortada ali e gravada como arquivos para download. Nada é transmitido a um servidor, o que também significa que a ferramenta funciona offline depois que a página é carregada.

Quantos quadros devo pedir a um gerador?

Menos do que você imagina. A qualidade cai rapidamente conforme o número de células aumenta, porque cada sprite recebe menos atenção do modelo e menos área em pixels. Uma folha 3x3 ou 4x4 a 1024x1024 oferece aproximadamente 256 a 340 pixels por quadro, o que é detalhe suficiente para ser utilizável. Uma 6x6 na mesma resolução oferece cerca de 170 pixels por quadro, e as poses tendem a se confundir.

Experimente na sua própria folha

Abra o Recortador de folhas de sprites, solte sua folha de sprites e comece pela aba Magic Slice. Se a detecção automática não acertar, mude para Manual e predefinições e arraste as linhas. Tudo funciona localmente no seu navegador.

Abrir Recortador de folhas de sprites