物体的关联运动
我们都知道默认状态下,创建的物体间都是相互独立的,意味着一个物体的运动对另一个物体不会有影响。 要让物体间的运动相关联,我们第一个方法就是实现父子级的关联。 选中两个物体后,通过CTRL P,建立父子级关系(后选中的物体为父级)。 在父子级关系中,注意子级可以自主运动而不影响父级物体,父级的运动会带动子级进行保持相对位置关系的运动。 父子级关系同时具有传递性,形成链条式关联。 所以我们能够通过父子级关系的原理,实现简单的机械臂。 由一级臂带动二三级臂进行运动,二级臂也能够带动三级臂进行运动,三级臂能够独立运动。 如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/175a11360d8a4365bb85643ce41070ce.gif#pic_center)
骨骼的引入
父子级关系确实能够实现物体的运动动作,但存在一定的问题: 单纯的父子级关系只能管理相互独立的网格之间的关系。 有的模型做好之后整体就是一个网格,那我们该如何来实现动作呢? 网格运动的本质,就是组成网格的顶点的运动,所以我们通过骨骼来管理一系列的顶点,即顶点组,并实现通过骨骼对顶点组的控制。 现在有很多兄弟都是3d从业者,或者原画,甚至是零基础的带学生入行。美术生可能比较熟悉物理上的骨骼这一套东西,我们说现实的骨骼有一些特点: 1.现实的骨骼他具备各种各样的实体 2.现实中的骨骼对应了与不同位置肌肉的关系,即控制肌肉运动 cg的骨骼,我们说跟物理的骨骼有相似的地方,主要是: 1.不存在渲染意义上的实体,骨骼本身是一个概念性的东西,没有实际的点线面数据,但我们可选择不同的网格样式来现实不同类型的骨骼(后续的章节中会涉及) 2.骨骼对应了顶点组,即通过骨骼的运动,来控制网格中一系列顶点的运动,从而实现对完整网格中不同部分的差异化控制 ![在这里插入图片描述](https://img-blog.csdnimg.cn/a64cd5a8f9c04990af6db7a34360ed3c.png)
blender的顶点组
一般来说,我们得人工地分配顶点到顶点组中,即人工来划分顶点组。 按blender的逻辑来说,无论新建时是否框选了顶点,新建的顶点组都是无顶点的。 我们必须划定对应的顶点到顶点组中,才能看到对应顶点组中有顶点数据。 “群组001”中无顶点数据,“群组”中有该圆柱最上两层顶点的数据。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/3b2760b4ad3c4ca49d837eced4b55d2b.png)
简单骨骼的建立与绑定
那么接下来我们在这个圆柱的基础上建立骨骼,实现骨骼和顶点组的对应关系,并赋予不同的顶点权重。(即骨骼绑定) 选中物体和骨骼,通过CTRL P做自动绑定,虽然看似没有变化,但是我们能从面板这里看到,网格已经是模型的子级了。 接下来我们进入pose模式,通过骨骼就能够肆意拿捏这个圆柱了。 在权重绘制模式下我们可以看到不同的骨骼对应的顶点权重。红色权重最高,蓝色权重最低。 我们可以通过不同的笔刷来人工调整顶点权重(跟画贴图的原理类似)。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/851b94e250154692a1779e455d868e1c.png)
人体骨骼的建立
以人体模型的骨骼绑定过程为例,我们导入一个人体模型,调整其缩放系数使其尺寸与现实中的尺寸类似。 首先我们建立跟根骨骼,注意骨骼在默认创建状态下是竖直向上的状态,我们要旋转其使之局部坐标与世界坐标相对齐。后续根骨骼往往用于控制骨骼动画中角色在世界空间内的整体移动,若坐标不对齐可能出现移动的位置和习惯的方向不一致的情况。 通过e挤出和切断连接(但不切断父子级关系)的方式,我们分别建立人物中轴上的一系列骨骼。注意根据骨骼对应的控制部分的尺寸差异,骨骼本身的尺寸也应该做出差异,方便自动绑骨。 做出右侧的手臂和手指的骨骼,记得通过多从y轴和x轴视角观察,及时对齐骨骼和网格。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/383820185d6a4b979578727cb4fee151.png)
通过游标高效建立手指骨骼
像通过x,y轴的观察对于结构较大的部分来说对准的效率较高,但是对于手指这种体积小还重叠度非常高的部分基本上就折腾不动了,所以我们这里通过选择环边并移动游标的办法来建立手指骨骼。 选择环边 shift s移动游标至选中物体,则自动将游标移动至选中的游标中点。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/438b61c120a4486a8888a6608450cfcf.png)
选中项移动到游标,确保骨骼在手指中间位置。 右手手指骨骼全部绑定完的效果 全部重命名,准备进行对称操作。 注意这里有一个问题: 所有骨骼的名称只有结尾为R或者L的部分才会被对称复制到另一侧。 像我上面这种命名方式的后果就是: 调整命名后对称复制成功。 完成右腿的骨骼 对称完成骨骼构建 ![在这里插入图片描述](https://img-blog.csdnimg.cn/9140e799bf2a4968a841d089139df794.png)
完成绑骨
我们直接用自动权重完成绑骨。 扭一下骨骼看看骨骼功能是否正常 查看权重的情况 那么到此我们就获得了基本的控制顶点组的人体骨骼。 在进行下一步之前,我们安装bone layer manager插件。安装好后,会在t面板侧出现bone layers栏目。与blender内置的层次功能相比,bone layer manager能够提供快速的骨骼分层,骨骼层命名,骨骼层可见调整功能。 在后续高效的tgt骨骼创建,ik创建,控制器创建等方面。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/75246e880a294c0092434b659df0e2bc.png)
TGT骨骼的建立
首先我们把root骨骼和deform骨骼分成两层。 复制全部骨骼(除root外),移动至target层。 注意上图的全部骨骼由于复制,自带了.001的尾缀,我们通过批量重命名把.001更换为.tgt。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/bee8091bb31f4a05b6175279571c324a.png)
ctrl f2 批量重命名
在姿态模式下,我们选定tgt骨骼和deform骨骼,ctrl shift c添加复制变换,实现tgt和deform的对应。 在deform视图中,我们可以看到对应的骨骼变绿。说明对应的骨骼已经完成了复制变换。 在复制变换的数值替换模式下,原有的deform骨骼已经无法直接控制网格,转而由tgt骨骼实现控制。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f0e0e17c8ae8464da64176420ced4f81.gif#pic_center)
通过脚本快速建立TGT骨骼
显然,通过逐一绑定的方式太匠心了,我们这个简单的模型出来都有50+的骨骼,那那些带头发带衣服还要做随风飘动动画的角色的骨骼数岂不是飞天遁地。 我们毕竟不是什么绑骨工匠,能用脚本的活儿我们还是尽量用脚本来搞定,后续会有专门一期简单的脚本解说,这里我们就简单带过吧。 脚本主要通过blender的bpy(blender python库,blender自带,基本只能在blender环境下跑,pip也装不上)。主要通过对deform进行复制后,选中两部分,一部分为deform,一部分为tgt副本,然后更改tgt副本中各骨骼的名字,增加对应约束,并设置参数为:复制变换。 接下来我们运行脚本,直接创建出tgt骨骼,并且分离骨骼图层。 可以看到tgt骨骼功能正常,tgt骨骼建立完毕。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/dc991f3a1ae442c3a3b9e63a99be3cbc.gif#pic_center)
|