Sunday, December 28, 2008


I'm a big fan of SomaFM. In particular, their Groove Salad radio station. I'd been wanting to learn how to integrate audio into my Processing sketches via the Minim library. Originally, when I'd started my 'Perlin Particle' sketches (see three previous posts), they were spun out of the idea of making falling snowflakes. I wanted to have the snowflakes to "move" through the air with some randomness, and that's where the Perlin noise fit in. Once I solved that, I was able to move back to my snowflakes, and in particular, audio processing.

I got my "GrooveFlakes" sketch up and running. It streams in the GrooveSalad playlist, and samples the beats. When the kick, snare, or hat hits, the flakes will "pulse" to the music.
You can get the source, over on my Processing Wiki HERE. I still don't have a web site where I can upload the actual app yet... (lazy... maybe next year...).

Monday, December 22, 2008

Image Particle Path 01


Originally uploaded by warpcat
This code is modification of my Perlin Particle 02 sketch.
In perlinParticle02, it would generate three random images based on Perlin noise,and those three images would control the x, y, and speed of the particles. This version, doesn't use Perlin noise at all, but an image placed in the sketch folder.
When a particle is born, it grabs the color of the underlying image, then travels based on the RGB image data.
The first 10 seconds of the movie show the particle motion, and the last 10 seconds show the particle motion plus the source image (of my wonderful, and tolerant wife)
Source code can be found on my Processing Wiki HERE.
Other Processing imagery\videos on Flickr

Perlin Particle 03


Originally uploaded by warpcat
An update to my Perlin Particle 02 code: Now, rather than generating three buffer images for the x, y, and speed Perlin values, it calculates them on the fly. This has the added advantage of being able to animate time, which you can see in the above movie. However, it's also exponentially slower. This movie took about a second a frame, or ten minutes on my 5 year old laptop.
Find source code on my Processing Wiki HERE.
My other Processing imagery\video on Flickr

Sunday, December 21, 2008

Perlin Particle 02


Originally uploaded by warpcat
It's been a while since I've been in Processing, but it's good to be back. Lately, most of my time has been taken up learning the Harmonica ;)

I started out trying to make a particle system to render snow falling. And I actually had pretty good results (post on that later). But in the process I wanted to add a bit of "randomness" to the snowflakes, so I started investigating Perlin noise.

In this linked movie, you can see the background cycle through the different noise maps:
  • The first background (in color), is the combined map, which is the 'x-map' in the red channel, the 'y-map' in the green channel, and the 'z-map' (speed) in the blue channel.
  • The second background is the "x-map": Lighter values move particle the the right, darker values move particle to the left.
  • The third background is the "y-map": Lighter values move the particles up, and darker values move the particles down.
  • The fourth background is the 'speed map' Lighter values speed the particles up, darker values slow the particues down.
  • The fifth background is... no background at all.
  • And finally, it loops back to the first background.
When the sketch starts, it generates the x, y, & z maps (each based on random Perlin noise) and saves them to an off-screen buffer. Then as the sketch runs, the particle queries its position on each map, and modifies its position based on the above rules.

If I get a chance to advance the code, I'm going to try to have it calculate the noise on the fly (rather than pre-generating it and saving it as multiple maps) allowing me to animate the noise over time, giving it an even more varied look.

Find source code on my Processing Wiki
Find three other movies on Flickr

Wednesday, December 17, 2008

Learning Harmonica...

My grandfather could play the harmonica. And the accordion. In fact, I have his instruments, although they are in a bit of disrepair. I used to play harmonica with my old roomates back in LA, in the mid-90's. But that faded over time. Decided to finally get back into it.

Other than picking up a nice Lee Oscar Major Diatonic in the key of C, I found a swell instructional book that has both a CD, and a DVD. The DVD is great, since it visually shows the holes being played as the music is going on.

I personally like the concept of the harmonica being that it's such a small insturment: Easy to take with you, fun to play, and enjoyable to play with others. Only problem is it cuts into my other project time...

Progressive Beginner Harmonica @

Monday, November 24, 2008

Processing 1.0 released!
Not that I've had a chance to use it yet, but 1.0 is finally out. I'm looking forward to see why this one finally got the "1.0" badge :)

