Notifications
Article
高级动画绑定快速指南:人物与属性的交互
Updated 3 days ago
1.2 K
1
本文将由资深动画师Jean-Sebastien Campagna为大家介绍用脚本属性添加骨架动画的实验性方法。
作者:Jean-Sebastien Campagna,2019年9月5日;预计阅读时间20分钟
在今年早些时候我们发布了新的Animation Rigging package(动画绑定包),目的是为用户提供一套完整的constraints(约束)解决方案,让用户在运行时就能创建新的骨架,用以替换或更改动画。
在设计动画包功能时,我们探索了各种可能,努力拓展运行时与创作的边界。本文将介绍动画绑定最新的实验功能。请注意下文的状态机都只是实验性的,并不能代表产品化的创作方法。我们想试着让一个技术动画师不用编写代码就能在状态机中创建约束交互。
希望本文能启发你的灵感,为你每日要面对的动画问题找出新的解决方法。我们深信唯有了解你们的发现和需求,才能开发出一个完整可行的动画绑定方案。

基础知识

本文将主要讨论三个部分:Rig Builder、Rig和各种Constraints(约束)。如果你对这些东西不熟悉的话,我们建议你先学习之前有关动画绑定的博文。
为了方便跟上进度,我们建议你在这里下载文中的项目,也可在下方下载。👇

引子

为了在已有的Animator动画控制器(带只读片段的状态机逻辑)环境中让骨架约束活动起来,且不带任何用户编码流程,我们在Animator状态机的Layers中,尝试了一种新方法。

在现有的状态机中补全动画绑定

为了在已有状态机的只读动画片段上正确地同步骨架和约束,我们利用了Animator状态机的Layers(层级)。
我们能使用Layers和“Sync”(同步)功能,在已有的本地动作状态机中随时为任何状态添加骨架激活/禁用片段。
我们使用动画窗口创建了几个片段(储存在*Rig层中),将骨架和约束属性应用到了动画中。这里我们仅给不同骨架和约束的Weight(权重)和Source Weight(源权重)属性添加了动画。
我们使用了“Player”脚本以激活或禁用部分Weight Layer属性,实现不同的握枪方式。这是脚本上控制握枪方式的滑动条。

忍者的枪械


创建忍者的骨架

Rig Builder组件上的Rig Layers能让你重新给骨架/骨架部件排序,确保栈计算和解算结果正确,让骨架组合和解算顺序更具灵活性。比如,我们将示例忍者的Shoulder Offset Rig排序故意排错,看看会发生什么。
如果将Shoulder Correction Rig移到Rig Builder计算堆栈的底部,便会打乱正确的解算过程。
当Shoulder Correction Rig放回Rig Builder计算堆栈的顶部时,动作解算又正确了。
在上方截图中,Shoulder这一层被放在了栈的底部,造成双手位置错位。在正确地排序后,肩膀的解算将先于手臂,手也就能正确地抓住手枪了。接下来我们可以用RightArm IK(反向动力学)来矫正手枪握把的位置,解算UpperBody Rig。
注意:下文中关于骨架和约束设置的描述中的排序并不一定会和上方排序相同。

Shoulder Correction Rig(肩部矫正骨架)

我们将Shoulder Correction骨架与Right Arm Two Bone IK约束结合使用,用以在Assault Rifle(突击步枪)闲置动画和Pistol闲置姿势上做出应有的手臂弯曲。
在轴心模式中我们使用了RightShoulder(Transform),在Y和Z轴上实行额外的比例变换。注意,我们只能通过将Position Weight(位置权重)设为0来影响Rotation(旋转)。

Assault Rifle Rig(突击步枪骨架)

再来看看Hips Constraint GameObject和其子集。我们在轴心模式下将Hips Ctrl作为Override Transform的一个源,以更改胯骨的动作,这使得我们能偏移整个忍者层级。接着我们将Multi-Aim和Override Transform约束组合在一起,创建一个能影响背脊和髋骨的上身瞄准骨架。设置不同的瞄准权重约束值将会影响所有脊背效应部分旋转角度的分配(在Multi Aim Constraint->Source Objects中,可以看到值分别为脊背0.35,胸部0.5,上胸部0.75,头部1.0)。所有这些设置为Target GameObject加上了不同的旋转角度,创造出了瞄准效果。

Weapon Rig(武器骨架)

Weapon Rig GameObject使用Override Transform(覆写变形)劫持Weapon Bone动画流,再用源对象Weapon Ctrl将其重定向。
接着我们在多参照约束中使用同样的源对象作为参照对象,实现多轴心操作。你可以在Multi Referential Constraint -> Driving中测试这些数值,实时查看结果。

Upper Body IK(上身IK骨架)

Two Bone IK中包含了两条手臂骨骼的解算。Multi-Parent Constraints则连接着RHIK(右手IK)&LHIK(左手IK)两个效应部位与Weapon_Bone子IK,Target Game Objects(AR_LHIK_Target & AR_RHIK_Target)。

