Is it possible to create unlimited terrain like GTA?

Hi,just wondering,Is it possible to use some thing like dynamic loading with LOD techniques to merge detailed terrain models seamlessly just like GTA world?

In theory, it should be possible with Haxe and Kha inside of Armory3d. In fact, Armory3d already has a very basic terrain streaming. checkout the terrain example.

1 Like

Thanks, QuantumCoderQC
I’d tried it again, didn’t notice that it takes as many numbered height maps as sectors number decided to generate,now I see it can generate terrain mesh like array,it sure helps to build terrain,what if I need them to be complex buildings or structures on it which almost like several sets of scenes with collision information, then I have to figure how to manage memory resources for it can’t be loaded for once,definitely need to slice them up and load them when approaching in sight,and some how they need to show all when your view point is on high ground that you can’t cheat with hiding,this is the tricky part that I can’t image how to solve it with run time script,unless Armory provides dynamically loading or dynamic LOD to save memory loading,that’s what I thought…

GTA N doesn’t have unlimited terrain, the terrain is create by artist and isn’t procedurally generated.
What they do for seamless transition is that they split the terrain into multiple parts (commonly called ‘chunks’) and than they use camera frustum culling to hide the terrain that aren’t visible. Even if they are visible and are far away, then they load lower LOD of the terrain according to how far the terrain is. Objects also have pre-generated LOD, and are loaded according to the distance, once they are enough far away for player to see, than the object are hidden. With physics object, their rigidbody is disable based on the distance between rigidbodies, this type of optimization is some time done with octree. In games like GTA, heavy level of optimization is done to keep FPS high as possible, but if you are making small games, than optimization done by engine is enough.
AFAIK, Armory doesn’t have generation of LOD dynamically, but you can check LOD wiki, and see how to generate LOD from mesh and then generate LOD for terrain on start-up and use it during game-play. (It is best to create LOD by hand for objects though)


Yeah! BlackGoku36,that’s some business secrets that can allow game engine loading up such a massive data and rich content at once,it’s so fascinating!
I’m pondering that if Armory has “relplace mesh” like BGE or “load object” like three.js with WEBGL kind of function,maybe it’s easier to simulate “world” like scene,load rough low LOD models first and replace nearby chunks gradually with higher LOD models,I guess this might work without preloading tons of detailed contents,just thinking…

Maybe with the next version of Armory in C/C++ and maybe with something new available in Armopaint, it would be great to have the possibility to create automatically LOD.

For example an actor with multiple LOD meshes, starting from the more detailed one made in Armopaint and thus where each LOD mesh (automatically generated by Armopaint) skin to the same skeleton.

Well explained the problematic and work needed here

I’ve been interested in this while looking in an ECS (Entity-Component-System) approach and for Neural Network polymorphic using mesh and GPU … using some kind of LOD to dynamically modify itself in Armory while using the power of GPU/shaders. The resemblance and my idea is simple. Just as LODs increase performance and reduce drawing calls by displaying progressively less detail in objects that are farther away from the camera, being able to reduce or increase the number of active neurons during reinforcement learning (a kind of dynamic clustering) can further reduce CPU/GPU calls, with lower neurons recombinations as with textures having multiple textures combined into one.

Thus using a kind of special LOD group as the parent of the skeleton and the LOD meshes, we could have a specialized logic node available for LOD with which we could be able to select the level of detail needed during the gameplay.


When constructing a vast map, it is convenient to have a function to load the divided terrain object into memory at the required timing. Not about drawing, but about main memory.

Automatic LOD generation is very attractive, is @olsen looking for it? Here is an example of an LOD that uses a self-prepared low-poly mesh instead of auto-generated.


example of Setting Up Hierarchical LOD Preview in Maya


Thanks again,Sandy
I admire your words and views,which are alway explicit and accurate!I’m also learning English from this!!

That’s great! this is one of the key functions I’m looking for,
I can generate different LOD levels of instance for selected objects with your help now ,but I can’t find ways to control or assign it,and I don’t see how to switch them to show results in view port or player,
is it still under developing?:yum:

Thanks, Didier,today I’ve learned a lot from you,too.
The last time I saw the term “entity” was from Virtools which developed by France since I were still a collage boy,and Neural Network algorithm was seen from some assets decades ago using some statistics to get average predict value to design responsive behaviors ,now it seems go every where today!
I compared simple FPV games with bullet hole effect from pure three.js and Armory made samples,I found that Armory performs much better efficiency than pure .js games, I don’t know how they did but I think Armory cares performance very much,so I guess they might take a lot of work on issues like this,since dynamic LOD technic possess such an advantages for larger projects developing, just I have not found relative functions in Nodes menu yet,I guess they might have been under developing,I hope they would work them out,I’v been looking forward it.

1 Like

Armory already handles that for you automatically!


Cool! BlackGoku36
no wonder!
That explains why my FPV work with high detailed models runs fluently, so it already runs with in!

1 Like

Thanks for share , Magnific ! … must try it too with a logic node to manage it :wink:

1 Like

I didn’t notice the “Auto Generate” button in front of me.:stuck_out_tongue_closed_eyes:
This is convenient!

1 Like

This feature is here. But…

A bug has been reported and does not seem to work with child objects containing LODs.

1 Like