Sunday, August 17, 2008

HTorsion Wallpaper

Max Ackerman of Maxalot's fame requested a unique series of HTorsion prints that would be transformed to wallpaper-sized prints. The process in itself presented a series of challenges since I am really new to making print quality images.

The first challenge was how I could convert the program to scale the originaly 3200x1800 image to a 30000x15000 image. The second challenge was getting the Perlin Noise function to behave similarly to the 3200x1800 version.

The first challenge was handled by attempting to re-write the code to generate images to the biggest print size my poor Mac could handle. Unfortunately, the maximum pixel size my mac could handle was 10000x6000. The limitation is imposed by the maximum heap size Java could run on a Mac. I can only allocate 2 Gigs worth of memory for Java on a Mac Powerbook. This wasn't good enough for a print that would be around 7 x 5 feet in dimension and also made me squint in frustration for the money I wasted on getting 4 gigs of RAM on this laptop.

I played with scanning the image at 10000 DPI but I wasn't even certain that this would work and could potentially cost me more money than I care to spend. A ton of Googling eventually led me to a solution that I have seen before in the's discussion board that somehow veiled itself to my awareness.

Marius Watz's TileSaver class was a godsend for me. Using the code provided by Mr. Watz, I was able to create images that are about 27000x15000 in size. The 27000 limit was really the biggest I could get it due to the heapsize limitation issue. The rest was easy. A quick GIMP manipulation would eventually give me a 27000x15000 image at 300 DPI. The file sizes were huge as each image was about 1.3 gigs big.

The first challenge was daunting since the limitation was due to hardware. The second challenge was relatively minor but it required a lot of brain work. The problem inherent with Perlin Noise was it is a pseudorandom number generator. The original image produced for HTorsion worked out great since the arguments used for the method worked for generating Perlin numbers that works aesthetically with a 3200x1800 image. Unfortunately, the same arguments will not work for the large footprint.

It took a while for me to figure out how to generate the correct arguments for the print. The time spent on determining it was largely due to the huge amounts of time it took to render each image. For each series of arguments passed to the method, I would have to generate an image and determine if the results are good enough. Each render took about 20-30 minutes. So for each decent print, I had to go through 10 ugly ones.

The solution came to me while I was in a haze one morning. It was soooo simple that I was flabbergasted at how dumb I was. Why go through all this number guessing when all I really had to do was use the scale function to convert the 3200x1800 image to 27000x15000? Oh my goodness! It was so simple! I literally hated my one-track mind for this.

With the two solutions finally figured out, I sent 4 DVDs worth of images to Max and about 1.5 months later the project was completed. I felt a little bit odd when I was asked to write something about myself since I'm really new to the game and I consider myself a curious programmer more than a generative artist. The odd thing was talking about myself in the 3rd person while writing about my bio. Compared to everyone else on the site, I felt really small but I guess that these are the baby steps I need to take for me to reach a goal I set for myself 2 years ago.

Overall, I am extremely happy with this project and I hope someone buys a print or two from Maxalot since I have to justify the amount of time I am spending coding this rather than spending more time with the lovely wife.

Wallpapers can be bought here:


Lucretius - De Rerum Natura

One of the images from the Brownian Motion Set has been picked up as a cover for a University of California Press publication.


More information regarding the book can be found here.

The Brownian Motion set was created around 2005. It was coded to satisfy my curiosity of how Brownian motion would affect a particle that travels towards a specific destination. My findings tells me that the particle would ultimately fail to reach its intended destination since the effects of the Brownian motion really derails its tracks.

Derailment doesn't really produce an interesting image and for a while I was a little bit disappointed. What I added to the code was an attribute of 'intent' to reach the destination. This way, the particle would eventually be within the vicinity of the destination.

I was mildly satisfied with the result. I put to use the term "mildly" for some reason my mind blanks out like a New York City power outage whenever I choose a color scheme for this piece.

This set will eventually be re-visited once I determine a proper behavior for the particle.