Skeletons

Skeletons is a procedural generator of animalish skeletons.

During my year at Gamagora, I attended a short course on procedural generation. As a final project, I wrote this generator with two friends.

Objectives

Content

I thought, probably influenced by the game Spore, that generating creatures would be interesting; and it’s quite different from the sempiternal terrains.

Generating a complete creature with bones, organs, tissues would require an incredible amount of work though, so we limited ourselves to skeletons. This is afterall what gives its structure to a body, and we can use our imagination to build the rest. Doing so also has the advantage that we could easily translate it to 3D animation skeletons afterwards.

Accessibility

Procedural generation is a pretty cool subject in computer science, and lots of programmers enjoy doing things that work, but that are comprehensible only to other programmers.

In the video games world, procedural generation is used to produce large quantities of various content, but it is easy to forget that somebody has to do a quality check on the generated content. This person is most probably a non-tech, like an artist or level designer. The other goal of creating a procedural generator is therefore to make it usable by other people, who do not necessarily understand how it works.

Technical side

Engine

The engine for this generator is a L-system library we wrote during course, and improved for this project.

Our skeletons are defined by a grammar, consisting of rules that describe how bones are produced. Given a starting point; the axiom, the engine will process the rules to expand our axiom into a list of symbols to which we give meaning: these will be our bones.

Sample grammar

Trunk → Head Spine Tail
Spine → HighSpine LowSpine
HighSpine → Vertebra [Arm] Vertebra HighSpine
HighSpine → ε

These rules are translated into Python code, but in the current state they do not provide enough information to produce interesting skeletons. That’s why we introduced parameters into our rules, to have more complex emerging behaviors.

UI

The symbols are then processed by a set of drawing commands: they abstract the way to represent symbols. It could be anything like printing their names to the console, or sending meshes to a 3D printer.

We wanted to have visual and real-time feedback for the user, so having a 3D view of our skeletons inside the project was the goal. This way, we could also put parameters as widgets inside the UI and let the user play with the generator at its full extent.

Result

screenshot

More Reading
Newer// Collimateru