Archive for March, 2007
An Evening with Aristid Lindenmeyer
Eigentlich fand ich L-Systeme immer ein wenig langweilig. Durch Zufall bin ich auf diesen Artikel von Joshua Davis gestoßen in dem er an ein paar Beispielen zeigt was man L-Systemen außer Pseudobäumen noch so machen kann. Zum Glück muss man für Processing nicht alles neu erfinden. Einmal kurz nach processing und lsystem gegoogelt und man hat schon mal einen guten Ansatzpunkt.
Wenn man nun, wie in Joshuas Artikel beschrieben, statt einfacher Linien für die Äste Grafiken zeichnen lässt bekommt nach einigem rumprobieren recht ansehnliche Ergebnisse. Gestartet hab ich mit importierten SVG Grafiken aus dem NEUBAUWELT Buch (oberes Bild). Danach dann einige Spielereien mit Bezierkurven und festen Winkel für die Verästelungen.
Das gute an Processing ist, dass man das ganze als pdf exportieren und in Illustrator impotieren kann wobei alle Elemente als Vektorgrafik übernommen werden. Womit man eine gute Ausgangslage zur Weiterverarbeitung als Cover, Flyer etc. hat.
Meh
GotoAndPlay.it have been kind enough to publish a copy of
Super Special Lightning Man and give it a warm initial review, which is pretty cool considering there’s room to develop Lightning Man Gold Edition (single player, more power-ups, the ability to pause the game, etc.).
Rick Dangerous
Beat Bots
Marek Michalowski - Beat Bots project guy
FM3 Buddha Machine
Kid Koala video
Microsoft’s speech recognition demo
248 dimensional structure mapped
Grant Freckelton - Visual Effects Director for the film 300
A Nice Cup of Tea and a Sit Down
Flash Lite resources
Advanced Character Physics paper
Grid Maker plugin for Photoshop
Spyder - MySpace spamming tool
Webcam motion detection in Flash
Tiled bitmap backgrounds in Flash
Flash bitmap transform matrix
Advanced Character Physics tutorial for Flash
Drag and drop gravity in Flash
Pure Dyne - Linux OS for artists
Kaourantin - Adobe developer’s blog
Using Local Connection in Flash to communicate between two Flash objects on the same html
Flosc tutorial (OSC in Flash)
Scott Schiller - Javascript clever - And he’s made DHTML Arkanoid, genius!
Standard sizes Print tools as in envelope size, window envelope, CD labels, etc.
DOS games utilities
Meh
As well as tidying us the CSS I’ve added a bit of DHTML to the site so I can open myself to the use of Javascript libraries. They’re tough to get into but Scriptaculous is a good one for absolute beginners and Mootools and JQuery seem the route for the more hardcore shennanigans. Links to these under Applications on the nav column <--
GotoAndPlay.it have been kind enough to publish a copy of
Super Special Lightning Man and give it a warm initial review, which is pretty cool considering there’s room to develop Lightning Man Gold Edition (single player, more power-ups, the ability to pause the game, etc.).
Beat Bots
Marek Michalowski - Beat Bots project guy
FM3 Buddha Machine
Kid Koala video
Microsoft’s speech recognition demo
248 dimensional structure mapped
Grant Freckelton - Visual Effects Director for the film 300
A Nice Cup of Tea and a Sit Down
Flash Lite resources
Advanced Character Physics paper
Grid Maker plugin for Photoshop
Spyder - MySpace spamming tool
Webcam motion detection in Flash
Tiled bitmap backgrounds in Flash
Flash bitmap transform matrix
Advanced Character Physics tutorial for Flash
Drag and drop gravity in Flash
Pure Dyne - Linux OS for artists
Kaourantin - Adobe developer’s blog
Using Local Connection in Flash to communicate between two Flash objects on the same html
Flosc tutorial (OSC in Flash)
Scott Schiller - Javascript clever - And he’s made DHTML Arkanoid, genius!
Standard sizes Print tools as in envelope size, window envelope, CD labels, etc.
DOS games utilities
Gameworld
- Exhibition: Gameworld
- Location: Laboral Centro de arte, Gijon, Spain
- Dates: 30 march, 2007 - 30 June, 2007
- Curator: Carl Goodman
- Associate Curator: Daphne Dragona
-
Curatorial Advisors: Chris Burke, Alexander Galloway, Henry Lowood, Julian Oliver, Helen Stuckey
-
Games: Spacewar (Graetz, Russell, Wiitanen); Star Raiders (Doug Neubauer); Zork (Marc Blank & Dave Lebling); Tetris (Alexey Pajitnov); Civilization I & II (Sid Meier): Sim City (Will Wright); Super Mario 3 (Shigeru Miyamoto - Nintendo); Warcraft series (Blizzard Entertainment); Doom (ID Software); Sensible World of Soccer (John Hare - Sensible Software)
-
Experimental: Flow (Jenova Chen, Kellee Santiago); We Love Katamari (Keita Takahashi - Namco); Braid (Jonathan Blow et al - Number None); Border Games (El Fiambrera Obrera); Arcade Wire (Ian Bogost, Gonzalo Frasca); Super Columbine Massacre RPG! (Danny Ledone); 2nd Person Shooter (Julian Oliver); Darkgame (Eddo Stern); Once More With Feeling (Ken Perlin - NYU MRL); Facade (Michael Mateas and Andrew Stern); Invaders! (Douglas Edric Stanley); axbx (Brent Gustafson); TFT Tennis (Dirk Eijbouts); Pongmechanik (Niklas Roy); AR Tennis (Hitlab New Zealand); Furminator (Fur Collaboriative); Movie Sandbox - Animachine (Friedrich Kirschner); Domestic (Mary Flanagan); Endless Forest (Tale of Tales)
-
Machinima: Sheik Attack (Eddo Stern); This Spartan Life (Chris Burke); She Puppet (Peggy Ahwesh); Avatar Portraits (Eva and Franco Mattes); 650 Polygon John Carmack (Brody Condon); FPS and WOW (Aram Bartholl); Screen Shots (John Haddock); Readyplayed (Ludic Society); LARP (Brody Condon); WOW and Need for Speed 2 Documentary (Aram Bartholl); Boys in the Hood (Axel Stockburger); Dead in Iraq (Joseph Delappe); The War Room (Joan Leandre); Notbot (Walter Langelaar); Retroyou (Joan Leandre); Space(E)scape (Workspace Unlimited); Super Mario Sleeping (Miltos Manetas); Super Mario Movie (Cory Archangel & Paperrad)
Starting tomorrow, I’m going to be in Spain all week preparing for this exhibition. Although I don’t have the time, I said yes simply because it’s a pretty impressive lineup for an exhibition on classic video games, emerging games (such as the lovely Flow), critical games (ex. Darkgame), art-games, unheimlich avatars, etc. I should mention that I grabbed the above list from the Braid blog [link] and not from the Laboral website itself which has yet to publish a full list. So this list might be incorrect/incomplete. But since I saw some of the behind the scenes activity, I do know that many of those artists and/or games will be there, and I just love the list itself even if it is innacurate : Katamari Damacy? Check. Sheik Attack? Check. Furminator? Check. Pongmechanik? Check. Super Mario Movie? Check. Shigeru Miyamoto meets Mary Flanagan? Whynot!?
From my point of view (and Carl knows this already), I will be showing what I consider to be one of my weakest works — a fairly personal work from 2001 that I feel has lost its context, long since stolen by other events; in fact, events that have purposefully been designed to render it unreadable. I’m of course talking about the Iraq war, and you have to give it to Bush when it comes to appropriation: if he were an artist, he’d been an even greater thief than Picasso. But I trust Mr. Goodman’s judgement, as I appreciate his take on gaming as an emerging art form — and no, that doesn’t mean that I think video games are art; I used the word « emerging » there (sheesh, get a life).
So I’m installing a work that the public seems to enjoy, not only because everyone loves Space Invaders, but because you can play it with your body. Further proof that the future is EyeToy and the Wii.
For this exhibit, I’ll be re-working the surveillance code quite a bit, and trying to plug OpenFrameworks into the system, not only because it’s cool, but because it’s ultimately the way to go — surveillance should really be done with hardware specific compiled code, although I might start a flamewar with that comment. I’ll also be adapting the program to the space, but I’ll have to get there before I can start work on that.
I’ve also been looking at plugging in oscpack, because OpenFrameworks is too early (not even public beta) and all the planned libraries such as OSC aren’t linked up yet. But oscpack unfortunately doesn’t do the actual routing, so I might end up using MIDI instead. And if all that doesn’t work, I’ll fall back onto some other tried and true solution, i.e. Processing or (gasp) TrackThemColors.
aTileSaver samples
I've uploaded some demo images generated with the aTileSaver class to my Flickr account. They show images at reduced size and at 100%. Make sure to look at the original sizes for the full effect.
As should be expected, OpenGL doesn't give quite the crispness that a raytracer or similar production tool might yield, but the sheer resolution should be enough to compensate. I have uploaded a 6400 x 6400 pixel JPG (RandBox 0023) as an example, but annoyingly Flickr isn't able to create a thumbnail for it because of the large size. Go directly to the original size for a closeup view.
Trouble-free pdf reading on the PSP with Bookr

