3D animation · R&D
Lodyk
A coach's exercise, filmed on a phone, becomes a 3D demo: a character repeats the movement and the coach's words are voiced in English and Ukrainian. None of the coach's footage is ever shown.
Private repository · walkthrough on request
- 8.50 pxarm error, down from 11.80
- 0.40%joints bending backwards on unseen clips, down from 2.92%
- 5clips in the benchmark, 2 never used for tuning
- 31commits
The problem
Pose models give a body per frame, not a motion. Raw, the joints jitter, elbows bend backwards and feet sink into the floor, and a cartoon character makes every one of those defects obvious.
How it works
- 01
Phone video
One static shot of an off-ice exercise. Burned-in captions become the coach script.
- 02
Body per frame
NLF returns a 24-joint body model for each frame.
- 03
Motion solver
Rotations are fitted across time so the motion is smooth and joints stay within what a body can do.
- 04
Floor and collisions
Feet are kept on the floor, limbs out of the body, and the frames where both skates leave the floor are marked.
- 05
Mascot in Blender
The same motion drives Lodyk's rig. Mesh checks run before rendering.
- 06
Render and compose
The render is composed with the coach's instructions in English and Ukrainian.
Source: IMG_9874.MOV · 1280×720 · 30 fps · 26.2 s · one static camera
Coach script from burned-in captions:
“pay attention to the air position”
Benchmark
| metric | baseline | defaults | held-out baseline | held-out defaults |
|---|---|---|---|---|
| arm error, px | 11.80 | 8.50 | 8.84 | 7.42 |
| palm roll, ° | 412 | 402 | 221 | 204 |
| jerk p99 | 8672 | 8787 | 8506 | 7541 |
| joints bending backwards | 5.18% | 3.29% | 2.92% | 0.40% |
| combined | 0.61 | 0.57 | 0.46 | 0.41 |
Every solver change is scored on several clips before it is kept. Lower is better.
Limits I know about
- Fitting arms to 2D landmarks costs total axial twist (2,403 → 4,339). It is the price of matching the coach's arms at all.
- Some filters improved the number they targeted and broke something their metric could not see, which is why decisions now go through the scorecard.