# 骨骼与姿态 [文档目录](../../README.md) · [操作速查](USER_GUIDE.md) · [物理](PHYSICS.md) · [骨骼工具盘点](../spec/SKELETON_TOOL_INVENTORY.md) 骨骼把身体、肢体、尾巴、翅膀烘焙成 Cubism 能直接运行的结构:上、下半身是身体变形器链末端的**弯曲变形器**,**旋转变形器**负责四肢等整块部件的转动,跨关节的网格用**修正关键形**完成平滑弯曲。导出的 moc3/cmo3 不依赖本程序,在 Cubism Editor 里可以继续编辑。 ## 工作流 骨骼的操作集中在「骨骼」标签页,它和「层级树」在同一个面板里,是并列的两个标签(旧的布局会自动加上这个标签;也可以从窗口菜单单独打开或关闭)。树里按层级列出每根骨骼,绑定到它的画元列在下面,用同一种颜色标出,显示的是图层名(拆分时起的名字);点画元名称会在层级树里选中对应图层。 **骨架是一个独立的选择对象**,和画元、变形器并列,三种模式对它的作用与对画元一致: | 模式 | 骨架被选中时 | | --- | --- | | 对象模式 | 画布上淡淡显示骨骼,点击骨骼(或在「骨骼」标签页点骨骼行)即选中骨架;选中画元或变形器时骨架自动取消选中。视图选项中的「骨骼」开关可以隐藏这层骨骼,隐藏后画布上点不到骨骼,仍可从标签页选中 | | 变形模式 | 摆姿态(工具栏只有「骨骼姿态」) | | 编辑模式 | 编辑骨架(工具栏只有「编辑骨骼」) | 1. **创建 / 编辑骨架**:在「骨骼」标签页点「创建骨架」或「编辑骨架」,或选中骨架后切到编辑模式(默认快捷键 `Alt+W`)。编辑时,每个绑定的画元会在画布上用它所属骨骼的颜色半透明填充,选中骨骼的画元更醒目。首次创建会自动推断一套骨架: - **按语义绑定**:按图层标签和侧别绑定——手臂绑同侧的 handwear,腿绑 legwear,脚绑 footwear,尾巴、翅膀绑各自的图层。开关类、切换类的变体图层一起绑定,但不参与骨骼位置的估计。 - **按人体构型定位**: - 肩关节放在躯干肩线下方、躯干边缘内侧;髋关节放在髋线下方(被裙子遮住也照样放)。 - 弯着的肘/膝放在折弯的外角内侧,直的肢体按比例放:上臂 : 前臂 : 手 ≈ 1 : 0.85 : 0.55,大腿 ≈ 小腿。 - 手腕按前臂与手的比例放;有鞋子时脚踝放在鞋口,脚尖取鞋子最远的一端。 - 尾巴沿网格内部的中轴线等分成 3–4 节。 - 拖动关节端点调整位置;点击 ArtMesh 绑定到当前骨骼。 - 编辑子工具中,Shift 点击增减选,空白处拖拽框选,拖动骨骼身体平移整个选区。工具详情可全选、选择骨链、旋转和缩放;旋转/缩放以选区端点中心为轴,可开启包含后代。外部相连端点跟随,断开端点保持不动。 - 工具详情提供复制、镜像、细分和融合。复制默认不绑定网格,可选择将绑定转移给副本;包含后代选项控制是否复制整条骨链。镜像可设置 X 轴,自动反转侧别与方向,并显示可明确匹配的对侧网格数量;歧义图层保持未绑定。开启对称编辑后,镜像配对的关节移动和选区变换联动。 - 细分将当前肢体骨骼分成 2–16 节,保留首段 ID 和绑定,子骨骼挂在最后一节;融合将当前连接的子骨骼合并进无分叉的肢体父级,并迁移绑定。内置身体/头部不细分或融合,其副本作为自定义骨骼。细分/融合基于静止骨架重烘焙,并解除受影响的镜像配对。 - **编辑子工具**:在画布工具条或工具详情中切换「编辑/新骨骼/挤出」。编辑用于移动关节和绑定网格;新骨骼从起点拖到终点,创建不带父骨骼的独立自定义骨骼;挤出从选中骨骼末端拖拽或点击空白处创建子骨骼,自动选中新骨骼以便连续延伸。拖拽时显示预览,松开后创建,长度不足 4 屏幕像素不创建。新骨骼默认不绑定网格,切回「编辑」后绑定。树顶部「添加骨骼」保留默认向下延伸 60 像素的快捷操作,并选中新骨骼。 - 绑定的网格会在**整条肢体**上自动计算权重,同一条肢体的网格只需绑定到其中一根骨骼。 - 在树中点选骨骼,再点画布上的 ArtMesh 即可绑定;画元行末的「×」解除绑定。尾巴、翅膀可在标签页顶部勾选添加或移除。 - 批量操作切换到「绑定」子工具,在树中选择目标骨骼,再点击、框选网格或在工具详情列表中勾选。Shift 框选追加网格。画布高亮待操作网格,工具详情显示数量和目标骨骼;点「绑定所选」或「解除所选绑定」统一应用。 - 「权重」子工具选择已绑定的肢体网格,并在树中选同一肢体内的骨骼;可点击/拖拽增减、替换或平滑权重,蓝到橙色表示所选骨骼影响。半径、强度和替换值在工具详情中设置。当前角度蒙皮保持每顶点一根或两根相邻骨骼,绘制会自动归一化。 - 权重清理可选择 1–2 根影响和低权重阈值,检测并修复空值、无效引用和非归一化行;也可恢复自动权重。复制/镜像权重先选择来源、目标、插值/最近顶点/同拓扑方式及骨骼对应,查看匹配和未匹配数量再应用;未匹配顶点保留自动权重。最近顶点有距离限制,镜像可设置轴;同拓扑要求顶点数和三角形索引一致。 - 手工权重随工程保存,并用于预览和导出烘焙。权重按静止位置和三角形样本存储,网格加密顶点通过插值继承;细分骨骼时,受该骨骼影响的手工网格恢复自动权重以重新分配新骨段。 - 选中骨骼后可以在标签页底部调整「关节带宽」(在关节两侧多宽的范围内平滑过渡,点「自动」恢复默认值)和「最小 / 最大」角度,角度范围就是该骨骼参数的范围。 - 骨骼设置中的名称按 Enter 或离开输入框保存,骨骼 ID 和参数不变。父级下拉可更换或清除父骨骼,默认保持坐标;开启「连接父骨骼末端」会平移整条子树到父骨末端。关闭后保留父级和位置,重合端点也不再一起移动。自身和后代不能被设为父级。 - 完成骨架编辑后,可在「骨骼参数采样」中调整容差(像素)、最小角度间隔和单网格关键形上限。滑动时模型会重建,并显示实际生成的参数点总数;树中每根骨骼旁显示对应参数的点数。计算期间显示「正在计算参数点」,设置随工程保存;「重置」恢复默认值。 - **离开编辑模式即保存**:切换到其他模式、选中别的图层、点「完成」都会把修改写成一条历史记录并重建模型;点「完成」后会进入变形模式摆姿态。只有「取消」会放弃本次修改。 - 「禁用」只是关闭骨架,骨骼和绑定都会保留;在标签页中点「启用」即可恢复。 2. **摆姿态**:选中骨架后进入变形模式,或在「骨骼」标签页点「姿态」(默认快捷键 `Shift+W`)。 - 拖动骨骼身体:FK,只旋转这根骨骼。 - 左侧工具栏和工具详情可选择「自动/FK/IK」。自动保持身体拖拽 FK、末端或 Shift 拖拽 IK;显式 FK 始终只转当前骨骼,显式 IK 始终求解骨链。 - 选中骨骼后,工具详情中的 IK 设置决定该末端的链长(1–32 根)、迭代次数、像素容差和弯曲方向,每个关节仍遵守自身角度限制。点「固定所选骨骼末端」后修改父级参数会持续求解;拖动画布十字或输入目标坐标可改变位置,支持启停和释放。不能到达或互相冲突的目标显示剩余误差。 - IK 目标和设置保存在工程中。导出模型保留参数范围,动画保留求解后的角度;导出不包含运行时固定目标或 IK 约束。保存/插入命名姿态可将求解结果写入动画。 - 姿态工具详情可按名称保存当前模型参数(同名覆盖),选择已存姿态后应用或删除;应用会跳过已移除的参数并限制到当前参数范围。打开动画编辑器,在「插入已存姿态」下拉中选快照,即可在播放头处插入所有仍存在的参数,并创建缺失的曲线。已有关键帧的插值和控制柄保留。 - 拖动骨骼末端,或按住 `Shift` 拖动:IK,这根骨骼连同最多两级父骨骼一起转向指针,每个关节都遵守角度限制。 - 默认角度范围很宽(例如大臂 -90°~150°、小臂 ±150°),拖动不会被中途卡住;需要限制某个关节时,在编辑骨架时调小它的最小/最大角度。 - 摆姿态只修改参数值,不修改网格,也不产生历史记录。工具面板中的「重置姿态」会把所有骨骼参数和姿势参数归零;「显示蒙皮权重」会按骨骼颜色给每个顶点着色,关节带里的颜色是两根骨骼颜色的混合。 3. **动作**:动画面板中会出现当前骨架能播放的动作。「模型预设」→「动作」组只有「基础动作」(待机、眨眼、点头、摇头)和「骨骼动作」两个开关,关闭后整组从动画面板、动画编辑器、预览和导出中移除,各动作的开关与高级参数保留,重新打开即恢复;单个动作在动画面板中逐行启用。导出时如果勾选了动作,会同时写出对应的 `motion3.json`,并注册到 model3 的同名动作组。每个预设由下表的**姿势**和头部、身体的标准参数组成。姿势分两类:模型里的**姿势参数**(下蹲、重心、膝盖内扣、弹起、甩尾、扇翅),作用已经烘焙在模型里,动作只决定何时做到什么程度;**手势**(手臂摆动、双臂收放、抬手、挥手摆动、单脚后翘)在模型里没有参数,写出动作时换算成骨骼角度参数的曲线,与动作本身写在同一骨骼参数上的值相加。腿部姿势带的大臂转动也属于手势。腿部姿势(下蹲、重心、膝盖内扣)只做叠加,同一个动作只用其中一个,其余保持为 0;弹起不需要落地,可以叠在它们上面。骨架播放不了的姿势会被略去。 预设动作不是固定角度的模板:生成时先从原画的静止骨架读出每只手臂的朝向和长度、头身比和脸的位置,再在人体舒适范围内(肩不超过约 115°,肘不反折,腕不超过 35°)求出姿势,例如挥手时手停在脸侧约眼睛高度、不挡脸,害羞时双手在身前合拢。时间上带预备动作、缓入缓出、沿骨链逐级滞后、过冲回稳,身体其余部分(重心、身体倾斜、头)随之配合;Q 版体型的动作更有弹性。关键帧只放在节拍上,用贝塞尔曲线过渡。 | 动作 | 条件 | 驱动的姿势 | | --- | --- | --- | | Idle(循环 12 秒) | 始终 | 像站着的人一样放松:三次深浅、长短不一的呼吸,吸气快、呼气慢,抬肩扩胸,身体稍后点头、头再晚一些;重心由周期 6 秒和 4 秒的两个分量叠加,循环内不重复。髋部带头换重心,上半身、身体转向依次滞后跟上,头部反向微倾保持视线水平、最后转头,并自己缓慢游移;手臂自然下垂,大臂、小臂、手逐级滞后摆动 2~4°,左右不完全同步;尾巴慢摆,翅膀随呼吸。没有骨架时只保留身体和头部的部分。曲线只在转折处放关键帧 | | TailSwing(3 秒) | 有已绑定网格的尾巴 | 甩尾,默认往返三次,每次 1 秒 | | Crouch(2.2 秒) | 有腿骨 | 先微微上提再下蹲,身体前倾、头抬起看向前方,手臂稍晚收到身前;底部轻微回弹,起身时略微后仰再回稳。重心保持为 0 | | WeightShift(3 秒) | 有腿骨 | 先向反方向轻推,重心移到一侧站稳再回来;身体、头依次滞后跟随,手臂随惯性晚一拍摆动。下蹲保持为 0 | | Shy(3 秒) | 有腿骨或已绑定网格的手臂 | 害羞扭捏:先抬眼一瞥,再低头歪头、目光移开;膝盖内扣,双手在身前合拢并小幅搓动,身体左右小幅扭动 | | Wave(2.8 秒) | 有已绑定网格的手臂(优先右臂) | 挥手:弯肘沿弧线抬手到脸侧,以肘为轴摆动三次半、逐次减弱,手腕晚一拍;重心移到对侧,身体反向微倾,头偏向手 | | HeadTilt(2.2 秒) | 有腿骨或已绑定网格的手臂 | 歪头:先向反方向微动,再大幅歪头、略过冲后停一拍;身体和重心稍晚同向倾斜,双手微收 | | Cheer(2.2 秒) | 有腿骨或已绑定网格的手臂 | 开心欢呼:先蹲后跳,起跳和落地带速度、落地屈膝缓冲,第二跳较小;双臂在第一跳时甩到头侧上方,落地时随之起伏,放下时肘先弯;抬头,尾巴、翅膀快速摆动 | | LegKick(2.6 秒) | 有已绑定网格的腿 | 单脚翘:重心移到左脚,右脚向后翘起并轻轻晃动,双臂张开保持平衡,歪头 | | Sway(3 秒) | 有腿骨或已绑定网格的手臂 | 开心摇摆:轻推后左右摇摆两次、逐渐减弱,各部位依次滞后跟随,手臂随惯性摆动 | | IdleCute(循环 12 秒) | 有腿骨 | 少女待机:Idle 的基础上保持膝盖内扣 0.3、双手向身前合拢的姿势取 30%,手臂在这个姿势上照样放松摆动,不再循环重心。导出到 Idle 动作组,作为普通 Idle 之外的第二个待机动作;预览时播放一轮 | 动画面板中每个预设展开后是它的高级参数,修改后预览、动画编辑器和导出同时生效,随工程保存并可撤销: | 动作 | 高级参数 | | --- | --- | | Idle | 摆动(重心、身体、手臂、尾巴)、呼吸(呼吸、身体起伏、扇翅)、头部(头部三个角度)、速度、眨眼开关 | | IdleCute | 同 Idle,另有内收程度(膝盖内扣与双手合拢的比例,默认 0.3) | | Blink | 闭合程度、速度、连眨两次 | | Nod / Shake | 幅度、速度、次数(每次略弱于前一次) | | TailSwing | 幅度、速度、次数 | | Crouch / Cheer | 下蹲深度或力度、速度 | | 其余骨骼预设 | 幅度、速度 | 幅度对单次动作以起始静止值为中心缩放,对循环动作以曲线均值为中心缩放,眼睛开合不随幅度变化;速度同时缩放关键帧时间和时长。在动画编辑器中修改预设的关键帧后,该预设变为手动覆盖,高级参数暂不生效,「恢复默认」会同时清除覆盖和参数。右键菜单中的「删除」会把预设从列表和导出中移除,可在「新建动作」菜单的「恢复已删除的预设」中找回。面板上的播放按钮与动画编辑器共用同一个播放状态:点击即在编辑器中打开该动作并播放,再次点击或在编辑器中暂停均会同步。 导出物理时,尾巴第 2 节以后的关节和翅膀交给物理驱动。如果某个姿势涉及的骨骼全部由物理驱动(例如扇翅),Idle 就不再写这个姿势,避免两者冲突。物理写的是骨骼参数,甩尾、扇翅是叠加在上面的融合变形,两者可以同时生效。 ## 生成的结构 | 对象 | ID | 说明 | | --- | --- | --- | | 躯干弯曲 | `DeformSkelTorso`(弯曲变形器) | 挂在呼吸变形器下,接管呼吸变形器原有的全部子对象(躯干、衣服、手臂、翅膀、尾巴、头部旋转)。以上半身、下半身参数为轴:腰线以上随上半身、以下随下半身绕腰转动,腰部过渡带内平滑弯曲。腿不在其中:下半身转动时裙子和尾巴跟着转,脚留在地上 | | 骨骼旋转变形器 | `DeformSkel_<骨骼 ID>` | 只给四肢、尾巴、翅膀生成。pivot 在骨骼头部(即父骨骼末端的关节),手柄沿骨骼方向(Cubism 的手柄在 0° 时朝上、顺时针为正,所以竖直向下的骨骼 `baseAngle` 为 180°,嵌套的变形器只记录相对父骨骼的转角),按骨骼层级嵌套;手臂、翅膀、尾巴挂在躯干弯曲下,腿挂在腿部 warp(`DeformLegs`)下。直接挂在身体变形器上的手臂、翅膀另以身体 Y 为轴,随上身前倾、后仰按透视缩放(warp 的缩放传不到旋转变形器)。下面没有挂网格或子变形器的骨骼不生成变形器;同一张网格内部的关节(没有自己的网格、只连着下一段)也不单独生成,并入下一段的变形器 | | 胶水 | `GlueSkel__<网格A>__<网格B>` | 同一条肢体拆分成多个网格时,接缝上位置重合的顶点自动焊接 | | 骨骼参数 | `ParamArmLA`、`ParamArmLB`、`ParamHandL`、`ParamLegLA`、`ParamLegLB`、`ParamFootL`、`ParamTail1..n`、`ParamWingL` 等 | 单位是度;正值表示向远离身体的方向摆动,左右两侧一致。能相加的四肢骨骼参数是融合变形参数,其余为普通参数(见「融合变形骨骼」) | | 下蹲 | `ParamSkelCrouch`(0..1,融合变形) | 身体下沉 10% 腿长,膝盖朝观众方向、略向外弯,脚保持原位 | | 重心转移 | `ParamSkelWeight`(-1..1,融合变形) | 髋部横移并略微倾斜,必要时同时下沉,保证双脚都够得着地面;上身反向回正;动作中大臂随后跟上(手势) | | 甩尾 | `ParamSkelTailSwing`(-1..1,融合变形) | 尾巴逐节卷向一侧,越靠近尾尖转得越多 | | 扇翅 | `ParamSkelWingFlap`(-1..1,融合变形) | 左右翅膀对称扇动 | | 膝盖内扣 | `ParamSkelKneesIn`(0..1,融合变形) | 身体略微下沉,膝盖向内转,脚保持原位;动作中大臂稍微内收(手势) | | 弹起 | `ParamSkelHop`(0..1,融合变形) | 身体和腿部 warp 整体上移,腿随之离地;叠加在下蹲上即为屈膝跳起 | 腿部姿势作用在身体 warp(髋部运动)和腿部 warp(腿按两骨 IK 弯曲、脚掌不动)上,所以腿画在同一张图层、腿骨没有绑定网格时同样可用;腿已拆分并绑定到腿骨时,腿骨的旋转变形器另按 IK 转动。 下面的手势在模型里没有参数,由骨骼角度参数播放。预设动作的手臂姿势按体型求解,其中只有 LegKick 的单脚后翘仍用这里的手势: | 手势 | 说明 | | --- | --- | | 手臂摆动 | 左右手臂反向摆动,远端关节幅度递减 | | 双臂收放 | -1 双手收拢在身前(大臂、小臂、手都向身体内侧转);+1 双臂张开上扬 | | 抬手(右) | 只转角色右臂:手肘抬到肩高、小臂竖起,放在脸侧 | | 挥手摆动 | 右小臂和右手左右摆,叠加在抬手上使用 | | 单脚后翘 | +1 角色左腿、-1 右腿:大腿略内收、小腿向外翻起、脚尖跟着翘;可叠加在重心上 | ## 算法 - **变形器层级**:旋转变形器挂在弯曲变形器下时,只继承支点位置和角度,上层弯曲的非刚性形变传不下去;弯曲变形器挂在弯曲变形器下时,只变换子变形器的控制点。所以身体骨骼不用旋转变形器,而是做成身体链末端的细网格弯曲变形器:身体 X/Y、身体 Z、呼吸的弯曲一路传到躯干网格,肩部、头部的支点也跟着移动;精细的腰部弯曲直接作用在网格和四肢上,不会被粗网格的上层变形器重新采样。弯曲变形器在静止时是恒等映射,插入它不会移动任何对象,也不改动子对象的坐标。启用骨架后,呼吸和身体 Z 的肩线、腰线取自上半身骨骼,所以呼吸只抬腰以上,身体 Z 绕上半身骨骼的腰部倾斜;腿部 warp 的髋、膝、踝取自腿骨。身体变形器的结构见[变形器与参数规范](../spec/DEFORMER_AND_PARAMETER_SPEC.md)。 ``` DeformBodyXY(身体 X/Y:躯干转向,身体随髋部平移、下沉、站高;腿部姿势的髋部运动) └ DeformBodyLean(身体前后倾) └ DeformBodyZBreath(身体 Z、呼吸) └ DeformSkelTorso(上半身 + 下半身) ├ 躯干、衣服、裙子等网格 ├ 手臂、翅膀、尾巴的旋转变形器 └ DeformHeadRotation → 头部 DeformLegs(身体 X/Y 和腿部姿势下的腿,脚掌不动) ├ 未绑定的腿部网格 └ 腿骨的旋转变形器 └ DeformSkel_<骨骼 ID>Stance(身体 X/Y 下的站姿)→ 绑定到这根骨骼的腿部网格 ``` - **腰部弯曲**:上、下半身都以腰(骨骼头部)为轴。沿骨骼方向到腰的距离在「关节带宽」内按 smoothstep 过渡,带外完全刚性转动。默认半宽为骨骼长度的 25%,上限 45%,可以在编辑骨架时选中上/下半身调整。 - **刚体部分**:旋转变形器插值的是角度,不是顶点位置,所以参数取任意值时肢体都是精确的刚体旋转,不会在关键帧之间缩短;几个关节同时转动时,也不需要把关键形乘起来。 - **权重**:每个顶点最多跟随关节两侧的两根骨骼。离顶点最近的骨骼是它的主骨骼;在主骨骼两端的关节带内,按到关节角平分线的有向距离用 smoothstep 过渡。关节带默认半宽为两根骨骼中较短者的 35%,上限 45%,因此同一根骨骼两端的关节带不会重叠。 - **角度混合**:关节带内的顶点绕关节旋转「权重 × 相对角度」,而不是在两个刚体位置之间做线性混合(LBS)。这样顶点到关节的距离保持不变,弯曲时肢体宽度不变,肘部内侧不会塌陷。 - **网格挂在哪里**: - 每张网格优先挂在**网格覆盖到的最靠近身体的关节**对应的旋转变形器下。这样网格与上一段的连接处由变形器直接承载,远端骨骼转动不会使连接处依赖关键形插值来抵消。网格没有覆盖任何关节时,才按权重和参数耦合程度选择挂载骨骼。网格伸到其他骨骼上的部分,按这些骨骼的角度写进网格自己的关键形。 - **未拆分**(一张网格覆盖整条肢体):如果网格包含肩、肘、腕,就挂在大臂下,肩部连接处精确跟随大臂;肘和腕在网格关键形中弯曲。如果丝袜从大腿中段画到脚踝、不覆盖髋关节但覆盖膝关节,就挂在小腿下;上方的大腿变形器仍作为髋部支点带着整条腿转动。下方没有网格的骨骼(例如脚)不生成变形器。 - **已拆分**(每段一张网格):每段挂在自己骨骼的旋转变形器下。关节带里的顶点仍按位置蒙皮,两段在重叠处的变形完全相同,接缝不会裂开;接缝上重合的顶点另外自动上胶水。 - **中间关节**(例如大腿和小腿是一张网格、挂在大腿下,脚是另一张):每张网格最多一个旋转变形器,小腿不单独生成。脚的旋转变形器直接挂在大腿下,把小腿参数作为自己的关键形轴:角度直接相加,pivot 沿膝盖的圆弧取键,键距按到膝盖的距离取,保证 pivot 偏离圆弧不超过 1px,与网格的精度一致。小腿是融合变形参数时,这部分同样写成融合变形。 - **修正关键形**:关键形只以相关关节的参数为轴。每轴在 0 两侧各自等分,取能让两个键之间的线性插值偏离真实圆弧不超过设置容差的最少键数;默认容差 1px,最小角度间隔 7.5°。离关节近的部位(例如只有关节带受影响)键很稀,挂载骨骼以外的大段刚体部位才需要密键。单个网格的关键形总数默认上限为 600,超出时从键最多的轴开始减少。每个关键形都按运行时实际构建的变形器变换计算,所以刚体部分落点与变形器完全一致;需要完全精确时,把肢体拆分成段。 - **融合变形骨骼**:关键形网格对每种轴组合都存一个形状,一张跨肘、腕两个关节的网格要存「小臂键数 × 手键数」个关键形。如果没有任何顶点同时受两根骨骼影响,两个关节的弯曲只是简单相加,改用融合变形只需要「小臂键数 + 手键数」个形状。导出目标为 Cubism 5.0 及以上时,满足这一点的骨骼参数就是融合变形参数:旋转变形器只保留一个静止形状,转角由融合变形在最小、0、最大三个键之间线性插值,结果依然是精确的刚体旋转;网格在这根骨骼上的修正也改为融合变形。参数类型对整个模型只有一种,所以只要有一处必须相乘(顶点同时受两根骨骼影响,或连续两个中间关节折叠到同一个旋转变形器),这个参数就保持为普通参数。尾巴和翅膀由物理读写,始终是普通参数。挂载骨骼先按关节覆盖范围确定,以保证连接处稳定;仅在网格没有覆盖关节时,才优先选择能让各关节互相独立的骨骼。 - **关节加密**:绑定的网格在每个关节带内沿角平分线方向插入 5 行顶点(带的两侧边缘、1/4 处和关节处)。行与外轮廓的交点一定会插入顶点,保证轮廓能弯成弧线。新顶点是原顶点的仿射组合,所以画面不会移动,已有关键形和 Glue 会自动重映射。重复烘焙不会再增加顶点。 - **姿势参数与手势**:跨关节的网格把关节另一侧的部位写在自己的形状里,这部分落在哪里取决于关节的**总角度**。融合变形只能把各参数单独造成的位移相加,而同一关节分两次转过的位移之和并不等于一次转过总角度的位移:姿势叠在骨骼角度上、或两个姿势转同一关节时,肢体会偏离骨骼,角度大时偏差可达上百像素。所以肢体关节只由自己的骨骼参数转动:只转四肢关节的姿势是手势,由动作换算成骨骼角度播放。动作的每条轨迹在关键点之间是时间上的三次曲线(贝塞尔手柄固定在时间的 1/3 处),姿势在相邻键之间是线性的,所以骨骼曲线在这些时刻之间也是三次曲线:换算时在每个关键点和姿势经过自身键值的时刻取点,带上两侧的斜率,骨骼曲线与姿势完全一致。模型中只保留骨骼参数替代不了的姿势:腿部姿势的髋部运动(配合 IK 保持双脚着地)和上半身回正,以及由物理驱动的尾巴和翅膀。它们以融合变形的形式叠加到相关对象上:身体和腿部 warp(髋部运动和腿的弯曲)、躯干弯曲(上半身反向回正)、骨骼旋转变形器(腿部 IK 转角、尾巴和翅膀的转角)、蒙皮网格(关节带的弯曲)。腿部姿势与手动转动的脚踝等腿部角度叠加时仍有上述误差(例如完全下蹲再把脚踝转 40°,脚尖偏约 10px);预设动作里只有 LegKick 这样叠加,偏差约 2.5px。 - **腿部姿态**:下蹲和重心转移在每个关键值上都按髋部的位置求解。腿部 warp 里每条腿按髋、膝、踝的两骨 IK 弯曲:腿保持原画的侧向弯度,多出来的弯曲朝观众方向,从正面看大腿变短而不是向外甩,再按姿势向内或向外转;脚掌一行固定。髋部横移使腿伸不到原画的直度时,髋部自动下沉到双脚都够得着。已绑定网格的腿骨按运行时实际的髋部位置用两骨 IK 求解旋转,膝盖朝外弯(膝盖内扣时朝内),脚掌保持水平。身体 X/Y 则由腿骨下的站姿 warp 承担:旋转变形器传不下腿部 warp 的弯曲,所以每根挂着网格的腿骨下各有一个以身体 X/Y 为轴(各 3 键)的 warp,每个键值上的控制点都按运行时实际的骨骼位置反算,让网格落在腿部 warp 给出的位置——髋部随身体移动、膝盖弯曲、脚掌不动,与未绑定的腿一致。各姿势各自以其余为 0 求解,同时生效时只是简单相加,只有其中一个幅度很小时脚才能保持不动;预设动作因此从不同时驱动下蹲和重心转移。 - **导出要求**:旋转变形器上的融合变形需要 Cubism 5.0 及以上。导出目标低于 5.0 时,所有骨骼参数都烘焙成普通参数的关键形;旋转变形器上的姿势会被去掉(导出时会给出提示)。 ## 限制 - **左右合在一起的网格不会被绑定。** 肢体图层应在导入后的「开始」界面(也可从「工具 → 开始界面…」打开)中按网格拆成左右各一个。如果双腿或双脚仍画在同一个图层里,自动推断会建出两条腿的骨骼,但不绑定这个网格,也就不会生成下蹲和重心转移;先拆分,再到「编辑骨架」里分别绑定。 - **手工改过拓扑的网格不加密。** 历史中有手工拓扑编辑(细分、刀切等)的网格,其编辑是按顶点序号重放的,所以骨骼不会给它插入顶点。如果弯曲处不够平滑,请手动在关节处加点。 - 超过约 90° 的弯曲,关节内侧会出现重叠,与 Spine 的线性蒙皮一样,需要靠调整关节带宽或拆分原画来改善。 - 骨骼烘焙之后,Cubism Editor 里不保留骨骼语义;如需继续改骨骼,请保留本程序的工程文件。