I've been making progress on different technical areas of A New Zero, as well as some progress on the gameplay design (although mostly in my head). I'm not sure when the next version will be ready, but I'm aiming to have a good demo ready for GDC in March.
My goal for this is a bit ambitious, at least a 8192x8192x128 meter modifiable 3D terrain with a 0.5 meter detail. The plan is to allow players to dig trenches, build roads and possibly mine resources, that's why I'm aiming for a 0.5 meter detail, should be enough accuracy for trenches and roads. The 64 square kilometer size is about what I think will work for 5 or 6 cities, with enough space between cities for aircraft (version 0.78 had about 4 square kilometers, I felt the cities were a little to close together).
There's two main problems with this, memory and level of detail rendering. The memory problem is pretty easy to calculate, if you have a byte for the density of each possible voxel, and there's 8192 meters times a detail of 2 voxels per meter, then it's 16384 times 16384 times 256, which is around 68 gigs of memory. Luckily I've been writing voxel engines since the late 90's, so I've learned some tricks along the way. One is to break the world into sectors, say 8x8x8, and only store the densities if it's not totally empty or full. That helped quite a bit, since most of the world is empty space, but it was still taking a couple gigs of space.
The next step was to compress the sectors, since most of the 8x8x8 sectors are fairly uniform I figured they would compress quite a bit. Originally I looked into arithmetic encoding, which was interesting, but not really practical (too slow and complicated). Instead I went with simple run-length encoding, which is fast, simple and compresses the sectors to around 1/10th their original size on average.
For the level of detail rendering I started by building lower detail meshes of areas, so farther away it's building the mesh out of average densities of say a 4x4x4 chunk of voxels. The problem with this is the lower the detail the worse it looks, triangles are representing big chunks, and either miss details or overlap empty spaces. There are ways of doing adaptive level of detail, but that would require building the high detail mesh, and handling changes of LOD between areas, which was all getting too complicated. Instead I'm using a ray-tracing method, which I'll probably write a separate blog post about soon.
This is another ambitious technical challenge, probably the most difficult I've attempted. The physical part of the body is working pretty well now, the main challenge is the AI that controls the virtual muscles. Lately that's mostly been trial and error, thinking of a new method to solve a particular situation, then finding other situations where that doesn't work. I do have the 2D prototype walking up stairs finally, which was one of the trickier situations to solve. I will probably try this method in A New Zero soon, along with a few other ideas I've come up with, like balancing using the feet instead of the waist.
I've mainly been working on traffic simulations and the city rendering engine, you can see some of the results in these videos, more to come soon: