• Graeme Devine

Procedural Generation with a Wave Collapse Function

Lots of talk lately about procedural worlds.

Metropolis (the 1987 version) used procedural 2D streets. 2D as in left and right scrolling that was it. The new version procedurally generates buildings.

In a way all of this can be described as Procedural Generation with a Wave Collapse Function.

Imagine you have a jigsaw made up just of squares, and on the side of each square is a letter A, B, C, or D and you have to fit the jigsaw together so that an A always joins an A and a B always joins a B etc. etc. It’s a set of rules that allows you to build maps. If you do it in 2 dimensions you can take inputs like the following.


(I didn’t make this image, it’s from a book)

You’ve used this in making maps up for D&D and playing various games where you have to match side pieces to build roads.

Okay, now expand those rules to use 3 dimensions and allow for the squares to be different sizes. You now have a cube with six sides with a rule for connecting each side AND that starts to get pretty interesting pretty quickly. Or allow for the rules to be words (people write WCF poetry generators). Or allow for the rules to be well basically anything as long as you define the joining sets, how often they appear (collapse) and the chance of a particular piece being used in the first place.

Well, now you can make anything.


(also not my picture)

Once you generate a heightmap for your world, and then you use a ruleset in a WCF to populate the world, well, that’s how you end up with the worlds like a certain Viking game is making right now.

Also. This was me the rest of the day trying to follow the Unreal tutorial on making terrain levels. Math. I got math. Art and levels. OMG.


Graeme.