Introducing Babylon Lite

do you have a list ? that could help me focus :wink:

The following is a list of cases where loading issues are occurring in Babylon Lite.


:no_entry: Lite Load Failures (4)
ERR:LITE
Accessor_SparseType/Accessor_SparseType_03
ERR:LITE
Accessor_SparseType/Accessor_SparseType_04
ERR:LITE
Animation_SamplerType/Animation_SamplerType_01
ERR:LITE
Animation_SamplerType/Animation_SamplerType_02

:black_large_square: Blank Rendering in Lite (6)
BLANK
Animation_SkinType/Animation_SkinType_02
92
BLANK
Animation_SkinType/Animation_SkinType_01
90
BLANK
Mesh_PrimitiveMode/Mesh_PrimitiveMode_01
77
BLANK
Mesh_PrimitiveMode/Mesh_PrimitiveMode_08
77
BLANK
Material_AlphaMask/Material_AlphaMask_06
47
BLANK
Material_AlphaBlend/Material_AlphaBlend_06
5

:red_square: Severe (regionMad ≥ 40) (18)
SEVERE
Material/Material_03
121
SEVERE
Material_SpecularGlossiness/Material_SpecularGlossiness_10
96
SEVERE
Material_SpecularGlossiness/Material_SpecularGlossiness_04
91
SEVERE
Material_SpecularGlossiness/Material_SpecularGlossiness_11
91
SEVERE
Material_SpecularGlossiness/Material_SpecularGlossiness_03
86
SEVERE
Material_SpecularGlossiness/Material_SpecularGlossiness_05
77
SEVERE
Mesh_PrimitiveMode/Mesh_PrimitiveMode_00
74
SEVERE
Mesh_PrimitiveMode/Mesh_PrimitiveMode_07
73
SEVERE
Material_SpecularGlossiness/Material_SpecularGlossiness_01
71
SEVERE
Mesh_PrimitiveMode/Mesh_PrimitiveMode_03
70
SEVERE
Mesh_PrimitiveMode/Mesh_PrimitiveMode_10
69
SEVERE
Mesh_PrimitiveAttribute/Mesh_PrimitiveAttribute_01
63
SEVERE
Buffer_Interleaved/Buffer_Interleaved_03
59
SEVERE
Buffer_Interleaved/Buffer_Interleaved_04
59
SEVERE
Mesh_PrimitiveMode/Mesh_PrimitiveMode_04
56
SEVERE
Mesh_PrimitiveMode/Mesh_PrimitiveMode_11
56
SEVERE
Instancing/Instancing_07
46
SEVERE
Mesh_PrimitiveAttribute/Mesh_PrimitiveAttribute_02
41

:orange_square: Significant (8–40) (27)
SIGNIFICANT
Material_SpecularGlossiness/Material_SpecularGlossiness_13
37
SIGNIFICANT
Material_AlphaMask/Material_AlphaMask_05
36
SIGNIFICANT
Material/Material_07
28
SIGNIFICANT
Material/Material_05
26
SIGNIFICANT
Material/Material_02
25
SIGNIFICANT
Mesh_PrimitivesUV/Mesh_PrimitivesUV_08
25
SIGNIFICANT
Material_SpecularGlossiness/Material_SpecularGlossiness_08
23
SIGNIFICANT
Material_AlphaBlend/Material_AlphaBlend_02
22
SIGNIFICANT
Accessor_Sparse/Accessor_Sparse_03
20
SIGNIFICANT
Accessor_SparseType/Accessor_SparseType_05
19
SIGNIFICANT
Accessor_Sparse/Accessor_Sparse_02
19
SIGNIFICANT
Node_NegativeScale/Node_NegativeScale_12
19
SIGNIFICANT
Node_NegativeScale/Node_NegativeScale_03
19
SIGNIFICANT
Node_NegativeScale/Node_NegativeScale_06
19
SIGNIFICANT
Node_NegativeScale/Node_NegativeScale_09
19
SIGNIFICANT
Node_NegativeScale/Node_NegativeScale_10
17
SIGNIFICANT
Animation_Skin/Animation_Skin_07
17
SIGNIFICANT
Node_NegativeScale/Node_NegativeScale_01
17
SIGNIFICANT
Node_NegativeScale/Node_NegativeScale_04
17
SIGNIFICANT
Node_NegativeScale/Node_NegativeScale_07
17
SIGNIFICANT
Animation_NodeMisc/Animation_NodeMisc_03
17
SIGNIFICANT
Mesh_PrimitivesUV/Mesh_PrimitivesUV_07
15
SIGNIFICANT
Mesh_PrimitivesUV/Mesh_PrimitivesUV_06
15
SIGNIFICANT
Mesh_PrimitivesUV/Mesh_PrimitivesUV_04
15
SIGNIFICANT
Animation_NodeMisc/Animation_NodeMisc_07
15
SIGNIFICANT
Mesh_PrimitivesUV/Mesh_PrimitivesUV_05
14
SIGNIFICANT
Animation_Skin/Animation_Skin_04
13

(BJS-side failures, for reference) (4)

The following are the results of the AI ​​analysis.