Screenshot of Bookr for PSP
I have never seen any homebrew application that was more straightforward than Bookr. It’s an application for reading pdf-files with the PSP on the go. To get things running just copy the application files into the root of your application folder via USB, copy the pdf files too, and you’re done!
Bookr supports pdf files and plain text files. You can zoom the contents, flip the pages and browse embedded pictures - everything is rendered very accurate - and it saves bookmarks. Reading eBooks on the PSP was never easier. The app itself has a very nice and functional eye-candy interface, where you can tweak and customize to the most important and usable features. Easy, robust, comfortable and stable. Nothing more, nothing less. Very balaced work. Unfortunatelly they have no website yet. The download is located at Sourceforge.
The application was made by written by Carlos Carrasco Martinez and Edward Choh, they used for the implementation a thing called mupdf.
Trouble-free pdf reading on the PSP with Bookr

Screenshot of Bookr for PSP
I have never seen any homebrew application on the PSP that was more straightforward than Bookr. It’s an application for reading pdf files on the go. To get this thing running just copy the application files into the root of your application folder via USB, copy the pdf files too, and you’re done!
Bookr supports pdf files and plain text files. You can zoom the contents, flip the pages and browse embedded pictures - everything is randers very accurate - and save bookmarks. Reading eBooks on the PSP was never easier. The app itself has a very nice and functional eye-candy interface, where you can tweak and customize to the most important and usable features. Easy, robust, comfortable and stable. Nothing more, nothing less. Very balaced work. Unfortunatelly they have no website yet. The download is located at Sourceforge.
The application was made by written by Carlos Carrasco Martinez and Edward Choh, they used for the implementation a thing called mupdf.
The Art Of War

