Come ritagliare un foglio di sprite irregolare generato con IA

Hai chiesto a un modello di immagini un ciclo di camminata quattro per quattro e hai ricevuto un unico grande PNG. Sembra una griglia. Non è una griglia. Tagliarlo in sedici rettangoli uguali tronca una testa qui, la punta di una spada là e lascia metà dei fotogrammi fuori centro. Ecco perché succede e come ricavare comunque fotogrammi utilizzabili dal foglio.

Perché i fogli di sprite IA non seguono mai una griglia perfetta

Un foglio di sprite tradizionale viene creato da uno strumento. Un artista disegna fotogrammi con celle di dimensioni fisse e un esportatore li impacchetta a scostamenti esatti in pixel. Ogni cella è identica, ogni sprite occupa un riquadro noto e il ritaglio è un calcolo aritmetico.

I generatori di immagini non funzionano così. Modelli di diffusione come DALL·E, Midjourney e Stable Diffusion generano un’immagine continua. Quando chiedi “un foglio di sprite di un cavaliere che cammina, griglia 4x4”, il modello produce qualcosa che sembra un foglio di sprite perché ne ha visti migliaia. Sta imitando lo stile visivo di una griglia, non calcolando i confini delle celle. Nulla nel processo di generazione impone che la terza riga inizi esattamente 384 pixel più in basso.

Le conseguenze pratiche sono coerenti:

  • Spaziatura variabile. Gli spazi tra sprite variano da pochi pixel ad alcune decine. La variazione di solito si accumula da sinistra a destra e dall’alto al basso, quindi i fotogrammi in basso a destra sono i peggiori.
  • Dimensioni degli sprite incoerenti. Un personaggio a metà passo è più largo di uno fermo. Il modello disegna ogni posa nelle dimensioni che sembrano giuste, senza adattarla a un riquadro uniforme.
  • Contenuto decentrato. Anche quando le celle sono quasi uniformi, lo sprite al loro interno è raramente centrato, quindi un ritaglio corretto della griglia produce comunque fotogrammi che tremolano durante la riproduzione.
  • Fotogrammi mancanti o uniti. Talvolta ottieni quindici sprite in una disposizione 4x4 o due pose sovrapposte come una massa unica.
  • Dimensioni dispari della tela. Un output di 1024x1024 diviso in tre colonne dà 341.33 pixel. Occorre arrotondare qualcosa, e gli errori di arrotondamento si accumulano.
Un foglio di sprite generato di un cavaliere con armatura blu, in cui le sedici pose hanno dimensioni e scostamenti incoerenti e spazi di larghezza diversa, anziché una griglia uniforme
Un tipico foglio generato. A prima vista sembra una disposizione 4x4, ma le pose hanno dimensioni variabili, gli spazi sono irregolari e diversi sprite sono decentrati rispetto alla cella teorica. Un fotogramma supera persino il bordo della tela.

Perché il ritaglio a griglia fissa fallisce

Il ritaglio a griglia fissa fa un presupposto: l’immagine è una griglia di celle uguali. Divide la larghezza per le colonne, l’altezza per le righe e taglia. Quando il presupposto è valido è perfetto e rapido. Quando non lo è, l’errore non è rumore casuale ignorabile. Ogni taglio cade nel punto sbagliato e gli errori sono visibili proprio nel modo più importante per l’animazione.

Un fotogramma tagliato di quattro pixel in alto non è soltanto un problema estetico. In un motore di gioco, i fotogrammi vengono disegnati sullo stesso punto di ancoraggio, quindi uno sprite il cui contenuto si trova quattro pixel più in basso nel secondo fotogramma rispetto al primo saltellerà visibilmente durante la riproduzione. I giocatori lo percepiscono come un difetto, anche se non sanno descriverlo. Correggerlo a mano in seguito, fotogramma per fotogramma, richiede più tempo che ritagliare correttamente dall’inizio.

Confronto affiancato: a sinistra linee rosse uniformi tagliano diversi personaggi; a destra riquadri verdi seguono invece il contorno reale di ciascuno
Lo stesso foglio tagliato in due modi. Le linee di una griglia fissa cadono dove le colloca il calcolo, tagliando teste e armi; il rilevamento basato sul contenuto individua prima i limiti reali di ogni sprite e ritaglia intorno a essi.
Regola pratica: se il foglio proviene da un generatore di immagini, presumilo irregolare finché non hai verificato il contrario. Se proviene da Aseprite, TexturePacker o un esportatore di fogli di sprite, il ritaglio a griglia fissa è quasi certamente corretto e dovresti usarlo.

