SceneLoader class (legacy)
Once the plugin is referenced, the SceneLoader class can be used. It provides a few loading methods.
SceneLoader.Append
Loads all Babylon assets from the file and appends them to the scene.
import { AppendSceneAsync } from "@babylonjs/core/Loading/sceneLoader";AppendSceneAsync("duck.gltf", scene).then(function () { // do something with the scene});See an example here: Append An Object
Loads all Babylon assets from a string and appends them to the scene.
import { AppendSceneAsync } from "@babylonjs/core/Loading/sceneLoader";AppendSceneAsync("data:" + gltfString, scene).then(function () { // do something with the scene});See an example here: Append Assets From A String
You can also load a .glb binary file from a data string as long as the binary data is base64 encoded:
import { AppendSceneAsync } from "@babylonjs/core/Loading/sceneLoader";const base64_model_content = "data:;base64,BASE 64 ENCODED DATA...";AppendSceneAsync(base64_model_content, scene).then(function () { // do something with the scene});Note that two mime types are allowed in the string data:
const base64_model_content = "data:application/octet-stream;base64,-BASE 64 ENCODED DATA-";const base64_model_content = "data:model/gltf-binary;base64,-BASE 64 ENCODED DATA-";See an example here: Load .glb From Binary Data
LoadSceneAsync
Loads all Babylon assets from the file and creates a new scene.
import { LoadSceneAsync } from "@babylonjs/core/Loading/sceneLoader";LoadSceneAsync("/assets/", "batman.obj", engine).then(function (scene) { // do something with the scene});SceneLoader.ImportMesh
Loads the meshes from the file and appends them to the scene.
import { SceneLoader } from "@babylonjs/core/Loading/sceneLoader";// The first parameter can be set to null to load all meshes and skeletonsSceneLoader.ImportMesh(["myMesh1", "myMesh2"], "./", "duck.gltf", scene, function (meshes, particleSystems, skeletons) { // do something with the meshes and skeletons // particleSystems are always null for glTF assets});See an example here: Import Mesh
ImportMeshAsync
Asynchronous version of the ImportMesh function. The result can be obtained by calling the returned Promise or by using the await keyword (note: to use the await keyword in the createScene function, it has to be marked as async in its definition).
import { ImportMeshAsync } from "@babylonjs/core/Loading/sceneLoader";// The first parameter can be set to null to load all meshes and skeletonsconst importPromise = ImportMeshAsync("./duck.gltf", scene, { meshNames: ["myMesh1", "myMesh2"] });importPromise.then((result) => { //// Result has meshes, particleSystems, skeletons, animationGroups and transformNodes});See an example here: Import Mesh Async with Promises
or
import { ImportMeshAsync } from "@babylonjs/core/Loading/sceneLoader";// The first parameter can be set to null to load all meshes and skeletonsconst result = await ImportMeshAsync("./duck.gltf", scene, { meshNames: ["myMesh1", "myMesh2"] });See an example here: Import Mesh Async with await
LoadAssetContainerAsync
Loads all Babylon assets from the file and does not append them to the scene.
import { LoadAssetContainerAsync } from "@babylonjs/core/Loading/sceneLoader";LoadAssetContainerAsync("./duck.gltf", scene).then(function (container) { const meshes = container.meshes; const materials = container.materials; //... // Adds all elements to the scene container.addAllToScene();});See an example here: Asset Container Load Example
ImportAnimationsAsync
Loads the animations from the file and merges them into the scene. You can customize the import process using options and callbacks.
import { ImportAnimationsAsync } from "@babylonjs/core/Loading/sceneLoader";ImportAnimationsAsync("./Elf_run.gltf", scene);See an example here: Importing Animations
AppendSceneAsync
There are also Async versions of these functions that return promises:
import { AppendSceneAsync } from "@babylonjs/core/Loading/sceneLoader";AppendSceneAsync("./duck.gltf", scene).then(function (scene) { // do something with the scene});See How to Use Promises to learn more about using promises.
Advanced Usage
Use the onPluginActivatedObservable to set properties and call methods specific to a particular loader.
import { SceneLoader } from "@babylonjs/core/Loading/sceneLoader";SceneLoader.OnPluginActivatedObservable.add(function (loader) { if (loader.name === "gltf") { // do something with the loader // loader.<option1> = <...> // loader.<option2> = <...> }});Loading multiple assets
For assistance when loading multiple assets, the AssetsManager class can be used. See Load Files with Assets Manager.
Direct loading base64 encoded models
Babylon.js supports directly loading models from base64-encoded Data URLs without needing to create an object URL or download the file. When loading from a base64 data URL, the plugin is not automatically detected (with the exception of some glb formats). The pluginExtension parameter should be set when using base64 data URLs to ensure the correct plugin is used to load the model.
The format for a minimum base64 encoded model file is:
data:;base64,<base64_encoded_file_contents>The ; before base64 and the , following it are both required. See here for an example of loading an obj file in base64 encoding:
Load base64 model