Feeds:
Beiträge
Kommentare

Archive for the ‘Context Free Art’ Category

Mit Context Free kann man neben abstrakten Bildern auch beliebige andere Bilder erzeugen, solange man weiß, was man macht 😉

Um für den Blog ein neues Titelbild zu erzeugen, habe ich mich an einer Winternacht versucht:

Winter Night

Winter Night

Auf deviantart ist eine größere Version zu finden.

Der Quellcode ist im Vergleich zu den bisherigen für rein abstrakte Bildern lang, aber mit ca. 1.7 KB immer noch sehr kurz:

// „Winter Night“, 100129, hientau
startshape START
background {b -.5 h 200}

rule START {
BIRDS {x 100 alpha -.6}
CIRCLE {x 180 y 40 s 10 alpha -.5 h 57.53 sat 0.7244 b 0.8453}
GROUND {x -25 y -2 h 0 sat 0 b .7}
SNOW_FALL {z -20 x -10 y 30 s .5}
BG {z -100 x -20 h 247.27 sat 0.6168 b 0.4196}
5* {z 15 alpha -.1 s .95} TREES {}
}

rule SNOW_FALL {
8* {alpha -.1 z 10 y 1.2 x 1.7} SNOW {x -12 y 51 s .4 .4 h 0 sat 0 b 1 alpha -.5}
}

rule BIRDS {
7* {x 10 y 2} BIRD {s .3 y 33}
}

rule BIRD {
BIRD_SHAPE {x 3 y 4 s .7 alpha -.3}
}

rule BIRD {
BIRD_SHAPE {x -1 y 1 s .3 alpha -.1}
}

rule BIRD {
BIRD_SHAPE {x 7 y -5 s .8}
}

rule BIRD {
BIRD_SHAPE {x 7 y -10 s .8}
}

path BIRD_SHAPE {
MOVETO {x 0 y 0}
CURVETO {x 7 y -2 x1 5 y1 5}
CURVEREL {x 7 y 2 x1 5 y1 7}
STROKE {width 1}
}

rule TREES {
15* {x 15} TREE_START {x 15 y 1 s 2.8 2 h 20 sat 0.5625 b 0.1255 |b 1 |sat 0}
}

rule GROUND {
5* {y .1} ROW {}
}

rule ROW {
3000* {x .1} PIECE {}
}

rule PIECE {
CIRCLE {}
}

rule PIECE {
CIRCLE {y 1}
}

rule PIECE {
CIRCLE {y 1.2}
}

rule PIECE {
CIRCLE {y .3}
}

rule SNOW {
280* {x 5} SNOW_TRAIL {}
}

rule SNOW_TRAIL {
30* {y -10} FLAKE {}
}

rule FLAKE {
CIRCLE {y -7 x 2}
}

rule FLAKE {
CIRCLE {y -2 x 3}
}

rule FLAKE {
CIRCLE {y -4 x -2}
}

rule FLAKE {
CIRCLE {y 8 x 7}
}

rule BG {
500* {y .1 h .15 sat -.005 b .002} {
300* {x 1} SQUARE {}
}
}

rule TREE_START {
TREE {x -3 s .95 1}
}

rule TREE_START {
TREE {x 2 s 1 .95}
}

rule TREE_START {
TREE {x 4}
}

rule TREE 16 {
SQUARE {}
TREE {y .1 s .996  b .006| sat .02|}
}

rule TREE .3 {
SQUARE {}
BRANCH {y .1 s .7}
}

rule TREE .3 {
SQUARE {}
BRANCH {y .1 s .95}
}

rule BRANCH {
TREE {r 10}
TREE {r -10}
}

rule BRANCH {
TREE {r 14}
TREE {r -17}
}

Neben der offensichtlichen Baumgenerierung wird auch der Boden und die Darstellung der Vögel stark zufallsgesteuert. Die Sonne bleibt allerdings immer an ihrem Platz und der Hintergrund bleibt auch immer gleich.

