Sprites de feu 8-bit avec feu reconstruit
Nécessite des mouvements déjà rendus par le skill fire-sprites : ce skill fonctionne à partir des calques body et fire séparés dans moves/NAME/, pas à partir d'une vidéo plate. $KIT est la racine du kit (deux niveaux au-dessus de ce fichier) ; py est $KIT/.venv/bin/python ; exécutez depuis le répertoire du projet.
py $KIT/tools/retro.py # chaque mouvement rendu
py $KIT/tools/retro.py "breath_*" # ou seulement certains (noms ou globs)
open retro.html
Pourquoi le feu est reconstruit, pas réduit
Réduire un sprite de feu et le coller à une palette donne un blob blanc plat : à la caméra, la flamme est écrasée en blanc, il n'y a donc pas de couleur à l'intérieur à conserver. À la place :
- Corps : réduit, bord alpha dur, mappé à une palette fixe de 8 couleurs (peau et cuir) pondérée par luminosité pour que les ombres survivent, avec un contour sombre de 1 pixel.
- Feu : la forme réelle de la flamme est conservée image par image, mais sa couleur est redessinée. La profondeur d'un pixel à l'intérieur de la flamme choisit un palier sur une rampe de chaleur de 7 couleurs, du rouge foncé au bord jusqu'à un cœur blanc en passant par l'orange et le jaune, avec un tramage ordonné 4×4 entre les paliers. La profondeur est mesurée par rapport à l'épaisseur de cette flamme, donc une fine flamme d'épée obtient encore un cœur chaud et un énorme nuage de souffle obtient un large dégradé. Une petite passe d'ouverture supprime les fines lignes de mur qui ont fui dans le calque de feu.
retro.html montre chaque mouvement de quatre façons : feu reconstruit et quantification directe, à 64 px et 40 px de hauteur de corps. La version directe est là pour que l'artiste puisse voir la différence ; le feu reconstruit est celui à livrer. L'animation tourne « on twos » (moitié de la fréquence d'images maître), ce qui donne un aspect rétro et divise par deux la taille de la feuille.
Sorties : retro/NAME_B64.png, NAME_B40.png (reconstruit), NAME_A64.png, NAME_A40.png (direct), et retro/atlas.json avec la grille de frames, les fps et l'ancrage des pieds. Dessinez-les avec un redimensionnement au plus proche voisin uniquement à des multiples entiers (image-rendering: pixelated en CSS).
Que dire à l'artiste
Regardez le résultat avant de le décrire. Résultats typiques :
- Les nuages de souffle se lisent très bien ; le redessin leur donne une structure que les images n'ont pas.
- Les nuages qui touchaient le bord du cadre, une fenêtre ou un mur soufflé deviennent carrés à cette échelle.
- Le corps devient presque blanc au pic d'un souffle et se mappe en bleu marine foncé dans les images de silhouette, car la palette suit la lumière de l'image. Proposez de maintenir les tons de peau constants si cela les dérange (pas encore implémenté).
Modifier l'apparence
Modifiez les constantes en haut de tools/retro.py : BODY_PAL (palette du corps, du plus sombre au plus clair), FIRE_RAMP (du bord au cœur), les tailles dans for B in (64, 40), et la courbe de profondeur sur la ligne heat =. Gardez la palette fixe pour tous les mouvements d'un même artiste pour que les animations correspondent.