One of the goals with the new world generator was to create a system that makes it possible for anyone to create their own worlds. And with anyone I really mean anyone.
If I would have released an api that would let you modify or create your own version of the current realistic world you would have to be an experienced programmer with a deep understanding of procedural generation including different noise generators and the math behind iso surfaces. You don’t need many fingers to count the people who fits that description and also plays my game.
So after many iterations I finally came up with a flexible and robust way to take block models built inside the game (or using a tool made by the community) and use them as building parts for entire worlds. The first versions of this system were very limited in how the building parts could be placed and how they worked with the lod system. The building parts were very easy to spot because they all looked like giant Minecraft blocks in the distance. The current version I’m working on right now lets me have any detail I want at any lod level and it is even possible to offset the building parts in different ways to push them of the grid. In the Blockscape world that will be available in the next update all the building parts I have created are laid out using a bunch of procedural algorithms. If you are a programmer you could do this in a mod as well but if you know nothing about programming you could simply create a world map were each cell points to the building part you want. This world map is just a simple text file with coordinates and building part names. In the future I’m going to add functionality to Blockscape that will let you edit such maps in the game using block building methods.
So in the end the building parts and the map that lays out the building parts will all be built inside the game.
No post is complete without some images so here we go…
This is the world I use when creating building parts. Here I’m building a tree trunk (the material doesn’t matter here as it can be change dynamically in the world map/generator):
The tree trunk was saved as a block model and is now used in the world generator:
I once said that the world of Blockscape will always be blocky. The reasons for this is that I love lego and the games I love are all block based. It is all there in the name and the logo:
At some point I lost it. The heart of Blockscape was lost. In my quest of finding a way to extend the view distance I gave up a bit of my soul and implemented smooth voxel data. It is much simpler to do LODing with smooth voxel data and when I got it working it all felt quite good. Finally Blockscape had a great view distance. So what was the problem?
You don’t mix clay with lego.
I spent almost a year trying to get Blockscape the block building game working with the new voxel data. I’m a real stubborn person. I thought that if I just put enough time into this it will all just work out. In the end I actually got it working to some extent. You could build with blocks and have a huge landscape as a nice background. But that was basically it.
To create a good game you take one game mechanic and go all in with it. You don’t add action sequences to a point and click adventure game. You don’t add long cutscenes to a fast paced fps game. You don’t add curved roads to a city building game. I once listened to an interview with Marcus Persson where he got the question “Is there something you regret with Minecraft?”. Without even thinking he answered “Adding half blocks”. Why did he say that? Because Minecraft is a game where the core game mechanic is adding and removing one meter sized perfectly square blocks. Because of huge pressure from the fan base he agreed to add half blocks and things got messy. My guess is that adding half blocks was one of the most time consuming features in the history of Minecraft. And the only thing it did was to add a little bit of cosmetic detail.
You don’t mix clay with lego.
The last 7 months has been a long fight to find the heart of Blockscape again. The good news is that I finally found it. I just had to throw away the clay and focus on the lego. This however put me back to square one again: How do you represent a world that is a lot more complex and with 64 times the resolution of Minecraft and still have the same or greater view distance? It took me some time before I realized that the answer was in the castle generator. After the Steam release I rebuilt the castle generator so that the individual parts where resampled in block space and that was exactly what i was looking for.
So how do you build a world out of building parts? Stay tuned for the next post!
To get evenly spaced biomes I implemented Voronio diagrams. Combined with other noise sources and some hacking it now works perfectly. I will write a lengthy post about this next week.
I finally managed to cover most cases in the new surface/block extraction module. The basic world features are now actually very close to what I had in mind when I started working on Blockscape.
Spent some time on a tropic mountain generation algorithm. Starting to look really good. More about this later.
Added lots of new block types to support distant spruces and special cases in the terrain.
Implemented an extension to the paint tool that will make it possible to paint sand and snow onto any surface. What makes painting with these materials so special is that they only stick to surfaces that are facing upwards. On edges it creates a nice transition effect. Right now I’m using this for snow covered buildings and spruces. Some more work needed here but it is already a powerful tool that I think will add a really nice touch to the world and the stuff you build.
- Biomes should be evenly spaced.
- Every biome should have at least one cave, building and item.
- Every biome type should have its own set of unique land features.
- Terrain should consist of as much flat land as possible.
- Slopes should be limited to 14, 25 and 45 degrees (Because of future transportation)
- All major land features like cliffs/mountains, cave openings, trees and buildings should be visible in the whole viewing range up to the maximum viewing distance.
- Everything must be a block (this makes it impossible to keep the trees from the realistic world)
The world generation and the parts that make up the new Blockscape world went through another iteration. It was too square but now I’m getting there. The new methods give a world with three types of slopes: 45, 25 and 14. The first two we already have but the 14 degree one is new.
I had to dive into the profiler and do some heavy optimization again.
The Blockscape trees are now completely solid like in the very first version of Blockscape.
The new Blockscape world still looks too blocky. Need more slopes. Doesn’t look good enough for screenshots yet.
The world is now made up of 16^3 sized micro blocks because 32^3 is too big. In a mod you can use any power of 2 size you want but more detail == fewer number of lod levels == lower view distance.
I have been prototyping new building tools. In the future I will replace all the slope blocks with a single slope tool.
Added grass and flowers to the Blockscape world. White flowers in Spring Woodland biomes. Pink flowers in Autumn Cliff biomes. Yellow flowers in Summer/Autumn Woodland biomes.
Working on a new mountain biome with mountains taller than the clouds.
Added a realtime Ambient Occlusion engine on top of the existing static one because I wanted some extra edge enhancement on static meshes and contact shadows on animated meshes. Looks ok with bussy textures. Good enough for now.
Clouds look very blocky. Needs some love. Also need a cloud material (using snow for testing). Did I say you can build stuff on clouds?
Can’t decide on how the greeble should look like for segmented rock surfaces.
I really like working on the Blockscape world. It feels good. It feels right.
I’m currently trying out differrent ways to make the Blockscape world look less blocky. Greeble is the key here.
Is it possible to release something before christmas? I feel like I have to.
Because the Blockscape world is exclusively made out of blocks no tools that operate on smooth data/surfaces will be available. With that being said I can’t decide if organic materials should have some kind of mesh smoothing applied as a post effect.
The Blockscape world may not be realistic but it will be able to generate and render cities with very good detail.
I’m selling all my Star Wars Lego. Need more room. Mixed feelings.
Watched the new Star Wars trailer. Lightsabers crossguard? Looks cool but… isn’t that a really bad idea? Other than that it was awesome.