Post 116

Standing Up Straight

glTF scene-node transforms now apply on import: assets arrive in the pose and place their file declares. The battle-damaged helmet finally faces the camera, visor HUD glowing, and multi-part scenes assemble instead of collapsing onto the origin.

The DamagedHelmet rendered canonically: upright, three-quarter view, dark teal visor with glowing cyan HUD, silver panels, gold chin guard

Last release the helmet got its textures back. It celebrated by lying face-down on the floor:

The same helmet before this fix: textured, but rotated face-down with the visor hidden

The file was, once again, innocent. A glTF scene is a tree of nodes, each with a transform, and the helmet’s single node says: rotate me upright. Lux read the mesh table directly and ignored the tree entirely, so every asset arrived in whatever local space its author modelled in. One helmet face-down is comedy; a multi-part scene where every piece lands on the origin in its modelling pose is a deal-breaker for imported sets.

The tree is now consulted

On import, Lux walks the scene hierarchy, composes each node’s transform with its ancestors, and bakes the result into the vertices: positions through the full matrix, normals through the inverse-transpose so non-uniform scale doesn’t shear your lighting, tangents along for the ride. Skinned characters are deliberately exempt, because in glTF a skinned mesh’s placement belongs to its skeleton, not its node; our walking man kept walking through every test, identical to the pixel.

A red quad with a blue quad directly above it, proving the child node’s offset rotated with its parent

The unglamorous image above is the gate that keeps this honest: a generated two-node asset where the parent rotates 90 degrees and its child carries a sideways offset. If composition is right, the offset rotates with the parent and blue lands on top of red. If someone ever flattens the hierarchy by accident, blue slides off to the side and the test fails with a message explaining exactly which mistake they made.

The helmet’s own gate now demands the canonical look: visor facing the camera, cyan HUD emissive visible, gold chin guard present. The fixture also picked up a proper studio environment along the way, because metal without an environment to reflect renders as a philosophical statement about emptiness, and we are running a visuals tool here.

← All posts