The Walk Was in the File
Characters now play the animation their file ships: keyframed walks, idles, and dances drive the skeleton instead of a hardcoded placeholder wiggle. SkeletonPose becomes a real clip player with time, speed, and loop controls.


Every rigged glTF file that ships an animation ships it as keyframes: which joint, which property, what value, what time. Lux has been able to deform characters on the GPU for months, but the pose driving that deformation was, in production terms, a lie: one joint, swinging on a sine wave, forever. A walking man who could only nod.
The keyframes are now read, and the difference is the whole character. Hips, knees, ankles, spine, arms, all moving per the clip. The two images in this post are the same patch a third of a stride apart:

SkeletonPose grows up
SkeletonPose is now a real clip player: point it at the file, pick a clip, wire Time into time, and the output drives SkinnedMesh. A speed pin rescales playback (half-time, double-time, reverse), and loop chooses between repeating forever and holding the final frame. Translation, rotation, and scale tracks all interpolate the way the file declares, including cubic-spline tangents and proper shortest-path rotation blending, so fast spins don’t take the long way round.
Two details mattered more than the headline. First, the skeleton’s placement: a rig usually hangs under wrapper nodes (an armature, an axis-conversion), and solving the pose without them renders your character doing competitive floor work. Root joints now fold in their ancestors’ transforms. Second, honesty in the default: with no clip wired, a character holds its rest pose. The placeholder wiggle is deleted, because a tool inventing motion that isn’t in your file is a tool you can’t trust during a show.
The gates are blunt: the walk must articulate at least a third of the skeleton between phases (the old placeholder moved exactly one joint, so this distinction is not subtle), looped time must wrap exactly, and the rendered character must be upright and visibly mid-stride at two different moments. All measured against the file’s own keyframes, none of it against our previous output.