Sprites de créatures · Le processus

Quelques pixels doivent produire
des milliers de mouvements.

Un personnage de Baldur’s Gate II tient parfois dans quelques dizaines de pixels. Le but n’est pas de le redessiner, mais de garder la même silhouette, les mêmes couleurs et les mêmes animations, avec un rendu plus propre sur un écran moderne.

  • ×2échelle retenue
  • 10 323frames pour CHFF4
  • 8 527BAM de sprites inventoriés

Les deux choix habituels

Nearest reste net,
tandis que Linear devient flou.

Nearest conserve chaque carré. Linear mélange les pixels voisins. L’un paraît trop brut, l’autre efface les petits détails.

Natif ×1
Frame originale de la guerrière humaine CHFF4
Les pixels exacts du jeu.
Nearest ×2
Guerrière humaine agrandie en x2 avec Nearest
Des blocs nets, mais des escaliers durs.
Linear ×2
Guerrière humaine agrandie en x2 avec Bilinear
Plus doux, mais les détails se mélangent.

Pourquoi pas SeedVR ?

Les sprites sont trop petits
pour être confiés à SeedVR.

SeedVR fonctionne très bien quand l’image contient assez de matière. Ici, un visage peut tenir sur quatre ou cinq pixels. Un modèle génératif devrait réinventer les yeux, l’armure ou l’arme à chaque frame.

Sur une carte, reconstruire aide. Sur un sprite, deviner change le personnage.
Taille réelleFrame originale de la guerrière à sa taille réelle
Vue ×12Frame originale très agrandie avec ses pixels visibles

Un outil pensé pour le pixel art

Une même frame est comparée
avec neuf méthodes.

ScalePix tourne en local et permet de comparer plusieurs méthodes spécialisées. La recette retenue est xBR2x, en une seule passe, sans anticrénelage.

La même frame neutre de guerrière comparée avec Original, Nearest, Bilinear, EPX, MMPX, HQX et xBR2x
xBR2x lit mieux les diagonales et les courbes, tout en gardant les couleurs déjà présentes dans la palette.

Pourquoi ×2 plutôt que ×4

Le gain utile se trouve au ×2.

Une fois le filtre d’affichage appliqué, le ×4 n’apportait pas une différence suffisante. Par rapport au ×2, chaque frame contient pourtant quatre fois plus de pixels.

×21 frame · retenu
×44× plus de pixels
La même guerrière comparée en taille native, xBR x2 et xBR x4
Trois sorties directes depuis la même frame source, affichées à la même taille.

Jamais une grande planche

Chaque frame est traitée
séparément.

Chaque image est traitée séparément. L’ordre, les cycles, les centres et la transparence doivent rester exactement là où le moteur les attend.

  1. 01

    Lire

    Ouvrir le BAM original et sa structure.

  2. 02

    Extraire

    Séparer chaque cycle et chaque frame.

  3. 03

    Agrandir

    Appliquer xBR2x une fois, sans AA.

  4. 04

    Vérifier

    Garder les centres, l’alpha et l’ordre.

  5. 05

    Cataloguer

    Donner au moteur la bonne frame HD.

Cinq frames distinctes d’une même animation CHFF4
CHFF4 à elle seule : 23 ressources BAM, 1 170 cycles et 10 323 frames distinctes.
Traitement par lot

Claude et Codex m’ont aidé à construire les outils qui inventorient, extraient, traitent et contrôlent ces frames. Le travail répétitif tourne par lot ; les choix visuels restent humains.

Fausses couleurs, vraies contraintes

Ces couleurs servent
de repères au moteur.

Les zones vertes, roses, rouges et bleues servent d’instructions. Le jeu les remplace au moment du rendu par les gammes choisies pour le personnage.

Ces indices doivent survivre à l’upscale. Ajouter librement des nuances ou peindre un nouveau dégradé empêcherait une recoloration fiable.

Cinq frames CHFF4 montrant les zones de fausses couleurs de la palette
Les couleurs étranges de la source sont utiles : elles disent au moteur ce qu’il peut remplacer.
Métal
Secondaire
Principale
Peau
Cuir
Armure
Cheveux

Un autre type de sprite

Le gobelin contient déjà
ses vraies couleurs.

Contrairement à la guerrière jouable, ce gobelin n’utilise pas les fausses couleurs de palette. Sa peau verte, ses vêtements et son équipement sont directement enregistrés dans chaque frame.

Une frame de gobelin en couleurs comparée avec neuf méthodes d’upscale ScalePix
Le même essai ScalePix sur une créature non palettisée. La recette xBR2x reste identique.

Un personnage est assemblé

Le jeu assemble le corps
et l’équipement.

Le jeu ne stocke pas toutes les combinaisons finales. Il choisit les couches correspondant aux objets équipés, aligne la direction et la frame, puis construit un seul personnage pour l’affichage.

4 corps
Couche du corps de la guerrière humaine
Corps
31 familles
Couche d’équipement de l’épée
Arme
12 familles
Couche d’équipement du bouclier
Bouclier
19 familles
Couche d’équipement du casque
Casque
Guerrière humaine équipée d’une armure, d’un casque, d’un bouclier et d’une épéeAssemblage final en jeu

La dernière étape se fait dans le moteur

xBR crée les pixels avant
l’affichage Catmull-Rom.

Catmull-Rom est une interpolation cubique contrôlée. Réglée à −0,25, elle adoucit les marches les plus dures sans étaler l’image comme Linear.

Dshaders 0.3.5 ciblait l’ancien fonctionnement du jeu et ne pouvait pas simplement être réinstallé sur la 2.7. Le jeu contenait bien un chemin Catmull-Rom, mais prévu pour des images opaques et avec un alpha forcé. Les sprites transparents avaient besoin de leur propre intégration.

01Texture xBR ×2Formes plus propres
02Catmull −0,25Reconstruction douce
03ÉcranGéométrie logique ×1

Démonstration finale · En jeu

La guerrière est comparée
dans trois modes de rendu.

Trois captures alignées : même zone, même pose et mêmes couleurs. Seul le mode de rendu du sprite change.

Guerrière humaine affichée en taille native avec le filtre nearestSprite natif ×1NearestMême scène · même pose
Guerrière humaine affichée en taille native avec le filtre linearSprite natif ×1LinearMême scène · même pose
Guerrière humaine agrandie deux fois et affichée avec Catmull-Rom, réglage de netteté moins 0,25Sprite xBRZ ×2Catmull-Rom · netteté −0,25Sans contour normal
Ce qui est vérifié en jeuMarcheAttaquesDirectionsÉquipementPalettesTransparenceOcclusion

Le résultat recherché

Le sprite final reste fidèle
au personnage d’origine.

Pas de nouveau design, pas de détails inventés : seulement l’animation d’origine, traitée avec plus de soin sur un écran moderne.