Hey everybody. It's been a loooong time since we've peeped a word to anyone. The team has undergone a lot of chaotic Real Life changes over the last year.
Our primary contributing 3D artists and myself have each gotten positions at commercial game companies. Our art director/manager has left to focus on building her portfolio in other areas (currently interning on a Hollywood movie by a rather famous director), and Paul, the lone wolf engineer and co-designer, started his graduate studies in AI. It's been a very exciting time for everyone and I'm immensely proud of the opportunity we've had to work together, although it's taken its toll on Ground Zero's progress. However, we are still very much committed to seeing this thing through and want to give a little sneak peak at some tech we've been working on for our next public prototype.
So, Paul found a method of very quickly spawning and rendering simple foliage objects. These objects cannot be lit (must use "blend blend" or similar) and are non-interactive once spawned, but can still be dynamically generated and are ideal for things like dense, non-colliding grass. As long as they all use the same texture sheet, it can pretty much be rendered with a few draw calls. The user can define the groundcover draw distance.
We use greyscale "watermaps" to help model the appearance of plantlife. A combination of local water availability and terrain elevation determines the type and density of foliage appearing. It really isn't demonstrated adequately here due to the limited variety of assets we have. Below are some images that demonstrate the watermaps more directly.
A couple other improvements Paul has made to the terrain generation includes performing vertex coloring based on slope to blend between materials (rock and sand here), and an optimization process that simplifies the mesh where there is little or no change in elevation.
I'll use this debug image to demonstrate height and water maps
Pretty obvious here. This began as 400x400 mesh but much of that is trimmed out. Our implementation can take an image of any resolution and map it to a mesh with user-defined max density.
Here we see where flat and gradually sloping areas can be simplified without loss in quality to reduce triangle count. This still has some significant bugs (a tendency to create "steppes" in borderline areas) but helps quite a bit depending on the heightmap.
This demonstrates a change in how aggressively the terrain is simplified. This can in some cases reduce triangle count to half, a fourth, or more. Very bumpy heightmaps do not benefit as much of course.
This is a flat terrain with the same image instead applied as a water map. You can see that it largely affects density here, but each plant is defined with a range of ideal water and elevation values so we could potentially transition from desert scrub to lush jungle given enough assets.
And finally just one more wide angle shot of some rolling terrain that shows off the material blending and subtle geometry optimizations.
We are by the way generating each location from real-world elevation data. The player traverses the game world via a 2d world map divided into a grid of sectors. Each sector's terrain and hopefully foliage are linked to specific segments of satellite imagery to create the illusion of a gigantic persistent world. I spliced this image together from DEM data, the full size is about 20,000x10,000 pixels.
...and although it can't hold a candle to what those crazy guys at Introversion are doing, this last image shows the same test image above applied as a population map. Street sections are laid down to connect population centers. This is solid pavement but will soon be proper blocks of buildings linked by streets (we've shown a bit of that capability in our youtube video preview from last winter).