docs(win): 任务说明、DSH 约束与交付文档

This commit is contained in:
2026-09-14 20:04:54 +08:00
parent 315cf79708
commit a83e4f6a1f
15 changed files with 975 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
# T-WIN-006 关键点 → VRM 骨骼重定向
- **状态**:done
- **依赖**:T-WIN-005、T-WIN-004
## 目标
把 33 点关键点实时驱动到 VRM 骨骼上。
## load
```
DSH.md
contracts/skeleton-topology.md # 锚点:§1 33 点、§2 虚拟关节、§4 坐标系
src/anim/skeleton_retarget.gd
```
## 算法
1. 每根骨骼指定一条骨链(起点关键点,终点关键点)
2. 取骨骼静止朝向 `rest_dir`(由该骨与首个子骨的位置差得出,**不假设模型骨骼轴向**)
3. 目标朝向由两个关键点在世界空间的方向得出
4. `delta` = rest_dir → target_dir 的最小旋转四元数(保留扭转/roll)
5. `desired = Basis(delta) × rest_global_basis`
6. `pose_local = parent_global_basis⁻¹ × desired`
**第 6 步的合成公式是实测标定的**:Godot 文档未写明 rest/pose 的合成顺序,
在真实 VRoid 模型上暴力枚举 5 种候选公式,只有该式误差为 1.9e-8(其余 ~0.14)。
已有回归测试守护,不得凭记忆改写。
## 坐标转换
契约 §4 的 MediaPipe 归一化坐标 → Godot 世界方向:
`Vector3(x × aspect, −y, −z × aspect)`(x/z 以图像宽为基准故乘宽高比)。
## 验收
`tests/test_retarget.gd` —— 最关键的是**功能性**断言:
```
→ 左上臂方向点积 1.0000,左前臂方向点积 1.0000
```
即:给定一组关键点,重定向后骨骼在世界空间的**实际指向**与关键点方向一致;
另有判别性验证(换一组关键点骨骼朝向随之改变)与躯干 FK 传播验证。