La soluzione: taglia per contenuto, non coordinate

Se la griglia non sa dirti dove sono gli sprite, i pixel possono. In un foglio con sfondo trasparente ogni pixel fa parte di uno sprite (alfa maggiore di zero) oppure dello sfondo (alfa zero). Questa sola distinzione basta a trovare gli sprite senza conoscere prima la disposizione.

Come funziona il rilevamento basato sul contenuto

  1. Conferma che lo sfondo sia trasparente. Campiona i pixel agli angoli. Se sono completamente trasparenti, il foglio è candidato al rilevamento automatico. Se sono bianchi o uniformi, richiede prima la rimozione dello sfondo.
  2. Trova righe e colonne vuote. Scorri l’immagine e registra quali righe di pixel non contengono pixel opachi, e lo stesso per le colonne. Quelle fasce vuote sono gli spazi tra gli sprite, ovunque cadano.
  3. Taglia al centro di ogni spazio di separazione. Uno spazio di separazione è un intervallo, non una linea. Tagliarlo al centro dà a ogni sprite vicino il massimo spazio libero e tollera uno o due pixel antialias isolati.
  4. Rifila ogni pezzo al proprio riquadro di delimitazione. Dopo aver isolato una parte, riducila al rettangolo più stretto che contiene pixel opachi. Elimina i margini irregolari che facevano sembrare diverse le celle.
  5. Controlla il risultato e ripeti. Un primo passaggio lascia spesso problemi: un ritaglio contiene ancora due sprite perché si toccano, oppure ha molto più spazio vuoto degli altri. Rianalizzare l’output e suddividerlo o rifilarlo nuovamente permette di individuare la maggior parte di questi problemi.

È ciò che il Magic Slice scheda nel nostro Ritagliatore di fogli di sprite fa. Rileva gli sfondi trasparenti, trova i confini degli sprite tramite il canale alfa ed esegue fino a tre passaggi di rifinitura, controllando ogni ritaglio prodotto per spaziatura eccessiva o sprite multipli e ritagliando di nuovo dove necessario. Una sensibilità bassa, media o alta controlla quanto è aggressivo il rilevamento dei confini: aumentala quando gli sprite quasi si toccano, riducila quando uno sprite con parti staccate, come uno scudo fluttuante o un effetto di magia, viene separato.

Un foglio di sprite con sedici personaggi caricato nel ritagliatore, con le linee di confine rilevate sovrapposte; le linee si trovano negli spazi trasparenti tra i personaggi anziché a intervalli uniformi, quindi le colonne risultano di larghezze diverse

Confini rilevati sul foglio

Il risultato del ritaglio: sedici file di sprite separati, denominati da sprite_1 a sprite_16, ciascuno con un singolo personaggio e dimensioni in pixel diverse tra file, come 204x257 e 181x260

Sedici file, ciascuno rifilato

I confini seguono fasce vuote tra personaggi, non una griglia uniforme: per questo le colonne sono disuguali. Le dimensioni sotto ogni file a destra differiscono di decine di pixel, proprio ciò che deve produrre la rifilatura e perché poi contano i margini.

Se il foglio ha uno sfondo uniforme

Il rilevamento del contenuto richiede trasparenza. Se il foglio ha uno sfondo uniforme bianco, nero o magenta, passalo prima in uno strumento di rimozione dello sfondo: il nostro si trova in /remove-bg e funziona campionando i pixel agli angoli ed eliminando ogni pixel sufficientemente vicino a quel colore, poi esportando un PNG trasparente. Fallo prima ritaglio, non dopo: rimuovere lo sfondo una volta da un unico foglio è una sola operazione, mentre farlo su sedici fotogrammi separati offre sedici occasioni di ottenere risultati incoerenti.

Fai attenzione agli sfondi che compaiono negli sprite. Se il personaggio indossa una camicia bianca e lo sfondo è bianco, la rimozione basata sugli angoli creerà buchi nella camicia. In tal caso, chiedi al generatore un colore di sfondo assente dal soggetto: magenta acceso e verde neon sono le scelte classiche proprio per questo.

Linee manuali della griglia: l’alternativa che funziona sempre

