mcpField
S
scenario-blender-animation

scenario-blender-animation

github.com/scenario-labs创意与媒体1.2k481 次安装1 天前更新
代码仓库

关于 scenario-blender-animation

面向动画师和 Agent 的 Blender 动画技能,涵盖阶梯式阻挡、后期身体曲线化,并通过播放预览和测量检查动作。

主要功能

  1. 01阶梯式关键姿势阻挡
  2. 02仅身体曲线化流程
  3. 03逐帧动作测量
  4. 04洋葱皮与曲线图像
  5. 05播放预览和质量检查

适用场景

  1. 01规划角色表演节拍
  2. 02检查运动弧线和脚部接触
  3. 03制作单个弹跳物体动画

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/scenario-labs/skills --skill scenario-blender-animation

安装后在 Claude Code 中输入/scenario-blender-animation确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
critique.md
expert-notes.md
procedures.md
sources.md
scripts/
bx_anim.py

详细介绍

Blender 动画(角色和物体)

专业动画意味着屏幕上的每一帧都是一种选择:观众能读懂的关键姿势、手工安排的停顿和突变、精心设计的间距,以及经过检查的弧线。Blender Studio 的做法是先用阶梯插值阻挡动作,后期再分阶段切换到样条插值,并从镜头摄像机视角按实际速度评判。Agent 无法拖动时间轴,因此要改为测量:逐帧位置、间距图表、弧线检查、构图、洋葱皮图像、曲线图,以及实际查看过的播放预览。如果这里提到的某个同类技能不在你的可用技能中,请让用户安装(npx skills add scenario-labs/skills --skill <name>);若无人值守,则根据工具架构继续操作,并标明缺失之处。

必备背景: scenario-blender-expert(执行通道、审查循环、5.2 API 变更)。镜头规划、摄影机和动态分镜属于 scenario-blender-previs-storyboard;绑定制作属于 scenario-blender-rigging。用于引导视频模型将渲染画面转换为实拍画面的片段属于 scenario-blender-blockout:模型会照原样复制已设关键帧的肢体,因此演员往往会给它一个没有肢体的替身,让它来制作步态动画。

工具包:scripts/bx_anim.py(设定关键帧、从阻挡动作转换为样条插值、曲线检查、测量、场面调度、轻量播放预览、膝部弹跳、翻转和平衡检查、洋葱皮和曲线图像、单物体 bouncing_ball;API 见 procedures.md,已在 5.2.1 上测试)以及 bx_review.playblast。

做法(专家级差异)

  • 长时间保持阶梯插值(“Blocking+”)。 Hjalti Hjalmarsson:初级动画师太早切换到样条插值;计算机生成的中间帧是“无意插入的姿势”,会让修改意见难以落实。继续在阶梯插值状态下添加手工制作的过渡姿势;切换到样条插值应简短且靠后。
  • 绝不要将整个阻挡动作转换为 Bezier。 Rik Schutte:每个关键姿势都为每个主要控制器设定关键帧,将每个姿势复制到其停顿结束处(“支柱”),然后只对身体切换到样条插值;面部和手指保持阶梯插值,直到各自的制作阶段。根据 5.2.1 的测量结果,直接转换会让下一动作的 84% 漂移到停顿段中;使用支柱则能精确保持不动。
  • 突变要手工制作。 Rik:先停顿,再用 2 到 3 帧改变姿势;只有幅度大的刻意动作才留给插值。[新增,已测量] 连续运动中的接触(例如跳跃落地)不是停顿:用支柱处理会将身体在冲击瞬间的速度从每帧 0.101 米降至 0.007 米,导致落地显得轻飘。
  • 关键姿势放在奇数帧,间隔保持偶数;过渡姿势塑造弧线并引导视线。 Alex Nagy:将关键姿势设在奇数帧,并保持间隔为偶数,这样才有真正的中间帧。过渡姿势应先确定弧线,再确定时序;如果它偏后,最后几帧就要走得更远,而最快的部分会吸引视线。
  • 控制柄类型是时序决策。 AUTO_CLAMPED 会让停顿保持平直;AUTO 会在两个相同关键值之间产生超调(Alex 用它来强化姿势或缓冲收尾);VECTOR 适用于强烈撞击、接触和起跳(Alex、Dillon Gu);FREE 适用于爆发式间距和精确弧线(Raymond Luc、Joey Carlino)。
  • 先由一个部位带动,再逐层叠加其他部位。 Rik 会先制作仅由躯干构成的节奏段;Dillon 会用重心带动身体力学,用头部或眼睛带动表演。重叠动作应放进阻挡动作中,头部转动绝不能只绕一个轴进行(Rik)。
  • 口型同步要先把握节奏,再塑造形状。 Rik:先制作下颌动作,保持阶梯插值,只在重音处大幅张口;不同步是因为缺少预备动作,而非整体偏移;发 M、B、P 音时至少闭嘴 2 帧,并且要在声音发出前闭嘴。
  • 间距要有感觉,弧线要检查,镜头必须清晰易读。 Raymond:观众应感受到间距变化,而不是看见刻意操控。Pablo Fournier:弧线是最重要的检查项(根部、手、脚、鼻子),并且要在摄像机空间中检查。Hjalti(见 scenario-blender-previs-storyboard):每次切镜后,观众的视线都必须能找到一个关注点;因此,主体若消失在空旷画面中,无论曲线做得多好都不合格。