Tuesday, November 11, 2008

Processing Monsters

Picture 1.png
Originally uploaded by mb09
Ran across some of this stuff in Flickr, which took me to the main site:
Cool simple interaction in Processing with "monsters". Source code available, good resource.

Tuesday, November 4, 2008

Bad curves

The animation lead on my team started cursing this morning. When I went over to his cube, he showed me these animation curves in Maya's Graph Editor. This was an animation he was asked to "fix"...

The horror....

Monday, November 3, 2008

"A tiny plastic box! I must put my head in it!"

The original post is over here.
But I just had to host this video. The funniest part is, by the end the cat seems to be totally fine with its situation.

Thursday, October 16, 2008

Dead Space is live!

As of yesterday, Dead Space, the last product I worked on, has gone out on the shelves. It's getting great reviews!
As of right now on Metacritic, it's getting a 90 on PS3, and 89 on Xbox 360. The PC version should be out on the 21st I believe. It's currently the 8th highest ranked PS3 game of all time on Metacritic, not bad!
There's a new trailer on the main site link above. Gives is a "movie trailer" feel.

If you're wondering, my roll on the game was "Technical Character Director". I created and\or supervised the creation of the overall technical character pipeline from art to engine: Character\creature\weapon\prop rigging, skinning, building, export, and a lot of animation tools. Basically, if you see it move in-game, I had some part in it.

Saturday, October 11, 2008

Edge detection in Processing, take 2.

A few new things: There is a base set of circles called "planets" that bounce around, getting smaller towards the top of the screen, and larger towards the bottom. They emit gravity on the "orbits", which are fixed sized circles bouncing around the screen. The planets try to pull the orbits to them if within range: the smaller the planets get, the less gravity they have. The orbits are also rendered to an off-screen buffer where a glow is created, then the buffer is reapplied back to the final image.

Originally uploaded by warpcat

Tuesday, October 7, 2008

Edge detection in Processing.


Originally uploaded by warpcat
After a few month hiatus (darn that Python), I thought I'd get back into Processing. Taking an old sketch, I wanted to try a few things: Simple motion in a confined space, and edge detection of colliding volumes. I solved the issue of edge detection by code found in "Processing - A Programming Handbook for Visual Designers and Artists" (by Casey Reas and Ben Fry, good book) dealing with 'convolution'. If you're interested in that convolution code, you can find it here (Unit 40 (Image 5), example 12) . My first crack at it, but it pulled off the effect I wanted perfectly. However, this only gave a very thin edge as a result. I wanted the edge larger. To pull this off, I ran a blur filter, then a threshold filter to blast out the blur to pure white and black, then another blur on top of that. The sketch got pretty slow, about 1 fps on my older laptop. For the motion, the circles get smaller as they move to the left of the image, and larger as they move to the right. Some circles are solid, while others have the opposite fill, givng them a donut effect, and I think providing a more interesting look overall as opposing values collide.

I was going to post the source for this, but my Processing Wiki currently isn't letting me update it... frustrating.

Monday, October 6, 2008

Dots in procs?

I've pretty-much made the switch from mel (Maya's scripting language) to Python. And what I describe below is standard in Python (implemented differently, but similar visually). But I just recently learned that you can include dots (periods) '.' in mel procedure names. While this doesn't in any way change their behavior, it does let you organize your procs in a more intelligent way based on their names.

Background: In Maya, if you have a global procedure in a mel script, and the global proc and the script share the same name, when you call to the name (via some other proc\script), Maya will search in its 'script path' for the script with the name, then search in that script for the global proc with that name, and (if it finds it) execute the proc. Furthermore, any other global procs in that script are now sourced and can be executed outside of the script by other procedures. Nothing new here. The 'dot in name' convention though lets you associate the script name with the other global procs in the script. When calling them in other procedures/scripts, you'll have a visual reminder of where they came from via their name. To explain this a bit better, an example:
// foo.mel

global proc
print "doing .boo() work\n";

global proc foo.shoe()
print "doing .shoe() work\n";

