docs(readme): 新增初次部署清单与常见问题;统一 root 执行写法;清除 markdown 粗体标记与残留真实库名
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# T-WEB-006 BVH/VMD/FBX → 关键点序列预处理
|
||||
# T-WEB-006 BVH/VMD/FBX -> 关键点序列预处理
|
||||
|
||||
- **状态**:done
|
||||
- **依赖**:T-WEB-004
|
||||
@@ -12,31 +12,31 @@
|
||||
|
||||
```
|
||||
DSH.md
|
||||
contracts/model-formats.md # 锚点:§2 动作格式、§2.1 预处理产物、§2.2 关节名映射、§2.3 VMD
|
||||
contracts/skeleton-topology.md # 锚点:§1 33 点、§3 父节点表、§5 关节角
|
||||
contracts/model-formats.md # 锚点:2 动作格式、2.1 预处理产物、2.2 关节名映射、2.3 VMD
|
||||
contracts/skeleton-topology.md # 锚点:1 33 点、3 父节点表、5 关节角
|
||||
web-server/src/preprocess/*
|
||||
```
|
||||
|
||||
## 端点
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|---|---|---|
|
||||
|--|--|--|
|
||||
| POST | `/api/motions/:id/preprocess` | 执行预处理,返回更新后的 Motion |
|
||||
| GET | `/api/motions/:id/keypoints` | 下载 NDJSON 关键点序列 |
|
||||
|
||||
## 实现分层
|
||||
|
||||
| 文件 | 职责 |
|
||||
|---|---|
|
||||
|--|--|
|
||||
| `bvh-parser.ts` | 纯 TS BVH 词法/语法解析 + 逐帧前向运动学(FK) |
|
||||
| `vmd-parser.ts` | VMD 二进制解析:30 字节头 + Shift-JIS 模型名 + 111 字节/条骨骼关键帧 + morph 段;MMD 贝塞尔插值,固定 30fps |
|
||||
| `mmd-skeleton.ts` | 标准 MMD 骨架(含全角/半角 `IK`/`IK` 别名归一);静止比例从参考 PMX 实测 |
|
||||
| `mmd-pose.ts` | MMD FK + 两骨骼解析腿部 IK + 左手系→右手系 Z 镜像,输出逐帧世界坐标 |
|
||||
| `mmd-pose.ts` | MMD FK + 两骨骼解析腿部 IK + 左手系->右手系 Z 镜像,输出逐帧世界坐标 |
|
||||
| `math3d.ts` | 向量/矩阵工具、旋转合成、关节角余弦 |
|
||||
| `joint-map.ts` | 关节名 → MediaPipe 点索引的默认映射表 |
|
||||
| `retarget.ts` | 导出的 `worldFramesToKeypointFrames()`:任意骨架世界坐标 → 骨盆归零 → 自适应缩放 → 投影 → 9 个关节角;BVH 与 VMD 共用 |
|
||||
| `joint-map.ts` | 关节名 -> MediaPipe 点索引的默认映射表 |
|
||||
| `retarget.ts` | 导出的 `worldFramesToKeypointFrames()`:任意骨架世界坐标 -> 骨盆归零 -> 自适应缩放 -> 投影 -> 9 个关节角;BVH 与 VMD 共用 |
|
||||
| `keypoint-codec.ts` | 239 字节二进制帧编解码、NDJSON 序列化/解析、关键点 JSON 校验 |
|
||||
| `assimp.ts` | 可选外部 Assimp 调用(FBX/glTF → BVH) |
|
||||
| `assimp.ts` | 可选外部 Assimp 调用(FBX/glTF -> BVH) |
|
||||
| `preprocess.service.ts` | 编排、落盘、状态与错误记录 |
|
||||
|
||||
## 拓扑与缩放(契约冻结)
|
||||
@@ -50,7 +50,7 @@ web-server/src/preprocess/*
|
||||
## 格式支持
|
||||
|
||||
| 格式 | 处理 |
|
||||
|---|---|
|
||||
|--|--|
|
||||
| `.bvh` | 内置解析器,无外部依赖 |
|
||||
| `.vmd` | 内置解析器,无外部依赖;固定 30fps,见「VMD 通路」 |
|
||||
| `.json` | 直通校验与规范化(须符合 `mediapipe33@0.1.0`) |
|
||||
@@ -67,10 +67,10 @@ web-server/src/preprocess/*
|
||||
- VMD 不含骨骼长度、只有旋转(少数骨骼带位移),必须靠 `mmd-skeleton.ts` 的
|
||||
标准骨架做 FK;骨骼名按别名表归一(全角 `IK` / 半角 `IK`),未纳入标准骨架的
|
||||
骨骼(裙摆 / 物理 / 表情等)被忽略但计数。
|
||||
- **腿部驱动自动判定**:`足IK` 轨道存在非零位移 → 两骨骼解析 IK(膝盖朝角色
|
||||
- **腿部驱动自动判定**:`足IK` 轨道存在非零位移 -> 两骨骼解析 IK(膝盖朝角色
|
||||
正面弯,目标不可达时收敛为伸直,不产生 NaN);否则走 FK 旋转(部分动作数据把
|
||||
腿烘焙成 FK)。
|
||||
- **手性**:MMD 为左手系,统一做 Z 镜像(旋转 `(x,y,z,w) → (-x,-y,z,w)`、位移 z
|
||||
- **手性**:MMD 为左手系,统一做 Z 镜像(旋转 `(x,y,z,w) -> (-x,-y,z,w)`、位移 z
|
||||
取反)后进入右手系通路。由真实数据对照实验确定:腿部烘焙为 FK 的样本中,
|
||||
`zMirrored` 下「膝盖朝前」占 94.1%,不转换仅 5.9%(见 `test/mmd-vmd.spec.ts`)。
|
||||
- 重定向**完全复用 BVH 通路**:`worldFramesToKeypointFrames()` 负责骨盆归零 /
|
||||
|
||||
Reference in New Issue
Block a user