首先确定

输入为什么会改变计划未说明时的默认值
媒介、帧率电影为 24(Hjalti);游戏通常为 30,并使用固定的命中或释放帧(Picaut)24 fps
摄像机固定表演镜头:只通过摄像机判断(Rik)。移动、可重新取景或游戏摄像机:姿势从各个方向看都应成立(Leo Silly-Pelissier、Picaut)固定摄像机
风格双帧动画,且绝不使用样条曲线(Sprite Fright 镜头、Rik)与样条曲线动画;风格化与写实(Leo)样条曲线动画、风格化
骨架控制器名称、IK/FK、旋转模式。生成的 Rigify [verified]:torso、hips、chest、head、foot_ik.L、upper_arm_fk.L、jaw_master;upper_arm_parent.L 上的 ["IK_FK"](0 为 IK,1 为 FK);腿部的 IK_Stretch 为 1.0;静止姿势下腿部有 99.6% 笔直;主要控制器为 QUATERNION需要运动弧线时手臂用 FK,手接触物体时用 IK(Joey、Tony Garcia)
命名对象如果简报指定了动画对象,就需要为该对象设置所有通道一个对象,bouncing_ball(obj=...)
音频、转录文本节拍、重音、音素准备根据简报确定节拍
参考资料用于确定时机和节拍,绝不可照描(Hjalti)无:编写节拍列表
预算Rik:大型工作室约每周 3 秒,个人表演镜头约 5 到 6 秒;Flow:每位动画师每天 2 秒说明预算能完成什么

