Découper une planche IA irrégulière

Vous avez demandé à un modèle d’image un cycle de marche en quatre par quatre et obtenu un grand PNG. Il ressemble à une grille, mais ce n’en est pas une. Le découper en seize rectangles égaux coupe ici une tête, là une pointe d’épée, et laisse la moitié des images décentrées. Voici pourquoi et comment en tirer malgré tout des images utilisables.

Pourquoi les planches de sprites IA ne suivent jamais une grille parfaite

Une planche traditionnelle est construite par un outil : dessin à taille fixe, empaquetage aux positions exactes, cases identiques et boîtes connues. La découpe est arithmétique.

Les générateurs d’images ne fonctionnent pas ainsi. Les modèles de diffusion comme DALL·E, Midjourney et Stable Diffusion génèrent une image continue. Lorsque vous demandez « une planche de sprites d’un chevalier marchant, grille 4x4 », le modèle produit quelque chose qui ressemble à une planche de sprites parce qu’il en a vu des milliers. Il imite l’aspect visuel d’une grille, sans calculer les limites des cellules. Rien dans la génération n’impose que la troisième ligne commence exactement 384 pixels plus bas.

Les conséquences pratiques sont constantes :

  • Espacement variable. Les espaces entre sprites varient de quelques pixels à quelques dizaines. La dérive s’accumule généralement de gauche à droite et de haut en bas : les images du coin inférieur droit sont donc les plus touchées.
  • Tailles de sprites variables. Un personnage en marche est plus large qu'au repos. Le modèle choisit la taille de chaque pose sans boîte uniforme.
  • Contenu décentré. Même lorsque les cases sont à peu près régulières, le sprite y est rarement centré. Une découpe de grille correcte produit donc encore des images qui tremblent à la lecture.
  • Images absentes ou fusionnées. Il arrive d’obtenir quinze sprites dans une disposition 4x4, ou deux poses qui se chevauchent et ressemblent à une seule masse.
  • Dimensions impaires. Une sortie 1024x1024 divisée en trois colonnes donne 341.33 pixels. Un arrondi est inévitable et les erreurs s'accumulent.
Une planche générée d’un chevalier en armure bleue, dont les seize poses ont des tailles et décalages incohérents, avec des espaces de largeur variable plutôt qu’une grille régulière
Une planche générée typique. Elle semble organisée en 4x4 au premier regard, mais les tailles des poses varient, leurs espacements sont irréguliers et plusieurs sprites sont décentrés dans leur case théorique. Une image dépasse même du canevas.

Pourquoi le découpage sur grille fixe échoue

Le découpage en grille fixe repose sur une hypothèse : l’image est un réseau de cases identiques. Il divise la largeur par les colonnes, la hauteur par les lignes, puis découpe. Lorsque cette hypothèse est juste, il est précis et rapide. Sinon, l’erreur n’est pas un bruit aléatoire que l’on peut ignorer. Chaque découpe tombe au mauvais endroit, et les erreurs apparaissent précisément là où elles affectent le plus l’animation.

Une image coupée de quatre pixels en haut n’est pas qu’un problème esthétique. Dans un moteur de jeu, les images sont dessinées au même point d’ancrage : si le contenu du sprite se trouve quatre pixels plus bas dans la deuxième image, il rebondit visiblement à la lecture. Les joueurs y voient un bug, même sans pouvoir le nommer. Le corriger manuellement, image par image, prend plus de temps que de découper correctement dès le départ.

Comparaison côte à côte : à gauche, des lignes rouges régulièrement espacées traversent plusieurs personnages ; à droite, des rectangles verts suivent les contours réels de chaque personnage.
La même planche découpée de deux façons. Les lignes fixes tombent selon le calcul et coupent têtes et armes ; la détection par contenu trouve d’abord les limites réelles de chaque sprite et découpe autour.
Règle pratique : si la planche vient d’un générateur d’images, supposez-la irrégulière jusqu’à vérification. Si elle vient d’Aseprite, de TexturePacker ou d’un exporteur de planches de sprites, le découpage sur grille fixe est presque certainement correct et doit être utilisé.

La solution : découper selon le contenu, pas les coordonnées