Il rilevamento automatico fallisce su alcuni fogli ed è utile sapere quando. Gli sprite che si sovrappongono o si toccano non possono essere separati cercando fasce vuote, perché non esistono. I fogli con un’ombra proiettata o un bagliore estesi sull’intera tela non hanno righe completamente trasparenti. I fogli in cui un singolo personaggio è composto da parti staccate verranno suddivisi troppo.

Per tutti questi casi, trascina personalmente le linee. Il Manuale e preimpostazioni scheda parte da una griglia preimpostata tra 2x2 e 6x6, oppure da un numero personalizzato di righe e colonne fino a 20x20, e consente poi di trascinare ogni singola linea della griglia dove dovrebbe trovarsi realmente. Il flusso di lavoro è:

  1. Scegli la preimpostazione più vicina alla disposizione prevista, 4x4 per sedici fotogrammi, anche se la spaziatura reale è irregolare.
  2. Trascina ogni linea verticale nello spazio alla sua sinistra o destra. Procedi da sinistra a destra per regolarla sempre rispetto a una linea già corretta.
  3. Fai lo stesso con le linee orizzontali, dall’alto verso il basso.
  4. Ingrandisci il fotogramma con meno spazio libero, di solito la posa più larga, e verifica che nessuna linea lo attraversi.
  5. Esporta. PNG conserva la trasparenza ed è ciò che serve per gli sprite; sono disponibili anche JPG e WebP, ma JPG elimina completamente il canale alfa.

La regolazione manuale sembra lenta ma non lo è: un foglio di sedici fotogrammi ha solo sei linee interne, quindi fai sei trascinamenti, non sedici ritagli. È molto più veloce che aprire il foglio in un editor e selezionare ogni fotogramma.

Preparazione dei fotogrammi per un motore di gioco

Ottenuti PNG singoli, ci sono due percorsi verso un motore: importarli separatamente oppure reimpacchettarli in un foglio pulito e uniforme. La scelta dipende da motore e progetto.

Unity

Per fotogrammi separati, inserisci i PNG nel progetto e imposta Texture Type su Sprite (2D and UI), Sprite Mode su Single. Imposta Filter Mode su Point (no filter) e Compression su None per la pixel art: il filtraggio bilineare su uno sprite 32x32 lo rende impastato. Imposta Pixels Per Unit in modo che corrisponda alla griglia, poi seleziona tutti i fotogrammi e trascinali su un GameObject perché Unity generi automaticamente un Animation Clip.

Per un foglio reimpacchettato, usa Sprite Mode Multiple e Sprite Editor. Grid By Cell Size funziona solo se il foglio reimpacchettato è davvero uniforme: proprio ciò che l’impacchettamento fornisce e ciò che mancava al foglio IA originale.

Godot

In Godot 4, aggiungi un AnimatedSprite2D, crea un nuovo SpriteFrames risorsa e usa Add Frames from Sprite Sheet per un foglio uniforme oppure Add Frames from File(s) per caricare direttamente i PNG singoli. I fotogrammi separati sono il percorso più semplice qui perché l’importatore di fogli di sprite si aspetta celle uniformi. Per la pixel art, imposta il filtro della texture su Nearest, per nodo sotto CanvasItem → Texture → Filter oppure globalmente tramite il rendering/textures/canvas_textures/default_texture_filter impostazione del progetto.

Ancoraggio e allineamento

È il passaggio che le persone saltano, per poi passare un pomeriggio a cercare il problema. Se hai rifilato ogni fotogramma al proprio riquadro di delimitazione, i fotogrammi hanno ora dimensioni diverse e il motore li centrerà tutti sulla stessa origine. Un personaggio che estende il braccio nel secondo fotogramma sembrerà scivolare indietro, perché la larghezza aggiuntiva sposta il centro visivo.

La soluzione è riportare ogni fotogramma a una dimensione comune, posizionando il contenuto coerentemente, di solito centrato orizzontalmente e allineato in basso per piedi stabili. Scegli dal maggiore, arrotonda a un numero comodo e completa gli altri con trasparenza. Rifilare e aggiungere margini non è circolare: elimina margini arbitrari del generatore e applica quelli controllati.

Risoluzione dei problemi

Il rilevamento ha trovato troppe parti

La sensibilità è troppo alta oppure gli sprite hanno elementi staccati. Abbassala affinché piccoli spazi interni non siano interpretati come separazioni. Se non aiuta, usa linee manuali: una scansione alfa vede sempre due sprite in un personaggio con un oggetto separato.