工作流

  1. 规划。 编写带帧数的节拍列表:按顺序列出每个表演节拍(Hjalti 每个镜头约有 8 个), 子节拍:注意、反应、意识到、回应(Rik),以及每个节拍的主导部分。有音频时,使用 audio_envelope + accent_frames;在音频峰值之前打出姿势(Alex)。从动作中段开始(Rik)。GATE:节拍表已写好。
  2. 设置并布置镜头(P1,P18):fps、范围、声音、passepartout 0.99,预览时启用 Simplify。先放置摄像机,再使用实际渲染尺寸运行 staging_report(subject, frames): 主体高度、动作占据画面的比例、入场位置、最终姿势的边距。Playblast 外观:playblast_lighting(key_dir=(0, 0, 1))(顶光会转换到 Workbench 的摄像机空间:阴影位于主体下方,间隙等于主体高度,接触点是两者相遇之处),floor_slab,在所有会滚动的物体上使用 rotation_texture。GATE:flags 为空;shadow_frames 显示物体在空中时的阴影,并在接触时与物体相接;已查看摄像机静帧。
  3. A 阶段 Blocking,关键姿势采用阶梯插值。 先制作最有力、保持时间最长的姿势(Alex)。逐个构建每个姿势的 COG、双脚(重心位于支撑脚上,双脚不能像双胞胎一样对称,膝盖放松)、髋部、胸部、头部、手臂。使用 world_pose 以世界空间描述姿势(绑定的坐标轴并无固定规则),使用 key_pose(..., keytype='EXTREME') 制作关键帧,设为 CONSTANT,并为所有主要控制器制作关键帧。GATE:姿势条带 onion_skin(frames=keys, spread=...) 显示清晰的轮廓和对比;保持姿势时 balance_report 的边距 >= 0。
  4. 增强 Blocking(仍采用阶梯插值)。 在中间帧使用 breakdown,并按部位设置 factors(COG 下沉,四肢延迟 0.2 到 0.3,晚期偏重有方向性的部位;离地后身体呈抛物线运动,7 帧中的 3 帧完成约 2/3 的上升,双脚必须跟随);使用 ease_inbetweens 设置 20/80(Pablo);添加过冲和缓动到位;错开重叠动作;将关键帧类型用作信心映射(Hjalti)。GATE:阶梯插值 playblast 已获批准;关于意图的备注已停止(Leo:Block B 之后不再有备注)。
  5. 对身体应用样条插值,使用 blocking_to_spline(rig, body_bones, transition=3, interpolate={...}): 将大幅动作和持续接触设为 interpolate。脚部接触和离地使用 VECTOR。GATE: hold_drift < 1e-5,overshoots 中只有预期的缓动到位,面部仍为 CONSTANT,motion_report 中没有意外的等间距运动;空中 COG 的 ballistic_fit 中,g_ratio 接近 1.0,残差较小;limb_extension 从不高于 1.0。
  6. 重新注入能量(Leo:样条插值会使动作变柔):强化节奏点、过冲和不同步的部位;使用 offset_keys 让每段链条错开 1 到 2 帧(Dillon);循环动作中头部滞后 2 到 3 帧(Joey);接触时允许滑动,不要像粘住一样(Rik)。手指:少量重叠,不要反弹。GATE:在摄像机像素中运动轨迹流畅(to_camera(..., res=(w, h))、motion_report(dims=2))。
  7. 面部和口型同步,采用阶梯插值(P6,P7):下颌节奏、嘴角(绝不放在正中)、使用下半脸(不包括下颌)的姿势库形状,少量添加重音和不对称,最后处理舌头,然后对面部应用样条插值。眼睛在 1 到 2 帧内快速移动,并先于头部动作;眉毛提前 3 到 10 帧(Rik)。引擎或捕捉应用按名称读取的关键帧(ARKit、visemes):设置关键帧前,先检查 scenario-blender-rigging 的 shape_report。GATE:transitions 符合这些计数;重音数量明显少于音节数量。
  8. 润色。 foot_slip 小于 1 mm,使用 lowest_point 检查穿透,rotation_flips 为空(fix_rotation_flips);腿部应保持弯曲的地方,limb_extension 小于 0.99;涂抹帧为 1 帧(Pablo);仅在此阶段调整爆发式动作的间距(Raymond);启用细分。GATE:最终 playblast、洋葱皮和曲线图均通过 critique.md 评估标准。 变体。 弹跳球(P16、P18): bouncing_ball(obj=ANIM_ball, first_apex=-3, fit=False, ...) 为一个对象设置关键帧:在全程重力作用下,通过整帧接触点形成精确抛物线;可以是奇数或偶数次弹跳,让小幅跳跃保持原有高度;在接触帧压扁,并通过世界对齐的挤压修改器沿速度方向拉伸(旋转永远不会扭转);滚动 = 距离 / 半径;滚动速度恒定减速;保持 6 帧。 first_apex 在 start 之前时,会让物体从画外飞入。权重映射为 [添加]:通过渲染进行调校。 行走(Joey,30 fps):接触 0、下沉 5、经过 10、上升 15,40 帧一个循环;接触期间脚跟曲线保持直线,根运动采用 REPEAT_OFFSET(P5)。跳跃: tests/code/blender-animation/test_rigify_jump.py 是完整示例(Rigify 人体,从阻挡动画到样条动画)。

数值

项目数值来源
利落的姿势变化保持后 2 到 3 帧Rik
激烈的变化8 帧改为 4 帧Alex
让观众理解一个想法的保持时间6 帧Alex
稳定下来1 到 2 帧,轻柔时为 4 帧Alex
刺激后的反应约 6 帧Rik
眼球快速转动 / 眉毛变化1 到 2 / 3 到 10 帧Rik
缓动规则每个中间帧走完剩余路程的 80%(缓入);反向则为 20%Pablo
残影1 帧,有时 2 帧Pablo
微预备动作击中或释放前最后 1 到 2 帧推至极限Picaut
循环中的头部滞后 / 脚部偏移2 到 3 帧 / 1 帧Joey / Rik
24 fps 下的真实重力加速度为 0.01703 m/frame^2;二次拟合的首项系数为其一半(-0.00852)。gravity()physics [添加]
主体在画面中的大小至少占画面高度的 12%;单个主体占 15% 或更多[添加] E3:两次运行测得均为 10%
IK 腿部伸展需要保持弯曲时低于全长的 0.99;高于 1.0 = IK 拉伸[添加]
滚动物体上的风车效应每帧滚动角度小于 360 / 扇区数[添加] 马车车轮效应

质量门槛

