Recently I had a discussion on the discord regarding a feature that could be added without too much difficulty in my opinion to Armory3D given that all the basics are there.
Let me explain, you have already tried the “scene_stream” examples which allows you to stream several different objects (especially in html 5 with multi threading)
But this feature has these limitations, in fact it will not be possible to create an open world, zelda type or other with this method, because during the execution of the code, everything must still be loaded.
You also know the example “server stream” which allows you to download an.obj file from an external server, and display it in the game, without this 3D model being compiled with the game.
You also know the LOD system to display a more or less detailed model depending on the distance with the player
Here is the project / feature request I would like to make:
Create a system that connects these functions, I explain myself: The system I imagined would work like this:
- At compile time, blender exports all meshes, their materials, and properties to a predefined folder (this can be an ftp server)
- The executable (html or.exe contains a json (or other format maby) file created next to it, which contains all the locations (xyz, transform) of the meshes, and their direct link on the server (maby html link)
- When the game is launched, the client sends a request to the server to have only models with right LOD from point of view (all close elements will be downloaded to LOD0 and far elements will be downloaded to LOD 5 or not if the elements are really too far away, and if the player move fare, then new model will be download, and the others are just remove or unspawn (to have more power).
This system would allow you to have a game in a browser, which loads very quickly, while still being able to have a potentially huge (mesh based) world.
Just as multiplayer minecraft users just have the textures / sound and gameplay code of the game store locally, and the map is sequentially loaded into the ram, as sometimes it can weigh several giga.
(the json file itself could be stored on the server, which makes updating the world more convenient if it is multiplayer)
I don’t know if this feature should be done with lubos as a feature request on github, or if other developers would be able to do this feature, because after all, the parts of the code needed to do this are already present, except for the part that records mesh data on a file (and is able to understand that several meshes can have only one object or one material can be assigned multiple times.)
Maybe the Entity component system could make the task easier