global proc foo()
print "foo.mel -- I do nothing.\n";
print "My global procedures:\n";
print "\\n";
print "\t.shoe()\n";
The above code resides in 'foo.mel'. Inside, there is a global proc called 'foo()', that doesn't really do anything other than print some info. But its there so when the user calls to 'foo()', the other global proces will become sourced. There are other global procs in the script that do the actual work. When you execute 'foo()', the other global procs '' and 'foo.shoe()' are sourced, and can be called to inside of that script, or other scripts\procs. If you're calling to them inside that script, it's fairly obvious where they're coming from. But say you have some other script called 'goo.mel':
// goo.mel

// Execute foo(), making its other global
// procs available in this script.
// Could have optionally executed 'source foo;'

// Execute foo's global procs:;
'goo.mel' executes (or optionally sources) 'foo.mel', thus giving 'goo.mel' access to 'foo.mel's' global procs, and then can call to each of them. By having 'foo.' in front of each proc, it's plainly clear to the user where they originally came from, which is a great aid in troubleshooting. This is a simple example, but imagine if you have goo executing procs from foo, moo, hoo, doo, etc, and you can see where this can come in handy.

So again, the 'dot in proc' is by no means required, but it's another tool in your organizational toolkit.

Friday, October 3, 2008

Dead Space on Metacritic

The last game I worked on, Dead Space, isn't out until Oct 14th, but it already has its first review up on Metacritic. 91! Very Nice. I've played through the game, and it's one of the first games in a long time that I worked on that I actually enjoyed playing though.

Saturday, September 27, 2008

Rock Band Guitar on the PC?

In the latest issue of MAKE Magazine (vol 15), they have a feature that lets you play your Guitar Hero guitar on the PC. Owen Grace of The Guitar Zeroes built some software in Max/MSP he coined 'Fretbuzz' that lets you actually interface these guitars with the PC, and offered it up for free to the community. That is awesome.

I thought it'd be a fun project. Wasn't until later that I realized I have Rock Band for the Xbox 360, not Guitar Hero. As it turns out though, happy ending: They both work. Here's the steps I went thought following the directions on the Fretbuzz page (my experience was slightly different than what their directions say)
  1. First, my Rock Band guitar wasn't recognized by my PC after plugging it into the USB port. After doing the obligatory Google search, I found I could download drivers for it here. Restarted computer. Checked under Start -> Control Panel -> Game Controllers, and my 'Harmonix Guitar for Xbox 360'was recognized.
  2. Went to The Guitar Zero's web site, and downloaded the Fretbuzz code, and started following the directions on its download page:
  3. Went to download (via the Fretbuzz page link) the Max\MSP software, but that link took me to the latest release. Fretbuzz says it wants the older version 4.6.3. I found that here under -> Older Max Windows Versions -> then downloaded 'Max/MSP 4.6.3 with documentation'. Installed after download in default location. (maybe the latest version does work, but I didn't want to jump through the hoops if it didn't)
  4. Downloaded the version of PeRColate from the Fretbuzz site, and followed the Fretbuzz site directions for installing it. They're right, the readme.rft that comes with the .zip is a bit confusing.
  5. Restarted my machine again per request by Max\MSP.
  6. Launched the runtime of Max\MSP (C:\Program Files\Cycling '74\MaxMSP 4.6\MaxRT.exe), and opened the specified file buzz_360.pat based on where I'd saved tghe Fretbuzz code. Clicked on the "Help Meee" button, and configured my guitar.
  7. Started playing!
It's just too bad that I'm not a musician. But maybe this will encourage me ;)

Friday, September 19, 2008

Adobe ExtendScript

How... did I go this long without knowing about this? (go down to the 'Adobe ExtendScript Toolkit' section for download and docs)
I guess in the back of my head I've known about it, but a co-worker today showed it to me in action: From their web page:
"The ExtendScript Toolkit (ESTK) 2.0 is a development and debugging tool for JavaScript scripts included with Adobe® CS3 Suites and applications such as Bridge, Photoshop, Illustrator, InDesign, and After Effects. ESTK 2.0 is a new and enhanced version that allows you to create, edit and debug ExtendScript (Adobe's JavaScript language) all with an updated user interface, a new text engine, and the ability to debug more than one script at a time."
The cool part is the debugger, that lets you step through the code, and watch the results on the fly (in say, Photoshop). So yes, I must have been in a hole, but now, I've seen the light.