Il rilevamento ha trovato troppo poche parti

Gli sprite si toccano oppure un bagliore tenue unisce lo spazio. Aumenta prima la sensibilità. Se si sovrappongono davvero, nessun metodo automatico li separa: rigenera chiedendo spazio libero tra fotogrammi oppure taglia a mano.

Un foglio di sprite fitto con venti personaggi e le linee di confine rilevate sovrapposte; i personaggi sono vicini e sono state trovate solo poche linee orizzontali, quindi diverse righe vengono trattate come una sola fascia

1. Sensibilità troppo bassa: pochi confini trovati

Il risultato con rilevamento insufficiente: otto file anziché venti, diversi dei quali sono strisce larghe 1557 pixel contenenti quattro personaggi uniti ciascuna invece di un personaggio per file

2. Otto file quando ne erano previsti venti

Una vista ravvicinata di una striscia esportata, con quattro personaggi uniti in un unico file senza alcuna colonna completamente trasparente che li separi

3. Perché: nessuna colonna vuota tra loro

La stessa striscia ritagliata nuovamente con una sensibilità maggiore, ora suddivisa in quattro file di personaggi singoli di quattro larghezze diverse

4. Sensibilità aumentata: quattro file

Come appare un rilevamento insufficiente e come correggerlo. Il segnale tipico è ottenere meno file dei fotogrammi presenti nel foglio: la scansione non ha trovato una colonna completamente trasparente tra personaggi vicini e li ha trattati come un unico sprite. Aumentare la sensibilità permette di tagliare lungo spazi più stretti.

I fotogrammi hanno un contorno tenue del vecchio sfondo

La rimozione dello sfondo ha lasciato pixel semitrasparenti sui bordi tinti del vecchio colore di sfondo. Consulta la nostra guida su PNG trasparenti e bordi bianchi per le soluzioni.

L’animazione tremola nel motore

Quasi sempre è un problema di ancoraggio, non di ritaglio. Verifica che ogni fotogramma abbia le stesse dimensioni e la stessa convenzione di allineamento e controlla il pivot dello sprite nel motore.

Nulla funziona, il foglio è un disastro

Rigenerare costa poco. Prompt che migliorano affidabilmente il risultato: chiedi esplicitamente trasparenza, spaziatura uniforme e dimensioni coerenti del personaggio, meno fotogrammi per foglio (3x3 è molto più probabile che sia utilizzabile rispetto a 6x6) e pose separate se l’animazione conta più della comodità.

Domande frequenti

Posso ritagliare automaticamente un foglio di sprite con sfondo bianco?

Non direttamente con il rilevamento alfa, perché non c’è un canale da leggere. Rimuovi prima lo sfondo per ottenere un PNG trasparente, poi ritaglia. Esistono tecniche basate su colori uniformi anziché alfa, ma sono molto più fragili quando il soggetto condivide colori con lo sfondo.

Il ritaglio nel browser riduce la qualità dell’immagine?

Non se esporti PNG o WebP. Entrambi sono senza perdita per questo scopo e conservano alfa. JPG è con perdita e non ha alfa, quindi ricomprime i pixel e sostituisce la trasparenza con un colore uniforme. Per sprite, esporta sempre PNG.

Le mie immagini vengono caricate da qualche parte quando uso il ritagliatore?

No. Tutta l’elaborazione avviene nel browser tramite l’API Canvas. L’immagine viene letta dal dispositivo in una tela, ritagliata lì e riscritta come download. Nulla viene trasmesso a un server: lo strumento funziona quindi anche offline dopo il caricamento della pagina.

Quanti fotogrammi dovrei chiedere a un generatore?

Meno di quanti pensi. La qualità si degrada rapidamente all’aumentare delle celle, perché ogni sprite riceve meno attenzione dal modello e meno area in pixel. Un foglio 3x3 o 4x4 a 1024x1024 offre circa 256–340 pixel per fotogramma, abbastanza dettagli per essere utilizzabile. Un 6x6 alla stessa risoluzione offre circa 170 pixel per fotogramma e le pose tendono a confondersi.

Provalo sul tuo foglio

Apri Ritagliatore di fogli di sprite, inserisci il foglio e inizia dalla scheda Magic Slice. Se il rilevamento automatico non riesce, passa a Manuale e preimpostazioni e trascina le linee. Tutto funziona localmente nel browser.

Apri Ritagliatore di fogli di sprite