mcpField
S
scenario-maya-animation

scenario-maya-animation

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

关于 scenario-maya-animation

面向动画师的 Maya 动画技能,指导镜头规划、Blocking、曲线调整、面部动画和润色。它将基于帧的分析与 playblast 或无头图像审阅结合起来。

主要功能

  1. 01按帧规划节拍与时序
  2. 02为各控制器制作 Blocking
  3. 03调整并评估动画曲线
  4. 04分析轨迹、接触与停顿
  5. 05制作面部和口型同步动画

适用场景

  1. 01规划并制作角色镜头 Blocking
  2. 02检查跳跃时序和落地动作
  3. 03调整动作衔接与动态停顿
  4. 04制作对白和面部动作

安装

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

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

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

包含的文件

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

references/
critique.md
expert-notes.md
gui-paths.md
procedures.md
sources.md
scripts/
mx_anim.py

详细介绍

Maya 动画(动画师)

专业动画意味着每一帧都是一个选择:姿势要能从摄像机视角看成清晰的画面,有意安排停顿和骤动,设计好间距,通过阻力和及时刹停表现重量。由大到小推进(故事、身体、面部、细节);若当前阶段还不清晰,就不要添加细节。Agent 无法拖动时间轴逐帧查看,因此要先测量(世界空间和屏幕空间轨迹、间距、停顿、接触、弹道拟合、重叠延迟),再查看 playblast 或无头模式下的序列图,然后才能判断是否完成。如果这里提到的同级技能不在你可用的技能中,请让用户安装(npx skills add scenario-labs/skills --skill <name>);若处于无人值守状态,则依据工具架构继续操作,并标明这一缺口。

必备背景: scenario-maya-expert(执行通道、审核循环、2027 版本陷阱)。

工具包:scripts/mx_anim.py。其分析和图像层为纯 Python,并可离线运行。

立场(专家经验的关键差异)

  • 按镜头选择工作流程;信息到位时,阻挡阶段就结束。 Neistadt:表演采用姿势到姿势,流畅动作采用逐帧直推或极限姿势;当五类关键姿势都已具备时,阻挡就完成了(主姿势、预备动作、过冲和跟随动作、过渡姿势、停顿)。Elver 从一开始就用样条处理物理镜头;Camporota 先用两个方块验证时机。
  • Maya 是“世界上最差的中间帧制作工具”(Newman)。 快速动作要多打关键帧,慢速部分每隔 2 到 4 帧打一次。样条是否就绪,要通过测试判断:将该范围转为样条并播放;如果动作变糊,就切回阶梯模式并添加更多姿势。原生的 Set Key 会重塑相邻曲线(Wade):插入关键帧,用曲线差异证明效果,并在转样条前为每个控制器同步关键帧。
  • 重量通过阻力、释放和及时刹停来表现。 Wade:先表现角色所承受的阻力(延迟、从静止开始加速),再表现它的力量;力量要通过帧数体现。Elver:上下起伏太多会像气球,而不像有重量;重量表现为坠落后突然稳稳接住、挤压时停留更久,并带有残余抖动。沉重物体在空中要符合重力 [新增物理特性];Wade 的加权顶点会增加滞空感,适用于轻盈或卡通化的身体。
  • 脚和脊柱能体现每一次重心转移(跳跃、单脚跳、落地、抬举)。 Camporota:每次下蹲都要做脚部滚动动画,以表现压缩感;大幅下落时,脊柱要落后于臀部,只有手臂下落;第一遍要把预备动作做得过头,再往回收;触地时要“几乎在一帧内”变平。Elver:离地后的第一帧,脚尖要指回离地的位置。
  • 在摄像机空间中以实际速度判断。 Elver:运动轨迹可能显示出完美的 3D 弧线,但屏幕上的效果仍可能失败。Lazare:观众的目光会被幅度最大的动作吸引,因此非焦点角色应“恰当地保持静止”。通过镜头摄像机投影轨迹;在查看任何指标之前,先读 playblast。
  • 基础层就是动画;动作捕捉数据很宝贵。 Newman:动画层是一个有时间限制的实验层,带有标记关键帧和保护关键帧;不要在其上清理曲线,用 Smart Bake 合并,然后再清理(Elver:只用于后期整体调整或添加颤动,然后烘焙)。修改动作捕捉数据时,只修复指定的问题,否则最终会变成“既不是手动关键帧动画,也不是动作捕捉”;合并后先使用 Euler Filter,再将关键帧删减到只剩极限姿势。
  • 口型同步要匹配声音,而不是单词。 Santos:先只做下颚动画(木偶式表演),然后再做五个主要控制点(下颚、嘴角两个、上唇和下唇),即可覆盖 90% 的需求;要根据发音部位提前动作,双唇音必须对准发声帧。Lazare:只有整句播放都偏晚时,才将所有嘴部关键帧提前 1 到 2 帧。
  • 润色要分清轻重缓急;审核要从上到下。 Elver 会对反馈排序,把精力投入回报最高的部分,并确保每一帧接触动作都到位。Newman 按意图、力学、表演、整合四项进行评估;playblast 无法证明游戏手感。

