Thursday, May 23, 2013

NOWHERE Progress Report: Procedural Procedures!

Four weeks have passed, and still no new NOWHERE alpha in sight. What's happening? Time to give you all a little heads up.

The colony as it looks at the moment was already cool enough to make a few jaws drop, but we're not happy. The game's world is supposed to be a rich diverse place, yet with a kind of homogeneous look but featuring a lot of distinct landmarks; as if that wasn't enough, each new play-through is supposed to throw the dices anew and generate a whole different look for the world. The colony will look a little different to each player.

In the first two weeks I worked on a base implementation for easily generating 2-manifold meshes based on Fabian Giesen's excellent implementation guide on the subject, adding support for splitting vertices and faces, subdivision and texture mapping. In the rest of the time I worked on a generator for hexagonal greeble patterns to skin meshes with interesting surfaces. It's very early stuff, and more is about to come in the following months.

I believe a few screenshots in chronological order will explain our progress best.

It all starts with a quad

Splitting faces is one of the two elemental operators to increase mesh complexity

Testing extrusion, which is built from the split vertex/face operators 

Added code for various base primitives, here's a cone. How awesome is that? Not much. Moving on.

It took a long time to get this right: meshes with holes.
A repeated sequence of face extrude & transform can yield pretty organic structures.

Catmull-Clark subdivision surfaces with support for creasing / semi-hard edges. I think we're done here.

Just one of many failed attempts to somehow get a grip on a workable pattern technique. Terrible.
This was one of the earliest hexagonal patterns we did, manually, a year ago. Why not do this procedurally?
Eroded RLE noise with an axonometric projection, with islands identified and colored by flood-fill algorithm. Piece of cake. A bright spot kept whooshing by the window several times while I worked on this. I'm not fully sure but I believe it was the sun.
Another generated pattern, this time with a more appropriate color scheme. 
This is what a generated texture tile looks like.

Testing one of the generated textures on a fitting object using Blender/Cycles. The procedural technique used here is
based on repeatedly simulating a round of Nibbles/Snake, by the way.
Time to put it in the game. A first generated mesh looks pretty good! And yet still so much to do...

Hope that was as interesting for you as it was for me. You'll find a few more pictures in my Twitter gallery. Expect a new alpha build appearing in your account soon! Watch the skies!