Got the basic voxel terrain in today. The most time was spent on new ways to generate and enqueue Voxels, RenderMesh, PhysicsMesh in various worker threads and sync them amongst all the subsystems. Also refactored some of the math library and noise generation while in there to avoid overlap.
Voxel Terrain Sectors 2x1x2
The scale of this image required me to adjust my camera… typical player could be about as big as a pixel here… going to hook this up to my biome and erosion simulation next. That way flora and fauna will spawn with rivers and ‘set piece’ locations, and have some more high frequency details… I had some crazy stuff like ocean trenches prototyped, but who would ever see that? Took out the randomized caves for now too as they should be created by the biome / erosion system. The trick will be to convert it to density functions properly - eg account for overlapping terrain. I don’t think trees grow under ground.
This is just a 2x1x2 voxel terrain patch to get a sense of scale… I have mostly been testing with 6x2x6 and 9x3x9 for a complete world earlier. It is all hooked up to script you can spawn more terrain as the player runs around until you run out of floating point sanity if you like.
Memory overhead is super low at ~1/4 the size of the older heightmap generated terrain. That said you could make worlds smaller than one walk cycle of animation or short sound clip by far still. :D
Planning on adding real-time editor later that works by altering density in a selected Voxel Sector for artist controlled editing via terrain brush. It would be nice to make it work with touchscreens via the web editor too in real-time, but not high on my list. Elevation and Biome splat controller needs to come in next. Maybe add some slope blending adjustments to the basic shader / materials too.
The most fun will be allowing scripted density functions by exposing the native structs holding function pointers and args to script that run in the density summation as addends. In other words alter the density functions from script ( data driven ) at any time not just alter the voxel field… well laters.