AssetContainer.instantiateModelsToScene()

I’m glad to announce that we finally have an option to load a model and duplicate it as much as you want without reloading it!!!

To do so, you have to load it into an AssetContainer and then use the new instantiateModelsToScene function:

BABYLON.SceneLoader.LoadAssetContainer("https://models.babylonjs.com/", "alien.glb", scene, function (container) {
container.instantiateModelsToScene();
}

Demo: Babylon.js Playground

Documentation: Use an AssetContainer - Babylon.js Documentation

16 Likes

Excelent!!! Well done :muscle::muscle::muscle:
We have wanted this feature for a long long time.

2 observations :yum:

  1. Can we have the name as param of function like in clone? Because now all the clones will have the same name.
  2. And a flag for clone material or not? :slight_smile:

If it is not possible by design I understand. Cheers! :beers:

  1. Sure will add that now!
  2. Good idea! will do
2 Likes

Will be in next nightly :slight_smile:

1 Like

You are amazing!:beers:

1 Like

Excellent!

Hi @Deltakosh , coming to this a little late but just discovered this method and want to make sure I’m understanding it the right way. Am I right that this is “cloning” the underlying models, and not instancing them? When I saw the word “instantiate” I immediately thought “instances”, but then when I log the models I see the id says “clone of root node”, etc, so I expect based on that and the above that they are “clones”.

The reason I’m really interested in this method is because overall it seems a lot easier than what it have to do to instance a gltf model that contains a few meshes. To do that, it seems like I have to loop through the meshes and instance each one - correct me if I’m wrong. Whereas with this method, I can just pass the container to the method and it just does what it needs to do. But if it is cloning vs. instancing, then it has the drawbacks associated with that tradeoff (I see my draw calls go up significantly with cloning, as expected).

Anyway, let me know what you think about the above! This is an awesome method.

1 Like

Hello, it will clone or instantiate based on what is possible :slight_smile: It will always try to instantiate if possible

1 Like

What would determine whether it is cloned or instancing? What are the factors involved in that?

Thanks for your help @Deltakosh !

-Gabe

1 Like

Here is where the code live:
Babylon.js/assetContainer.ts at 6f11ef5fe85ee9ed264d6bc0bd7d4cbc0d2beebb · BabylonJS/Babylon.js (github.com)

More precisely, the mesh component of it:
Babylon.js/mesh.ts at 6f11ef5fe85ee9ed264d6bc0bd7d4cbc0d2beebb · BabylonJS/Babylon.js (github.com)

1 Like

Hmm, am I missing something or does instantiateModelsToScene() never actually try to instantiate though @Deltakosh: Babylon.js/assetContainer.ts at 6f11ef5fe85ee9ed264d6bc0bd7d4cbc0d2beebb · BabylonJS/Babylon.js · GitHub

These options prevent it from ever using instancing here, right?

Is there a reason for that?

Thanks a lot!
Dennis

Good one! It is clearly a miss! Sorry about that
Will fix in next release

1 Like

Maybe it makes sense to make that options object available/passable as parameter as well?

Totally!
I will add it

2 Likes

Hi here,

some news about instances ? (one year later… ^^)
In my BabylonJs Version (V4) it’s seems to not be ok…

Thanks

1 Like