The Art of War is now available on LaCiterne.org, and soon other free platforms.
[written & produced by Maniax Memori, additional voices by Sarah & Drunk Yoghurt on tracks 6 & 9, 666soundFond by JankenPopp used in tracks 3 & 9 ]
Fan Hardware /////////////////////////////////////////////////////
![]()
J’ai enfin fini le hardware pour mon projet de dessin avec le vent.
Un Pic 18F458 (processeur de 40 MHz (40 000 actions/s) ) sur plaque me proposant 16 sorties pwm… J’ai quand même eu besoin de Laurent et Jean-Pierre (que je remercie), pour faire la conception du circuit, sinon, j ’ai tout soudé moi même
Je suis tout de suite passé sur processing pour me faire une interface de commande de mes ventilateurs via le port série usb…
Et c’est cool j’ai des diodes comme retour visuel, du coup je me suis amusé à faire le banal truc à la k2000
Code: TileSaver.pde
High-resolution images from Processing using tiling (1.6% / 20%)
A while back I posted about rendering very high-resolution images from Processing using a tiling technique. I had implemented a working version of a solution first described by "surelyyoujest", but didn't have time to post a clean version of the code. (I did however post ImageStitcher.pde, which is code for stitching these tiled images back together.) But after a long delay, here is finally the more useful bit of code.
The code works by panning the camera over the original viewport area, subdividing the image into tiles. This way, OpenGL's limitations on maximum resolution can be circumvented. As long as enough memory is allocated, the images created can be very big indeed.
The images shown above are from a 15360 x 15360 pixel image, shown at 1.6% and 20% respectively. With 1.5 GB assigned to Java I have so far successfully saved 20k x 20k images. That's large enough to print 2×2 meter prints at 260 DPI.
What follows is the TileSaver class and a simple demo application. I will post a more complex example soon.
The TileSaver class is fairly easy to use. Drop it into any Processing sketch, add a trigger to start the tiling process and call Tilesaver.pre() and Tilesaver.post() at the beginning and end of draw(). The only thing to be aware of is that the shapes drawn should not change in any way while the tiling is in progress, otherwise the results will be mangled.
// TileSaver.pde - v0.1 2007.0325 // Marius Watz - http://workshop.evolutionzone.com // // Class for rendering high-resolution images by splitting them into // tiles using the viewport. // // Builds heavily on solution by "surelyyoujest": // http://processing.org/discourse/yabb_beta/YaBB.cgi? // board=OpenGL;action=display;num=1159148942 class TileSaver { PApplet p; float FOV=60; // initial field of view float cameraZ, width, height; int tileNum=10; // number of tiles int tileImgCnt, tileX, tileY, tilePad; public boolean isTiling=false,done=true; boolean firstFrame=false, secondFrame=false; String tileFilename,tileFileextension=".tga"; PImage tileImg; // The constructor takes a PApplet reference to your sketch. public TileSaver(PApplet _p) { p=_p; } // If init() is called without specifying number of tiles, getMaxTiles() // will be called to estimate number of tiles according to free memory. void init(String _filename) { init(_filename,getMaxTiles(p.width)); } // Initialize using a filename to output to and number of tiles to use. void init(String _filename,int _num) { tileFilename=_filename; tileNum=_num; width=p.width; height=p.height; cameraZ=(height/2.0f)/p.tan(p.PI*FOV/360.0f); println("TileSaver: "+tileNum+" tilesnResolution: "+ (p.width*tileNum)+"x"+(p.height*tileNum)); // remove extension from filename tileFilename=dataPath(noExt(tileFilename)); createPath(tileFilename); // save preview p.g.save(tileFilename+"_preview.png"); // set up off-screen buffer for saving tiled images tileImg=new PImage(p.width*tileNum, p.height*tileNum); // start tiling done=false; isTiling=false; tileInc(); } // pre() handles initialization of each frame. // It should be called in draw() before any drawing occurs. void pre() { if(!isTiling) return; if(firstFrame) firstFrame=false; else if(secondFrame) { secondFrame=false; tileInc(); } setupCamera(); } // post() handles tile update and image saving. // It should be called at the very end of draw(), after any drawing. void post() { // If first or second frame, don't update or save. if(firstFrame||secondFrame|| (!isTiling)) return; // Find image ID from reverse row order int imgid=tileImgCnt%tileNum+(tileNum-tileImgCnt/tileNum-1)*tileNum; int idx=(imgid%tileNum); int idy=(imgid/tileNum); // Get current image from sketch and draw it into buffer p.loadPixels(); tileImg.set(idx*p.width, idy*p.height, p.g); // Increment tile index tileImgCnt++; if(tileImgCnt==(tileNum*tileNum)) tileFinish(); else tileInc(); } // tileFinish() handles saving of the tiled image public void tileFinish() { isTiling=false; restoreCamera(); // save large image to TGA tileFilename+="_"+(p.width*tileNum)+"x"+ (p.height*tileNum)+tileFileextension; p.println("Save: "+ tileFilename.substring( tileFilename.lastIndexOf(java.io.File.separator)+1)); tileImg.save(tileFilename); // clear buffer for garbage collection tileImg=null; done=true; } // Increment tile coordinates void tileInc() { if(!isTiling) { isTiling=true; firstFrame=true; secondFrame=true; tileImgCnt=0; } else { if(tileX==tileNum-1) { tileX=0; tileY=(tileY+1)%tileNum; } else tileX++; } } // set up camera correctly for the current tile public void setupCamera() { p.camera(width/2.0f, height/2.0f, cameraZ, width/2.0f, height/2.0f, 0, 0, 1, 0); float mod=1f/10f; if(!isTiling) { p.frustum(-(width/2)*mod, (width/2)*mod, -(height/2)*mod, (height/2)*mod, cameraZ*mod, 1000); } else { p.frustum(width*((float)tileX/(float)tileNum-.5f)*mod, width*((tileX+1)/(float)tileNum-.5f)*mod, height*((float)tileY/(float)tileNum-.5f)*mod, height*((tileY+1)/(float)tileNum-.5f)*mod, cameraZ*mod, 10000); } } // restore camera once tiling is done public void restoreCamera() { float mod=1f/10f; p.camera(width/2.0f, height/2.0f, cameraZ, width/2.0f, height/2.0f, 0, 0, 1, 0); p.frustum(-(width/2)*mod, (width/2)*mod, -(height/2)*mod, (height/2)*mod, cameraZ*mod, 1000); } // checks free memory and gives a suggestion for maximum tile // resolution. It should work well in most cases, I've been able // to generate 20k x 20k pixel images with 1.5 GB RAM allocated. int getMaxTiles(int width) { // get an instance of java.lang.Runtime, force garbage collection java.lang.Runtime runtime=java.lang.Runtime.getRuntime(); runtime.gc(); // calculate free memory for ARGB (4 byte) data, giving some slack // to out of memory crashes. int num=(int)(Math.sqrt( (float)(runtime.freeMemory()/4)*0.925f))/width; println(((float)runtime.freeMemory()/(1024*1024))+"/"+ ((float)runtime.totalMemory()/(1024*1024))); // warn if low memory if(num==1) { println("Memory is low. Consider increasing memory settings."); num=2; } return num; } // strip extension from filename String noExt(String name) { int last=name.lastIndexOf("."); if(last>0) return name.substring(0, last); return name; } }
Basic demo of the TileSaver class.
import processing.opengl.*; TileSaver tiler; void setup() { size(500,500, OPENGL); noStroke(); tiler=new TileSaver(this); } public void draw() { if(tiler==null) return; // Not initialized // call TileSaver.pre() to prepare frame and setup camera if it exists. tiler.pre(); smooth(); background(0,50,0); lights(); translate(width/2,height/2); rotateY(PI/4); rotateX(PI/4); scale(8); fill(240,255,0,220); box(10,50,10); fill(150,255,0,220); box(50,10,10); fill(255,150,0,220); box(10,10,50); // call TileSaver.post() to update tiles if tiler is active tiler.post(); } // Saves tiled imaged when 't' is pressed public void keyPressed() { if(key=='t') tiler.init("Simple"+nf(frameCount,5),5); }
Why it’s called “Storm”

Why it’s called “Storm”
“Storm” is a generative art piece I’m currently working on. The intent is to eventually generate six finished static prints for exhibition. (and perhaps even sale? assuming appreciative patrons are found) This is one of the rare “cloud” formations that sort of reveal what storm is all about, and why it acquired that particular name. The design goal was to create something less “pristine” or “mechanical” that many computer-based works are stereotyped as; something more “dirty”, “gritty”, “organic”.
This animation is a detour from the print work, just to show off it’s structure and rant needlessly about it’s technical aspects. Technically, it’s a generative 3-D gestural iterative particle system renderer — or perhaps better described as a “thingamajiggy”. Mouse gestures are captured in a 3-D space, then transformed into a system of equations/forces that guide a ridiculously massive particle system. However, the correlation between gesture and final result is tenuous at best, leading to yet another reason why I titled it “storm”: because controlling it is a bit like flying a kite through a tornado or hurricane.
So is it “pure” generative art? Probably not - the mouse gestures sort of preclude that, right? Yet that was intentional, as I wanted the piece to have at least some amount of human-derived “soul” to it. The flip-side of generating a system capable of such complex results is that it is also exceedingly easy to generate completely unsatisfactory results. There is a lot of feedback and interplay among the machinery derived from the gestures. This then becomes an exercise for the artist: learning how to control the generative system just built. A challenging yet enjoyable excerise. ![]()
More work in progress at: http://www.flickr.com/photos/davebollinger
Built with Processing.
Author: davebollinger
Keywords: generative iterative 3D art processing.org
Added: March 21, 2007
Birds!!!

No video for this one yet. Just a quickie screen grab of the flocking project with proper birdage. For this version, which features 3,000 or so flocking objects, I took 7 different silhouette images of birds in mid flight (from various Flickr photos) and created an image array. Each flocking object chooses a random image every frame. So yeah, they kinda flap around, but it is totally faked… for now. I want to eventually model out a simple bird in 3D and let it flap about with texture mapped wings. But that is for another day.
For now, I need to make the flocking behaviour a little less clumped. They tend to form vortices and linear strings so I must readdress the mechanics behind the movement before I get bogged down with the actual bird images.