Si la grille ne peut pas indiquer où se trouvent les sprites, les pixels le peuvent. Sur une planche à fond transparent, chaque pixel appartient soit à un sprite (alpha supérieur à zéro), soit au fond (alpha nul). Cette seule distinction suffit à repérer les sprites sans connaître la disposition à l’avance.

Fonctionnement de la détection par contenu

  1. Confirmez la transparence du fond. Échantillonnez les pixels des coins. S’ils sont entièrement transparents, la planche peut convenir à la détection automatique. S’ils sont blancs ou d’une couleur unie, il faut d’abord supprimer l’arrière-plan.
  2. Trouver les rangées et colonnes vides. Parcourez l’image et relevez les lignes de pixels ne contenant aucun pixel opaque, puis faites de même pour les colonnes. Ces bandes vides sont les séparations entre les sprites, où qu’elles se trouvent.
  3. Coupez au milieu de chaque intervalle. Un intervalle est une zone, pas une ligne. Couper au centre laisse de l'air aux voisins et tolère un ou deux pixels lissés isolés.
  4. Rognez chaque morceau à son rectangle englobant. Une fois un morceau isolé, réduisez-le au plus petit rectangle contenant les pixels opaques. Cela retire les marges irrégulières qui donnaient aux cases des tailles incohérentes.
  5. Vérifiez puis répétez. Une première passe laisse souvent des problèmes : un morceau contient encore deux sprites parce qu’ils se touchent, ou bien beaucoup plus d’espace vide que les voisins. Réanalyser la sortie et subdiviser ou rogner à nouveau corrige la plupart de ces cas.

C’est ce que fait le Découpage magique onglet dans notre Découpeur de planches de sprites fait. Il détecte les fonds transparents, trouve les limites des sprites à partir du canal alpha, puis effectue jusqu’à trois passes de raffinement, vérifiant chaque morceau produit pour repérer les marges excessives ou plusieurs sprites et redécoupant si nécessaire. Une sensibilité faible, moyenne ou élevée contrôle l’agressivité de la détection : augmentez-la lorsque les sprites se touchent presque, réduisez-la lorsqu’un sprite avec des parties détachées — bouclier flottant ou effet magique — est fragmenté.

Une planche de seize personnages chargée dans le découpeur, avec les limites détectées tracées dessus ; elles suivent les espaces transparents entre personnages plutôt que des intervalles réguliers, produisant des colonnes de largeurs différentes

Limites détectées sur la planche

Résultat découpé : seize fichiers séparés nommés sprite_1 à sprite_16, chacun avec un personnage seul et des dimensions variables, comme 204x257 et 181x260

Seize fichiers, chacun rogné

Les limites suivent les bandes vides entre personnages plutôt qu’une grille régulière, d’où des colonnes inégales. Lisez les dimensions sous chaque export à droite : elles diffèrent de dizaines de pixels, exactement ce que le rognage doit produire, et exactement pourquoi l’ajout de marges plus tard compte.

Si la planche a un fond uni

La détection du contenu exige de la transparence. Si la planche possède un fond blanc, noir ou magenta uni, utilisez d’abord un outil de suppression d’arrière-plan ; le nôtre se trouve à /remove-bg et fonctionne en échantillonnant les pixels des coins, en effaçant tous les pixels assez proches de cette couleur, puis en exportant un PNG transparent. Faites cela avant le découpage, pas après : supprimer le fond une fois sur une planche constitue une opération ; le faire sur seize images séparées donne seize occasions d’obtenir des résultats incohérents.

Attention aux fonds présents dans les sprites. Si votre personnage porte une chemise blanche sur un fond blanc, la suppression basée sur les coins créera des trous dans la chemise. Demandez alors au générateur une couleur de fond absente de tout le sujet : le magenta vif et le vert fluo sont des choix classiques précisément pour cette raison.

Lignes manuelles : solution de repli fiable

La détection automatique échoue sur certaines planches, et il est utile de savoir lesquelles. Des sprites qui se touchent ou se chevauchent ne peuvent pas être séparés en recherchant des bandes vides, puisqu’il n’y en a pas. Une ombre ou une lueur couvrant tout le canevas empêche aussi toute ligne entièrement transparente. Un personnage composé de morceaux détachés sera au contraire trop fragmenté.