Thursday, September 18, 2008

Stanford School of Engineering
Just ran across this. Great resource! Stanford has posted a bunch of their classes online. Currently have several courses based around programming:
  • Introduction to Computer Science
  • Artificial Intelligence
  • Linear Systems and Optimization
They have them up on Youtube (with many not related to programming), or their own viewer. Nice!

Wednesday, September 10, 2008

Just ran across Looks like it's a pretty recent startup, but seems to be a cool concept (if... you're a technical artist...). Currently seems a bit 3d Max skewed, but there is some Maya stuff in there as well.

Tuesday, September 9, 2008


I just ran across the web site It has a pile of videos to teach different programming languages: Python, Ruby, Java, Perl, Javascript, Blender (Python), and you can search by topic. Python has by far the most videos (currently 348), what a great resource.

Tuesday, September 2, 2008

Finally: Python can talk to Maya

I work in the the software package Maya, by Autodesk. As of version 'Maya 2008', they put Python scripting in Maya, to augment it's built-in scripting language, MEL. This is great, but Maya's 'Script Editor' leaves a LOT to be desired when it comes to authoring Python code. I've been using an external IDE called 'Wing Professional' to do my Python coding. And I knew that Wing had the ability to ouput what one was executing to a network socket. And I knew that Maya could open a socket. Problem was, the socket that Maya's mel command 'commandPort' open expects MEL commands, not Python commands. You could jump through some wrapper hoops to get them to talk, but I didn't care for it.
Enter Python's 'exec' command: It allows you to execute a module on disk as if it was interactively entered. So I came up with a plan:
  • In Wing, I have a script bound to a hot-key: It takes what the user has highlighted, and saves it off to a temp text file on disk. It then (through a socket) pings Maya, and tells it to evaluate that code.
  • When Maya launches it opens up a socket. Then when it gets the call from Python to do work, it finds the temp file, and runs 'exec' on it, and also prints the contents for the user.
This worked great, but one problem: Any variables defined during the execution were local to the execution. After execution was over, they were out of the scope of any other code. I tracked down that 'exec' had args that let you pass in a dictionary defining a certain variable scope. By passing in Python's base '__main__.__dict__' , I was able to add all the declared variables into that root scope, making them visible to all other interactive coding sessions.
FINALLY, Python can talk to Maya ;) I documented the whole thing (with code) on my Mel Wiki HERE.

Wednesday, August 27, 2008

Ed Catmul quote

I heard this quote today, and it really sits well with me:
"Management’s job is not to prevent risk but to build the capability to recover when failures occur."
I so wish things worked more like this. Rather than being in a constant "let's not do anything with risk" mode, it would switch to a "let's push the envelope, and prepare for when it rips" mode.

This was from Ed Catmul (the president of Pixar), in a web article called "How Pixar Fosters Collective Creativity". You can read the article here.

Friday, August 22, 2008

Gakken Stirling Engine = Failure :(

My boy and I spent about an hour putting together the Stirling Engine kit (see post from August 8th). And, after much ado and fanfare, it did... nothing. There's not a lot too it, and everything seems to be assembled correctly. Even sitting on a cup of very hot water, with icecubes on top of it, it simply doesn't run. A bit disappointing! I'll keep looking over it and see if I made some mistake :-S

Friday, August 15, 2008

Death Star over San Francisco

A co-worker sent me this link. Awesome video someone put together of various Starwars tems showing up over San Francisco. Since I live here, it really strikes home ;)

Original Link

Tuesday, August 12, 2008

The Art of Paul Bonner

I recently picked up this book off I love his style: 'Realistic Cartoon' (my own words). Great fantasy, monsters, and action. He has this ability to cram huge things into small spaces, with piles of activity. The book is really nice: Hardback, a large range of his art. If you're in any way into fantasy art, this is worth a gander.

It's all about Python...