首先确定

输入为何会影响计划简报未说明时的默认值
风格和用途夸张幅度、停顿、与参考的贴合程度:卡通风格需要夸张推演;真人动画需要姿势夸张且不能出现死板停顿(Elver);VFX 应贴近参考(Neistadt)真实感的影视级品质
帧率时间数值、currentUnit24 fps(film)
重量和力度抵抗的帧数和克服阻力的帧数(Wade:先确定这两个数值)重物:抵抗动作至少 2 帧,不悬停
绑定控制器名称、IK/FK、空间、脚部滚动属性(使用 listAttr(keyable=True) 一次性映射)手部使用 IK,镜头内不切换 IK/FK 或空间(Newman)
摄像机锁定的镜头摄像机是唯一评判标准;游戏项目还需考虑所有角度和引擎搭建镜头摄像机并锁定
参考和音频关键节点(接触、起跳、最高点、落地、眨眼、快速转向)提供节奏,然后再加强表现(Neistadt)根据简报列出节拍清单
游戏指标动画前先用整数商定速度和高度(Newman);原地动画还是根运动(Epic)原地动画,要求提供指标表

工作流

  1. 用数字规划。 按节拍列出帧数、每个节拍的主导部分、关键类别、接触点、窗口(蹲伏、推、腾空、冲击)和风格;A.store_plan(plan)。实体镜头:A.air_frames(rise, drop) 用于分配腾空时长。对白:包含潜台词和动作动词的短句,辅以受控音素(M、B、P、F、V、L、T、D),设置 2 到 4 个支点(Santos、Wade)。关卡:帧数总和正确。
  2. 设置。 设置 fps、范围、声音,并锁定镜头摄像机;查询切线默认值(2027 notes)。关卡:mx_validate.validate(profile="shot", rules={"fps": 24}) 无失败项。
  3. 代理动画阶段(幅度大、速度快或受镜头约束的动作)。 使用 A.proxy_boxes(),设置关键位移和平倾;腾空部分使用 A.ballistic_keys(),旋转比位移延后 1 到 2 帧(Camporota)。第一次预备动作通常幅度过大:A.scale_curve(root, "translateY", 0.8, rest_y, time=crouch)。关卡:对代理运行 A.evaluate_gates()(ballistic、catch、resistance、push_fastest);查看 proxy_curves.png。
  4. 阶梯式 Blocking。 使用 A.set_key_defaults("blocking");A.key_pose(pose, f, fill=ctrls) 会为每个姿势中的每个控制器设置关键帧;分阶段处理:主要姿势、预备动作、过冲、分解动作(倾向相邻姿势,不要五五开)、停顿(A.key_hold());A.share_keys(ctrls)。切勿从中性绑定姿势开始表演(Neistadt)。蹲伏姿势:为脚部滚动设置关键帧,脊柱拖后,双臂自然下垂(Camporota)。关卡:每种关键帧类别都已包含;检查阶梯式 playblast(GUI)或 tracks.png;写下画面传达的故事,然后检查剪影。
  5. Spline 阶段 1,核心。 snap = A.snapshot(ctrls)(缓冲曲线);只对 COG、脊柱和腿使用 A.to_spline();脸部、眼睛、手指保持阶梯式(Camporota、Santos)。腾空运动要符合重力;硬着陆时使用断开的切线(Newman);落地脚掌保持平贴。动作发软时:A.restore(snap),增加姿势。之后每次添加关键帧:使用 A.insert_key(),然后对采样快照运行 A.curve_diff();在两个线段之外的差异可以接受(P4)。关卡:A.run_gates(plan) 中的 ballistic、hang、catch、slide、penetration、foot_roll、spine_drag、heel_to_flat 均通过;停顿期间没有 A.overshoots()。
  6. Spline 阶段 2,重叠。 先共同编辑相互关联的手臂、头部和次要动作(Newman),然后沿动作链使用 A.offset_keys() 延后 1 到 2 帧。关卡:overlap 滞后值不全为零;pose_to_pose_tell 较低;镜头中的轨迹干净。
  7. 面部,有面部镜头时适用。 先做身体,再做面具(眼睛、眉毛),最后做嘴部:在 A.mouth_keys(phonemes) 设置木偶式下颌关键帧,处理五个主要音素、舌头,并使用 A.copy_curve() 建立连接(鼻孔比嘴角延后 1 帧,并减弱动作)。眼睛使用线性曲线,快速扫视用 2 帧;眨眼时闭眼快于睁眼。关卡:检查 A.jaw_report()、相对于 A.audio_envelope() 的 A.lip_lag()、A.blink_report()、A.transitions();特写镜头需覆盖支点。
  8. 润色,按优先级处理。 每次处理一个部分,修复排名最高的问题。接触点和快速动作使用逐帧关键帧;每次起跳都要有剥离动作;冲击要有明显的挤压和更长的停顿;突然弹出动作改为沿弧线运动 3 帧并加上过冲;使用 A.retime() 收紧某个部分;加入移动停顿;最终版本前渲染带运动模糊的画面(均参照 Elver)。关卡:所有关卡均通过(包括 peel_off、impact_hold),图层已合并,没有子帧,Euler 已过滤,并为最终 playblast 编写 critique.md。

