IT培训-高端面授IT培训机构
云和教育:云和数据集团高端IT职业教育品牌
  • 国家级
    全民数字素养与技能培训基地
  • 河南省
    第一批产教融合型企业建设培育单位
  • 郑州市
    数字技能人才(码农)培养评价联盟

【技术分享】Mecanim人形动画

  • 发布时间:
    2014-12-18
  • 版权所有:
    云和教育
  • 分享:

本文将介绍Mecanim人形动画所蕴含的技术,包括运作方式、优势和局限性、做出某些决策的原因以及如何对其进行最佳使用的一些经验。
人形动画和肌肉空间
Mecanim人形支架和肌肉空间,相较于标准的骨架节点层次加上几何图形转换,是另一种可呈现人形身体和动画的解决方案。

人形支架是基于骨架节点层次而言的。它可识别一组人形骨骼并为每个骨骼创建肌肉参考。肌肉参考本质上是具有范围局限和坐标轴标记的前段旋转和后端旋转。

肌肉值是标准化的值 [-1,1],在范围为 [min,max] 的一个轴上移动骨骼。注意:肌肉的标准化值可能低于或高于 [-1,1],从而超出此范围。此范围不是硬限值,相反它定义肌肉的标准移动范围。特定的人形支架可增大或缩小肌肉参考的范围,以增大或缩小其移动范围。

肌肉空间是人形支架上所有肌肉标准化值的集合。这是标准化的人形姿势。如果骨骼轴的范围为零(min=max),这意味着骨骼上没有肌肉。

例如,肘部的 Y 轴没有肌肉,因为它仅拉伸回缩(Z 轴)并且仅滚进和滚出(X轴)。最后,肌肉空间由至多 47 个肌肉值组成,这已经完全可以描述人形身体姿势。

肌肉空间一个优点是它可完全从其原始或任何人形支架中抽象化。它可直接应用于任何人形支架,并始终创建可信的姿势。另一个优点是肌肉空间可很好地插值。与标准骨骼姿势相比,肌肉空间可始终在状态机过渡或在混合树中混合的过程中,在动画关键帧之间自然地进行插值。

在计算方面,它也有优势,因为肌肉空间可视为标量的矢量,因此您可进行线性插值,这与四元数或欧拉角不同。

人类身体和人类运动的近似

为人形特征或任何动作捕获的动画构建的每个新的人形支架即是人类身体和人类运动的近似。无论有多少骨骼或者您的 MOCAP 硬件有多好,都无法重现完全真实的运动物体。

Mecanim人形支架和肌肉空间的精心设计遇到了一些艰难的选择。我们必须在快速的运行时和动画质量或开放性和标准定义之间作出权衡。

2块脊椎骨

这是一个难题。为什么是 2 块,而不是 3 块?或者是任意数量的脊椎骨?让我们抛开最后一点,因为这不是生物医学研究。(注意:如果您一定需要这种水平的精确度,那么您可使用 Generic Rig)。一块脊骨明显无法精确定义。

第二块将会带给您非常多的好处。第三块或者甚至第四块对最终的人体姿势意义不大。为什么会这样?当观察人体脊柱如何弯曲时,您将发现胸腔上的脊柱部分几乎是僵硬的。剩下的是分别位于脊柱底部以及胸腔底部的主要弯曲点。所以有两个主要的弯曲点。柔术演员的极限姿势清晰地显示了这一点。基于这些考虑,我们决定让人形支架具有 2 块脊骨。

1块颈椎骨

这比脊柱要简单一些。注意:许多游戏人形支架甚至没有颈骨,仅依靠头骨实现这一点。

旋转DoF(自由度)

与大多数人形支架一样(对于游戏尤为如此),Mecanim人形支架仅支持旋转动画。不允许骨头改变相对于其父骨的局部平移。一些 3D 建模软件往往支持一定数量的骨头平移,以模拟关节弹性或挤压和伸展动画。我们正在考虑添加平移DoF,因为这是一种实现计算性能的较便宜的方式,可用细节较少的人形支架补偿动画质量。它还允许用户创建可重定位的挤压和伸展动画。

没有扭骨

通常将扭骨添加到人形支架,防止手臂和腿部的皮肤在极限扭曲配置中发生蒙皮变形问题。

扭骨有助于分散整个四肢所诱发的变形。

在肌肉空间中,扭曲的量由肌肉表示,并且始终与四肢的父骨关联。例如:前臂的扭曲发生在肘部,而非腕部。

人形支架不支持扭骨,通过Mecanim求解器,您可指定从父骨上取出的扭骨比例,以及放在四肢的子骨上的扭骨比例。默认值是 50%,它对于防止皮肤变形很有帮助。

人形根节点和质心

现在,自然空间中可表示人体位置和方向的最佳方法是什么?

骨骼层次中最顶部的骨头(通常是臀部,或称为骨盘,或其他称呼)是标准人形支架中自然空间位置和方向曲线的所在之处。虽然这适用于特定的特征,但重定位时,就变得不适合,因为从一个骨骼装备到另一个人形支架,相对于其他骨骼,最顶部的骨头通常有不同的位置和旋转。

