Was macht 8-Bit-Feuer-Sprites mit neugebautem Feuer?
Erfordert bereits vom fire-sprites Skill gerenderte Bewegungen: Dies arbeitet mit den separaten Körper- und Feuer-Schichten in moves/NAME/, nicht mit flachen Videos. $KIT ist das Kit-Root (zwei Ebenen über dieser Datei); py ist $KIT/.venv/bin/python; führe das Skript aus dem Projektverzeichnis aus.
py $KIT/tools/retro.py # jede gerenderte Bewegung
py $KIT/tools/retro.py "breath_*" # oder nur einige (Namen oder Platzhalter)
open retro.html
Warum das Feuer neugebaut wird, nicht verkleinert
Das Verkleinern eines Feuer-Sprites und das Anpassen an eine Palette ergibt einen flachen weißen Klumpen: In der Kamera ist die Flamme bis auf Weiß überbelichtet, sodass kein Farbe darin bleibt. Stattdessen:
- Körper: herunterskaliert, harter Alpha-Rand, auf eine feste 8-Farben-Haut-und-Leder-Palette abgebildet (helligkeitsgewichtet, sodass die Schattierung erhalten bleibt), mit einem 1-Pixel-dunklen Umriss.
- Feuer: Die reale Flammenform wird Bild für Bild beibehalten, aber ihre Farbe wird neu gezeichnet. Wie tief ein Pixel innerhalb der Flamme sitzt, wählt einen Schritt auf einer 7-Farben-Wärmekurve: dunkelrot am Rand über orange und gelb bis zu einem weißen Kern, mit einem 4x4 geordneten Dither zwischen den Stufen. Die Tiefe wird relativ zur Dicke dieser Flamme gemessen, sodass eine dünne Schwertflamme immer noch einen heißen Kern und eine riesige Atemwolke einen breiten Verlauf erhält. Ein kleiner Öffnungsdurchgang entfernt dünne Wandlinien, die in die Feuerschicht ausgelaufen sind.
retro.html zeigt jede Bewegung auf vier Arten: neugebautes Feuer und direkte Quantisierung, bei 64 px und 40 px Körperhöhe. Die direkte Version ist vorhanden, damit der Darsteller den Unterschied sehen kann; neugebautes Feuer ist das, was ausgeliefert werden soll. Die Animation läuft "auf Zweien" (die Hälfte der Master-Framerate), was retro wirkt und die Sheet-Größe halbiert.
Ausgabe: retro/NAME_B64.png, NAME_B40.png (neugebaut), NAME_A64.png, NAME_A40.png (direkt) und retro/atlas.json mit Rasterrahmen, Bildrate und Fußanker. Zeichne sie mit Nearest-Neighbour-Skalierung nur in ganzzahligen Vielfachen (image-rendering: pixelated in CSS).
Was dem Darsteller gesagt werden soll
Sieh dir das Ergebnis an, bevor du es beschreibst. Typische Feststellungen:
- Atemwolken lesen sich sehr gut; die Neufärbung gibt ihnen eine Struktur, die das Filmmaterial vermissen lässt.
- Wolken, die den Bildrand, ein Fenster oder eine überbelichtete Wand berührt haben, wirken in dieser Größe kastenförmig.
- Der Körper leuchtet bei einem Atemspitzen nahezu weiß auf und wird in Silhouetten-Bildern zu dunklem Marineblau abgebildet, da die Palette der Helligkeit des Filmmaterials folgt. Biete an, die Hauttöne stabil zu halten, falls das stört (noch nicht implementiert).
Ändern des Look
Bearbeite die Konstanten am Anfang von tools/retro.py: BODY_PAL (Körper-Palette, dunkelste zuerst), FIRE_RAMP (Rand zu Kern), die Größen in for B in (64, 40) und die Tiefenkurve in der heat = Zeile. Halte die Palette über alle Bewegungen eines Darstellers fest, damit die Animationen zueinander passen.