Advertisements

Read Full Post »

Ich kann nicht zeichnen. Kein Stück. Trotzdem gibt es auch für malerisch unbegabte Softwareschreiber wie mich Möglichkeiten, etwas Ansehnliches zu schaffen.

Neben klassischen Fraktalgeneratoren wie Apophysis, die nur für eine sehr kleine Minderheit von Interesse sind, entwickeln sich zunehmend Formen der Bilderzeugung, die ohne großen Zeitaufwand zu interessanten Resultaten führen können.

Kontexfreie Grammatik

Eine Variante sind Programme, die sich auf so genannte kontextfreie Grammatik* stützen oder zumindest nahe herankommen.

Der bisher erfolgreichste Vertreter ist der Generator Context Free auf contextfreeart.org, der wie folgt beschrieben wird:

Context Free is a program that generates images from written instructions called a grammar. The program follows the instructions in a few seconds to create images that can contain millions of shapes.

Wie man in der Galerie sehen kann, werden hier regelmäßig neue Kreationen hochgeladen. Erstaunlich ist die Kürze der Programme im Vergleich zu den komplexen Figuren, die damit erzeugt werden können.

Als Beispiel hier ein Bild mit passendem Quelltext:

"From Flight" von GuiGui**

Quelltext:

startshape T
// FLIGIZ
background{b -1}
tile {s 2.5}
rule T {3*{r 120 hue 30}S{x .3}}
rule S 3{CIRCLE{hue 30}4*{r 20 b.007 sat .1}S[s.3.7y.9]}
rule S {CIRCLE{hue 15}9*{r 20 b.05 hue -3}S[s.3.7y.9]}
rule S {S{flip 90}}

Wie man am Quelltext sehen kann, werden einfache Bausteine so kombiniert, dass komplexe Gebilde enstehen.

Funktionsweise

Zum Zeichnen verwendet man meist geometrische Grundformen wie Rechtecke, Kreise oder Dreiecke, die man dreht, in der Größe, Richtung oder Position verändert oder farblich anpasst.

Diese Anpassungen bringt man in Regeln unter, die in etwa dem Konzept von Prozeduren entsprechen. In Schleifen oder rekursiven Regeln erzeugt man die eigentlichen Figuren.

Durch das Verdoppeln von Regeln kommt der Zufall ins Spiel. Wenn die Regeln aufgerufen werden soll, wird per Zufall und angegebener Gewichtung eine der doppelten Regeln aufgerufen.

Im Beispiel oben ist die Regel S dreimal vertreten. Demnach wird jede dieser Regeln in 30% der Fälle, in denen S aufgerufen wird, ausgewählt.

Die oberste hat jedoch noch eine Gewichtung von drei hinter dem Bezeichner, sodass die Wahrscheinlichkeit, dass diese Variante aufgerufen wird, dreimal höher ist als die anderen.

Verfügbarkeit

Die Software läuft praktisch überall, wobei Windows- und Macnutzer es einfacher haben und eine GUI migeliefert bekommen:

"Contex Free" Hauptfenster

"Contex Free"-Hauptfenster mit Beispiel

Die Download-Größe fällt in den Bereich vernachlässigbar klein. Das Programm hat keine nennenswerten Hardwareanforderungen und kann auch auf Netbooks verwendet werden. Wer jedoch detailreiche Bilder erzeugen möchte, sollte das Programm auf einem aktuellen PC laufen lassen. Syntaxhighlighting wird nicht unterstützt, ist aber auch nicht von großer Bedeutung.

Noch nicht alles

Inspiriert durch die Resultate, die man mit Context Free erreichen kann, haben sich andere inspirieren lassen, ähnliche Programme zu schreiben.

Einen guten Eindruck machen dabei Structure Synth und konte, die beide ebenfalls für die wichtigsten Betriebssystem verfügbar sind.