肌肉空间使用人形质心表示其在自然空间中的位置。使用人体部位平均质量分布来近似确定质心。我们假设在骨骼比例调整后,人形姿势的质心对于任何人形支架是一样的。这是一个较大的假设,但据显示对于许多动画和类人特征都有用。
的确,对于站立或行走动画,质心位于臀部,但对于后空翻等更动态的运动,您会发现身体是如何偏离质心,以及质心是如何感觉像整个动画中最稳定的点的。

身体方向

类似于质心对肌肉空间的自然空间位置的作用,我们利用身体的平均朝向来作为自然空间方向。而身体平均朝向的向上矢量则由臀部和肩部的中点计算而来。身体向前矢量是向上矢量和平均左/右臀部/肩部矢量的向量积。同样假设人形姿势的身体平均朝向对于所有人形支架是相同的。对于质心,身体平均朝向通常比较稳定,因为进行行走、跑步等活动时,上身和下身方向会相互补偿。

根节点运动

之后会提供有关根节点运动的更具深度的文章,这里作为介绍,质心和身体平均朝向的投影用于自动创建根节点运动。由于质心和身体平均朝向是人形动画的稳定属性,因此会产生可用于导航或动作预测的稳定根节点运动。

缩放

肌肉空间要成为完全标准化的类人姿势还缺少一个方面…其整体大小。我们正在寻找一种可描述人形大小的方法,这种方法不依靠头骨位置等特定的点,因为不同的支架具有不同的点。 T-字形的人形特征的质心高度直接用作其缩放。肌肉空间的质心位置按该比例划分,以生成最终的标准化人形姿势。也就是说,肌肉空间对于处于 T-字形且高度为1 的质心进行了标准化。肌肉空间中的所有位置均是以标准化的米为单位。

手和脚的初始位置

将肌肉空间应用于人形支架时,由于人形支架的比例不同,手和脚最终可能偏离初始动画的位置和方向。这可能导致脚滑动或手不能恰当伸展。因此,视情况肌肉空间会包含手和脚的初始位置和方向。在肌肉空间中,手脚的位置和方向相对于人形根节点(质心、身体平均朝向和人形缩放)进行标准化。这些初始位置和方向可用于修复和重定位骨骼位置,以使用 IK 通道匹配初始自然空间位置。

IK 求解器

IK 求解器对于手臂和腿的主要目标是达到肌肉空间中选择性找到的手脚的初始位置和方向。在Mecanim controller状态中启用“脚部 IK”开关时,在后台就是这样执行的。

在这些情况下,重定位的骨骼位置绝不会偏离初始 IK 目标很远。IK要修复的错误较小,因为错误仅仅是由人形支架的缩放不同导致的。 IK 求解器仅对重定位的骨骼位置稍作修改,以生成与初始位置和方向匹配的最终姿势。

由于IK 仅对重定位的骨骼姿势稍作修改,因此极少产生膝盖或肘部突出等动画瑕疵。即便出现这种情况,作为 IK 求解器一部分的Squash and Stretch 求解器也会发挥作用,防止手臂或腿接近最大伸展长度时突出。默认情况下,允许的挤压和伸展量限制为手臂或腿总长度的 5%。与手臂或腿的5% 或以下伸展相比,肘部或膝盖突起更加明显(并且难看)。注意:可通过将 Squash and Stretch 求解器设置为0% 来将其关闭。

之后会有一篇有关 IK 的更具深度的文章。该文章将阐述如何处理道具节点、使用多个 IK 通道、与环境或人形角色之间进行交互等。

可选骨头

人形支架有一些可选的骨头。胸、颈、左肩、右肩、左脚趾和右脚趾。即使如此。许多现有的人形支架没有其中一些可选骨头,但我们仍然希望使用这些可选的骨头来创建有效的人形。

人形支架还支持左眼和右眼可选骨头。眼骨各有两块肌肉,一块上下移动,另一块内外移动。还可利用类人操纵LookAt求解器处理眼骨,从而将权重分散到脊柱、胸、颈、头和眼睛的位置调整上。之后的人形 IK 文章将更详细介绍LookAt求解器。

手指

最后一点,人形支架支持手指。每根手指可能有 0 到 3 个数字。数字0 指的是未定义手指。第一个数字有两块肌肉(伸出和扩展),第二个和最后一个数字有一块肌肉(伸出)。注意:未定义手指时,不会产生求解器针对手指的开销。

人形支架要求

中间骨骼

在许多情况下,人类骨骼中的骨骼会比人形支架定义的骨骼多。中间骨骼是指,处在人形支架定义的骨骼之间的骨骼。例如,3DSMAX 中创建的Biped模型中的第三块脊椎骨会被视为中间骨骼。人形支架是支持这些骨骼的,但请记住Mecanim不会对中间骨骼进行动画处理。相对于人形支架中定义的父骨骼,这些骨头将始终待在其默认的位置和固定方向。

