type
status
date
slug
summary
tags
category
icon
password
转载自 知乎-包小猩
写在前面
绑定真的是一门层级约束的艺术啊,很难相信这些人能把简单的层级约束关系玩出千万种花样。作为一名全栈TA怎么能连绑定都不会!(虽然我也是最近才开始系统地看Maya绑定知识)学好绑定做作品简直如虎添翼是不是,模型终于可以动起来了。
可能你会问:为什么是Maya?学Max不好么?其实主要也是个人原因(不会Max)。同时Maya绑定动画模块也确实很强大,且绑定思路其实都很类似,抓住一个开学就完事了。
这篇文章先开个坑,讲下Maya内部绑定相关,后续会继续更新UE相关骨骼动画系统、状态机、ControlRig、ALS、AI等内容。所有文章都会收录到本文所在的专栏:包小猩技术美术碎碎念 - 动画向 中。
本文根据个人学习经历,边学边记,希望能帮你从小白快速进阶到手绑大佬,一脚跨入动作TA大门(理想)。
关于Maya版本,本文使用的是Maya 2023,But Don't Panic,Maya的绑定历史非常悠久,许多操作经典永流传十几年都没有更新过,所以大部分操作新老版本都适用。
打下预防针:这篇文章偏基础些,基本上都是些绑定相关概念的集合,后面会继续写具体的绑定实操技巧(边学边写,现学现卖)。
更新:如果想看其他绑定相关内容,可以看最近更新的文章:
推荐一些绑定相关的网站(期待扩充)
绑定基础概念 - Maya绑定界面和模块介绍
绑定界面切换
Maya绑定界面可以单独在左上角的菜单栏切换,Skeleton、Skin、Deform、Constrain等面板在切换到Rigging后才会显示。
[upl-image-preview uuid=3d1507da-c6b0-447e-b4e8-039d7017515c url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743452654-512733-3d1507da-c6b0-447e-b4e8-039d7017515c.png alt={TEXT?}]
同时你也可以在快捷菜单栏中找到Rigging相关的工具(骨骼、蒙皮、约束器)。
[upl-image-preview uuid=b551e50f-a9ee-4cf3-9399-2532047e8513 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743452773-798483-v2-a6ad42af5475c628769bdd90d21aac4a-1440w.png alt={TEXT?}]
绑定模块有哪些内容?
我们常说的绑定普遍涵盖了三个模块的内容,分别是:骨骼、蒙皮和控制器,下面对这三个分类做出详细描述。
骨骼
在Maya中分为关节(Joints)和骨骼(Skeleton),关节是构建骨骼的基本单位,骨骼会创建在两个具有父子层级的关节中(这里关于骨骼的定义不同软件的定义是不同的,比如Max和Maya就不一样),想要了解更多可看官方文档对骨骼的定义:Maya骨骼定义。
蒙皮
将骨骼和模型关联起来的过程,在Maya中蒙皮可分为三种不同的类型 - 平滑蒙皮(smooth skinning), 刚体蒙皮(rigid skinning)和 间接蒙皮(indirect skinning)。关于具体的蒙皮定义可以浏览官方文档:Maya蒙皮定义。
控制器
控制器可分为两大类:对模型的控制器和对骨骼的控制器。本质上都是基于一定规则对模型和骨骼进行坐标变换达到目标效果。类似IK就是对骨骼的控制器、晶格变形就是对模型的控制器。
绑定基础概念 - Maya的物体组成、层级属性
非常重要 - Transform 和 Shape 节点
Maya中的场景物体一般会有两个节点组成 - Transform节点和Shape节点,其中Transform节点包含了物体在空间中的位移旋转缩放矩阵信息,Shape节点记录了模型本身的点线面UV顶点色等数据。
[upl-image-preview uuid=66bc3c9b-c0b4-48d5-b04a-8f9a3f34d005 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743452799-262305-v2-1e3968b086b9448510dc88a8d3d5f897-1440w.png alt={TEXT?}]
Outliner窗口
在Maya中记录场景中存在模型的窗口叫Outliner,在场景中创建的物体都会在其中显示(模型、骨骼、样条线、控制器、材质、组等),其中我们需要关注的选项有两个,一个是是否显示Shape节点,一个是是否只显示DAG物体。只有勾上显示Shape节点你才能看到物体的Transform节点和Shape节点的单独显示。
什么是DAG物体
DAG物体是 directed acyclic graph(有向无环图),简单来说可以理解为由Shape和Transform组成的有实体的物体,勾选 DAG Objects Only 就只会显示有实体的物体,隐藏其他内容(材质球、运算节点、层等)。
[upl-image-preview uuid=6c643803-d666-4e15-88c1-2da32723c623 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743452808-459953-v2-23e36b49bf3f9854fe5a08da6d0bb766-1440w.png alt={TEXT?}]
通过物体层级创建简单的父子关系
如果不考虑约束器的话,最简单的父子级关系就是在Outliner中将一个物体作为另外一个物体的子级,创建这种父子关系的方法有两种:
- 选择物体A,再选择物体B,按P键,就可以将物体A作为物体B的子级。
- 选择物体A,中键移动到物体B上,也可以将物体A作为物体B的子级。
解除父子关系的方法也非常简单,对应创建分为两种:
- 选择作为子级的物体A,按Shift + P可以将A挪到上一层级,取消作为B的子级。
- 选择物体A,中键挪到上一层级,取消作为B的子级。
通过这样简单的操作,你就得到了Maya中最基本的绑定效果 - 层级父子关系,层级父子关系中最重要的概念就是坐标空间的继承 - 即子级的物体的坐标是基于父级坐标系为原点的坐标系统变化而来,在表现上,子级物体会跟随父级物体的运动而运动(旋转、位移、缩放),而子级运动不会影响到父级的运动。
[upl-image-preview uuid=bbb1ed01-e768-4e79-9727-9e726071ad51 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743452853-110503-v2-b56e8bef3a27865efb09318d20a4733f-b.jpg alt={TEXT?}]
https://vdn6.vzuu.com/SD/07a902ac-c01e-11ed-b06a-aa73a14c00b2-v1_f4_t2_171ZJLjf.mp4?pkey=AAWc7EPtDoX7NDOPIaj8WAhlmlO2fCZ48kAFKxr9m4-O4uNLRTVOVyzfZg04hI-_6xpsB4ZvTJXAW1NxulF2V8MQ&bu=078babd7&c=avc.1.1&expiration=1743459408&f=mp4&pu=078babd7&v=ks6
绑定基础概念 - Maya的空间坐标
Transform的物体与世界空间
[upl-image-preview uuid=bb80a005-094f-4fe6-a309-6eebe2a587e5 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743452898-968907-v2-64bb4c59cbbaad475e1ae9ef7a78ac59-1440w.png alt={TEXT?}]
Transform节点对场景中的物体记录了三套位置数据,分别是:世界位置、本地空间Pivot坐标和世界空间Pivot坐标。
- 框1:物体在World空间下基于Pivot点的变换数据,我们记为TransWorld。
- 框2:记录物体Pivot点基于物体空间相对物体原始Pivot点的位移,我们记为PivotPosLocal。
- 框3:记录物体位移后Pivot点在世界空间中的位置,我们记为PivotPosWorld。
对于这三个数据满足一个公式:TransWorld + LocalToWorld(PivotPosLocal) = PivotPosWorld。
对于旋转而言,改变了Pivot的旋转会直接在 TransWorld 中进行数据刷新,不会记录到 PivotPosLocal 和 PivotPosWorld 中。
理解了这里数据的含义后,我们也就顺带理解了有关Pivot相关的操作原理了。
例如 冻结变换 是将当前物体TransWorld坐标清空,并将物体Pivot点挪到World中心,将物体坐标系和世界坐标系对齐,并基于世界空间刷新LocalSpace值。
父级不同,数据不同
当我们将子集物体挪出父级物体层级后,会发现物体在空间中的位置并没有改变,但如果你仔细观察Transform的数值会发现发生了变化。这个主要是因为物体的坐标系发生了改变(物体空间 -> 世界空间),所以记录空间中同一个位置的点的数据也不一样了。
冻结变换
有时候我们在挪动物体的坐标后,需要将位移后的状态保持为物体的默认状态,这时就需要对物体进行坐标冻结操作(Freeze Transform),冻结坐标后所有的坐标数据都会归零,方便再次位移物体后快速回到之前记录的位置,这个操作在绑定中非常常用,尤其是控制器。
[upl-image-preview uuid=1c532f4c-007b-4cbb-8335-e14d098376d1 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743452913-244272-v2-34047a94a9d8a371b11ab2e00560e0bc-1440w.png alt={TEXT?}]
修改物体的Pivot点位置
物体旋转缩放和位移的数据都是以Pivot点进行存储的,Pivot点是一个物体上只存在一份的数据,将物体本身抽象成一个点记录在空间中的位置,而Pivot点的位置是可以自行定义的,可以进行以下几种操作修改:
!!技巧(谨慎使用),在修改pivot点后如果出现执行Constrain或者需要读取轴向的操作,发现结果不对的话,说明修改的Pivot结果没有烘焙到模型上,这样执行的所有操作都会基于原始Object轴进行操作。Maya是支持在每次修改Pivot轴后直接烘焙到物体上的,操作就是选择移动、旋转或缩放工具(随便设置一个就好,会同步到另外两个工具),在参数设置面板关闭 Pin Component Pivot,同时打开 Bake Pivot Orientation, 就可以在每次修改Pivot后自动刷新轴的方向(但这会导致Local空间的Pivot数据记录错误
[upl-image-preview uuid=2092b719-24a9-42a1-979d-de4d5dae37d3 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743452948-657726-v2-0e77f7ab59b2847386b536af7ca17cf5-1440w.png alt={TEXT?}]
- 将Pivot点放到物体中心:选择菜单中 Modify - CenterPivot。 [upl-image-preview uuid=d3d9ee7b-a066-4cac-8cac-01b1be95741b url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743452975-922666-v2-25e54040e4cc66b84a19fe467ee4957a-1440w.png alt={TEXT?}]
- 将Pivot点放到世界坐标原点:需要先冻结物体坐标再Reset坐标,不然物体会跟着Pivot一起跑到坐标原点。 [upl-image-preview uuid=3ee57636-65a8-4802-8dae-b5471b3e8fc4 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743452985-239742-v2-6d05c2e5951ea68b3eb4cc4b0023d735-b.jpg alt={TEXT?}] [upl-image-preview uuid=006acda6-00e8-41bc-9a5b-977cff692162 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743452990-336898-v2-21b8587982b15ab956525a8108e6fbd9-b.jpg alt={TEXT?}]
- 将Pivot点吸附到物体点上:按住D + V键,中键拖动坐标中心即可吸附到物体点上。 [upl-image-preview uuid=63897342-7d82-476f-ac8e-71465c935b91 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743452997-760216-v2-88f78014cfeabae95db63484865d151f-b.jpg alt={TEXT?}]
- 将Pivot点吸附到世界网格上:按住D + X键,中键拖动坐标中心即可吸附到网格上。 [upl-image-preview uuid=eeb5fc27-33e2-4c63-8a36-8a17582e7b5c url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453005-588937-v2-5bb82995fea506b6c552fe6747d377da-b.jpg alt={TEXT?}]
- 将Pivot点和吸附点的平面对齐:按住D + Ctrl键,左键点击需要对齐的点线面即可将坐标进行对齐。 [upl-image-preview uuid=7a89e05d-6d55-4618-87bd-ac16ce4f84da url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453011-825083-v2-09efb19c2250184d9f917f18f1d27717-b.jpg alt={TEXT?}]
约束控制器(Constrain)
这里主要列举下常用的几种约束的使用方法,没有列举出来的的大家可以自行翻阅相关文档(这里的参数讲解只会收录常用的参数,不会每个参数都讲,如果想要了解的可以看官方帮助文档:Maya约束参考)。
Parent Constrain
[upl-image-preview uuid=7ee78088-2ae7-4fa0-a857-4c47f5914131 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453029-42762-v2-bd9a7c0da6abd0338fcf98b82dcc7fbe-1440w.png alt={TEXT?}]
Parent Constrain - 父子层级,这个层级和前面讲的 Outliner 中的父子层级不太一样,作为控制器,这个父子层级可以控制更多选项,也更为灵活。
Parent Constrain 的创建方式很简单:选择父级物体 - 选择子级物体 - 点击菜单栏 Constrain\Parent,你会发现在Outliner窗口子级物体下方多出了一个控制器,这个控制器就是父子级的控制器。
父子级控制器的默认表现和 Outliner 中层级父子级差不多,子级可以继承父级的所有空间变换效果,同时子级的变化也不会影响父级。[upl-image-preview uuid=da489c82-04f9-4cfc-bd9d-b86ac8321bf2 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453038-169302-v2-b27386b99739304b0cc6b96c0c7d8b0a-1440w.png alt={TEXT?}]
但作为控制器,父子级可以自定义的内容会更多,点击创建父子级命令右边的正方形按钮即可进入到设定窗口,在这里你可以精细化控制各种约束关系参数。[upl-image-preview uuid=3d297c9c-002f-42a8-a974-8bf9d32494f4 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453045-539482-v2-934efc0ed1c63b1d7c8d5dbdf6e58792-1440w.png alt={TEXT?}]
[upl-image-preview uuid=14470b77-f81b-43b1-a14c-6cc62b5a474a url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453053-620836-v2-dbf59ac48bfb7e322aa130bc9b4e2f23-1440w.png alt={TEXT?}]
- MaintainOffset:如果勾上的话创建父子级会保留两个物体原来的空间关系,不然就会将子物体基于父级坐标空间进行转换(子物体坐标 * 父物体世界到Local坐标矩阵),从而改变位置。[upl-image-preview uuid=747e18ba-1852-45f1-babe-4c95d1d0e7cc url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453060-855902-v2-2fe6bad0571fadb90df199d1045cc624-b.jpg alt={TEXT?}]
- Constraint axes:主要是自定义需要父子级控制的内容:位移和旋转,你可以自定义哪个轴向的位移和旋转需要受到父子级控制。[upl-image-preview uuid=2a3d79d6-3fff-4d54-b321-7fd2c1bcc1f7 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453066-743595-v2-3374b59607b6d481af4b3d3d996501e6-b.jpg alt={TEXT?}]
Point Constrain
可以理解为Parent约束的简化版,只对位移做约束,用法和Parent类似,这里不过多赘述。
Orient Constrain
可以理解为Parent约束的简化版,只对旋转做约束,用法和Parent类似,这里不过多赘述。
Scale Constrain
可以理解为Parent约束的简化版,只对缩放做约束,用法和Parent类似,这里不过多赘述。
Aim Constrain
[upl-image-preview uuid=b96d6095-03fa-428a-90d8-774d6edbc8ae url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453073-869278-v2-e12322983b0e4c575af76c7e0341c823-1440w.png alt={TEXT?}]
可以将某个物体基于某个轴向对齐到对应物体。在绑定中非常常用,使用方法也很简单:选择目标物体 - 选择需要做对齐操作的物体 - 执行菜单\Constrain\Aim命令即可,下面我们看看Aim的相关参数。[upl-image-preview uuid=5b4cfe07-7205-4623-b73e-2b4af7ac1450 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453079-672741-v2-a22fd56ec0b055ed7c2882e99f10a50d-1440w.png alt={TEXT?}]
- Maintain Offset:和Parent控制器一样,如果勾上的话创建父子级会保留两个物体原来的空间关系,不然就会将子物体基于父级坐标空间进行转换(子物体坐标 * 父物体世界到Local坐标矩阵),从而改变位置。
- AimVector:需要朝向目标物体的轴(根据自己的需求,找到物体的哪个轴需要朝向目标物体,需要将轴显示模式切换成Object,按住W左键拖拽就可以切换)。
- UpVector:定义朝上的轴,众所周知你要定义一个新的坐标系至少要确定两个轴才行。
- WorldUpType:可以选择定义向上轴向的方式,一般常用的为使用世界空间的某个轴、或者是使用某个物体的方向作为定义轴的朝向。
- WorldUpVector:定义世界空间朝上的轴。
这里很多朋友会很费解:这些参数好乱啊,我要怎么设置才能达到我想要的效果呢?这里我告诉大家一个设置上的技巧:
- 确定需要朝向目标物体的轴,填写到AimVector中,比如需要将物体的X轴朝向对象就填 (1,0,0)。
- 确定物体朝上的轴和世界朝上的轴分别填入 UpVector 和 WorldUpVector,Maya更新物体的逻辑是将 UpVector 尽可能靠近 WorldUpVector(是不是一下就懂了)。比如这里我想要让物体的Z轴尽可能贴靠世界空间的Y轴,我就需要在 UpVector 中填写(0,0,1),并在 WorldUpVector 中填写 (0,1,0),运行Aim命令后你就能得到以下结果。 [upl-image-preview uuid=568b295e-f21f-469b-b774-eb4f77652f2f url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453089-276707-v2-38794e20106ca99e51f472d36cd74f65-1440w.png alt={TEXT?}]
Pole Vector
一般用作IK朝向的控制器方向约束,选择IK控制器,选择朝向物体,点击 Constrain - Pole Vector。
骨骼(Skeleton)
什么是关节(Joint)与骨骼(Skeleton)
简单来说:关节是骨骼的基石及其关节点,和前面的介绍一样,Maya的骨骼是基于关节定义的,每两个关节之间形成一节骨骼。骨骼没有节点,它们在您的场景中没有物理或可计算的存在。骨骼只是说明关节之间关系的视觉线索。[upl-image-preview uuid=b7c846a9-273b-490e-a34c-e5f7df55e1ab url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453102-540607-v2-4f4bca934b872ef5fa7781ad92e2e8a0-1440w.png alt={TEXT?}]
Joint 的Transform数据存储模式
Joint 和普通的物体相比,除了记录了自身的 Transform 之外,还保留了控制父级 Transform 偏移的能力,数据记录在OffsetParentMatrix中,在IK控制中,IKEffector会连接到IK控制最后一级骨骼的OffsetParentMatrix,反向控制骨骼父级Transform。[upl-image-preview uuid=56111779-3eb8-4aae-82d4-ce805f4a5283 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453110-377356-v2-ca23be2cdfaa14ddde7c7a71f153511f-1440w.png alt={TEXT?}]
Joint 和 Locator 的区别
一句话概括:Joint不能冻结变换和重置,Locator可以。也就是说,Joint在空间中的位置一定是基于世界坐标原点的世界位置,所以我们才需要使用控制器来间接控制Joint的运动,保证动画师K帧的便捷性。
人体骨点、常见骨骼名称和命名规范
骨骼命名中左右对称的骨骼通过 _R 和 _L 区分,下面是一些常见部位的命名规范。[upl-image-preview uuid=835343b4-5cbe-46ba-8f8e-178f0568fe7a url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453125-414256-v2-f647e027494bf31a88a30038c4e348f1-1440w.png alt={TEXT?}]
骨骼摆放注意事项:
- 要做IK的关节不能水平成一条线,必须有弧度,不然w创建IK的时候不好判断朝向,同时模型的腿部也需要有些弧度,保证关节点在模型中而不是边缘。[upl-image-preview uuid=98821beb-a59e-4137-9270-29890937ee63 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453136-875085-v2-959b9e2174c4913e30b8c2890fdbbecf-1440w.png alt={TEXT?}]
骨骼层级和模型父子级、父子约束器的区别
一句话解释:骨骼也有父子级关系,但需要通过蒙皮才能控制模型。模型层级父子级和父子约束器都不需要蒙皮,二者区别在前面控制器环节有说明。
创建骨骼
选择菜单中的 Skeleton - Create Joints ,在视图中点击即可创建,按 X 吸附到网格点,按 V 吸附到物体顶点,创建完成后切换工具或按 ESC 退出骨骼创建模式。[upl-image-preview uuid=1a807e67-0585-432c-8e54-a65a0788807f url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453145-334711-v2-972f8d9b14b037125260f0e34d953700-1440w.png alt={TEXT?}]
如何正确调整骨骼轴向
如果我们想要显示骨骼的轴向,可以选择对应的骨骼,执行菜单栏 Display - Transform Display - Local Rotation Axes 即可。[upl-image-preview uuid=0a25a6b0-dfbc-4f7e-8d7c-3e21c6162441 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453155-186730-v2-56e58ba4f1714d7570067526662f1729-1440w.png alt={TEXT?}]
一般我们设置骨骼轴朝向时,需要将骨骼的X轴朝向下一根子骨骼,Z轴面向骨骼的正前方并垂直于X轴,Y轴面向骨骼的右方并垂直于XZ轴。我们需要用到 Orient Joint 工具来对骨骼的轴向做出修正,下面具体讲下修正步骤。[upl-image-preview uuid=48bc5b4f-c0be-43b8-91bd-54aae9a135f2 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453161-6155-v2-2a3e1fee9395ba1f5c3fdede3de79558-1440w.png alt={TEXT?}]
- 选择所有需要修正的骨骼(不要只选择父级,展开所有骨骼shift全选),执行菜单面板 Sleleton - Orient Joint(点击后面的小方块,打开参数面板)。
- 我们先来看看面板中的参数:[upl-image-preview uuid=6dbe5d75-9044-4a15-9c8b-2ea16d22f42b url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453169-475620-v2-ba5c1081036e9a7cb382cf55a530c001-1440w.png alt={TEXT?}]
- Orient Joint to World:打开后关节的轴向会与世界轴向对齐。
- Primary Axis:设置朝向下一根骨骼的轴为哪个。
- Secondary Axis:设置朝向骨骼链正面的轴为哪个(比如膝盖正前方)。
- Secondary Axis World Orientation:设置骨骼轴的正负朝向。
- Orient children of selected joints:是否影响当前关节下的子关节(默认我们一般都是选择所有关节执行此操作,所以可以不用勾)。
- Reorient the local scale axes:重新确定关节的局部缩放轴方向。
如果执行的时候报错说:
可以先将报错的骨骼冻结变换。
蒙皮(Skinning)(TODO)
什么是蒙皮?
蒙皮是一种将可变形模型与骨骼绑定的方法,通过控制蒙皮权重在模型上的分布,可以控制每个关节对模型变形的效果。
三种不同的蒙皮类型
在Maya中蒙皮有三种不同的类型:平滑蒙皮(smooth skinning), 刚体蒙皮(rigid skinning)和 间接蒙皮(indirect skinning)。
平滑蒙皮
平滑蒙皮是指使用多个关节共同影响模型上的同一个顶点,一般在软体角色绑定中使用较多(人、生物)。[upl-image-preview uuid=99769ef4-943b-4aa2-b7ec-42fead3809cd url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453178-470991-v2-fa8b88305b303f4024ad0c332e0ca9eb-1440w.png alt={TEXT?}]
刚体蒙皮
刚体蒙皮可以通过骨骼控制一些顶点Set或者CV点、晶格点等,我个人用的不是很多,等后续用到了解下再来补充。
间接蒙皮
比如晶格,就是间接蒙皮,通过少量点控制一堆物体上的点。
蒙皮工具和流程
蒙皮工具一般指菜单栏 - Skin - Bind Skin。选择所有参与蒙皮的骨骼 加选物体,点击BindSkin即可(还没研究很深,后面再来填坑)。[upl-image-preview uuid=7fd64f9c-281f-468d-9099-07b678548930 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453221-29237-v2-bc13f68e056188ec9c43708762b0b6a1-1440w.png alt={TEXT?}]
[upl-image-preview uuid=4dbe4fc7-4049-4c56-a04f-622999e5f451 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453226-915164-v2-4a3cd4e67e36ad5fc72630a3d6cee02e-1440w.png alt={TEXT?}]
IK - Inverse Kinematics
IK是什么?
IK全称 Inverse Kinematics ,中文名叫反向动力学,是一种常用的多骨骼反向控制器。
我们为什么要使用IK
在绑定人物和角色的时候,我们一般会遇到控制多节骨骼的末端骨骼需求,在实际运用中一般是指控制手、脚等,我们希望在控制手脚运动后手臂和大小腿能跟着一起运动。
那么问题来了,对于骨骼的创建我们一般是使用父子级关系,而在前面的介绍中、父子级关系只允许父级影响子级的变换,而无法让子级影响父级的变换。
IK就是为了解决这种问题而诞生的,IK可以很方便的让我们通过子级骨骼控制父级骨骼的运动,我们可以通过一系列的规则控制IK的运动轨迹,达到目标效果。
IK的种类
常见的IK分为两种:基础骨骼IK和SplineIK,基础IK就是我们最常用的IK,SplineIK可以基于样条线控制骨骼的走向,属于样条线驱动骨骼绑定。[upl-image-preview uuid=1f024d6f-c036-4eb9-a837-d383b6864a88 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453235-637409-v2-cf573b8428cb813317d357c7b32ff15e-1440w.png alt={TEXT?}]
基础IK
基础IK提供了两种解算器以供IK运动解算:Single Chain IK solver 和 Rotate Plane IK solver。
两者的区分方式非常简单,SingleChain的IK Handle旋转可以控制IK的朝向,RotatePlane的IK Handle旋转无法控制IK朝向,需要使用Pole Constrain约束IK朝向。
简单来说:不需要PoleVectorConstrain的IK就选择SingleChain,需要PoleVectorConstrain的IK就选择RotatePlane。
IK在Maya中参与实现的相关组件(IKEffector和IkHandle)
IK在maya中主要通过 IKHandle 和 IKEffector 两个组件共同作用而来,IKHandle内部有IKSolver,可以通过给定的起始骨骼 + 最终Effector计算出所有起始骨骼下的子骨骼变换矩阵。
他们之间的层级关系如下所示(Joint1是起始父级骨骼,Joint4是应用IK的最后一级骨骼)。[upl-image-preview uuid=e61f2727-a816-4c4b-9eee-cc076df78895 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453251-608384-v2-7b61237c2ff2a383ced30ff8d9e60f69-1440w.png alt={TEXT?}]
需要注意的是,IKEffecter是和最后一级骨骼平级,他会直接拿取最后一级骨骼的Transform和OffsetParentMatrix,OffsetParentMatrix 大致的作用就是控制当前骨骼的上一层级骨骼的位移旋转和缩放(前面有讲到)。[upl-image-preview uuid=17dd5e8e-eedf-401a-a3fa-c1fa11fdd01f url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453258-329132-v2-b05e6e469d07c1d19a782278ac6f9b59-1440w.png alt={TEXT?}]
[upl-image-preview uuid=eeec7c22-dbe6-4aa0-b474-d8b48178b6d4 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453262-942126-v2-28800d561960e74c990ff095adac92f3-b.jpg alt={TEXT?}]
IK的创建方式 - 基础IK
选择菜单栏 - Skeleton - Create IK Handle,然后点击需要参与IK计算的父级 - 子级节点,Maya就会自动创建IK控制器。或者按住Ctrl,点击Outliner中的两根骨骼即可创建IK。[upl-image-preview uuid=21b1a3e9-4f7e-4914-bab5-a7ccbc5400d4 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453270-889431-v2-d5151dc139291d68137cccae21c4ff12-1440w.png alt={TEXT?}]
[upl-image-preview uuid=c86d9168-5054-4bc0-a2a9-caacebd33b44 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453274-871890-v2-3ade4c86e99bd3eefdb5087ff6416cf3-b.jpg alt={TEXT?}]
SplineIK
- 创建一根骨骼链。[upl-image-preview uuid=e3c585e4-6acc-4e69-834d-ac8f78fdee1f url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453281-665306-v2-5d8e0b27c637ce6f8cf6c4f4621f6484-1440w.png alt={TEXT?}]
- 应用SplineIK(如下图所示)。[upl-image-preview uuid=dde194ab-30dd-4c0b-8a08-248cb2b1f91a url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453287-515424-v2-311ba78bafff1735b67bf5c4746bacdf-b.jpg alt={TEXT?}]
这里如果不想自己创建驱动SplineIK的Spline组件可以直接选择SplineIK中的AutoCreate相关参数,省时省力。[upl-image-preview uuid=7c83df59-14bd-4925-9ed5-5a1c9d8e9462 url=https://hytn-1301783308.cos.ap-chengdu.myqcloud.com/2025-03-31/1743453293-346717-v2-33ab3581cef022e7d5f49f4a30f0a4dc-1440w.png alt={TEXT?}]
常见问题
问:创建IK的时候好像没办法选择骨骼?
答:这是Maya的Bug,可以尝试 选择父级节点 - 点击IK工具 - Ctrl + Z撤回一步 然后就可以选择了(或者使用Ctrl+左键点击Outliner的节点即可)。
- 作者:六六
- 链接:http://blog.cathi.cn/article/1c7a6e7f-fdce-80e0-b892-dc0359ad42c9
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。