While attempting to upgrade my project from BabylonJS 8.24 to the latest version, I ran into this rather ugly exception:
Uncaught _RuntimeError RuntimeError: Unable to load from ./models/PlayerVisual.glb: Unsupported version: 2.0
at errorHandler (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Loading\sceneLoader.ts:896:42)
at <anonymous> (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Loading\sceneLoader.ts:969:25)
--- Promise.catch ---
at <anonymous> (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Loading\sceneLoader.ts:968:22)
at dataCallback (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Loading\sceneLoader.ts:683:13)
at <anonymous> (c:\Dev\BabylonJS\kitchen-chaos\dev\loaders\src\glTF\glTFFileLoader.ts:877:29)
--- Promise.then ---
at <anonymous> (c:\Dev\BabylonJS\kitchen-chaos\dev\loaders\src\glTF\glTFFileLoader.ts:875:23)
at <anonymous> (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Misc\fileTools.ts:539:13)
at onReadyStateChange (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Misc\fileTools.ts:697:37)
--- XMLHttpRequest.send ---
at send (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Misc\webRequest.ts:185:19)
at retryLoop (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Misc\fileTools.ts:728:21)
at requestFile (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Misc\fileTools.ts:731:9)
at RequestFile (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Misc\fileTools.ts:774:9)
at LoadFile (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Misc\fileTools.ts:536:12)
at _loadFile (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\scene.ts:6289:25)
at _loadFile (c:\Dev\BabylonJS\kitchen-chaos\dev\loaders\src\glTF\glTFFileLoader.ts:1116:31)
at loadFile (c:\Dev\BabylonJS\kitchen-chaos\dev\loaders\src\glTF\glTFFileLoader.ts:865:25)
at manifestChecked (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Loading\sceneLoader.ts:714:26)
at _Database (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Offline\database.ts:69:13)
at AbstractEngine.OfflineProviderFactory (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Offline\database.ts:11:12)
at <anonymous> (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Loading\sceneLoader.ts:735:52)
at getPluginInstance (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Loading\sceneLoader.ts:634:17)
at loadDataAsync (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Loading\sceneLoader.ts:643:12)
at importMeshAsync (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Loading\sceneLoader.ts:929:18)
at <anonymous> (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Loading\sceneLoader.ts:994:13)
at importMeshAsyncCoreAsync (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Loading\sceneLoader.ts:992:18)
at ImportMeshAsync (c:\Dev\BabylonJS\kitchen-chaos\dev\core\src\Loading\sceneLoader.ts:860:18)
at loadActors (c:\Dev\BabylonJS\kitchen-chaos\src\stages\GameStage.ts:94:28)
at createScene (c:\Dev\BabylonJS\kitchen-chaos\src\stages\GameStage.ts:37:14)
at load (c:\Dev\BabylonJS\kitchen-chaos\src\framework\Stage.ts:29:20)
at setActiveStage (c:\Dev\BabylonJS\kitchen-chaos\src\framework\StageManager.ts:255:29)
at start (c:\Dev\BabylonJS\kitchen-chaos\src\main.ts:18:28)
at <anonymous> (c:\Dev\BabylonJS\kitchen-chaos\src\main.ts:53:12)
Inspecting the GLB’s strings, I can see the JSON is properly set to “2.0”.
glTF
JSON{
"asset": {
"generator": "FBX2glTF v0.9.7",
"version": "2.0"
"scene": 0,
"buffers": [
The code block I have to load the model is:
let result = await ImportMeshAsync("./models/PlayerVisual.glb", super.scene);
const PlayerVisual = result.meshes[0];
PlayerVisual.position = Vector3.Zero();;
PlayerVisual.rotation = Vector3.Zero();;
PlayerVisual.receiveShadows = true;
this._shadowGenerator?.addShadowCaster(PlayerVisual);
I tried to recreate this on the playground, but it is using a deprecated call.
I’ve debugged the source, which is as follows:
private _getLoader(loaderData: IGLTFLoaderData): IGLTFLoader {
const asset = (<any>loaderData.json).asset || {};
this._log(`Asset version: ${asset.version}`);
asset.minVersion && this._log(`Asset minimum version: ${asset.minVersion}`);
asset.generator && this._log(`Asset generator: ${asset.generator}`);
const version = GLTFFileLoader._parseVersion(asset.version);
if (!version) {
throw new Error("Invalid version: " + asset.version);
}
if (asset.minVersion !== undefined) {
const minVersion = GLTFFileLoader._parseVersion(asset.minVersion);
if (!minVersion) {
throw new Error("Invalid minimum version: " + asset.minVersion);
}
if (GLTFFileLoader._compareVersion(minVersion, { major: 2, minor: 0 }) > 0) {
throw new Error("Incompatible minimum version: " + asset.minVersion);
}
}
const createLoaders: { [key: number]: (parent: GLTFFileLoader) => IGLTFLoader } = {
1: GLTFFileLoader._CreateGLTF1Loader,
2: GLTFFileLoader._CreateGLTF2Loader,
};
const createLoader = createLoaders[version.major];
if (!createLoader) {
throw new Error("Unsupported version: " + asset.version);
and inspecting version.major I can see that 2 is passed in. I’m somewhat stuck at this point.




