TerraLand 3 - Streaming Huge Real-World & Custom Terrains For Open-World Environments

@Print3d Feel free to ask questions and share your progress on anywhere, yeah I agree that Discord style apps get flooded time to time and people lose track of subjects.

Currently it is absolutely possible to have a huge area (260km2 as yours) split into tiles in a cached server and stream them in runtime. At level start all active tiles around player are accessible to populate assets on them and also after each row/column update, list of updating tiles are there to remove old assets on them and update it with corresponding assets for placement.

I recommend not to use satellite images at all in the server. WHY? Because having satellite images in server means you have to download gigabytes of imagery data to be put in server and in runtime TL’s streaming system needs to load each tile’s image pixels from scratch and apply it to its terrain data for rendering. And in the end, no matter how much high-res the images are, they will never be suitable for close-ups and they soon become blurry/pixelated. Unless you are looking for simple GIS mapping applications which gets boring soon and graphical aspects are not that important in the end.

As in “RuntimeOffline” script (which handles streaming in runtime), you have the option to define a custom terrain material for streaming terrains, you can use a shader which generates colors and does runtime splatting such as the one we showed in this video:

In this video, no Satellite Images are used but only heightmaps and the colors on terrain surface is procedurally generated using a custom terrain shader which does blending between colors based on surface angle as a simple setup.

For a more advanced texturing and splatting distribution on surface, you can go the other way which is supported in TL’s streaming system which is splatting streaming terrains. Using this feature, you can only have heightmaps in place and texturing is done using pre-processed splatmaps (e.g. produced in World Machine) instead of satellite images, so detail textures can be tiled on surface just as we have painted them by a brush. Watch this video tutorial which explains how to do the same for your own:

The splatting streaming terrains shown above is similar to having sat images in server but this time splatmaps instead which requires pre-processing and generating these maps and has the same runtime performance overhead as having satellite images.

So the best option here is to only have heightmaps to generate heights (considering average of 10 meters per pixel for the original resolution) and let the texturing on the GPU and shaders to procedurally generate colors/splats based on slope, height, aspect, normals… This way, you save a lot of room for other performant elements in the scene while having better rendering on surface.

I’ve seen a lot of these shading implementation before, @ has done some [here]( TerraLand 3 - Streaming Huge Real-World & Custom Terrains For Open-World Environments page-2#post-3615490) & [here]( TerraLand 3 - Streaming Huge Real-World & Custom Terrains For Open-World Environments page-4#post-3815824) I’m not sure if there is procedural implementations involved or not but maybe you could ask him to help in this.

Also for generating and placing geo-referenced elements such as buildings and roads, we have been doing it for years now but never released our solutions as a public package, you can see our recent WIP implementations here: TerraLand 2 – High Quality Photo-Realistic Terrains from Real-World GIS Data page-9#post-3497378

The good news is we have plans to have this system included in our upcoming product after its initial release to generate geo-referenced cities and urban areas with all elements from GIS servers plus our own procedural algorithms for assets creation and placement in the scene. But that’s not going to happen soon though.

First, let’s stick to accessing tiles in the runtime and try to populate assets on them, right? :wink:

1 Like