The procgen blog I’ve been running for over a year now has over 300 posts about all aspects of procedural generation.
Archive for the ‘Projects’ Category
The deepdream animation I was working on is now complete! I used a custom-written script to switch between guide images, using photos from my personal collection. Even with a guide image, the results can be surprising: the reflections-in-water sections were actually based on a photo of clouds from above, taken from an airplane shot.
Some still frames from the animation that I particularly like:
I’ve been playing around with the deep dream/inceptionism neural networks since Google Research released their source code. Getting the dependencies set up is a real pain, but now that it’s working I can write arbitrary Python code to script it.
The first difficulty is that the default settings are already cliche and a bit horrifying. Once you get past the shock value, turning everything into melted dogs is jejune.
Switching training data helps a little, but the MIT Places data has its own strange attractors. Basically, the recursive nature of the algorithm will inevitably lead to it getting stuck in a local maxima. Which has a lot of baseball diamonds in it, apparently.
See? Pretty ugly once it gets stuck in an endless loop of baseball diamonds and pagodas that are fractally assembled from baseball diamonds and pagodas. Well, the pagodas are nice and fractally, but kind of repetitiously boring.
And that’s the main problem: because the recursive modification is based on image recognition, it transforms unique input photos into a pattern it recognizes. And humans are even better at pattern recognition, so we can pretty quickly get to the point where we just glance past the next hundred melted dog-slugs and baseball pagodas.
One solution is to keep the intervention fairly subtle:
You have to glance closer to see the changes to the original image, and it gives the whole thing a kind of impressionistic swirling feel. You can also change it up by using different layers in the network and combining them in different ways, but you’re still getting stuck at local maximas. So subtle is better, but still eventually falls into the same old patterns.
As a side note, these animations have an interesting property: if you feed in the same input they are deterministic, so you can pick a frame you like, tweak the settings, and watch it veer off in another direction.
That helps, because the big problem in keeping these images fresh and interesting is to get new information into the system. Fortunately, the original developers have some help, because yesterday they released some code that allows for the use of guide images. (Somewhat reminiscent of the project I wrote about on the procgen blog.)
From here, designing a system that uses a bunch of guide images to keep things fresh is a good next step. (Though mine is currently taking forever to render the dozens of frames I want for the subtle transitions.) Ultimately, I suspect that a custom-trained CNN will produce the best results, but that will likely require a million or so categorized photos. Just please, no dogs this time.
Sometimes context is part of the content. I’ve been curating a blog about procedural generation and related things, on its on site instead of here because I think having it in its own silo is important:
Still doing occasional work on Gravity. I’d been blocked on the art style, which greatly slowed things down on that side and affected motivation for the rest of it. The original idea involved a rocket ship, but I didn’t want a typical rocket ship design. The eventual inspiration is rounder and more toy-like, as you can see here. Still a work in progress; the textures are only half-done.
Gravity is progressing. So far I’ve implemented the wrapping space, recording the player’s flightpath, playing back the flightpath with the planets, and the flocking words. It’s interactive, but there isn’t any gameplay there yet. Not 100% sold on the name, which is walking the line between forceful and generic. “Groovy” doesn’t quite sell it.
Ideals of the Nations, designed in 2011 with Sarah Scoggins. The design constraint was to make a cooperative board game about negotiation that involved actual player negotiation, themed around the Treaty of Versailles. Oh, and I decided to make it a match-3 game.
The game consists of a deck of Negotiation cards and a set of Agendas. That’s one of the Negotiation cards pictured above. The Negotiation cards formed the actual match-3 board, and players took turns making moves and matches. The rules for the match-3 system were altered significantly from the standard Bejeweled-ish digital template to something that worked far better and faster in an analogue format. By itself, the cooperative match-3 game was a system of interesting choices in its own right, which was really encouraging during playtests.
Players are playing against the board, trying to cooperatively create matches and try to meet the goals on the Agendas…but every move they make requires them to also put points on the opposing side of one of the Agendas. Play becomes a balancing act, with the difficulty of the game changing dynamically. In the card above, it can either be played as a -2 to one of the agendas, a +1 to one of the agendas, or it can be put in the player’s hand and it’s effect used later.
This made balancing the cards easier. While the interacting systems as a whole could tip things towards either side, the actual numbers on the cards generated fairly even results. The card effects, and when to use them, became the second set of interesting choices.
The theme of the game comes out in this second layer; the players are not the individual participants in the thematic debate, but act rather as the agents of the perfect peace treaty, attempting to embody the ideals of the nations and guide the conference to a possibly better end.
Of course, even a perfected treaty has no guarantee of avoiding World War II or the Great Depression. Which is, I think, appropriate when making a game about a treaty that already had so much idealism and retribution imposed upon it.
The current development build for Gravity can be found here.