标准层次结构

人形支架必须符合标准层次结构才能与我们的人形支架兼容。骨骼可具有位于人形骨骼之间的任意数量的中间骨骼,但必须符合以下模式:

臀部– 大腿– 小腿– 脚– 脚趾

臀部– 脊柱– 胸– 颈– 头

胸– 肩– 手臂– 前臂– 手

手– 近端– 中段– 末梢

T-字形

T-字形是人形支架创建最重要的步骤,因为肌肉创建基于此步骤。 T-字形姿势被选为参考姿势是因为易于对其进行概念化,并且没有太多空间用来解释其应有姿势:

– 面向z 轴站直

– 头和眼睛面向 z 轴

– 脚着地,与 z 轴平行

– 手臂打开,沿x 轴与地面平行

– 两手平举,手掌向下,沿 x 轴与地面平行

– 手指伸直,沿 x 轴与地面平行

– 拇指伸直,与地面平行,位于 x 和 z 轴的中间(45度)

所谓“伸直”,并不是说骨头一定要完全对齐。具体取决于皮肤如何依附在骨骼上。一些支架的皮肤可能看起来是伸直的,但下面的骨骼并非如此。因此,为最终蒙皮完成后的角色设置T-字形是非常重要的。如果您要创建人形支架以重定位MOCAP 数据,较好的做法是通过 MOCAP 套件至少捕获几帧角色处于 T-字形姿势的动作。

肌肉范围调整

默认情况下,肌肉范围设置为最能代表人类肌肉范围的值。大多数时候,不应对其进行修改。对于一些更为卡通的角色,您应缩小范围,防止手臂与身体难以分辨,或扩大范围以使腿部运动更为夸张。如果您要创建人形支架以重定位 MOCAP 数据,则不要修改范围,因为生成的动画片段将不符合默认设置。

重定位和动画片段

Mecanim重定位分为两个阶段。第一阶段包括将标准骨骼动画转变为标准化人形动画片段(或肌肉片段)。这一阶段发生在导入动画文件时,且发生在编辑器中。内部将其称为“RetargetFrom”。第二阶段发生在播放模式下,此时肌肉片段被评估并应用于人形支架的骨骼中。

内部将其称为“RetargetTo”。将重定位分为两个阶段有两大好处。第一个好处是处理速度。一半的重定位过程在脱机状态下完成,只有另一半在运行时完成。另一个好处是场景复杂性和内存使用。由于肌肉片段完全为初始骨骼抽象化,要执行重定位,并不需要在运行时包括源骨骼。

第二个阶段是很好理解的。一旦您拥有有效的人形支架,即可通过RetargetTo求解器将肌肉片段应用在其中。这会在后台自动完成。

第一阶段是将骨骼动画转换为肌肉片段,这可能有点困难。骨骼动画片段以固定率取样。对于每一个样本,骨骼姿势均转换为肌肉空间姿势,且在肌肉片段中添加一个关键帧。并不是所有骨骼都合适,有许多不同方式可创建人形支架并对其进行动画制作。一些人形支架会生成有效输出,但也可能丢失信息。我们现在来了解创建无损的标准化类人动画需要什么…肌肉片段。

请注意: “无损”指的是从人形支架重定位到肌肉片段,然后重定位回到同一个人形支架,从而保持动画完整性。事实上,这几乎很难完整。手臂和腿的原始扭曲将丢失,而由 Twist 求解器的计算结果替代。正如本文档先前描述的,肌肉空间中没有扭曲的表示。

人形支架中的骨骼位置和动画文件的中骨骼位置必须一致。有时会发生用于创建人形支架的骨骼与动画文件的骨骼不一致的情况。请确保使用完全一致的骨骼。如果没有使用完全一致的骨骼,则在导入时,将向控制台发送警告。

中间骨骼必须没有动画。有时 3DSMAX 导出的骨骼动画会出现这样的情况:第三块脊骨同时有移位和旋转动画。 Bip001 用作臀部时和骨盘都具有一些动画时也会发生这种情况。如果中间骨骼有动画,则在导入时,将向控制台发送警告。

人形支架和动画文件中的中间骨骼的局部朝向必须一致。使用 Skin Bind Pose 来自动配置和创建T-字形的人形支架时可能发生这种情况。请确保中间骨骼的“蒙皮绑定姿势”旋转与动画文件中的一致。如果中间骨骼有动画,则在导入时,将向控制台发送警告。

骨骼不支持移位动画,臀部除外。 3DSMAX 导出的Biped 模型有时会对脊骨采用移位动画。如果不是臀部骨骼,则在导入时,将向控制台发送警告。

在这里,我们认为3DSMAX Biped是有问题的人形支架。原因可能是其普遍性以及许多情况下我们必须支持其与Mecanim配合使用这一事实。

注意:如果您要用Mecanim人形动画创建新动画,您应从一开始就遵守上述规则。如果您想使用违反上述一些规则的现有动画,仍然是可行的,Mecanim retarget 求解器功能强大,可生成有效输出,但不保证生成无损转换。