变体。 循环:每 3 帧一个姿势,在润色前使用 A.cycle() 循环;循环内的偏移要保持周期不变。游戏片段:处理指标、A.cycle_speed()、循环接缝、根节点规则,然后执行 scenario-maya-pipeline-scripting。动作捕捉:规程 P12;重定向:P13;复杂交互:P9。

数值

值适用范围来源
重力 1.703 cm/frame^2 (981/576)24 fps,场景单位为 cmphysics [已添加]
每隔 3 帧设置一个走路关键帧:接触 1、下沉 4、经过 7、抬起 10、接触 13;循环范围为 1 到 2524 帧循环Camporota
脚触地到脚掌放平约 1 帧,最多 2 帧;走路时手臂偏移 0、1、2,头部偏移 1每一步和着地时Camporota;body digest
旋转比平移落后 1 到 2 帧代理体和身体Camporota
快速动作每帧设置关键帧;慢速动作的关键帧间隔 2 到 4 帧阻挡动画Newman
闭眼 2 帧 / 睁眼 4 帧(或 3 / 5;大眼睛多 1 帧)帧数Elver
眼球快速转动 2 帧,线性;眉毛领先眼睑 1 到 2 帧,绝不超过 5 帧帧数Elver
干脆利落的动作:沿弧线运动 3 帧,再稍微过冲,绝不只用 1 帧帧数Elver
整体唇形偏移提前 1 到 2 帧;第 1 帧时嘴部接近完全张开速度较快时延迟的情况Lazare
五个主要口形占口型同步的 90%;下颌加嘴角占 50% 到 60%控制项Santos、Elver
游戏速度:走路 2、跑步 4 到 6、冲刺 12 到 15 m/s风格化玩家Newman
Playblast 默认缩放比例为 0.5:传入 percent=100活动视图Maya 2027 Help

质量门槛

可测量(A.run_gates(plan);纯逻辑函数 A.evaluate_gates),适用于计划中的任何跳跃、单脚跳、着地或重心转移: fps;重物腾空阶段 g_ratio 为 0.8 到 1.25,滞空超出部分最多 1 帧,水平速度恒定;接住重物(2 帧内消除 60% 以上的下落速度,减速时间短于恢复时间),随后在最低点保持 3 帧以上;蹬地时速度最快;重物阻力节拍静止 3 帧以上;每次下蹲:脚部滚动,脊柱落后于髋部;触地后 2 帧内脚掌放平;离地时脚尖与起跳点的角度在 30 度以内;脚着地时移动速度最多 0.2 cm/frame,穿透深度小于 0.5 cm;着地前拉伸;冲击之外不得出现跳变;重叠动作有延迟;移动结束时保持姿势;样条化后预备动作不到 90%;不得有子帧;润色阶段不得有动画层。[已添加] 阈值为工具包默认值。视觉检查: A.review_images(plan, out)(无头模式:curves.png 显示堆叠曲线通道,tracks.png 显示相机空间轨迹和洋葱皮姿势);在 GUI 中使用 A.playblast_pack()(镜头摄像机加无灯光剪影)以及逐帧预览 playblast。按时间顺序读取帧;先写下首次观看时的观感,再记录数值(critique.md)。

