Week 9: GPU Game of Life


For my ninth weekly project, I’ve created…life!

Although it was originally computed by hand, Conway’s Game of Life has been implemented as software so many times over the past 44 years by so many people that I’m not sure doing my own version even counts as a creative project, but somehow throughout my decades of computer programming I’ve never built one, so I’m doing it anyway.

This particular version is implemented almost entirely on the GPU–the CPU provides the initial state and can turn more cells on to keep the game going, but otherwise all computation is done in a compute shader. (Compute shaders are kind of brilliant for this, as the Game of Life is practically the definition of an embarassingly parallel problem.)

I render live cells in red, and have dead cells fade gradually in green instead of disappearing. This makes it easier to see structures forming and vanishing. The initial condition is just created by randomly drawing pixels all over the buffer, and you can add more at any time by holding down the Enter key.

One thing I found particularly interesting is how many gliders tend to emerge from these completely random starting conditions! With the green trails behind them, they’re very visible. You also get a lot of small, stable structures as well as simple oscillators. (Phase-2 oscillators are almost impossible to see in this simulation, unfortunately, because it moves so fast it makes them look stable.)

Click here to download the program (update: added some DLLs it was missing). It’s a Win32 executable and requires a D3D11-compatible video card (anything even remotely recent should work). There’s some on-screen help-text that explains some other controls you can use.

Week 8: Attempted Cinemagraph

I absolutely adore cinemagraphs–still images with subtle, looping animation. There’s something mesmerizingly timeless about the best ones. For this week’s project, I tried to create my own (large file, may take some time to load–sorry):

It’s just some buildings on 9th St NW as seen out of my window, with the reflection of a car going by. My main takeaway from doing this is to wonder how the heck cinemagraph creators keep their file sizes reasonable! This thing is huge, despite the motion being fairly subtle (everything but the big tree and the car going by is completely still).

On the plus side, I think I hid the point where it loops pretty well (I can’t see it, and I know it’s there)–the end of the original video quickly crossfades back into the beginning.

So, all in all, a modestly successful experiment with some as-yet unsolved problems. Next time I’ll see about reducing the size–by lowering the framerate, using a shorter loop, and/or a smaller animated part of the image.


Week 5: Wendel the Lamp

It’s been an exceptionally busy week, so my weekly project is a tiny one.

I needed an adjustable lamp for to illuminate some figurines I was painting, so I built one with stuff I had lying around. I call it Wendel.


The base and adjustable arm are built from a Tamiya Universal Plate Set and Universal Arm Set respectively. The light source is a board of my own design from last year: a 4×4 array of the very popular Worldsemi WS2812 addressable surface mount LEDs with decoupling capacitors, plus a laser-cut frosted acrylic diffuser. The light board is stuck on with double-sided tape, and the wiring is threaded (with some slack) through supports in the arm.

An Arduino drives the lights. All it does is keep them all at full brightness.

This is obviously a ridiculously inefficient design for a white lamp–these are RGB LEDs, and it’s pretty silly to have an Arduino there just to tell them to be white!–but it does produce a nice, broad, diffused light. Most importantly, I made it in about an hour with things I had lying around–most of the time spent figuring out how to use the Tamiya parts. And it works great for what I needed it for!

And doing it this way means I can adjust the color temperature by reprogramming it, which is pretty neat.

Anyway, I’ll have a more interesting project next week, hopefully. 🙂


Week 3: Atlas of the Inner Sea

Inner Sea Map (hand drawn) header

In a couple weeks I’ll be running a Dungeons & Dragons game for a group of my friends, for the first time in many (many) years. I’ve really missed the thrill of creating my own world and guiding a group of unsuspecting suckers intrepid adventurers through it, so, as my third Weekly Project, I’ve written a few pages about the campaign setting we’ll be playing in.

(To my players: there are no spoilers here, so it’s safe to read, but you’re under no obligation to do so! I’m just posting it for fun.)

Atlas of the Inner Sea v0.1 (PDF)

Map of the Inner Sea (PNG)

As usual for my weekly projects, this is all very rough–even more than usual in this case, since I don’t write much these days! Rather than creating a huge world, I focused on putting a lot of details into a relatively small region, and making every single point of interest unique and worth visiting. I tried to consider the history and languages of the various settlements–language in particular is something that largely gets ignored in D&D games, so I think it might be interesting to take it a little more seriously. All that said, I’m sure there are all manner of typos, internal inconsistencies, and other issues here. (And the hand-drawn map is pretty embarassing!)

It’s entirely possible that this new D&D game will just end up being a one-off, but I’m hoping it becomes a recurring campaign, so that we can all get to know the Inner Sea and its diverse and eccentric peoples together.

A couple side notes:

  • I picked up a bunch of the new Reaper Bones plastic miniatures for this game. I am in love with them. They’re every bit as detailed as traditional pewter minis but much cheaper and easier to work with. They even look better unpainted, to my eye–it’s a lot easier to see detail on the solid, matte white surface. This is nice because it’s highly unlikely I’ll have the time to paint any of them (although who knows; maybe I’ll make it a weekly project). I also bought some of the new official pre-painted D&D figures, but I wouldn’t recommend them. They’re ridiculously expensive and of mediocre quality.
  • I’m still reading through the new 5th edition D&D rules, but I’m pretty pleased with them so far. They seem to have entirely backed off from trying to emulate MMO conventions (one of the many unfortunate decisions they made in 4E), and seem to be emphasizing role-playing a lot more in this edition. There’s also a two-paragraph section on gender, encouraging players to experiment with their characters’ gender roles, gender identity, and sexual orientation. Unexpected and very cool. I may post more about my impressions of 5E once we’ve had a chance to play.

Week 2: Save the Tomato

This past week I’ve been learning Unity‘s new UI and its 2D graphics and physics systems, so for my second weekly project, I’ve made a little game with it. It’s incredibly simple and rough, but here it is (click the picture to download; Windows only):


I bought all of the art assets for 25 bucks at the Unity Asset Store (Fantastic 2D Art Massive Bundle). The goal of the game is to collect as many coins as you can without letting the tomato touch the ground. See how high you can get the score! My record so far is 33. Supports the keyboard (space to jump) or an Xbox gamepad (A to jump).

This was about 5-6 hours of work (much of it spent watching the excellent Unity tutorial videos). The hardest part was figuring out character movement; it turns out it’s pretty tough to get solid-feeling movement in a physics-based game! I’m still not completely satisfied with it–it’s a bit floaty and not as responsive as I’d like–but it’s good enough…

Anyway, this is my first Unity game, so they’ll hopefully get better from here!