Sorry again for the miss!
1. Show / hide a node of a skinned model
Two cases:
- Regular (non-skinned) nodes: use
setMeshVisible(node, false) (it cascades to the node’s children). The Babylon trick of zeroing scaling does not translate, because Lite’s render path keys off a single visible flag, not a degenerate transform.
- Skinned models: a skinned mesh is one GPU-skinned draw whose pose comes from a bone texture, so writing
scaling/visible on a joint node has no visual effect. For this there is now a PR for an opt-in bone API. Call enableBoneControl() once before loading, then:
enableBoneControl();
const character = await loadGltf(engine, "character.glb");
addToScene(scene, character);
const skel = character.skeletons[0];
const head = getBoneByName(skel, "Head");
if (head) setBoneVisible(skel, head, false); // hides the head and everything under it
setBoneVisible(skel, bone, false) scales the bone to zero (collapsing its sub-tree), exactly like the Babylon workflow. You also get setBonePosition, setBoneRotationQuaternion, setBoneScaling, and clearBoneOverride. It is opt-in so projects that don’t use it pay no bundle cost. Overrides re-apply every frame, so a playing clip still wins on any bone it animates, while bones the clip doesn’t touch keep your override.
2. Is AnimationMask supported?
Not yet. There is no per-bone mask (yet but we will asap, please create an issue for it so we can prioritize). What exists for combining clips is weight-based and additive blending: setAnimationWeight, enableAnimationBlending, setAnimationAdditive,
crossFadeAnimationGroups, fadeAnimationWeight, enablePropertyAnimationBlending. For upper/lower-body splits today, the bone API above (overriding the bones a given clip should not drive) is the closest workaround.
3. Parent / child between two TransformNodes
child.parent = parentNode is what actually drives the transform (the world-matrix system tracks children off the parent setter). The children array is a separate traversal list used by helpers (setMeshVisible cascade, cloning, camera bounds). So setting parent is enough for the math; push into children if you want those helpers to see the child.
setParent(child, parent) (the Babylon-style “reparent but keep world position” helper) will be improved by a PR coming today: it will keep the children arrays in sync automatically, and it accepts any node (SceneNode: mesh, transform node, camera, light), not just Mesh. The parent can be any world-matrix provider.
4. Quaternion.FromLookDirectionRH / FromRotationMatrix
Both will also be available as standalone functions on the core Quat data type: quatFromRotationMatrix(matrix) and quatFromLookDirectionRH(forward, up). They match the Babylon.js implementations. (The core package keeps rotations as plain { x, y, z, w } data plus functions rather than a Quaternion class, so these are functions, not statics.)
5. setDracoBaseUrl and setMeshoptBaseUrl
same, both will be exported from babylon-lite.
I’ll link the PR here as they go 