Blender 动作状态检查
使用时机
- Blender角色在动画中出现扭曲、镜像、压扁、偏移或脚部滑动。
- 用户询问导入的虚拟形象、骨架或重定向动作是否与预期姿态匹配。
- 需要将渲染证据与骨骼、包围盒、接触点和朝向向量等结构事实进行比较。
- 工作流需判断模型是角色、道具、代理网格、控制骨骼还是损坏的导入。
核心原则
不要仅凭截图判断动画3D资源。截图是检查证据,但它们隐藏了轴约定、骨骼名称、物体缩放、局部变换、父子关系网格、材质槽和逐帧接触状态。
首先提取结构化的Blender状态,然后使用视口截图或渲染来确认事实所暗示的内容。
工作原理
- 在判断动作前建立干净的场景和资产基线。
- 通过导出器或在Blender自身的解释器中运行Blender Python提取结构化事实。
- 采样最可能暴露接触、朝向、缩放和重定向错误的帧。
- 将测量结果与用户期望的姿态、方向、地面和渲染目标进行比较。
- 返回包含已确认事实、可能原因和所需修复的简洁报告。
检查工作流
-
编目场景。
- 列出网格、骨架、空对象、摄像机、灯光、修改器、父子关系和隐藏对象。
- 在判断角色本体之前,将角色网格与辅助/代理几何体分开。
- 记录对象空间和世界空间的包围盒。
-
识别骨骼。
- 捕获骨架名称、姿态骨骼、骨骼头部/尾部、滚动、父级链、约束和休息姿态轴。
- 映射语义骨骼,如髋部、脊柱、颈部、头部、肩部、肘部、手部、大腿、膝部、踝部和足部。
- 标记缺失的左右配对和异常命名方案。
-
确定向前、向上和侧向轴。
- 同时使用骨盆、脊柱、肩部、髋部、头部和足部;不依赖单个网格法线。
- 将局部骨架轴与世界轴以及导入文件约定(如glTF的Y轴向上与Blender的Z轴向上)进行比较。
- 当面部/头部/足部方向与根骨运动冲突时,标记可能的镜像或反向导入。
-
采样动画帧。
- 检查第一帧、中间帧、接触帧、腾空帧和极端帧。
- 记录根骨位置、根骨朝向、骨盆高度、躯干倾斜、肢体方向、足部离地间隙和网格边界。
- 对于长或快动作,在翻转、着地、转弯、碰撞和地面接触附近更密集地采样。
-
在归咎重定向前检查模型完整性。
- 在应用动画前确认干净的基线形状。
- 除非用户明确要求修复,否则保留原始网格、材质、骨架和蒙皮。
- 将无法解释的球状物体、巨大代理网格或压扁的身体视为导入/选择问题,直到证明并非如此。
-
诊断接触和动作问题。
- 地面穿透:逐帧比较最低的脚或鞋顶点与地面高度。
- 脚部滑动:比较跨接触帧的脚部世界位置。
- 腿部交叉:比较左右大腿、膝部、踝部和足部的侧向顺序。
- 扭曲损伤:将骨骼摆动方向与绕肢体轴的滚动/扭曲分开比较。
- 缩放漂移:将动画网格边界与干净的基线边界进行比较。
-
先报告事实,再给出意见。
- 包括帧号、对象名称、骨骼名称、世界坐标和阈值。
- 将已确认的失败与视觉怀疑分开。
- 仅在结构化状态解释了需要寻找什么之后,再附加截图。
推荐报告格式
## Blender 动作检查
### 场景清单
- 角色候选:
- 骨架:
- 辅助/代理对象:
- 摄像机/灯光:
### 朝向
- 世界向上轴:
- 角色前方:
- 根骨朝向:
- 镜像/反向风险:
### 基线完整性
- 干净网格边界:
- 动画网格边界:
- 材质/蒙皮保留:
- 可疑的非角色网格:
### 帧发现
| 帧 | 发现 | 证据 |
| --- | --- | --- |
| 1 | 干净基线姿态 | 髋部/脊柱/足部对齐 |
| 96 | 足部穿入地面 | left_foot min_z = -0.04 |
### 结论
- 通过/失败:
- 所需修复:
- 渲染就绪:
示例
带脚部滑动的行走循环
场景:重定向角色在行走循环中似乎打滑,但正视摄像机角度使足部接触难以判断。
应用工作流:
- 编目场景:角色网格
HeroBody,骨架HeroRig,地面Floor,无隐藏代理网格。 - 识别骨骼:语义足部为
foot.L和foot.R;髋部为pelvis;根骨为root。 - 采样动画帧:在脚部着地时刻附近检查帧 1、18、24、30、42 和 48。
- 诊断接触和动作问题:比较脚部在接触帧期间的世界空间位置。
提取的事实:
| 帧 | 事实 | 证据 |
|---|---|---|
| 18 | 左脚着地 | foot.L min_z = 0.004,脚趾和脚跟均接近地面 |
| 24 | 左脚着地时滑动 | 六帧内 foot.L x = 0.21 -> 0.28 |
| 30 | 骨盆持续向前移动 | pelvis y = 1.14 -> 1.31 |
结论:渲染就绪失败。动作需要脚部锁定清理或重定向约束审查;身体网格无需比例调整。
反向导入的角色
场景:角色在静止帧中看起来正确,但动画的运动方向与预期行进方向相反。
应用工作流:
- 确定向前、向上和侧向轴:比较头部、胸部、足部和根骨运动。
- 采样动画帧:检查第一帧和行进路径的中点。
- 先报告事实,再给出意见:分别包括根骨朝向和模型面向方向。
提取的事实:
| 帧 | 事实 | 证据 |
|---|---|---|
| 1 | 角色面部朝向世界 -Y | 从 neck 到 head 的头/胸矢量解析为 -Y |
| 72 | 根骨运动朝向世界 +Y | root y = 0.0 -> 2.8 |
| 72 | 足部视觉上保持前向,与行进方向相反 | 脚趾骨骼指向 -Y 而位移为 +Y |
结论:可能是反向导入或重定向前向轴不匹配。在编辑动画曲线前修复导入/重定向轴映射。
实用阈值
- 除非场景单位比例另有说明,否则假定 Blender 的默认米制单位。
- 地面穿透超过 1-2 厘米视为可见,除非地面是柔软或刻意风格的。
- 突变缩放变化超过 5% 视为可能的骨骼、约束或变换继承问题。
- 在腾空倒置运动期间左右踝关节侧向顺序翻转视为腿部交叉风险,即使后续恢复。
- 根骨朝向每帧跳跃超过 30 度视为可疑,除非源动作包含急转弯。
反模式
- 不要修改身体比例来强制姿态匹配,除非任务明确是网格修复。
- 不要在记录基线之前烘焙掉干净的基线。
- 不要使用一个渲染摄像机角度作为姿态正确的证据。
- 在记录辅助对象为什么不是角色的一部分之前,不要删除它们。
- 不要未经检查头部、足部、躯干和根骨运动就假定虚拟形象面向 +Y、-Y、+X 或 -X。
工具说明
如果有 Blender 状态导出器,优先使用包含网格、骨架、姿态骨骼、材质、接触点、包围盒和采样动画帧的 JSON。如果没有导出器,通过 Blender 自身运行一个小的 Blender Python 脚本,例如 blender --background scene.blend --python collect_motion_state.py,因为 bpy 在普通系统 Python 解释器中不可用。