Random Paths via Chiseling

I went over a previous project to randomly generate paths between points and came up with a much more efficient and versitile algorithm.

The algorithm is simple. Start with the entire area covered in path tiles, then and remove tiles one by one until only a thin path remains. When removing tiles, you cannot remove any tile that will cause the ends of the path to become disconnected. These are called articulation points (or cut-vertices). I use a fast algorithm based on DFS to find the articulation points. I had to modify the algorithm slightly so it only cares about articulation points that separate the ends, rather than anything which cuts the area in two. After identifying articulation points it’s just a matter of picking a random tile from the remaining points, and repeating. When there are no more removable tiles, you are done. Or you can stop early, to give a bit of a different feel.

I call it “chiseling” as you are carving the path out of a much larger space, piece by piece.

See on github .
Continue reading

Marching Cubes Tutorial

In Minecraft, you can dig in any direction – removing a block at a time with well defined edges. But other games manage to destruct terrain smoothly, without all the blockiness of Minecraft.

The following tutorial in Marching Cubes, a technique for achieving destructible terrain, and more generally, creating a smooth boundary mesh to something solid. In this series, we’ll cover 2d in this first article, follwed by 3d in the next , and Dual Contouring in the third. This last is a more advanced technique for achieving the same effect.

Continue reading

Blue Noise Particles

I’ve released a plugin generates a random arrangement of particles with a blue noise distribution. This is also known as Poisson Disk Sampling.

Shows blue noise distributed particles in comparison to other options

This distribution of particles guarantees no two particles are very near each other. It’s often considered a higher quality particle arrangement than Blender’s default uniform sampling. It’s particularly useful for organic arrangements, and randomly arranging meshes without collisions.


I’ve released a Python based string parser on GitHub. This was part of a much more ambitious project that fell through, but I extracted the good part.

Axaxaxas is a Python 3.3 implementation of an Earley Parser. Earley parsers are a robust parser that can recognize any context-free grammar, with good support for amiguous grammars. They have linear performance for a wide class of grammars, and worst case O(n^3).

The main goals of this implementation are ease of use, customization, and requiring no pre-processing step for the grammar. You may find the Marpa project better suits high performance needs.

Documentation can be found at: http://axaxaxas.readthedocs.org

Celtic Knots

I’ve created a Blender plugin generates 3d beziers curves in elaborate “celtic” style knotwork, based off of a framework mesh. Tested with Blender 2.68a. It’s available on github.

Celtic Knots are a intricate decorative design found in Celtic and other cultures mosaics and manuscripts. The knots often include elaborate variations and unusual angles that the plugin does not attempt to create, so touching up the resulting path in blender may be necessary for some designs.

Refer to the tutorial for some instructions on how to use the plugin, and the gallery for some examples of what is possible.

1300 Strips of Qwantz

The entire Qwantz (dinosaur comics) archive expressed in one comic:

Qwantz, for those who don’t know, is a webcomic only in the sense of being a comic on the web. Despite having posted about 1300 comics as of writing, the images have not varied at all, just the text.

I’ve averaged every comic with a combination of Python and ImageMagic, but boosting the text somewhat so it it’s not just an off-white image. Ryan North must obviously use a template file to create that perfectly aligned text. You can even make out that panel 3 tends to start with “I”, and panel six with “T-rex”, I think.

Source available here.