# Shear-bone survey (Godot GPU-skinning viability) `tools/anim_probe ` — for every bone, the parent-relative local that would be fed to `Skeleton3D::set_bone_pose`, its shear, and the error of a `T·R(quat)·S` round-trip (= what Godot's GPU vertex skinning keeps after it orthonormalizes the bone matrix before upload). High round-trip error = that bone **collapses on the GPU (Skeleton3D) path once an animation moves it**. Probed with `pc/warrior/action/dance_1.gr2` (retarget by bone name; unmatched bones sit at bind, so their numbers reflect the model's rest rig). | model | shear bones | worst TRS err | worst minDet | GPU-skin viable? | |---|---|---|---|---| | `warrior_cheongrin` | **7** (`bone_front_01..04`, `Bone_shoulder_01..04`) | 0.94 | 0.065 (6.5% squash) | ❌ collapses (`dance_1` animates these) | | `assassin` | 0 | — | — | ✅ | | `sura_lord` | **16** (`Bone05/06`, `Bone14..27`) | **1.52** | **0.0024** (0.24% squash) | ❌❌ severe | | `shaman_lord` | 0 | — | — | ✅ | ## Takeaways - The shear/non-uniform-scale is **baked into the rest rig** of these cloth/plate helper bones (metrics are constant across the animation clock). Static bind pose survives because `skin_matrix ≈ I` there; any animation that moves a shear bone breaks it on GPU skinning. - **`sura` is unusable on Godot's built-in GPU skinning** — 16 bones, one squashed to 0.24%. It's a core class, so this isn't a corner case. - `assassin` / `shaman` are clean — GPU skinning would be fine for them. - **Done (2026-08-29)**: the custom skinning vertex shader is implemented — `m2_material.cpp` `SRC_SKIN` does LBS with the full per-bone 4×3 matrices from an RGBAF texture (`Metin2Model::gpu_skin` fills it each frame), no `Skeleton3D`, no orthonormalization. `MTGODOT_GPUSKIN=1` now routes here (the old broken `set_bone_pose` path is deleted). warrior `dance_1` GPU render == CPU render (`test/compare-shots/*.gpu.png`). CPU LBS stays the default; GPU is for crowds (Phase 2 bench). Re-run for a full race sweep (incl. monsters, NPCs, mounts) before Phase 2 to size the shader work and catch any rig that also needs >4 bone influences.