I would throw my vote in for GLB/GLTF being the best answer these days. Maybe USDZ some day in the future but its barely supported anywhere yet.
- as little memory consumption as possible
- fast loading
- as true to detail as possible
gltf has a lot of extensions: #1 for instance is covered by KTX2 Compressed Textures | Babylon.js Documentation (takes up less video memory) and also #2 because there is less to download for textures.
#2 can also be helped by meshopt compression extension which comes built in support with Babylon (makes the geometry a smaller download)
An excellent tool for generating these from regular glb/gltf files is meshoptimizer/gltf at master · zeux/meshoptimizer · GitHub
PBR support with gltf as well is very good for #3, though its not magical and takes some time to understand and dive in deep Mastering PBR Materials | Babylon.js Documentation before things start looking ‘real’
I have seen many examples where loading objects takes an enormous amount of time. I would like to load my objects “on demand”. Do i have to split my objects into individual files?
This really depends on what you mean. Breaking a mesh into 10 parts won’t help all that much if it’s the same poly/texture/material count. If you mean however that you only want to load the parts you can see currently however, yes that is one answer.
Another is implementing a level of detail system. There are tools and extensions out there like MSFT_lod ( Progressively Load .glTF Files | Babylon.js Documentation ). Support is not good for this though, I would argue you should start simpler and just your create your own progressive lod loading setup to begin.