可量化: 槽位以角色命名;关键姿势在批准前设为 CONSTANT 并指定类型; hold_drift 约为 0;overshoots 仅出现在缓入定格时;foot_slip < 1 mm;lowest_point 绝不会低于地面(采样子帧);飞快动作、眉毛动作、快速动作和爆破音都要设置 transitions;实际比例下 ballistic_fit 的 g_ratio 接近 1;motion_report:急转只出现在接触时,一个动作内部没有弧线抖动或突然起停; staging_report 标记为空,且阴影帧可见;limb_extension、 rotation_flips、balance_report 如上;roll_aliasing 正常。视觉检查(打开每张图):姿势条、通过镜头摄像机查看整个镜头的洋葱皮并显示轨迹、graph_image、播放预览帧表(主体大小、入场、接触时阴影间隙闭合、旋转清晰可读);摄像机未锁定时查看轨道视图。

常见错误

错误表现修复
整段阻挡都转为 Bezier“漂浮的意大利面”使用 blocking_to_spline 配合支柱,仅处理身体
在连续接触处设置支柱身体在撞击前减速将该帧放入 interpolate;脚部使用 VECTOR
定格时使用 AUTO 控制柄定格姿势后仍持续漂移使用 AUTO_CLAMPED;仅在缓入定格时使用 AUTO
接触时脚跟曲线缓入缓出脚滑动(测得每步 5.8 cm)使用 VECTOR 或零长度 FREE 控制柄
每个音节都张嘴嘴巴喋喋不休仅在 accent_frames 上大幅张嘴
球使用 BOUNCE 缓动从未出现挤压帧使用 bouncing_ball 或按整帧设置接触关键帧
在也用于瞄准的父级上进行挤压拉伸帧上的图案发生扭曲(旧绑定测得 55 度)在物体本身上使用 squash_modifier(世界坐标轴)
将腾空帧数取整为偶数跳跃高度增减,每次弹跳的重力都会变化(测得从 0.98 到 1.31)接触帧使用整帧,允许腾空帧数为奇数,重力保持不变
将整个场景纳入取景主体占画面 10%,顶部 40% 为空拉近镜头或缩短移动距离,直到 staging_report 无异常
将 display.light_direction 视为世界坐标阴影藏在主体后方(0 px)使用 playblast_lighting(key_dir=...)
在归一化摄像机坐标中检查弧线顶点处出现假的急转(宽高比压缩了 x 轴)使用 to_camera(..., res=(w, h))
站立或蹬离时双腿伸直IK 拉伸会延长腿部(第一版跳跃草稿中增长了 18%)膝盖保持微屈,起跳后再做脚部分解,起跳使用 VECTOR

Blender 5.2 说明

  • action.fcurves 已移除:需通过 bpy_extras.anim_utils 使用 channelbags(bx_anim.channelbag)。 只有槽匹配时,分配 Action 才会产生动画;否则需设置 ad.action_slot。
  • 每个 Action 只能有一个层(layers.new 会报错);使用包含 NLA 的层和 ADD 或 COMBINE Action (push_layer)。
  • keyframe_points.insert 会生成 BEZIER AUTO_CLAMPED;曲线上的下一次插入会使 Keyframe 引用失效。
  • 无头模式:anim.keyframe_insert 会失败;pose.breakdown 和 pose.blend_to_neighbor 需要 明确指定 prev_frame/next_frame;render.opengl 不可用,因此预览动画使用 Workbench 渲染。
  • Workbench 的 scene.display.light_direction 是相对于摄像机的;在调用 view_layer.update() 之前,matrix_world 会过时,因此需在更新后转换。
  • GN 修改器输入的键位于 modifiers["X"].properties.inputs.Socket_n.value。
  • 预览动画音频:添加声音条带,并设置 render.ffmpeg.audio_codec = 'AAC'。
  • 键位映射:Up = 上一个关键帧,Down = 下一个关键帧(5.0)。5.2 中没有:Action 层、粘贴姿势混合、 范围世界空间复制(5.3)。

参考资料

  • references/expert-notes.md:专家的原则、数值和不同意见, 附有时间戳;在选择方案或撰写说明时加载。
  • references/procedures.md:每个流程的完整测试代码 (设置、阻挡、样条、行走、口型同步、面部时间安排、接触固定、槽、层、姿势库、 预览动画、测量、球体、场景布置、膝盖/翻转/平衡);编写代码前加载。
  • references/critique.md:各阶段的评审标准、场景布置 阈值及其校准方式,以及这些动画师撰写评语的方式;在每个关卡都加载。
  • references/sources.md:14 个源视频、各自最适合的用途和 最佳时间戳。

评论

支持 Markdown