Dans tous ces cas, glissez les lignes vous-même. Le Manuel et préréglages onglet part d’une grille prédéfinie entre 2x2 et 6x6 — ou de nombres personnalisés de lignes et colonnes jusqu’à 20x20 — puis vous laisse déplacer chaque ligne de grille vers sa véritable position. Le flux de travail est :

  1. Choisissez le préréglage le plus proche de la disposition prévue — 4x4 pour une planche de seize images, même si les espacements réels sont irréguliers.
  2. Déplacez les verticales dans les intervalles, de gauche à droite contre les lignes déjà corrigées.
  3. Faites pareil horizontalement, du haut vers le bas.
  4. Zoomez sur l’image la plus serrée — généralement la pose la plus large — et vérifiez qu’aucune ligne ne la traverse.
  5. Exportez. Le PNG conserve la transparence et convient aux sprites ; le JPG et le WebP sont également proposés, mais le JPG supprime entièrement le canal alpha.

Le réglage manuel semble lent, mais ne l’est pas : une planche de seize images comporte six lignes intérieures au total, soit six déplacements, pas seize recadrages. C’est beaucoup plus rapide que d’ouvrir la planche dans un éditeur et de sélectionner chaque image séparément.

Préparer les images pour un moteur de jeu

Une fois les PNG individuels obtenus, deux voies permettent de les utiliser dans un moteur : les importer comme images séparées ou les réempaqueter en planche propre et régulière. Le choix dépend du moteur et du projet.

Unity

Importez les PNG indépendants et réglez Texture Type sur Sprite (2D and UI), Sprite Mode sur Single. Réglez Filter Mode sur Point (no filter) et Compression sur None pour le pixel art : le filtrage bilinéaire sur un sprite 32x32 le rend indistinct. Réglez Pixels Per Unit selon votre grille, puis sélectionnez toutes les images et faites-les glisser sur un GameObject pour qu’Unity crée automatiquement un Animation Clip.

Pour une planche recomposée, utilisez Sprite Mode Multiple et le Sprite Editor. Grid By Cell Size ne fonctionne que si la planche réassemblée est réellement uniforme : c’est précisément ce que fournit le réassemblage et ce que la planche IA d’origine ne fournissait pas.

Godot

Dans Godot 4, ajoutez un AnimatedSprite2D, créez un nouveau SpriteFrames ressource, et utilisez Add Frames from Sprite Sheet pour une planche uniforme ou Add Frames from File(s) pour charger directement vos PNG individuels. Les images séparées sont plus simples ici, car l’importeur de planches de sprites attend des cellules uniformes. Pour le pixel art, réglez le filtre de texture sur Nearest, par nœud sous CanvasItem → Texture → Filter ou globalement via le rendering/textures/canvas_textures/default_texture_filter réglage du projet.

Ancrage et alignement

C’est l’étape négligée qui coûte ensuite un après-midi de diagnostic. Si chaque image est rognée à son rectangle, leurs dimensions diffèrent et le moteur les centre sur la même origine. Un personnage dont le bras s’étend sur la deuxième image semble reculer, car la largeur supplémentaire décale son centre visuel.

La solution est de compléter chaque image jusqu’à une taille commune avec un contenu placé de façon cohérente, généralement centré horizontalement et aligné en bas pour garder les pieds au sol. Choisissez la taille commune selon la plus grande image, arrondissez-la à une valeur pratique et complétez les autres avec de la transparence. Rogner puis ajouter des marges peut sembler circulaire, mais non : le rognage supprime les marges arbitraires du générateur, puis vous ajoutez celles que vous contrôlez.

Dépannage

Trop d'éléments détectés

La sensibilité est trop élevée, ou vos sprites ont des éléments détachés. Réduisez-la pour que les petits espaces transparents à l’intérieur d’un sprite ne soient pas considérés comme des séparations. Si cela ne suffit pas, passez aux lignes manuelles : un personnage tenant un objet séparé apparaîtra toujours comme deux sprites à une analyse alpha.

Trop peu d'éléments détectés