Pistol Rig(手枪骨架 )

我们使用了一套动画绑定约束,实现初始的闲置动画向握枪姿势的转换。在轴心模式下,使用Override Transform将Pistol Ctrl效应部位上的数据偏移到Weapon Bone上。然后,利用Multi-Parent约束中的Position and Rotation的Maintain Offset,抵消(Weapon Bone)源和(Pistol Offset)目标对象间的全局定位坐标差异。

Weapon Source Rig(武器源骨架)

为了将突击步枪和手枪的骨骼连接到锚点上,我们利用了多亲约束的多源功能。
Assault Rifle Attach Rig突击步枪骨架能充分利用Multi-Parent Constraint多父约束的多源功能。当AR_Holster源设为1,Weapon Bone源设为0时,AR_Grip_Bone会自动附着到AR_Holster上。
如果想让Assault Rifle (AR_Grip_Bone)跟随Weapon_Bone,只需将Weapon_Bone源设为1,AR_Holster源设为0.
注意:我们可以在大部分约束属性上,如本例中的多父源权重,编辑关键帧,做出想要的结果。
这功能比较关键,在现有的动作或者其他状态机中,这些新的动画片段将作为动画器的一个“同步”层,强化具体状态的骨架状态。
下列例子展示了在运行时包含三个不同源(Pistol_Holster,Pistol Offset,RightHand_PistolGrip)的多亲约束的使用。
该成果由同步多个状态机图层上的两个不同动画片段得来,图层包括:Pistol_EquipBase Layer上的只读.fbx文件)和Rig_Pistol_EquipRig Pistol Layer上的Unity本地动画片段)。

Legs IK Rig(腿部IK骨架)

忍者.fbx文件包含了LowerBody GO的子集LeftFootIK和RighFootIK对象,我们用DCC工具为这两个对象加上了匹配的脚部骨骼动画。
多亲约束主要用于将Leg IK Rig上的Feet IK效应部位附着到LeftFootIK和RightFootIK对象上。该功能可将双脚锁定在地面水平线上,使得在调整髋部时脚不至于会沉到地下。
最后,我们可以使用Two Bone IK约束上的IK解算,创建调整下身的动画(即脚和指示器的摆放)。

脚部设置

我们发现使用Multi-Referential Constrain多参照约束来制作脚部骨架效果很好。通过创建多轴心脚部骨架控制来操控IK效应部分,将来的动画创作方案可能会和这种方法相似。



LeftHandGrip Rig(左手抓握骨架)

我们在Left-Hand Game Objects层级视图的副本上创建了一个完全不同的手部抓握姿势。在局部模式中,我们能用Rig骨架组件权重滑动条激活/禁用多个Override Transform覆写变形约束(每根手指都有各自的约束),覆写手指的局部运动。


为了将LHIK Effector左手效应部位对齐到AR_LHIK_Target_B对象,我们可以将AR_LHIK_Target的权重设为0,将AR_LHIK_Target_B的权重设为1。
接着使用MonoBehaviour脚本同步LeftHandGrip Rig权重属性和LeftArm IK/Muilti-Parent Constraint的源权重属性(AR_LHIK_Targe & AR_LHIK_Target_B),以调整左手位置和抓握姿势。

Twist Correction Rig(弯曲矫正骨架)

Twist Correction Rig弯曲矫正骨架是一个程序化的变形骨架,能改变双手的上部和下部,双脚的上部。它能提取出腕部骨骼的旋转轴,再根据不同的权重值将旋转效果分布到局部X轴上。
在本例中,弯曲矫正位于Rig Builder Rig Layers的底部,方便接收整个绑定流程中的约束改动。

其他项目中的笔记和知识点

由于我们使用的是Animator动画器状态机驱动约束属性(即浮动权重),它们将会继承状态机上的Transition过渡与Blending混合效果(比如,在混合处理结束前,值可能会为0.998)。要避免这个问题,请确保在约束权重动画开始之前,有足够的时间完成混合过渡。
该方法有另一个副作用,你需要锁定受另一个状态影响的属性,以防数值/设置回到默认。当一个状态的同步层上没有片段时,尤需要注意。
在解决完这些问题后,我们就有了个功能完善、质量上乘的成果了。

结语

我们很高兴能与你分享这次试验成果。希望你能向我们反馈,分享Animation Riggin动画绑定包的使用体验和你的期望。
你可以在GitHub或者上方文章中下载这个Animation Rigging Advanced Character Interaction(高级人物交互动画绑定)项目。

玩的开心,你可以来动画绑定包论坛上发表自己的看法。
这里特别感谢下Yang-Hai Eakes,Simon Bouvir-Zappa,Oliver Dionne,Dave HuntSven Santema。

开发过程中遇到问题?在这里提问:connect.unity.com/g/discussion
Unity China
664
Comments
Johnny
10 hours ago
我的游戏开始尝试!
0