Monday, June 08, 2009

Engine Room Audition... from Kevin Atkinson on Vimeo.

[Update: For those new to the blog, I've written a dataflow framework for real-time video effects, plus a number of effects implemented within that framework (some of which are demoed in the above video). In this post I'm announcing that I'm open-sourcing that framework]

A few months ago, I made this post on, where I crowd-sourced my then-just-begun job search. The post went to the top of the programming page and even squeaked onto the front page of the main reddit. As a result, I got an interview with Weta Digital, and after two very long interviews, I was offered a gig there with the code group. My wife and I leave for New Zealand tomorrow. (Finally! Our visas were delayed for about six weeks, but they arrived by Fedex this morning.)

I've been vaguely intending to commercialize this work for a year, but I just don't seem to have it in me to be a software vendor, and I think it's a bit sad to seal these effects away inside closed binaries. Also, I no longer have the time.

So, I decided to open source the lot. Here's the code:

jskFx code.

The code is generally not half bad, though after a year where I've really concentrated on enhancing my coding skills (reading Andrei Alexandrescu, learning template meta-programming and such like, delving deeper into boost), it's not the way I'd do it now. It was written in six weeks, on a brutal deadline, so signs of rushing are sometimes apparent (though most of the effects themselves were developed over the previous couple of years). Also, this stuff is way overdue to be ported to the GPU.

The "flowy-blowy" effect never made it into the jsk framework, since I just ran out of time, and the code was a bit of a mess. I'm also a bit wary of releasing it as is, since it uses Jos Stam's semi-Lagrangian interpolation technique, which I believe is covered by some obnoxious patent or other. Messrs Lagrange, Navier and Stokes were kind enough to not to patent their stuff, but Mr. Stam, or perhaps just his employer, had other ideas.

In any case I'm currently rewriting it using a lattice-Boltzmann approach. Hm. Maybe I should look into the patent situation there? But then, I know that Blender's fluid sim is lattice-Boltzmann, so it should be okay.

About the name: The code was created in its current form last summer for a cool gig that a fellow named Joel Gethin Lewis (interaction designer, bon vivant, and all around jet-setting, conference-headlining man-about-town) landed us in New York. You can read about it here. For the gig, I took some video effects I had written over the previous couple of years, cleaned them up, and then wrote a node-based coding framework that they could operate uniformly within, and wrote a couple new effects besides.

A clever fellow coder named Shawn Bonkowski also created some effects for the show, though I haven't included his code in this release. I'll be in touch with him to see if he'd like his stuff included in the next release.

As a result, I used the prefix "jsk" (for Joel-Shawn-Kevin) to all the objects in the library. All the code in this release is my own, but I kept the prefix to honour the contribution of the other guys to the event, and commemorate the circumstances that gave it its birth in its current form.


Anonymous Anonymous said...

Beautiful! Thanks for sharing.

10:20 AM  
Anonymous Anonymous said...

Awesome! I'm glad you got a good job, you definitely deserve it.

1:13 PM  
Anonymous Anonymous said...

Very clever stuff :) thanks for sharing

1:23 PM  
Blogger Graham Jenson said...

Welcome to New Zealand. We can always use more good programmers.

1:37 PM  
Anonymous Roland Orre said...

Thanks, very nice work nice demonstration. I have an blog in Sweden about Open Source and I will present your work there.
1) because it's nice and interesting
2) becuase it's open source
3) you have found yet another good reason to open source something.

My blog is mixed open source hints, and open source problems (and some Microsoft bashing...). The blog is in Swedish. I found an interresting translation mode at google, search with original and translated language in parallel.
Here swedish english

Here french english
(only one)

May the source be with you!

3:07 PM  
Anonymous Matthew Holloway said...

For people moving to Wellington I can recommend these two groups,

3:33 PM  
Blogger Tunc Turel said...

Beautiful stuff :)

4:13 PM  
Anonymous voet said...

wonderful! it's a very original idea, simple in its conception but with a lot of possibilities! i imagine that with this engine you can simulate easily an man running in flames, or even design complex and abstract non-linear systems using only colored geometric shapes in movement. absolutely fantastic.

i love too to program cellular automata, physical simulations and all that stuff. congratulations.

4:17 PM  
Blogger ethan said...

Amazing an audio operator, sound designer and audio engineer, I wonder if you ever watched your video with your eyes closed? -ES

4:35 PM  
Blogger Jared said...

What license are you open sourcing this under?

5:11 PM  
Blogger The Method Artist said...

Hey folks, thanks for the kind remarks.

Jared, the code is GPL for now. Possibly LGPL down the road at some point.

And ethan, I only watch my videos with my eyes closed -- I get sick of watching my ugly mug ;-) I just used the built in mic on my HV20, so yeah, the sound sucked.

5:55 PM  
Blogger Jamie Penney said...

Hope you like it here in New Zealand, and congratulations on getting a job at Weta!

6:00 PM  
Blogger Harold Fowler said...

Oh wow, that sure looks like it must have been fun!


6:10 PM  
Blogger Bernardo Alonso said...

Excellent, first-rate!

7:32 PM  
Anonymous Al said...

Awesome, congrats, will be good to have you here in New Zealand. :)

12:09 AM  
Blogger joshuajnoble said...

Thanks Kevin, these are amazing and congrats on the job.

2:55 AM  
Anonymous Anonymous said...

Awesome! Care to share some tips to become like you? Things like your reading meterials for example? And thank you very much for knowledge sharing.

7:51 AM  
Anonymous Anonymous said...

Awesome, but I can't build this 2 examples. Anybody knows how?

I am on VS C++ 2005 and 2008...

12:35 PM  

Post a Comment

<< Home