Les sprites se touchent, ou une faible lueur relie l’espace entre eux. Augmentez d’abord la sensibilité. S’ils se chevauchent réellement, aucune méthode automatique ne les séparera ; régénérez la planche en demandant explicitement de l’espace entre les images, ou découpez manuellement.

Une planche dense de vingt personnages avec les limites détectées tracées dessus ; les personnages sont rapprochés et seules quelques lignes horizontales ont été trouvées, si bien que plusieurs lignes sont traitées comme une seule bande

1. Sensibilité trop faible : peu de limites détectées

Résultat sous-détecté : huit fichiers au lieu de vingt, dont plusieurs bandes de 1557 pixels contenant quatre personnages fusionnés plutôt qu’un personnage par fichier.

2. Huit fichiers au lieu des vingt attendus

Détail d'une bande exportée avec quatre personnages fusionnés, sans colonne transparente entre eux

3. Pourquoi : aucune colonne nette entre eux

La même bande redécoupée à sensibilité plus élevée, désormais séparée en quatre fichiers de personnages de quatre largeurs différentes

4. Sensibilité augmentée : quatre fichiers

Les signes d’une détection insuffisante et la solution. Le signe caractéristique est un nombre de fichiers inférieur au nombre d’images de la planche : l’analyse n’a trouvé aucune colonne entièrement transparente entre les personnages voisins et les a traités comme un seul sprite. Augmenter la sensibilité permet de couper dans des espaces plus étroits.

Les images gardent un léger contour de l'ancien fond

La suppression a teinté les bords semitransparents avec l'ancien fond. Consultez notre guide sur PNG transparents et contours blancs pour les solutions.

L’animation tremble dans le moteur

C’est presque toujours un problème d’ancrage plutôt que de découpage. Vérifiez que toutes les images ont les mêmes dimensions et la même convention d’alignement, puis contrôlez le pivot du sprite dans le moteur.

Rien ne marche, la planche est désordonnée

Régénérer coûte peu. Les prompts qui améliorent régulièrement le résultat : demander explicitement un fond transparent, des espacements réguliers et une taille de personnage cohérente, demander moins d’images par planche (un 3x3 a bien plus de chances d’être exploitable qu’un 6x6), et générer les poses séparément si l’animation importe plus que la commodité.

Questions fréquentes

Puis-je découper automatiquement une planche sur fond blanc ?

Pas directement avec une détection basée sur l’alpha, car aucun canal alpha n’est disponible. Supprimez d’abord le fond pour produire un PNG transparent, puis découpez. Les techniques basées sur une couleur unie plutôt que sur l’alpha existent, mais sont beaucoup plus fragiles lorsque le sujet partage des couleurs avec le fond.

Découper dans le navigateur réduit-il la qualité ?

Non, si vous exportez en PNG ou WebP. Tous deux sont sans perte pour cet usage et préservent le canal alpha. Le JPG est avec perte et sans alpha : l’exportation recompresse donc les pixels et remplace la transparence par une couleur unie. Pour les sprites, exportez toujours en PNG.

Mes images sont-elles envoyées lors du découpage ?

Non. Tout le traitement s’effectue dans votre navigateur via l’API Canvas. L’image est lue depuis votre appareil dans un canevas, découpée sur place puis réenregistrée sous forme de téléchargements. Rien n’est transmis à un serveur ; l’outil fonctionne donc aussi hors ligne une fois la page chargée.

Combien d'images demander au générateur ?

Moins que vous ne le pensez. La qualité se dégrade rapidement lorsque le nombre de cases augmente, car chaque sprite reçoit moins d’attention du modèle et moins de pixels. Une planche 3x3 ou 4x4 en 1024x1024 fournit environ 256 à 340 pixels par image, ce qui donne suffisamment de détails pour être exploitable. Une planche 6x6 à la même résolution n’offre qu’environ 170 pixels par image, et les poses ont tendance à se confondre.

Essayez sur votre propre planche

Ouvrez le découpeur de planches de sprites, déposez votre planche et commencez dans l’onglet Magic Slice. Si la détection automatique ne convient pas, passez à Manuel et préréglages et déplacez les lignes. Tout s’exécute localement dans votre navigateur.

Ouvrir le découpeur de planches