UE4之Control Rig

Control Rig

什么是ControlRig?

ControlRig是一套绑定系统,我们可以利用这套系统可以在unreal引擎中而不用在DCC软件中key动画,我们也可以快速的利用此系统来对动作捕捉产生的数据进行修复,那么既然时一套绑定系统,那么它也拥有自身的一套骨架:

就像上面那些红红绿绿的环就是使用ControlRig创建出来的,躯干以及头是FK控制,四肢是IK控制的,这样极大的方便了动画师对于动画的调整。很明显可以看出这一套骨骼和Skeleten的骨骼不相同,Skeleten是由DCC软件创建出来的骨骼,这些骨骼全部是由FK控制的,因为在导入unreal时,角色的各种IK关联都会被打断,所以我们在unreal中key动画就会非常困难,所以ControlRig诞生了,在引擎中设置动画、设置重定向或使用IK,都可以使用ControlRig中完成

使用ControlRig绑定

ControlRig基本原理介绍

虚幻中ControlRig的原理类似于Maya中的绑定原理,什么?不会maya。Ok,没有问题。

以人做比例,当我们弯腰的时候,我们的腰首先会进行弯曲,然后是我们的一节一节脊柱在进行弯曲

我们的腰部影响了脊柱,换句话说就是弯曲是由腰想脊柱传递,这种自下而上的关系叫做FK,就像我们平时玩的洋娃娃,

如果伸手去拿一个遥控器的话,大脑会给手下达命令:拿遥控器,这个过程中手是不能直接拿到遥控器的,要想拿到,就需要手臂变长,所以手就会带动大臂和小臂伸直,这个过程自下向上的过程叫做IK,就像提线木偶,皮影。另外需要大臂和小臂的角度永远小于180度,在虚幻引擎中,我们会在角色的肘关节和膝关节后方加一个物体,来吸引着肘部,避免大臂和小臂、大腿和小腿的角度超过180.

创建ControlRig资产、导入网格体

1.加载ControlRig插件

2.在ContentBroswer中创建ControlRig资产

3.选择导入的骨架,现在ControlRig是空的,里面没有网格体,也没有skeleten,所以需要导入网格体,网格体里面含有skeleten,

导入完成之后如下图所示:

FK绑定

对于IK来说比较简单,就是自下而上的控制是一个正向控制,也就是人物的躯干头部这些地方

在绑定之前首先要说一下,使用ControlRig的层级,它的层级是与Skeleten的层级分离开的,为了保证controlrig的各层级的位置不因其他骨骼的变化而变化,而导致其控制的骨骼发生更奇怪的变化。所以需要分离开来。其次就是controlrig的层级里面的物体分为两类,一个是space,就好像maya中的Group一样,另一个就是Control,对骨骼产生实质性影响的东西,就是这个Control的运动带动了其所控制的骨骼进行运动,他所控制的骨骼会add control的相对变化值,从而达到对骨骼的控制,

1.创建root Control,注意将角色的骨骼层级折叠,然后在RigHierarchy中右键,创建control

2.设置control的名字、形状、位置

3.选择当前位置作为初始化位置

这个操作就是为了让当前的transform值归0,将我们进行位移的值也就是调整control的transform值添加至offset中,

我常用的做法是将control移动至所要控制的骨骼附近,然后选择从最接近的骨骼初始化transform,然后调整Gizome Transform。

4.创建剩下的脊柱、脖子、头部的层级,需要注意在root下要创建一个offset control。

5.接下来开始写蓝图代码,control rig有一个rig图表,就像动画蓝图中的anim图表一样,早期的版本中也含有eventgraph,不过在426的版本中取消了,

我们选择正向解算,相同的有正向解算,也就有反向解算。

首先使用set transform设置我们需要控制的骨骼,然后获得control的位置,把control的位置给到骨骼的位置这样就可以控制骨骼的transform了,也就是control rig FK的控制原理,

讨论一下上面的两个节点

虚幻426将这些节点进行了优化,即想选择我们作用对象的类型接下来是名字,设置transform的时候作用对象就是Bone,获取transform的时候作用对象就是Control,特别主义的是设置骨骼transform的时候需要将作用于子级勾上,连接完节点之后立即产生效果,可以拖动root control来进行测试,是否带动了整个角色进行移动,在移动之后,切记不要使用control+Z,进行撤销,只需要点击编译,即可初始化位置。

以上躯干、脖子、脑袋的FK已经绑定完成。

IK绑定

对于左臂和右臂我们需要使用ik来进行绑定,我们的想法是通过手的动作来影响大臂和小臂,同时在手肘的位置创建一个Control来控制ik防止大臂和小臂的夹角超过180.

从肩胛骨开始,肩胛骨的控制是FK的,所以我们在spine的层级创建两侧的肩胛骨,然后连接蓝图

注意:该步骤及其容易出现问题,需要注意当将control调整至合适的位置后需要使用当前的位置初始化,蓝图节点一定要重新创建,不要复制上面正在使用的节点。

接下来就开始IK了。

创建一个节点BasicIK,光从名字就可以看出这是基本的IK,他需要一个起始的骨骼,结束的骨骼,哪一个骨骼对骨骼链产生影响,是否受到牵引,也就是手肘有一个牵引的力来保证大臂与小臂的夹角小于180.

1.创建Hand、Elbow的control,注意每个control的父级均为Sapce

2.设置影响的骨骼、受影响的骨骼,极向量

节点分析:

通过设置itemA、itemB来确定ik影响的骨骼链范围,设置哪根骨骼的运动会对骨骼链产生作用,下文叫做效应器骨骼,效应器骨骼的transform读取的是当前hand control的transform,这样的话,当对hand control进行移动的话,骨骼链会产生ik的力通过大臂传给小臂,小臂和手为子父级关系,从而带动手运动,手肘后的control作为一个极向量控制大臂小臂夹角小于180.如果连接节点后发现,手臂扭曲,则需要检查一下轴向设置是否正确。扭曲的话,可能需要将1变为-1.

现在我们拖动hand上的control就可以影响整条手臂了。

使用ControlRig序列key动画

将创建好的controlRig拖入视口中,此时会自动弹出一个添加了controlrig的sequence,这个时候我们只需要调整对应的控制器便可以在上面key帧了,快去试试吧。

思维发散:

使用controlrig实时接入动作捕捉数据

因为动作捕捉的数据都是fk的,首先我们要创建与动捕模板对应的copntrolrig的骨骼系统,系统比动捕系统复杂,效果不是特别明显,有的时候效果反而会变差,然后通过livelink或者网络socket来实时获取对应骨骼的transform,然后将值给到controlrig上。疑问:骨骼的IK该如何通过动捕数据来进行调整,如何动态的调整系统的ik效果。系统的延时会不会很大?

猜你喜欢

转载自blog.csdn.net/weixin_41363156/article/details/114645792