Babylon.js 9.29.0 (@babylonjs/core + @babylonjs/loaders).
Loading a glTF with a KHR_materials_transmission material creates a scene-wide TransmissionHelper (ensureTransmissionHelper, stored on scene._transmissionHelper). It is only disposed with the scene (scene.onDisposeObservable).
Our app swaps glTF sets in one scene. After disposing every mesh and material the asset created, the helper is still there:
- its opaque render target (1024 px, 4× MSAA by default) stays allocated;
- its
onNewMeshAddedObservable/onMeshRemovedObservableobservers keep classifying every mesh added later, so the next set’s meshes go into its opaque cache.
There’s no public way to release it short of disposing the scene. The only handle is the internal scene._transmissionHelper, which we dispose ourselves on unload.
Could the helper be disposed when its last transmissive material is disposed, or be exposed (or given a dispose call) publicly?
Repro: load a glTF with KHR_materials_transmission; dispose every mesh and material it created; scene._transmissionHelper is still set with its render target allocated; load another glTF without glass, and its meshes are added to the helper’s opaque mesh cache.