- Einführung in den Space Invader Generator und Erklärung des Prinzips, mit dem automatisch verschiedene Pixel-Art-Invader erzeugt werden
- Die Struktur nutzt eine einfache vektorbasierte Polygon-Körpererzeugung sowie geometrische Regeln wie Symmetrie, Zufallspunkte und Spiegelung
- Auch Gliedmaßen-Elemente wie Arme, Tentakel und Hörner werden mithilfe von Zufall und geometrischen Verfahren erweitert und bieten einfache, kreative Variationsmöglichkeiten
- Durch Umwandlung von Vektor in Pixel, Farbgebung und das Hinzufügen von Augen entsteht eine vertraute Spielgrafik
- Der gesamte Herstellungsprozess und die Code-Implementierungslogik werden offengelegt, sodass Lernende und Entwickler selbst Anpassungen oder Übungen vornehmen können
Überblick
Der Space Invader Generator ist ein Tool, mit dem jeder ganz einfach zufällige Invader im Pixel-Art-Stil erstellen kann. In diesem Artikel werden das Funktionsprinzip und der kreative Prozess der Zufallsgenerierung anhand von Animationen und Beispielen erklärt. Charakteristisch ist der Ansatz, Design und Programmierung zu verbinden, etwa über die geometrische Struktur der Invader, die Vektor-zu-Pixel-Umwandlung und die Farbgebung.
Ausgangspunkt
- Während der Entwicklung des 3D-Renderer-Tools Rayven wurde deutlich, wie wichtig es ist, tatsächlich kreative Ergebnisse zu produzieren
- Als einfaches und unterhaltsames Ergebnis wurde ein intuitiv und leicht erkennbares Motiv wie ein Space Invader gewählt
- Die Arbeit begann mit der Idee, mehrere klassische Invader per vektorbasiertem 3D-Rendering zu zeichnen und das Ganze dann zu einem Zufallsgenerator auszubauen
- Diese Erfahrung wurde auch in der Code Challenge von Creative Coding Amsterdam geteilt
Code Challenge
- Die Space-Invaders-Code-Challenge zog viel Interesse von Kreativen und Entwicklern auf sich
- Verschiedene Implementierungen und Ergebnisse werden gesammelt und in Entwickler-Communities aktiv geteilt
Von der Skizze zum Pixel
- Zunächst wurde die Struktur der Invader durch Kritzeleien und Skizzen auf Papier analysiert
- Mit dem Tool Aseprite wurden verschiedene Invader-Formen digital auf einem 15x15-Pixelraster gezeichnet
- Dabei wurden gemeinsame geometrische Muster entdeckt, etwa Achsensymmetrie und einfache Polygon-Körper
- Durch die Verbindung der Vorteile von Pixel-Art und Vektorgrafik gelang die Umsetzung einer Funktion, die die meisten handgezeichneten Designs automatisch erzeugen kann
- Details zur Implementierung finden sich im GitHub-Repository
Prozess der Invader-Erzeugung
Mittelpunkt finden
- Es wird ein zentraler Punkt als Referenz für alle Operationen festgelegt
- Da die Tentakel unten erzeugt werden, wird der Hauptkörper etwas weiter oben positioniert
- Die Gesamtsymmetrie wird genutzt, indem nur eine Seite gezeichnet und später horizontal gespiegelt wird
Ober- und Unterseite definieren
- Beim Entwurf der Körperseiten werden obere und untere Punkte zufällig ausgewählt
- Entlang der Symmetrieachse bleibt die Form auf beiden Seiten identisch
Linke Seite zeichnen
- Auf der linken Körperseite werden 1 bis 5 Punkte zufällig platziert
- Ausgehend von einem einfachen konvexen Polygon entstehen frei variierte Ergebnisse
- Überlappende Linien werden beim Pixelisieren auf natürliche Weise korrigiert
Rechte Seite spiegeln
- Anhand der linken Eckpunktdaten wird automatisch die rechte Spiegelung erzeugt
Körperpolygon verbinden
- Durch das Verbinden der Punkte entsteht der vektorbasierte Polygon-Körper
- Werden darauf Gliedmaßen ergänzt, ergibt sich die charakteristische Invader-Form
Gliedmaßen hinzufügen
Erzeugung von Tentakeln und Hörnern
- Unten werden Tentakel, oben Hörner erzeugt. Dieselbe Methode wird jeweils nur mit anderer Position und anderem Winkel angewendet
Tentakel-Ursprung finden
- Ausgehend vom untersten Punkt des Körpers wird zunächst der linke Tentakel zufällig erzeugt
Mittellinie skizzieren
- Mithilfe zufälliger Punkte wird eine Polylinie (Mittellinie) erzeugt
- Länge und Form des Tentakels lassen sich in viele Richtungen variieren
Dicke anwenden (fat line)
- Da eine reine Mittellinie zu dünn ist, werden Punkte auf beiden Seiten erzeugt, um eine dickere Tentakelform zu bilden
- In Körpernähe ist der Tentakel dicker und verjüngt sich zur Spitze hin (Taper-Effekt)
- An stark geknickten Stellen wird die Linienbreite reduziert, um natürlich wirkende Übergänge darzustellen
- Zur Steuerung der Breite wird ein Easing-Parameter verwendet
Tentakel fertigstellen
- Durch das Verbinden der beiden Enden entsteht ein dicker Tentakel
Erweiterung auf mehrere Tentakel und Hörner
- Auf dieselbe Weise sind Erweiterungen auf Seitensymmetrie, einen mittleren Tentakel oder obere Hörner möglich
- Beim mittleren Tentakel wird vorzeitig abgebrochen, um Kollisionen mit bereits gezeichneten Seitententakeln zu vermeiden
- Bei Hörnern wird der Winkelbereich eingeengt und die Platzierung auf links und rechts verteilt, damit sich die Formen nicht überlagern
Von Vektor zu Pixel
Körper pixelisieren
- Ein Körperpixel wird danach bestimmt, ob sich das Zentrum eines Pixels innerhalb des Vektorpolygons befindet
- Priorisiert werden Einfachheit und Ausführungsgeschwindigkeit statt maximaler Genauigkeit
Gliedmaßen pixelisieren
- Tentakel und Hörner sind dünn, sodass ihr Zentrum oft nicht innerhalb eines Pixels liegt
- Daher wird die Distanz zwischen Punkten und den Zentren benachbarter Pixel geprüft, um Pixel zuzuweisen
- Durch Verfeinerung der Mittellinie (line splitting) lässt sich die Natürlichkeit der Tentakel weiter verbessern
Augen hinzufügen
- Zufällige Auswahl aus mehreren vorbereiteten Augen-Sets
- Sie werden nahe der Körpermitte platziert, außen sorgt ein Puffer aus Pixeln für Padding
- Überlappende Pixel werden automatisch entfernt, sodass eine lochartige Darstellung entsteht
Farbgebung
Logik der Farberzeugung
- Verwendung des OKLCH-Farbraums
- Im Vergleich zu HSL bleibt die Helligkeit konsistenter, während vielfältige, lebendige Farbkombinationen möglich sind
- Eine Helligkeit wird fest vorgegeben, die beiden anderen Parameter werden zufällig bestimmt, um viele Varianten zu erzeugen
- So entsteht ein kontinuierlicher, visuell konsistenter Invader-Eindruck
Nutzung von CSS-Varianten
- Farben lassen sich über CSS-Variablen anpassen
- Je nach Situation, etwa im Vergleich zu UI-Elementen oder im Debug-Modus, können Helligkeit und Sättigung variiert werden
Animation umsetzen
- Wie im Originalspiel wird eine einfache 2-Frame-Animation genutzt, um Tentakel, Hörnern und Augen Bewegung zu geben
- Die Mittellinie der Gliedmaßen wird kopiert und per Zufalls-Shift verschoben, um einen veränderten Frame zu erzeugen
- Auch die Augen werden um ein Pixel verschoben, um sie lebendiger wirken zu lassen
Größenanpassung
- Wird die Rastergröße erhöht, werden die Invader zunehmend feiner und komplexer
- Wird sie zu groß, tritt die Abstraktion des Vektormodells stärker hervor und das ursprüngliche Invader-Gefühl geht verloren
- Begrenzt wird auf 31x31 Pixel, über eine versteckte Option sind bis zu 51x51 möglich
Fazit
- Fertiggestellt wurde ein Generator, der unendlich viele verschiedene farbige Invader automatisch erzeugt
- Umsetzung und Beitrag vereinen Lernen, Spaß und kreative Freiheit
- Da sowohl Code als auch Prinzip offengelegt sind, eignet sich das Projekt gut für Übungen, Experimente und Anpassungen
Nachwort zur Umsetzung
- Der JavaScript-Code im Beitrag wurde so aufbereitet, dass er sich gut zum Lernen und Nachvollziehen eignet
- Für die Animation wurden Anime.js und mehrere externe Abhängigkeiten genutzt, die Umsetzung erfolgte in TypeScript
- Ein separater Debug-Modus sowie Step-Optionen erlauben es, den Erzeugungsprozess direkt zu erkunden
Bonus – Beitrag zum Zeichnen von Seilen
- Erwähnenswert ist auch ein früherer interaktiver Beitrag zum Zeichnen einer Seilform (rope) mit SVG und JavaScript
1 Kommentare
Hacker-News-Kommentare
Ich habe auch mal einen Space-Invader-Generator gebaut
Es gibt eine laufende Version, und der Quellcode ist ebenfalls offen verfügbar
Inspiriert wurde ich von Jared Tarbell
Ich habe erlebt, dass die Ergebnisse überraschend leicht gut werden
Der Kern waren die Augen, bilaterale Symmetrie und zufällige Pixel in einem kleinen Rechteck
Die Bemerkung, dass es von Jared Tarbell inspiriert sei: Auch für mich hatten seine Arbeiten eine große Bedeutung, als ich zum ersten Mal mit Computern zu tun hatte
levitated.net und später auch complexification.net waren Juwelen des frühen Internets
Leider wird Flash (Levitated) und Java (Complexification) nicht mehr unterstützt, daher funktionieren die meisten Beispiele nicht mehr
Trotzdem kann man auf der Complexification-Seite den Processing-.pde-Quelltext in den Processing-Editor einfügen und ausführen
Mir gefallen sowohl das UI als auch die zufällige Farbpalette
Wirklich ein großartiges Ergebnis
Das war eine der besten Erfahrungen, die ich je beim Lesen eines Artikels auf dem Handy hatte
Ich war überrascht, wie gut die Ergebnisse wirklich sind
Man kann sie auf muffinman.io/invaders sehen
Das übertrifft alles, was ich nur anhand des Artikels erwartet hatte
Und heute habe ich außerdem oklch kennengelernt
Nachdem ich es verfeinert und ein UI hinzugefügt hatte, fand ich es deutlich besser
OKLCH ist wirklich ein großes Upgrade
Mit Code Farben zu behandeln war schwierig, aber das macht es definitiv viel einfacher
Ich persönlich mag auch HSLuv, aber leider wird es im Browser nicht nativ unterstützt
Macht Spaß
Paradoxerweise fühlt es sich an, als würde man den Planeten (die Erde) retten, indem man Invader erschafft — genau die vergnügliche Hacker-Art ganz ohne brute force AI
Dieses Projekt ist absolut empfehlenswert
Die Magie des kreativen Prozesses liegt am Ende genau in dieser Handarbeit selbst
Es ist wirklich großartig, das Bild oben fixiert zu halten, sodass man beim Scrollen ständig sieht, worüber gerade gesprochen wird
Normalerweise mag ich es nicht besonders, wenn sich Seiten beim Scrollen spektakulär verändern, aber dieses Layout ist eine Ausnahme
Toll
Ich sammle Space Invaders aus aller Welt
space-invaders.com/flashinvaders ist ebenfalls sehenswert
Dazu passend gibt es levInvaderFractal (2003) vom Web-Legendenprojekt levitated.net aus den 2000ern
Das hat wirklich Spaß gemacht zu lesen
Man spürt, wie viel Sorgfalt sowohl in die Problemlösung als auch in den Text selbst und die Präsentation geflossen ist
Ich finde, ein guter Space Invader sollte einschüchternd und gefährlich aussehen
Wenn er die Scheren schwingt, gibt das Extrapunkte
Sehr interessant
Für Menschen mit einer Vorliebe für 8-Bit-Ästhetik und Retro-Computing ist das ein besonders unterhaltsamer Artikel
Beim Lesen kam mir der Gedanke, dass dies letztlich eine digitale Umsetzung von „Mutter Natur will alles zu Krabben entwickeln“ sein könnte
Wegen der Symmetrie der Space Invader und ihrer verschiedenen Beine, Scheren und ähnlichen Strukturen sehen am Ende alle Invader wie Krabben aus
Vielleicht sehen wir hier ja eine Art Entsprechung in der Matrix