Programmieren ist schön! (Wortwörtlich!)

Structure Synth ist eine Software für generative Gestaltung: Mit ihr entstehen Bilder nicht als Abbild der Wirklichkeit, sondern anhand von Algorithmen: Man programmiert sich sein optisches und meist sehr geometrisches Erlebnis.

Sowas hat man lieber auf dem Bildschirm als im Kopf… (Mikael Hvidtfeldt Christensen/Flickr.com)

Viele meiner Sätze fangen an mit «Wenn ich einmal Zeit habe…».

Wenn ich einmal Zeit habe, arbeite ich mich in die iOS-Programmierung ein, migriere meine Website auf ein «richtiges» CMS, drehe ich tolle Zeitraffer-Filme, schreibe ich einen Roman, lerne ich, mit der Reactable-App (Musik-Lego) etwas Vernünftiges anzustellen. Und so weiter.

Auch dieser Blogpost fängt mit «Wenn ich einmal Zeit habe…» an. Und geht weiter mit: Dann mache ich etwas Tolles mit Structure Synth.

Structure Synth ist eine Software für Windows, Mac und Linux für generative Gestaltung. Bei der entstehen Bilder nicht als Abbild der Wirklichkeit, sondern anhand von Algorithmen. Ein recht bekannter Vertreter ist ContextFree, ein Programm, das ich vor längerer Zeit im Publisher-Beitrag Pixelkunst aus dem Elektronenhirn vorgestellt habe:

Es liegt auf der Hand, dass Computer, deren Stärke nicht das Kreative, sondern das Repetitive ist, eine spezielle Art von Bilder generieren. Als Rechenmaschinen sind sie prädestiniert, mit Mustern und geometrischen Formen zu arbeiten. Diese werden in Tausenden oder Millionen Rechendurchgängen wiederholt, abgewandelt, variiert, interferiert oder rückgekoppelt. Computergenerierte Bilder haben eine strenge Struktur. Gleichzeitig wirken sie – dank dem nur durch die unermüdliche Ausdauer eines Siliziumprozessors möglichen Detailreichtum – filigran, elegant und leicht.

Im Tagi ging es am 10. April 2006 auch um Kandid und Chaoscope: «Die Bildermaschinen generieren ihre Motive anhand unterschiedlicher Konstruktionsprinzipien. Diese sind der Mathematik, der Biologie oder der Sprachwissenschaft entlehnt.»

Ein kreatives Spielzeug par excellence

Structure Synth erweitert das Konstruktionsprinzip von ContextFree in die dritte Dimension. Das heisst: Mit einer (vergleichsweise) einfachen Syntax erzeugt man dreidimensionale Objekte, die sich am Bildschirm betrachten, drehen und zoomen und als hochauflösende Grafik speichern lassen. Und man exportiert sie als Obj-Datei, die sich zum Beispiel in Photoshop öffnen lässt.

Die Syntax funktioniert nun so, dass einfach Objekte erzeugt und iteriert. Schreibt man box ins Code-Fenster und drückt auf Build, dann erscheint im Ausgabefenster ein 3D-Kubus – logisch und maximal einfach.

Vervielfältigen und verändern…

Nun kann man die Objekte in diverser Hinsicht modifizieren: In ihrer Lage im Raum, farblich und in der Grösse. Diese Transformationen werden in geschweiften Klammern angegeben. { x 2 } box verschiebt die Box um zwei Einheiten auf der x-Achse. Genauso verfährt man mit Verschiebungen auf der y- und z-Achse. Setzt man ein r vor die Achse (rx, ry, rz) dann rotiert man das Objekt um die angegebene Gradzahl und um die jeweilige Achse. Will man ein Objekt vergrössern oder verkleinern, verwendet man s und den Skalierungsfaktor. Genauso verändert man die Farbe des Objekts: Mit hue verändert man den Farbton, mit sat (für saturation) die Farbsättigung.

Und wenn man nicht immer nur Kuben zeichen will, verwendet man Sphere für eine Kugel, Dot für einen Punkt, Grid für einen Gitterwürfel und Line für eine Gerade.

Wenn man auf einmal mehrere Objekte zeichnen will, dann setzt man einfach einen Multiplikator an den Anfang seiner Syntaxzeile:

10 * { x 2 sat 0.9 } sphere

Diese Zeile erzeugt zehn Kugeln, die (ausgehend vom Nullpunkt) auf der x-Achse um jeweils zwei Einheiten versetzt sind. Jede Kugel verliert gegenüber der Vorgängerin zehn Prozent Sättigung, sodass die erste Kugel rot ist, die letzte fast weiss.

Der eigentliche Clou ist nun aber die rekursive Verschachtelung von Transformationen. Was damit gemeint ist, erklärt folgendes, aus der Dokumentation stammendes Beispiel:

R1

rule R1 {
  { x 0.9 rz 6 ry 6 s 0.99  sat 0.99  } R1
  { s 2 } sphere
}

Dieser kurze Code erzeugt das nachfolgend abgebildete Objekt. Er definiert eine so genannte Regel R1, das eine Kugel erzeugt, deren Sättigung bei jeder Iteration reduziert wird. Doch noch bevor die Kugel gezeichnet wird, ruft sich die Regel über {…} R1 selbst auf – mit einem im Raum veränderten Ausgangspunkt: Es wird skaliert, gedreht und verschoben. Um sich das im Kopf vorstellen zu können, braucht es viel Abstraktionsvermögen. Es entsteht, durch die geschickte Verlagerung des relativen Ausgangspunkts, eine enger werdende, unendliche Spirale.

Für diese Spirale sind nicht viel mehr als zwei Zeilen Code notwendig (siehe Beispiel).

Sogar als Animation

Ein hochkomplexes dreidimensionales Objekt, das sich in wenigen Zeilen Code erzeugen lässt – das zeigt das Potenzial der generativen Gestaltung im allgemeinen und von Structure Synth im Speziellen auf. Nicht nur das: Über Javascript-Befehle lässt sich die Sache sogar animieren. (Siehe zum Beispiel hier.)

Es zeigt auch das Problem: So einfach die Syntax auch ist – für schöne Resultate braucht man Gespür und das erwähnte Abstraktionsvermögen. Oder viel Geduld für das Prinzip von Versuch und Irrtum.

Von Hand zeichnen möchte man das Teil lieber nicht.

Immerhin unterstützt das Programm bei dieser Arbeit: Es wird mit gut drei Dutzend Beispielscripts geliefert. Die Syntaxbausteine braucht man sich nicht unbedingt zu merken. Man kann sie auch durch einen Rechtsklick aufs Code-Fenster abrufen – es gibt auch Befehle, mit denen man die maximale Anzahl von Objekten begrenzen, die virtuelle Kamera oder den Raytracer steuern kann.

Kurz und gut: Wenn ihr einmal Zeit habt, solltet ihr unbedingt ein bisschen mit Structure Synth experimentieren! Inspiration gibt es im Blog.

Kommentar verfassen