Files

51 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 岩团团绑骨与 Walk 流程修正(2026-10-20)
此文保留单Walk诊断历史。后续已升级为敌方Idle/Walk/Attack三动作标准,正式制作入口和当前状态见 [../EnemyCharacterProduction.md](../EnemyCharacterProduction.md);旧单Walk脚本仅用于诊断。
已跑通单个 Walk:`RockBall_Rigged.prefab` 使用同角色高模的12骨骨架,默认循环播放1.1秒走路。专用并排场景:`Assets/Bundles/Scenes/Review/RockBallWalkReview.unity`。原静态模型、UV、XPbr贴图保持原样。
## 原因与证据
1. **权重转移前缺少坐标对齐。** `bl_decimate.export_fbx_source_yup` 保存的是项目Y-up顶点;Blender重新导入后仍为Y-up,静态低模高度位于Y=0..1.0069。TokenRig GLB进入Blender后则为Z-up。旧 `bl_transfer_skin.py` 的“keep both as imported”把这两者直接蒙皮;所以绑定姿态就已横躺,不能仅凭根骨up判断网格站直。
2. **骨架来源不匹配。** 旧资产使用 `3cead72a` 的19骨代理,形体及原点与验收低模不同。当前使用同一混元高模生成的 `high_rig/rigged.glb` 12骨骨架;对齐后低模至高模表面RMS=0.002229、最大0.005794(原始高度约1)。
3. **旧Walk实际上提交了Jump。** `high_rig/pipeline.log` 写明:用户提示“原地走路弹跳…”被后端转成 `an animal jumps forward`。英文walk又会被上游改写成dog;新适配器保留明确的双足英文提示,指定左右脚骨 `bone_8/bone_10`。
4. **新生成动作仍需制作收尾。** 原始UniMate Walk带约34.46°初始根骨偏移,脚部平移不足4mm、首尾顶点差约3.7cm。`FinalizeAnimalWalk` 在编辑期烘焙绑定参考根姿态、原地XZ、实际蒙皮贴地、周期残差闭合,并为短腿骨架编辑交替步幅。最终步幅0.06m、抬脚0.018m、周期1.1s。它是“UniMate源动作+离线编辑”的样例,不把生成原件当作可直接交付的成品。
Armature在Unity中的+90°X是这组FBX的坐标表示;骨架与动作一致时可以保留。不要单独清零Armature或给Prefab套反向90°旋转,这会破坏绑定矩阵或让动画重新覆盖。
## 可复现入口
在仓库根目录运行 `powershell -File Tools/run_rockball_walk.ps1`:使用已缓存的同角色骨架与新Walk,重做转权重、Pipeline导入、Prefab、Walk离线烘焙、验证。`-Generate` 会调用DGXA重新生成源动作;不需要重新绑骨或重做静态模。
关键步骤:
```powershell
# 项目静态FBX → 同角色高模骨架空间;输出在Tools,不手改Unity资产
& D:/Tools/Blender/blender-5.0.0-windows-x64/blender.exe -b --factory-startup --python Tools/model_tools/bl_transfer_skin.py -- Tools/output/rockball_dgx/high_rig/rigged.glb AIClient/Assets/Bundles/Characters/Animal/RockBall/RockBall.fbx Tools/output/rockball_dgx/walk_verified/RockBall_Rigged.fbx --low-up Y --align-bounds
# Pipeline导入Rigged FBX与walk_verified/motion/animated.fbx后,按顺序执行
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/SetupAnimalAnimator.cs --entry SetupAnimalAnimator.SetupRockBallWalk
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/FinalizeAnimalWalk.cs --entry FinalizeAnimalWalk.Run
unity command --project-path D:/UD/AI/AIGame/AIClient run_script --file AgentScripts/VerifyAnimalWalk.cs --entry VerifyAnimalWalk.Run
```
重新执行Setup会从原始FBX提取Walk,因此必须接着执行Finalize。`FinalizeAnimalWalk.Run` 参数依次为步幅米数、抬脚米数、循环秒数。当前12骨没有长腿的完整髋/膝链,走路采用短脚迈步,不作为通用长腿人形重定向模板。
## 验证结果
| 检查 | 结果 |
| --- | --- |
| 绑定几何 | 0.55000m高、底面Y=0;对静态模最大顶点误差0.000031m |
| 资源 | 1500三角面、12骨、最多4权重、原XPbr材质 |
| 整段61帧采样 | 根骨最大倾角0.27°;脚底Y约-0.00016..0.00050m |
| 左右脚前后步幅 | 0.06212m / 0.06124m |
| 关节运动 | 最大32.94° |
| 循环接缝 | 首尾蒙皮顶点差0 |
| Animator | 实际控制器连续6秒,保持Walk并完成约5.45圈 |
| Play Mode | 专用场景实际播放约16圈后Live校验通过,脚底Y=0;随后退出Play,保留Edit预览 |
| 总角色验收 | CaoCao、LmGirl、LmCat、RockBall、RockBall_Rigged均通过 |
报告:`Tools/output/rockball_walk_audit/{processing,verification}.txt`;截图:`Assets/Screenshots/rockball_walk_{review,play}.png`。验收计算实际蒙皮顶点,不能把SkinnedMeshRenderer的保守剔除包围盒当作脚底位置。错误19骨代理的几何匹配检查已验证会拒绝(RMS=0.04218,最大=0.13996);完整本地缓存复现脚本已执行通过。
当前仅Walk接入控制器。旧19骨Idle/Attack留作历史资源,不接入12骨;后续必须在同一12骨rig上生成并单独验收,不能按bone_N同名直接混用。