I ran a glTF-Asset-Generator parity sweep comparing Babylon Lite against stock Babylon.js v9.5.0 and found several categories where Lite appears to diverge from Babylon.js behavior.

This is not intended as criticism of Lite — I understand it is still new and intentionally smaller in scope. I’m posting this as a structured compatibility report, hoping it helps identify missing or incomplete glTF paths.

TL;DR

I tested 201 loadable “Positive” glTF-Asset-Generator assets across 26 categories.

Result summary:

Verdict Count Meaning
MATCH 112 within5 ≥ 98% and regionMad < 3.5
MINOR 30 regionMad < 8
SIGNIFICANT 27 regionMad 8–40
SEVERE 18 regionMad ≥ 40
BLANK_LITE 6 Lite drew nothing; Babylon.js rendered content
LOAD_ERR_LITE 4 Lite threw during load
LOAD_ERR_BJS 4 stock Babylon.js failed; not counted as Lite issues

regionMad is the mean absolute per-channel difference over foreground pixels, in the 0–255 range. The threshold was calibrated using base PBR material cases such as Material_00, Material_01, and Material_06, which matched at approximately regionMad <= 2.5 / within5 = 100%.

Environment / method

  • Date: 2026-06-24

  • Babylon.js: v9.5.0

  • Runtime: headless WebGPU

  • Resolution: 1280×720

  • Models: 201 loadable Positive glTF-Asset-Generator assets

  • Camera: identical model + look-at-origin camera using manifest translation

  • Lighting: IBL-only environment

    • Babylon.js: createDefaultEnvironment
    • Babylon Lite: loadEnvironment
    • both using environmentSpecular.env
  • Animations: frozen at frame 0

Harness:

tests/lite/gltf-asset-generator/sweep.spec.ts
lab/lite/gltf-test.html
lab/lite/bjs-gltf-test.html

Re-run command:

GLTF_SWEEP=1 GLTF_CATEGORIES=... npx playwright test tests/lite/gltf-asset-generator/sweep.spec.ts --workers=1 --retries=0

The sweep is opt-in via GLTF_SWEEP=1, so it does not run in CI by default.

One harness false-positive was found and fixed during the sweep: the frame-0 freeze originally called goToFrame(g, 0) without an EngineContext, which throws for skeletal/morph clips. That incorrectly labelled 8 Animation_Skin / Animation_SkinType models as load failures. After fixing this by passing the engine, 6 matched and 2 surfaced as genuine blank renders. The numbers below are post-fix.


Clearly problematic cases that look like Lite-side issues

A. Loader rejects signed BYTE / SHORT component types

loadGltf throws:

Unsupported component type: 5120 / 5122

Affected models:

Model Component type
Accessor_SparseType_03 5120 BYTE
Accessor_SparseType_04 5122 SHORT
Animation_SamplerType_01 5120 BYTE
Animation_SamplerType_02 5122 SHORT

Sibling models using FLOAT, UNSIGNED_BYTE, and UNSIGNED_SHORT load successfully, so the missing path appears to be specifically signed integer accessor component types, probably for sparse-accessor values and animation sampler input/output.

B. Skinning renders blank for certain JOINTS / WEIGHTS accessor types

Model regionMad
Animation_SkinType_01 90
Animation_SkinType_02 92

SkinType_00 and SkinType_03 match, but _01 and _02 produce an empty canvas in Lite while Babylon.js renders the deformed skin. This looks like a missing joint/weight component-type variant in the skinning path.

C. Non-triangle primitive topologies

Several Mesh_PrimitiveMode cases diverge. In some cases, Lite appears to render an “X” where Babylon.js renders the expected quad perimeter.

Severe / blank Lite cases:

Mesh_PrimitiveMode_00
Mesh_PrimitiveMode_01
Mesh_PrimitiveMode_03
Mesh_PrimitiveMode_04
Mesh_PrimitiveMode_07
Mesh_PrimitiveMode_08
Mesh_PrimitiveMode_10
Mesh_PrimitiveMode_11

Stock Babylon.js itself failed on:

Mesh_PrimitiveMode_02
Mesh_PrimitiveMode_05
Mesh_PrimitiveMode_09
Mesh_PrimitiveMode_12

Those are excluded from the Lite findings.

D. Negative node scale

The following Node_NegativeScale cases consistently diverge with regionMad around 17–19:

Node_NegativeScale_01
Node_NegativeScale_03
Node_NegativeScale_04
Node_NegativeScale_06
Node_NegativeScale_07
Node_NegativeScale_09
Node_NegativeScale_10
Node_NegativeScale_12

The following matched:

Node_NegativeScale_00
Node_NegativeScale_02
Node_NegativeScale_05
Node_NegativeScale_08
Node_NegativeScale_11

This looks like a negative-determinant transform issue, possibly winding order, normal flipping, or face-culling under mirrored scale.

E. Interleaved buffers and vertex attributes

Severe cases:

Model regionMad
Mesh_PrimitiveAttribute_01 63
Buffer_Interleaved_03 59
Buffer_Interleaved_04 59
Mesh_PrimitiveAttribute_02 41

