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帧和行进路径的中点。
- 先报告事实再发表意见:分别包含根朝向和模型面向方向。
提取的事实:
| 帧号 | 事实 | 证据 |
|---|---|---|
| 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 解释器中不可用。