Haven't had any Processing updates lately, mainly because I've transitioned into Python for a bit: Been steadily updating my Python wiki. While Processing makes it so easy to do graphics, Python doesn't seem to have that built in by default (but I'm a noob, so maybe I'm just missing something). However, through a package called Pygame, and a wrapper for it called Livewires, it seems to make this stuff much easier. I'm just about to have my first graphical pizza falling through space, thanks to the wonderful book, Python Programming For The Absolute Beginner. If you're looking to find a resource that easily introduces one to Python, I'd recommend it!

Friday, August 8, 2008

Gakken Stirling Engine!

Just received my issue of Gakken #10 in the mail from Japan (took about two months :-( ). In it, they have a kit that lets you make a Stirling Engine that can run of the heat of my hand. You can check out a link to the project on MAKE blog here.

When I get the project finished I'll post up pics and vid, but I was too excited to not talk about it...

Monday, July 28, 2008


Just got back from a week trip visiting my family in Alaska. Great time as usual of course. Mainly rained, but we did get one day of sun while at my family's cabin up north of Talkeetna. Took a pile of pics and vid, have been trying to distill them HERE. More to come.
One thing I keep trying to tell people about Alaska in the summer is the sweet smell: The air is just so fresh, with a light sent on it. I think it has to do with all the flowers, which seem to be everywhere. I wish I could bottle it and spray it around my house back home ;)

Sunday, July 13, 2008



Originally uploaded by warpcat

An improvement to "Bouncing Circles":
Experimenting with motion, collision, behavior... and a bunch of other stuff I didn't know before I started this sketch ;)
In a nutshell:
I've updated the code: Clicking with the mouse now creates the fuzzballs. Bigger balls push smaller balls around. Balls shoot 'feeler lines' to one another if in range. If no balls are in range, then 'searcher lines' are drawn. Find the source code to this skech on my wiki here:

Friday, July 11, 2008

Bouncing Circles

I had some time today while waiting for my computer to get the latest build of the game I'm working on, to do some work in Processing. Nothing too fancy here, but it was good to teach myself a bit more about OOP (each of the circles is a little object). In a nutshell, this sketch draws a bunch of circles that bounce around the screen, each connected to the others with a vibrating bezier curve. Good relaxing coding fun :P You can see the source code to it here.

Saturday, July 5, 2008

Updated 'Color Search' sketch

Originally uploaded by warpcat
I spent part of the day updating my 'color search' sketch. Now, it chooses a random pixel from the image to sample instead of walking the pixels in order. And, it uses bezier curves to connect the matching pixel colors rather than a straight line. Check my flickr set for more images.

Thursday, July 3, 2008

I ran across the site today:
What a great resource for the Processing community. I'd know about BuiltWithProcessing, but I don't think it's been updated in a while, and it has a completely non-visual interface.

Monday, June 30, 2008

Back from Texas

Mah new boots!
Originally uploaded by warpcat
Spent the past week visiting my wifes family near the Houston area. Got me some boots! Also got about half way through my new Processing book inbetween Texas BBQ and Sea World. Other than the 95+deg weather, it was a nice time.

Saturday, June 21, 2008

PixelPlot sketch in Processing

Had some time on Saturday to get a bit more Processing in: Based on an image passed in, it will convert the color values into XYZ coordinates, and plot them in 3d space. Each frame finds a new pixel, and plots it.
Find my code for it here.

Friday, June 20, 2008

'Color Search' in Processing

Tulip, 100% complete
Originally uploaded by warpcat
I found inspiration in the 'Pixel Path' Processing work done by Craig Mackenzie, and wanted to try my hand at it.

In this sketch, it isolates every 5th pixel, and if it fist a certain HSB criteria, it finds every matching pixel in the image, and draws a line to it. Click on the image to be taken to my Flickr page to see more.

The class I authored to help with the color pixel search can be found on my Processing Wiki.

Wednesday, June 18, 2008

Wedensday Processing...

So... I caught a cold. So... I'm home today, and it gives me a chance to relax and catch up on some Processing. Made a sketch called "puffPaint01" which let's you 'paint circles' on an image, and depending on speed of mouse, opacity, size, and stroke-width of circles
will change. Simple, but good mental calisthenics...
See code examples on my Processing Wiki.

Tuesday, June 17, 2008

