World generation update

Time for another blog post. It has been almost a month since I last made an update, but we have made great progress in world generation.

What's new

Initial greedy meshing support (done)

Fixed Terra textures (done)

Connected Weltschmerz and Terra (done)

Basic terrain generation (done)

Greedy mesher optimizations (in progress)

Texture shading for better terrain readability (done)

Voxel splatter testing and integration (in progress)

In-game chat tests (in progress)

Generation logic (done)

Trees (in progress)

Running animation (in progress)

Current state of the voxel splatter.

The main theme of this month for me was "Learn how to use terra and then fix it." Here's a comparison of the previous version of Terra and the new one:

And the new version with greedy meshing:

Bugs

Crushing the bugs!

Obsolete libraries prevented building (fixed)

Terra material ID bug prevented air from generating (fixed)

Broken 1D to 3D culling calculations (fixed)

Texture bug (fixed)

Shader bug (fixed)

Performance

Startup: 2 min 20 sFPS: 60 - 80Memory usage: 1 400 MBMemory and loading times have gone up, and generation is slow. This means we need to focus on optimizations for now.

Weltschmerz

I optimized world generation code by removing fortune algorithm in Weltschmerz, which significatly improved performance. Result is a much smoother map.

But it also broke adjusting seas and shorelines. The generation of detail is now so high that 1 pixel == 1 sector. Here is schema to imagine example hierarchy of world size in final release.

Weltschmerz

We keep important parts of the game as modules for moddability. Terra only does what it's told to do and contains no behavior logic. This means that Weltschmerz needs to provide the world generation logic and it is kept separate from Terra. The world data is passed to Terra as a flat array that Terra understands.

Progress

Right now we can generate about 1000 chunks with good FPS on an average 5 year old GPU. This equals to a flat terrain which is approximately 500 x 500 meters in size.

Our next goals are:

Optimizations.

Support for custom meshes.

More performance tests.

We are looking for more coders to join the project. Contact information can be found on our website: