Blender骨骼绑定基础教程及其原理

您所在的位置:网站首页 3D绑定骨骼花多长时间 Blender骨骼绑定基础教程及其原理

Blender骨骼绑定基础教程及其原理

2023-08-04 17:10| 来源: 网络整理| 查看: 265

从父子关系说起

在Blender中,任意两个物体原本都是孤立的,它们相互不干扰,各自移动各自的,各自旋转各自的。

那么如何使一个物体的移动跟随(服从)另一个物体呢?其实很简单,只需要将物体P设置成物体C的父亲(parent)就可以了。

在Blender中,先选中儿子,再选中父亲,按 Ctrl + P,选择 Object 即可。可以看到两个物体之间有一个连线,表明它们已经建好了父子关系。

另外我们可以在右侧的大纲视图中看到两个物体已经变成上下级的层级关系了。

现在,我们就可以通过挪动Cube.P物体来操控Cube.C了

父子关系是可以嵌套和组合的,父亲只能有一个,但是儿子可以有很多。如下图所示,构建了一个这样的父子关系,可以仔细琢磨一下这个关系。

上图的关系配合下面这个动图看效果更佳。

运用上面这些东西,就可以创建一些简单的机械臂结构了。

骨骼的引出

如上图所示,仅使用父子关系,似乎也可以创造出手臂的活动结构,那为什么需要骨骼呢?在这里,其实你会发现,上述所有的活动结构都是多个孤立对象组合在一起的,换句话说,每个可以活动的部件都是一个独立的mesh(网格体)。

那么如果整个手臂,或者整个角色是一整个mesh,怎么让它的一部分活动起来,而另一部分不动呢?

mesh的本质就是由一堆点(vertex)构成的,如果我们可以让其中的一部分点移动起来不就好了吗?

那么怎么让一个mesh中的一部分点移动起来呢?我们需要一个指导这些点如何移动的物体,没错,我们需要一个这些点的parent!在3D建模的世界里,顶点仿佛就是人身上的肉和皮肤,而指导这些肉如何运动的就是骨骼,这个形象的类比应该也就是骨骼这个词在3D世界中出现的来源吧。

骨骼就是这样的一个物体,它不是网格体,但是它是一个可以指导网格体上某些顶点移动,换句话说,骨骼就是顶点的父亲。

顶点与骨骼的联系

那么,如何建立顶点与骨骼的联系呢?软件怎么知道哪些顶点应该被哪个骨骼所影响呢?

这就需要使用顶点组了。顶点组顾名思义就是把一堆顶点放在一起,让他们成为一个组。而且,某一个顶点还可以同时存在与多个组里。

这是一个普通的平面,我们对它进行几次细分,得到下面这个情况

我们在右侧的面版里,找到顶点组(Vertex Groups),点击右侧的加号,新建一个顶点组,给它安排一个名字,这里我取的是右上角的顶点组

此时此刻,它还是一个空的组,看见下面的 Assign(赋值/赋予/分配的意思)和Remove(移除)按钮了吗?在编辑模式下,我们选中一些点,然后点击 Assign,就可以将选中的点赋予到这个组里面了。

这样即使取消选择状态,我们只需要通过顶点组,点击Select,就可以选中这个组里面的所有顶点,非常的方便。

现在,我们来实际建立起骨骼,看看骨骼与顶点,顶点组之间是怎么联系的。

我们先建立一个这样的圆柱体,中间的楞细分一下。假设它是一个手臂,把它的底部移动到大致与地平面对齐。

接下来,我们在对象模式下,新建一个 Armature -> Single Bone

这个时候,你可能什么也看不见,没关系,可能是圆柱体把骨骼挡住了,按下 Alt + Z 开启透显模式,就可以看见了。

在右侧的属性面板,可以看到骨骼特有的三个小面板,如下图所示,我来说明一下我的理解,不一定对,第一个小人一样的图标是表示整个骨架,里面有整个骨架的属性设置,一个骨架包含多个骨骼嘛。

第二个骨头的图标是指当前选中的这跟骨骼的属性。

第三个蓝色的骨头上面缠绕了一个传送带的图标,是和骨骼约束有关的属性。

我们可以在整个骨架的属性中,找到 Viewport Display,里面有个 In Front ,也就是始终在前面显示,这样,我们的骨骼永远显示在最前面(不会被其他物体遮挡啦,哪怕它真的被遮挡)

另外,我们把 Names 也勾上,这样就可以看到每个骨骼的名字了!这会非常的有用。

接下来选中骨骼,然后进入编辑模式,挤出一段骨骼,变成下面的样子。顺便,我们把名字也改一下,下面的叫BoneA,上面的叫BoneB。我希望用两个骨骼来控制整个圆柱体模型,就像手臂一样。

我们先来查看一下圆柱体的顶点组,你会看到,它是空的,没有任何顶点组

接下来就是神奇的时刻,我们先选中圆柱体对象,按住shift,再选中骨架,按 Ctrl + P,选择 With Automatic Weights(自动权重),执行了这一步之后,骨骼已经可以控制我们的网格体了(就是整个圆柱)

姿势模式(Pose Mode)

在对象模式下,仅点击整个骨架对象,然后按Ctrl + Tab进入姿势模式,也可以在左上角的模式切换栏那里改。因为骨骼对象,只有对象模式,编辑模式,姿势模式,三个模式,按tab是进入编辑模式,所以按Ctrl+Tab就直接进入姿势模式了,而普通的网格体有更多的模式,按Ctrl+Tab则是弹出轮盘让我们选择。

进入姿势模式后,我们就可以摆弄我们的骨骼了。

自动权重为网格体创建了与骨骼同名的顶点组

这时,我们选中圆柱体,看看它的顶点组信息,你会发现,里面有两个和骨骼名字一摸一样的顶点组。一个叫BoneA,一个叫BoneB。

选择一下这些顶点组,看看它们都包含了哪些顶点。可以看到,BoneA 是包含了下半部分的,BoneB 则是包含了上半部分的顶点,这刚好与骨骼的位置相关。

这就是自动权重所做的工作,如果我们是一个完整的人体模型加上完整的人体骨骼,比如有50个骨骼,自动权重后,就有50个与骨骼名字相同的顶点组。这就是骨骼操作顶点组的秘密了。

何为权重

我们知道骨骼操纵顶点的原理了,那骨骼具体是怎么影响顶点的位置的呢?影响多少呢?这就需要权重信息来帮助完成这项工作。

先看下图,这里有4个顶点,分别命名为1,2,3,4,有两个骨骼分别是A,B,顶点们被分配到两个顶点组A,B

很显然,属于顶点组A的顶点当然会被骨骼A影响,也就是1,2会被影响,3和4肯定是不受影响的。这是有和无的区别。

虽然1和2都在A里面,但是它们收到影响的程度都一样大吗?还不一定,这就是权重起的作用,权重就是一个0~1之间的数值,类似0.23,0.654之类的,表示受影响的程度,也就是权重二字的本意了。

就拿上图来说,如果顶点1和2的权重都是1,那么它们是100%受骨骼A影响,如果顶点1和2的权重都是0,那么虽然它们在这个组里,但是受影响的程度都是0,不管怎么动骨骼,它们也不会动。

在Blender中,可以使用Ctrl+Tab,选择Weights Paint模式来查看权重。当前选中那个顶点组,就会显示这个顶点组每个顶点的权重信息,约靠近红色,表示约接近1,约靠近蓝色,表示约接近0.

我们可以使用笔刷来修改权重,满足我们的需求。

我们把BoneB的权重修改到只有上面一点点

然后在姿势模式中摆动它,如我们所料,只有顶部那一些顶点会随着移动了。

后记

写这篇文章主要是想解释一下骨骼操控网格体背后的原理,其实并不复杂,很佩服当初设计出这些技术方案的先驱者们。也希望本文能对你有所帮助:)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3