Spore Creature Creator

...recently came out. It's a fun program that lets you build 'creatures' for the upcoming Spore game. I just made my first one, 'Jigglypuff'. Really looking forward to this game being released!
Check out Spore
and Creature Creator

Saturday, June 14, 2008

Steam Car, take one

Since our tickets to Robo Games DIDN'T arrive (most upsetting), my boy and I spent most Saturday attempting to use the erector sets to create a steam-powered car. We were pretty successful! The only reason it doesn't work is that the rubber-bands that power it aren't quite strong enough to transfer the power. I think we'll need to switch to sprockets with chain. But a good first attempt none the less! See my flickr set for more pics.

Friday, June 13, 2008

Erector set aquired!

The past few months I've had aspirations to build a steam powered... contraption. I've recently picked up a Wilseco D14 steam engine and boiler, which has been fun just to fire up and watch. The real question though is, will:
My Steam Engine + Erector Set = Cool Steam Contraption?
Only time will tell!

Wednesday, June 11, 2008


I guy I work with brought one of these in. One of the coolest music gizmos I've seen in a long time. I won't even try describing it, watch the video, and check out the main page.
As I understand it, they cost around $1000, and only a hundred were brought to the US this year. One of the other cool things about them is that both sides have the lights. Meaning, as you're 'performing', your 'audience' can see the same thing you see.
Yes, I want one too.

Tuesday, June 10, 2008

SF Internet Radio

Everyone has different musical tastes, but mine is regularly filled by SomaFM:
SomaFM independent internet radio
In particular, their Groove Salad station. Ever since my iPod broke a year after I bought it, I have shunned iTunes. WinAmp still does everything it needs to to stream this stuff. If you want a groovy taste of San Francisco, take a listen.

Monday, June 9, 2008

Want to learn Python?

I've 'taught' myself Python... three times now: I end up using it for a few months, and then don't use it for a year+ At which point I forget most of it... (why I recently started my Python Wiki: If I write something down, I remember it much better...). In the midst of my third try now, I think it'll finally stick, mainly since Maya v8.5, they've enabled Python scripting (and I use Maya all day long...). I'm a big sucker for starting with the fundamentals when learning any subject, so I looked at a lot of books on Python before choosing 'the one'. 'The one' I settled on was "Python Programming for the Absolute Beginner". It does a great job for taking someone who knows nothing about Python (or programming for that matter) and by the end of the book, you're writing your own 'Asteroids' game. Recommended.

New Buck Knife

While at REI this weekend, I felt in the mood for a new pocket knife (I'm a big sucker for pocket knives, and watches). I liked this one: It's light (easily fits on my key chain), with a folding\locking blade, cost me about $16 (you can find it online for cheaper). Has built in bottle-opener as well. It has the text "Buck Whittaker" on the side, but it seems to be known at the "Buck Transport". Interesting that the Buck web site doesn't have this knife...?

Sunday, June 8, 2008

New Processing book

I'd already picked up the book by Casey Reas & Ben Fry; Processing: A programming Handbook for Visual Designers and Artists, which I've found to be great for learning the language. But while at Barnes and Noble yesterday, and armed with a variety of coupons, I tracked down the book by Ira Greenberg; Processing: Creative Coding and Computational Art. While the one by Reas & Fry is both smaller in format, and fewer pages, it's also has a few sections in color (which is pretty nice). But I've heard good things about both books, and look forward to giving the new one a read. More Processing related books can be found here.

Python on Sunday...

Nice out, in the 80's, the soothing view of the Oracle towers from my window. What better to do than learn my Python? I'm finally wrapping my head around UI creation in Tkinter: I've been writing UI's in Maya for years (via ELF, Maya's 'Extended Layer Format'), so this isn't too much of a stretch, but it IS quite different. Nice to learn a new way of doing it.

Friday, June 6, 2008

GreenTree onBlue

Originally uploaded by warpcat
One of the trees I've been generating with Processing. I have different classes to generate different styles of both rendering and behavior. (really, this is a test to see how this service from flickr works). Image links to the flickr set.

This is a test. I repeat: This is only a test...

I have entered the blogsphere. Post #1. What have I done?