Structure Synth unterscheidet sich hauptsächlich dadurch, dass man dreidimensionale Objekte erzeugen kann und die Syntax etwas angepasst ist. Das Resultat ist frei rotierbar und kann zum Beispiel ins Sunflower-Format exportiert werden, sodass man eine visuell ansprechendere Variante erzeugen kann. Außerdem wird die Syntax hervorgehoben.

Structure Synth

"Structure Synth"-Hauptfenster mit Beispiel

Großer Nachteil des Programms: Während man in Context Free praktisch beliebig viele Objekte erzeugen kann, ist die Zahl in Structure Synth aufgrund der Darstellungsform stark begrenzt. Hochauflösende, detailreiche Bilder sind hier also derzeit schwer möglich.

konte hingegen wählt einen Hybridansatz. Die Darstellung erfolgt – zumindest noch – mit 2D-Funktionen aus einem festgelegten Kamerawinkel, dafür aber wahlweise in 2D oder 3D. Man kann das Ergebnis einer Berechnung nicht drehen, dafür aber soviele Objekte erzeugen wie der Rechner zulässt. Außerdem sind einige Konzepte gegenüber dem Original vereinfacht oder verbessert.

konte

"konte"-Hauptfenster mit Beispiel

Beispielsweise kann man Variablen definieren und maximale Aufruftiefen pro Kette festlegen. Auch der Umgang mit Farben und Pfaden ist etwas humaner gestaltet.

Konzeptionell wirkt konte also überzeugender, kränkelt in der Version 0.80 aber noch an zahlreichen Kinderkrankheiten, insbesondere der langsamen Darstellung und Instabilität bei aufwendigen Berechnungen.

Fazit

Insgesamt bieten Context Free und die „Konkurrenten“ eine kleine, aber effektive Spielwiese zum Ausprobieren von Algorithmen, Mustern und Farben, die man sonst nur mit deutlich mehr Aufwand selbst erstellen könnte.


* die deutsche Wikipedia-Seite dazu kann man vergessen

**Bild: von GuiGui, veröffentlicht unter CCA-2-Lizenz

Read Full Post »

Instead of reading boring news sites during the christmas holidays I decided to create some generative art using Context Free Art. This is the first post on this blog about what I’m creating.

boring trianglesThe first item is boring triangles. From the mass of mediocre files I did, this stands out a bit and actually deserves some attention.

As with some more files I created some variations and some plain, large files with a lot of detail.

The wallpaper images can be found on the respective deviantART pages: 1, 2, 3, 4, 5, 6. High resolution versions (1650×1050) can be downloaded if you click on the icons on the left. The large files can be downloaded here. For more images see the gallery in general.

The source code, which is, as usual, incredibly short despite the images‘ complexity, looks like this:

// "Boring Triangles", 091217, hientau
startshape START
background { hue -1 saturation -1 brightness -1}  

rule START {
500* {} TRIANGLE_RUN {}
}

rule TRIANGLES {
TRIANGLE {}
TRIANGLES {x .2 s .99 alpha .001 h .01 r 2}
}

rule TRIANGLE_RUN {
TRIANGLES {s .15 alpha -1 h 59.62 sat 0.2470 b 0.9503}
}

rule TRIANGLES {
TRIANGLE {}
TRIANGLES {x -.9 s.99 alpha -.001 h .01 r 50}
}

rule TRIANGLES {
TRIANGLE {}
TRIANGLES {y -.6 s.99 alpha .001 h .01 r -50}
}

rule TRIANGLES {
TRIANGLE {}
TRIANGLES {y .6 s.99 alpha -.001 h .01 r -2}
}

rule TRIANGLES .1 {
TRIANGLE {}
TRIANGLES {alpha -.01 h 5 flip 50 skew 5 1}
}

rule TRIANGLES .1 {
TRIANGLE {}
TRIANGLES {alpha -.01 h 6 sat -.1 flip 20 skew 2 1}
}

Read Full Post »