常见错误

错误表现修正方法
姿势还没定好就开始样条插值动作模糊,手臂穿过身体摆动A.restore(snap),以阶梯方式添加过渡姿势
间距均匀,整个身体都在同一批帧上摆姿势动作轻飘,像是在“摆姿势”让动作偏向相邻姿势,加入停顿,沿动作链使用 offset_keys
保留第一轮的预备动作下蹲动作抢了主体动作的风头围绕静止值使用 A.scale_curve(..., time=crouch) 缩放曲线
躯干与臀部锁定,手臂在下蹲时向后摆僵硬、套路化的预备动作脊柱动作滞后于臀部,只有手臂下垂
下蹲时脚掌平贴地面,起跳时脚尖朝前,落地时脚掌放平太慢压缩感弱、没有蹬地感,脚掌拍地脚部滚动;脚尖朝向起跳位置后方;在 1 到 2 帧内放平
沉重身体做出风格化滞空动作顶点轻飘ballistic_keys,顶点保持平坦,接触切线断开
发力前没有阻力像泡沫塑料一样轻推蹬前加入 2 帧或更多的吃力动作
下沉对称,或刚压缩完就直接弹起落地轻飘突然承接,更长的停顿,一次过冲,缓慢恢复
在样条曲线上使用 S 或裸写的 setKeyframe相邻关键帧形状改变,停顿漂移使用 A.insert_key,然后使用 A.curve_diff
样条曲线穿过停顿停顿漂移使用 key_hold 支柱,保持两侧平坦或呈平台状
在 3D 轨迹上检查弧线轨迹平滑,但屏幕上的弧线断裂使用 camera_track 像素轨迹
在声音发出时设定口型同步关键帧实际播放时滞后按声音分别提前,然后整体平移

交接

接收内容来自 scenario-maya-rigging 和 scenario-maya-deformation:已引用(绝不导入)的绑定,validate(profile="rig") 检查通过,包含 IK/FK、空间和脚部滚动属性的控制器列表,以及动作范围播放预览。绑定问题(膝盖弹跳、空间翻转)应附上帧号备注并退回。交付内容发送给 scenario-maya-lighting-rendering:新保存的版本,validate(profile="shot") 检查通过,图层已合并,辅助对象已删除(A.delete_helpers()),run_gates JSON 中无失败项,Agent 查看过的最终播放预览,以及尚未验证的内容。游戏片段发送给 scenario-maya-pipeline-scripting:按片段烘焙的骨架、片段名称和范围(书签)、根节点规则(原地或根运动)、循环接缝和速度报告。

Maya 2027 说明

  • 默认切线:一个文档页面上是 Auto Span (Legacy),另一个页面上是 Clamped:查询 keyTangent(q=True, g=True, itt=True)。Lock/Free Tangent Weight 现称为 Tangent Length; Butterworth 现称为 Smooth Filter (Butterworth)。
  • Time Slider > Enable Stepped Preview;A.stepped_preview() 是脚本对应功能。自 2025.1 起,Dope Sheet Time Snap 默认为关闭,且 scaleKey 会保留子帧:A.snap_subframes()。
  • Ghost Editor 和 Motion Trail Editor 位于 Visualize 下;要为蒙皮网格启用鬼影效果,需要开启 Cached Playback(运动模糊、Trax、经典动力学会将其禁用)。
  • Playblast 需要模型面板(通过 mx_bridge 使用 GUI);在 mayapy 中使用 review_images 或 Arnold 静帧。
  • Sequencer(前身为 Camera Sequencer):锁定每台摄像机。HumanIK 必须在其自身窗口中烘焙,而非使用 Bake Simulation。Time Editor 剪辑不能与动画层混用。Blue Pencil 取代了 Grease Pencil。

参考资料

评论

支持 Markdown