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!


  1. Based on the names of the image files in alpha 54, I assumed that those greebles were going to actually do something eventually--maybe the "turrets" actually shoot, or maybe the whole surface of the colony is a cellular automaton that its less complex disembodied residents call "home", and so when you level up from a mere drone you spend some time as one of those snakes on the surface of that hexagon or something.

    1. Good guess! It's almost like that. You will be able to give the surface purpose by growing particular stuff on it. Over time that makes your avatar grow and turn more into a building. Smaller drones then live within you and follow your command.

  2. Cool.

    That being the case, wouldn't you want to generate greebles that are also legit "plants" that will grow on their own? Ideally without using textures at all but that would be slow, so, animated textures that represent things that the player will be able to grow later.

    I mean, maybe that's actually what I'm looking at here.

    1. Eventually I'd like to have every visible element to occupy some kind of function, as everything that's just decorative is kind of superfluous... so we first have to see how the game plays and what is missing. But yes, optically, that would be quite nice to see.

    2. OK, well, food for thought:

      Playing alpha 54, I occasionally encountered bright rings surrounding dark ones that hadn't quite gone out yet. It gave the impression that the surface had more depth than it really did. So I tried to fly inside and dock with the building.

      I'm imagining inventory and leveling being handled by docking with something, gaining control of a greeble to use for a cursor, and getting it to fetch you stuff from the building. Either by simply using it as a mouse, or perhaps actually playing Snake and eating up the inventory you want to check out.