如何在Maya流程下创建一整套面部绑定
今天我们要给大家分享的,是在Maya中进行的一种面部绑定方式,不是那种特别基础的关节置换或者是体重绘制,也不是只能为游戏服务的绑定。我们要关注的是在Maya中常常被忽视的部分---实用的节点功能。
可能大家乍一看“节点”这个单词会很恐惧,在它背后可能会涉及到和复杂绑定相关的定位器、条形和其他的复杂系统等等。但是今天我们要说的这些步骤是将blendShapes、关节和节点结合在一起,来形成具有各种情感、高度灵活的角色。一起来看吧。
确保边缘循环遵循肌肉线条
在开始绑定工作之前,先来做一些准备工作。一个角色是否能够灵活运动,特别是像我们今天说的角色面部表情的活动,是和要做绑定的模型本身,以及它的拓扑有着分不开的关系。拓扑不仅要简洁干净,而且边缘循环一定要遵循自然的肌肉线条,这一点尤为重要。只有这样,才能使面部表情的变化更贴近于真实的感觉。
创建第一组blendShapes
如果对于拓扑的结果已经相当满意了,那就可以开始创建第一组blendShapes,在这个过程中可能会出现一些有问题的网格区域。这些blendShapes涵盖了我们日常生活会出现的各种主要表情,应该算是比较全面的,接着要详细划分出关键区域,比如嘴和眼睛的部分,然后再找到像微笑、皱眉、以及闭眼这样的基本形状。
无论大嘴还是小嘴都要添加blendShapes
使用这种绑定方式,可以通过8个主要控件来控制嘴唇。无论是大嘴还是小嘴都要添加blendShapes,可以作为嘴部撅起的部分。这样操作单个控件基本上就可以拉动嘴角,通过4个blendShapes同时实现多个嘴部的表情和运动。
将表情分成左右两侧
在完成主要表情创建之后,进入第二阶段。接下来的工作就是把表情拆分成左右两侧,这样才能从各个角度单独进行创建。一个快速实现的方式就是建立blendShapes节点,编辑其权重,这样操作就只能对模型的一侧有效,在复制之后,可以对某个特定地方进行下一步操作了。
下一步,建立骨架
进行面部绑定的下一步就是要创建骨骼,要把关节和blendShapes结合起来去构建角色特征。blendShapes的优势就是可以提供更精确的表情,而关节可以实现面部区域的拉伸,增加更多的表情灵活性。
是选择在角色面部创建控件,还是使用单独的用户界面,可以根据自己喜好进行选择,或者可以让以后会用到绑定结果的动画师来选择。主用户界面用于控制大多数的blendShapes,而其他一系列控件可以辅助操控比如需要三个轴向移动的绑定工作。
直接连接要避免在这样的场景使用
如果使用单独UI,就要采用不同的绑定方式。传统方式是使用Constraints将特定关节和主控件绑在一起,控件也会自然地跟着头部的运动方式进行。使用UI时,控件是静止的,不会跟随头部一起动。所以使用Constraints会把关节锁定在控件也就是说头部动了,关节保持不动。解决问题的方式就是直接连接,避免使用Constraints。
直接连接也有需要解决的问题
通过“Connection Editor”进行直接连接会强制与控件匹配转换、旋转和缩放属性。关节会固有的应用转换值,这些转换值在连接时会发生改变。我们可以利用偏移系统,或者在每个关节位置创建定位器并冻结变形,然后将关节“Parent Constraint”到定位器。所以,具有零属性的定位器可以驱动关节。
定位器已经就位,还有关节父约束,我们可以使用“Connection Editor”将控件从UI属性连接到定位器。如果定位器是主控件的父级,无论UI控件在什么位置,都可以跟随其移动。另外关节会相对于头部位置移动,而不是锁定到UI,这样的话我们可以把UI放置在场景中的任何位置。
接下来就要连接blendShapes并引入第一个实用节点,即Condition节点。它会获取一个值,比如说是控件的Y转换值,如果超过或者低于特定值,它会输出另一个值。比如,如果控件在Y转换中超过0,那么就可以触发“微笑”blendShapes,如果没有,就可以不用管它了。
打开“Node Editor”,选择Lip_Left_Outer_Control,单击“Add Selected Nodes to Graph”按钮进行导入。然后在“Node Editor”中按“Tab”键,并在小窗中键入“Condition”,从下面菜单中选择并进行创建。最后选择角色模型头部的主要blendShape节点,称为“Head_BShapes”,再按照第一步进行导入。
将“Lip_Left_Outer_Control”中的“Translate Y”属性连接到Condition节点中的“First Term”属性;将“Second Term”值设置为0,“Operation”改为“Greater Than”;接着将“Lip_Left_Outer_Control”中的“Translate Y”连接到“ColorIfTrueR”。也就是说当“First Term”大于“Second Term”的时候,才会使用真实值;将“OutColorR”属性连接到“左侧微笑”左侧节点,移动控件看看有什么变化。
只有在Y轴移动时才会触发微笑blendShape。如果改动过大,可以使用multiplyDivide 节点进行调整并减慢移动速度。在“Node Editor”中按“Tab”键,创建multiplyDivide节点。
将“Lip_Left_Outer_Control”的“TranslateY”连接到“multiplyDivide node”节点中的“input1Y”,“OutputY”连接到Condition节点的“ColorIfTrueR”。
当你移动Lip_Left_Outer_Control控制器时,笑容看起来没有什么不同,直到你调整multiplyDivide节点中的Input2X属性,即Input1X值除以的量。由于它将Y平移值减半,所以此值更改为0.5后会使融合变形移动的量减半。同样,当Input2X属性改为-0.5时会将其反转为一半,这在连接后续的控制器时很重要。
这只是对微笑融合变形的添加,但你现在可以按照相同的过程将X轴的移动连接到嘴部控制器上。在对称的方向上,这里应该在X和Y运动上加一个负号,连接好皱折和皱眉的变形,确保你将“Condition”节点中的条件更改为“小于”。这是为了确保只有当输入的值低于0时才会触发那些融合变形。
并不总是需要创建新节点来绑定新的控制器。比如说下颌运动,你可以使用简单直接的连接方式来控制颚关节的旋转,而没必要新建实用节点。连接后,Maya会默认你在连接之后自动创建一个unitConversion节点。
如果你发现下颚旋转太快,则可以编辑unitConversion节点中的Conversion Factor属性,没有必要新建另一个multiplyDivide节点来减慢它的速度。
只需要几个节点,你就可以看到目前取得的成果,从这里你可以按照自己的方式工作并连接其余的控制器。我们可以使用blendColors节点来完成很多工作。哪怕这时我们使用的RGB值,同样也可以利用这个节点在两个其他值或控制器之间进行混合,来实现切换和混合的功能。
一个口腔控制器的重要部分就是无论下颚在哪里它都能让嘴唇粘在一起。想象一下角色需要咀嚼东西,即使下颚移动,嘴唇都需要保持密封。为了实现这个目的,你可以使用BlendColors节点来选择下唇驱动器定位器是否遵循下颌或上唇移动控制。
首先,你需要将唇部定位器分为三组:Upper_Lip,Lower_Lip和Corner_Lip,并确保它们的中心点与下颌关节处于同一位置。这是因为它们围绕同一点旋转。接下来将StickyLips_Control,Lips_Control,Lower_Lip组以及Jaw驱动定位器导入节点编辑器并创建一个新的blendColors节点。
将Lips_Control.rotate属性连接到blendColors.color1属性。颚定位器的旋转属性连接到blendColors.color2属性;将blendColors.output连接到Lower_Lip组的旋转属性。这时如果你通过调整BlendColors节点上的Blender属性,下唇就将在两个值之间进行混合;将StickyLips_Control的Y移动连接到Blender属性,就可以用控制器来驱动它了。
提示,你可能会发现由于融合变形的线性特征,眼睑在变形时会穿插过眼球,而不是在眼睛上方移动。在这种情况下,你需要在眼睛部分闭合时创建一个融合变形的中间点。将其添加为融合变形的中间目标,然后在变形成最终形状前作为变形的目标形状。
还有两个需要提到的就是Reverse和plusMinusAverage节点。反向节点可以翻转输入的值,plusMinusAverage节点类似于multiplyDivide节点,区别是它可以运行不同的数学方程。