These may be worth checking against the recent interleaved vertex-buffer fix. They look like remaining edge cases in interleaved buffer / attribute decoding.

F. Base material, alpha, UV, instancing

Notable cases:

Material_03                     regionMad 121
Material_AlphaMask_06           BLANK_LITE / regionMad 47
Material_AlphaBlend_06          BLANK_LITE / regionMad 5
Instancing_07                   regionMad 46
Mesh_PrimitivesUV_*             5 of 9 diverged

Material_03 is especially visible: Lite renders much darker than Babylon.js.


Ambiguous cases

KHR_materials_pbrSpecularGlossiness

Several Material_SpecularGlossiness cases diverge, including 6 severe cases:

Material_SpecularGlossiness_01
Material_SpecularGlossiness_03
Material_SpecularGlossiness_04
Material_SpecularGlossiness_05
Material_SpecularGlossiness_10
Material_SpecularGlossiness_11

However, this extension is deprecated, and in the captures Lite sometimes appears to render the detailed material while Babylon.js v9.5.0 looks washed out. I did not use the generator reference images in this sweep, so I cannot confidently say which engine is correct for these cases.

I would treat this section as “needs reference-image adjudication” rather than a confirmed Lite bug.


Not Lite issues

The following are stock Babylon.js failures and should not be counted as Lite issues:

Mesh_PrimitiveMode_02
Mesh_PrimitiveMode_05
Mesh_PrimitiveMode_09
Mesh_PrimitiveMode_12

Caveats

Animated models were compared only at frame 0 using a deterministic freeze. This validates loading, first-frame pose, and shading, but not full animation playback.

A follow-up frame-synced animation sweep would be useful for the Animation_* categories.


3 Likes

not taken at criticism! On the contrary!! Thanks a ton

3 Likes

With API breaking changes in every patch I believe it would be a good idea to have a changelog.

For example, between 1.3.0 and 1.4.0

Relevant public API changes

  • AnimationGroup.currentFrame was replaced by currentTime in seconds.
  • AnimationGroup.targetedAnimations and public TargetedAnimation descriptors were added.
  • metadata?: LiteMetadata was added to animation groups, materials, and scene nodes; glTF extras can be available through metadata.gltf.extras.
  • ArcRotate cameras now publicly expose mouse orbit, panning, and wheel sensitivities.
  • Morph bindings are no longer documented as limited to four targets; current weights can cover the full target count.
  • New PBR extension textures include anisotropy, separate sheen roughness, and diffuse-transmission color/intensity textures.
  • SurfaceOptions.srgb and sprite-atlas srgb support were added for gamma-correct rendering workflows.
  • Allocation-saving vector helpers were added in InPlace and ToRef forms.
  • disposeNavigationPlugin() was added.
  • VERSION is now declared as string instead of the stale literal "0.1.0"; at runtime it reports 1.4.0.
2 Likes

Good idea (cc @RaananW )

Changelog is coming! it’s a must. thanks for the suggestion!!

@chase-moskal this was addressed in package version 1.4.0, please give it a try and let us know if you still see any issues with your final bundle size!

Hello ! This is great news ! I try to launch a project using babylon Lite, so I am looking for examples. I found 260 scenes in the babylon-lite package (at the /lab/lite/src/lite url).
Is there a way to look at these scenes without cloning the repo ? Are there somewhere online ?

Thanks again for this wonderful work !!

Nope we do not publish them besides the repo:(

1 Like

It would help to have at least a text file with the list of demo examples just to have a fast look.

1 Like

Does that help?

Sure :slight_smile:

I think it would be good if this nice default LUT image (and default env texture as well) could be retrieved automatically like in Viewer

Otherwise one needs always to remember about it and include to build confiigurations or packages.

Fair. I’ll try and test all this if I can find a stopping point on the website I’m building.

Are there plans to support meshes with submeshes?

Not at this time. It is to big of a burden in the engine and costs a lot of perfs

In Getting Started with Babylon Lite - An explicit lifecycle it states …

  1. Registerawait registerScene(scene) does the deferred GPU work (builds pipelines, partitions renderables). Call this after everything is added.

How can I create fully dynamic scenes that load meshes or dynamically create parametric meshes after having called await registerScene(scene)? Do I have to create a huge pool of invisible assets before registerScene() then mutate vertex data and toggle visibility after that?

No, just addToScene when needed.

Example

Yes, that’s what I would have expected. However in my local code, any mesh I add after registerScene() results in …

But I’m using an earlier Babylon Lite version, so I’ll update and try again.

OK progress.

After updating to 1.3.0, initially it didn’t work at all - just the scene clear color and nothing else but no console error that I was getting with 1.2.0.

However, after adding any mesh before registerScene(scene) then meshes after registerScene(scene) everything worked. So it seems I need to add at least one mesh beforehand?

Anyway, my question around the wording of the docs still stands. It makes it seem like everything must be added before calling registerScene() so maybe that wording needs changing.

  1. Registerawait registerScene(scene) does the deferred GPU work (builds pipelines, partitions renderables). Call this after everything is added.
1 Like