NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模
本文介绍有关游戏角色动画的骨骼及反向运动学的背景知识、基本概念和原理以及存在的挑战。
1、简介
你已经建造了哥特式城堡——是时候让你的英雄冲进游戏并保卫城垛了。 你的游戏引擎支持骨架、称为反向运动学 (IK) 的动画系统以及用于控制的复杂分层设置。 你渴望尝试所有这些。 太棒了!
但是,如果你以前从未使用过骨架,甚至从未将 IK 应用于关节模型,你就会感到有些惊讶。 有些你会喜欢,有些你可能不会……至少一开始不会。
本文介绍了使用具有反向运动学和自上而下旋转系统的骨骼来移动动画角色(称为正向运动学)的一些基本和中间原则。 在此过程中,它可能会回答你的一些紧迫问题。 当你读完后,希望你会感到精力充沛,可以跨越当前的任何障碍。
2、正向运动学与反向运动学
不久前,游戏角色还很像贝类:它们基本上是一堆坚硬的部分。 最好的动画师所希望的是一个可以处理基本层次结构的平台,允许他们同时定位和设置所有这些片段的关键帧。 忘记现实地弯曲肘部或弯曲肌肉吧——这根本不会发生。 如果没有当今可用的处理能力来处理实时表面变形,游戏就会出现大量机器人和装甲。
- 先进的处理器性能使计算机生成的骨骼具有反向运动学动画。
有一段时间,游戏开发者默默忍受着。 然后 PC 变得更快、更智能,这使得游戏引擎也变得更快、更智能。 先进的处理性能使动画师能够使用计算机生成的骨架,不仅可以将分割的角色保持在一起,而且可以使这些角色的皮肤实际变形。 IK 成为首选的控制系统。
- 深入层次结构
要了解反向运动学,了解基本层次结构和正向运动学很重要。 除了直接的目标到目标变形之外,动画师几乎总是使用一种或另一种层次结构来为他们的角色制作动画。 层次结构是父子兄弟关系。 将一个对象指定为另一个对象的父对象或子对象的过程通常称为“父子关系”,有时也称为“分组”。 在人腿的情况下,大腿的父项是臀部,小腿是大腿的子项,脚是小腿的子项。 右大腿与左大腿具有同胞关系,两者都是臀部的子代,见下图:
![](http://www.bimant.com/blog/content/images/2023/02/image-398.png)
另一种关于层次的思想流派使用“倒置树”模型,其中父对象(臀部或骨盆)被称为“根”。 虽然层次结构的任何部分都没有真正被称为“主干”,但子对象和子对象的子对象成为“分支”。
- 正向运动学的问题
如果你想在基本层次结构下移动角色的手,你会首先旋转上臂,然后是前臂,最后是手本身,直到整个肢体就位。 这种“自上而下”的旋转系统称为正向运动学,非常适合基本动画。
使用正向运动学和基本层次结构的动画看起来很简单——直到你的角色必须做一些事情,比如走路时脚不能滑过地板,或者在原地不动,同时转动她的身体向后看。 在这些情况下,你有两种选择,但两者都不美观:
- 旋转整个层级(让脚无用地滑动)。
- 仅旋转层次结构的顶部(臀部),将其他部分留在后面(观看起来非常痛苦)。
这种情况下,正向运动学(和你的角色)就会分崩离析。 放置行走角色的脚几乎是不可能的,因为对于层次结构底部的对象来说,最困难的事情就是在其上方的对象移动时保持在一个位置。 稳定的幻觉实际上需要不断调整。
![](http://www.bimant.com/blog/content/images/2023/02/image-399.png)
基本层次结构和正向运动学的困难在于,当你转动整个层次结构时,脚会滑动。 脚踏实地,结果可能会很痛苦。
- 使用逆向运动学的计算机生成骨架
幸运的是,今天的游戏动画师能够使用许多曾经只用于故事片的相同动画技术。 在故事片世界中,不断重新调整恐龙的脚趾以补偿其上方脚踝、膝盖、大腿和臀部的轻微运动会导致电影屏幕上的滑动和滑动,其单位是英尺而不是像素。
很明显,除了正向运动学之外,还需要其他东西来逼真地为角色制作动画。 另一个电影问题——对角色移动时关节起皱和凸起的可信描述——只能使用由连续网格制成的模型来解决。 但是你如何让坚固的东西弯曲并行走呢? 转向早期的电影特效主要内容,Stop Motion* 软件开发人员将骨架系统或骨架整合到他们的计算机生成 (CG) 模型中,并开发了一个名为 Inverse Kinematics 的系统来控制骨架。
![](http://www.bimant.com/blog/content/images/2023/02/image-400.png)
从概念上讲,CG 骨架很容易理解。 它模仿我们自己的身体骨骼——一种刚性结构,每个关节都有肌腱将它们固定在一起。 它是倒置的树状层次结构,事实上,父级通常被称为骨架的“根”。 根通常位于角色的自然重心; 这通常是两足动物脊柱的底部。
是什么让这个系统比基本(非骨骼)层次结构更好,是肌腱,在计算机 3D 程序中隐含但看不见。 正如在从非骨骼对象构建的层次结构中一样,可以通过正向运动学自上而下地操纵骨骼。 但也许骨架的最大好处是它能够将控制从层次结构的顶部转移到底部。 由于它是自下而上(正向运动学的逆向)工作或“求解”的,因此该过程称为“逆向运动学”或 IK。 与处理自上而下的旋转相比,这是一个更直观、更省时的过程。
注意:一些动画包允许将反向运动学应用于“非骨骼”对象,例如立方体、球体和空对象,尽管创建和操作以这种方式构建的 IK 链通常要复杂得多。
![](http://www.bimant.com/blog/content/images/2023/02/image-401.png)
上图中,骨骼通常在根端附近描绘得更宽,而朝向效应器描绘得更窄。 由“肘”弯曲、肩顶和手腕形成的绿色三角形表示肘部的旋转平面。 调整该平面以允许肘部向外摆动。
骨骼链最底部的链接通常称为目标或末端执行器(请注意,这些名称在不同的程序中可能有不同的含义)。在分段模型的情况下,你的角色的“肉体”,实际的四肢、躯干、头部等,然后是父母 到骨骼的最近骨骼(或关节)。 对于单网格多边形或无缝 NURBS 模型,你可以在底层骨架上“蒙皮”或“包裹”模型。
注意:一个角色的四肢、头部、皮肤或衣服通常被称为它的“几何体”。 可以渲染几何体,而骨架通常对渲染器不可见。
使用骨架,不是为几何体设置动画,而是为骨架本身设置动画,然后几何体也随之设置动画。 由于骨骼之间有不可见的肌腱,因此仅旋转部分层次结构时关节不会分离。 此外,可以将 IK 应用于骨骼链。
- 反向运动学的优点
那么这一切对动画师来说意味着什么呢? 这意味着你可以猛拉链条的底部(例如手),然后手上方的所有骨骼都会自动旋转到位。 当角色必须伸手去拿某物时,例如从树上摘苹果时,这是一个真正的优势。 动画师不是在心里计算肩膀、上臂、肘部和手腕要旋转多远才能使那只手就位,而是简单地将手放在苹果上,然后手臂的其余部分随之移动。
使用底层骨架的另一个好处是骨骼和关节提供了一个自然的控制结构来使表面变形。 通过变形,几何体上的各个控制点相对于骨骼和关节移动。 与一次移动整个几何体相比,这是一个显着的改进。
3、骨骼基础
首先让我们看看软件包,然后看看我们自己的骨骼和关节,然后我们再看看它们是如何被控制的。
- 软件包
在每个应用程序中,骨架的表示和控制方式都不相同。 一些软件包,例如 IZWare Mirai*、Alias Wavefront Maya* 和 PowerAnimator*,允许你创建完整的、完全连接的带有分支肢体的骨骼。 在本文发表时,Softimage 3D* 和 XSI* 还没有,但它们为你提供了通过父子关系和称为“约束”的独立控制系统将手臂链、腿链和颈链粘合在一起的方法。
![](http://www.bimant.com/blog/content/images/2023/02/image-402.png)
上图中, 当骨骼共享对表面的控制时,非常平滑的褶皱和弯曲是可能的。 但即使表面变形不是你想要的结果,骨架也非常适合将分段模型固定在一起,它们的关节为所有这些部分提供了自然的枢轴点。
有些软件包虽然提供反向运动学系统,但根本不提供骨骼。 相反,你可以使用原始对象构建自己的骨架,或将骨架属性分配给每个角色的各个部分。 其他软件,如 Softimage 3D、Hash Animation: Master* 和 Discreet 3d Studio Max*,提供同时执行这两种操作的选项,允许你合并其他对象,例如空值(通常是没有可渲染几何体的中心或枢轴)或虚拟对象 , 进入他们正常的骨骼层次结构。
为了简洁起见,我们在这里将所有这些对象称为“空值”。 这些空值可以缩放、旋转或平移,同时移动角色网格的控制点。 这种技术通常用于 Softimage 3D 中,用于肌肉隆起和胸部扩张等。
![](http://www.bimant.com/blog/content/images/2023/02/image-403.png)
上图中,肌肉凸起设置使用直接作为骨骼层次结构父级的“空”对象(紫色对象和框)。 零值的平移、旋转和缩放会影响肌肉的位置和凸起,并且很容易通过表达式与肘部旋转联系起来。 左侧示意图中的黑框将手臂几何体显示为该系列的父级。 蓝色框是根关节、肘关节和腕关节,它们在它们之间旋转“骨骼”。 请注意,在 Softimage 3D 中,关节是可选对象,而骨骼不是。 在 Softimage XSI* 中,两者都是可选的。
各个骨骼是用它们自己的一组局部轴构建的,通常(但不总是)X、Y 和 Z。与几何体一样,这些轴的位置和方向决定了骨骼的枢轴点及其旋转方向。 一般来说,骨骼可以被认为是焊接在一起的两块——骨骼本身和允许骨骼旋转的关节。 然而,重要的是要注意,并不是所有的包都会做出这种区分。 例如,Softimage XSI 和 3D 将整个骨段称为关节。 在 Maya 和 IZWare Mirai 中,关节是一个附加的但可单独选择的对象。 这允许将变形对象(例如“屈肌”)放置在关节本身或沿着骨骼的长度放置。 屈肌可以促进逼真的折痕,例如肘部内侧(关节定位的良好候选者)和肌肉凸出(屈肌沿骨骼定位)。
在某些情况下,轴是固定的——不允许用户更改骨骼中心的方向。 在 Softimage 3D 中,X 轴始终朝向骨骼的长度。 其他软件包,如 Maya,允许您选择中心的方向。 这些包甚至可以让您自由旋转该中心,而不管骨骼的方向如何,尽管随意这样做可能会导致不可预知的结果。
为什么枢轴的朝向很重要? 专业动画不仅要正确地做事,还要快速地做事。 如果你所有的骨头都以相同的方式定向(我们将使用正 X 沿每根骨头的长度延伸),这意味着你所有的手指、膝盖、肘部和椎骨都围绕同一轴向前或向后弯曲。 对于大多数设置,该轴是 Z。这使得创建表达式变得轻而易举。你不必猜测或反复试验就可以知道您的角色将朝哪个方向移动。
4、使用骨骼的表面变形示例
将你的手伸出到面前,手掌朝上。 注意你的前臂。 现在,不要移动你的肩膀,旋转你的手直到你的拇指指向天花板。 如果你的前臂作为一个整体旋转,你在手腕和肘部之间看到的那种不太微妙的扭曲是不可能的(或者至少非常痛苦)。 请注意,靠近手的肌肉会随着你的腕关节一起旋转,但这种效果会向你的肘部减弱。 通过表面变形,叠加几何体上的每个控制点都由最近的关节或骨骼控制。
这意味着角色不再需要是松散的一堆坚硬的片段。 手肘可以自然弯曲; 二头肌甚至可以膨胀和变平。
- 骨骼控制
好吧,我们又回到了起点:你已经购买了具有完整骨骼和 IK 系统的应用程序。 你的问题结束了,对吧? 好吧,不完全是。 坏消息是 IK 系统并不总是比 Forward Kinematics 更直观。 对于诸如在步行周期中摘苹果或将脚踩在地板上之类的事情,IK 是直观且易于使用的,前提是你已正确设置它。 该“设置”是可以尝试使用骨骼和 IK 的地方。 设置需要一些时间来理解。
- 从哪里开始
看看你自己的关节。 在你深入了解之前,请考虑你的身体是如何工作的,然后记住计算机生成 (CG) 的骨骼并不完全是人体骨骼——它是人体骨骼的代表。 尽管动画工具越来越接近于反映现实的能力,但作为动画师,让你的动画可信仍然取决于你。
想一想你的关节工作的各种方式。 你的肘部和膝盖与你的肩膀和臀部的关节运动方式不同,它们的工作方式彼此略有不同,而且都与你的背部和颈部的椎骨不同。 通常,动画包会为你提供一种或两种类型的骨骼供你使用。 它们还提供了一些用于控制骨骼的不同选项。 虽然我们人类有数百块骨头支撑我们的脚、腿、手和器官,但在构建 CG 骨骼时很少需要匹配我们的内部骨骼骨骼。 从动画的角度来看,这种方法通常会适得其反:让太多的骨头争夺表面的控制权就像厨房里有太多的厨师一样。 妥协。 使用尽可能少的骨骼。 同样,这意味着可信,而不是真实的。
- 关节类型和控制
为了让人信服,你需要两种关节:一种是可以在关节窝中一直摆动的关节(这真的比你的任何一个都多,而且不会感到剧痛),另一种是只能在一个方向弯曲的关节,比如你的肘部。 Softimage 3D 通过赋予每个骨骼链的第一个(根)关节在所有轴上自由旋转的能力来解决这个问题,或多或少模仿球窝关节。 之后,你可以选择构建一个“3D”骨架,它像对待第一个关节一样对待每个关节,或者构建一个“2D”骨架,在球状根之后,只沿着一个平面向一个方向弯曲,更多 就像你的手肘。 “3D”骨架对于长颈生物或海藻和链条之类的东西很有用。 “2D”骨架以球窝关节开始,以肘关节结束,非常适合手臂和腿部。 当你一次使用不超过两个链接时也是最好的。
5、应对挑战
如果你必须同时使用两个以上的链接怎么办? 让我们谈谈一些常见的挑战,例如为脚等事物添加第三个链接,或使用 IK 为角色制作采摘苹果的动画。
5.1 第三个链接困境:加上脚怎么办?
在由 IK 控制的链中,两个链接相当简单,但脚代表第三个链接。 你如何处理增加的脚? 在 Softimage 3D 中,脚踝实际上是两个东西:腿链的末端和脚链的起点。 要将这两者放在一起,你需要将脚链设置为腿链末端执行器下方的父级或使用“约束”。 我们稍后会讨论约束。 下面说说为什么一个chain在两个link之后很难用IK控制。
严格来说,IK 控制的链是由链的最底部的链接或关节控制的。 底部关节或末端执行器的任何移动都会将每根骨骼旋转一定程度,一直到层次结构的顶部。
考虑一条有两条腿骨(大腿和小腿)的链条,其中脚踝是底部关节和末端执行器。 将脚踝直接向上推会导致膝盖弯曲和大腿在臀部处旋转,这是一个相当简单的动作。 让我们添加另一个链接:脚的骨骼。 同样的推动,这次是用脚掌上的末端执行器,现在导致脚踝弯曲、膝盖弯曲和大腿在臀部的旋转。 但是每个关节弯曲的顺序和每个旋转的量都会有很大的不同,只需稍作调整,使得这种设置难以控制。
![](http://www.bimant.com/blog/content/images/2023/02/image-404.png)
上图中,尽管存在更多骨骼时变形会更平滑,但最好将这些骨骼的实际 IK 控制分解为不超过两个链接的链。 在 Softimage 3D* 中,最左边的设置(紫色箭头)有一个单链节脚链,它是双链节腿链的父级。 此设置为你提供了脚踝上的末端执行器和脚趾上的另一个末端执行器。 这比在三节链上只使用一个末端执行器更可取。 通常在 IK 中,使用更多的骨骼意味着更少的控制。
两块骨头的直观、易于控制的运动在三块或更多骨头上完全乱七八糟。 这就是你会在典型的 Softimage 3D 骨骼设置中看到许多链作为父级或约束在一起的原因之一。 您可以在此处查看软件中的 IK 解决方案。 尽管需要创造性地使用约束和父子关系,Softimage 3D 还是为 3D 人物动画提供了可靠的 IK 解决方案。
其他包提供不同的解决方案。 Maya 和 Mirai 提供了创建从骨盆到脚趾的完整骨骼的能力。 Maya 通过使用放置在链本身上的单独“求解器”来处理长链的不可预测性。 动画师通过将它们放置在需要的地方来声明解算器影响的开始和结束。 为了轻松控制手臂,求解器可以从肩膀伸展到手腕。 另一个解算器可能被放置在从手腕到中指根部的位置。 手和手臂的动画涉及分别操纵每个解算器。
Maya 还提供了一个特殊的“样条”解算器,用于制作长颈生物的动画。 使用此解算器,可以绘制一条穿过颈部椎骨的曲线(样条曲线)。 当曲线被操纵时,椎骨会旋转以呈现曲线的形状——这对海洋生物来说是一个了不起的解决方案!
IZWare(前身为 Nichimen)动画软件自 Walt Disney 的 Tron* 以来一直在幕后工作,并以其多边形建模包而闻名。 IZWare Mirai 是“现成”动画包领域的新成员,可帮助新手角色动画师立即开始制作动画。 这是因为 IZWare Technologies 预先做了很多工作。 Mirai 不仅可以像在 Maya 中那样创建完整的分支骨骼,它还提供了现成的骨骼,非常适合许多角色情况(包括人类、狗甚至蜱虫)。
![](http://www.bimant.com/blog/content/images/2023/02/image-405.png)
5.2 求解自动镜像和反向旋转问题
IZWare 还通过添加大量表情和角色控制来自动镜像(甚至反对)肢体动作,解决了技术总监的一些头疼问题。 这些动作的示例包括步行或跑步循环中相反的手臂和腿部摆动(一只肢体向前,一只向后)以及指挥者举起手臂。 你只需为一只手臂或一条腿设置动画,然后选择是否要自动为相反的肢体设置动画。 这也纠正了当骨架被分成两半然后在其他程序中进行镜像复制时出现的负旋转问题。 例如,由于每个镜像复制的关节的中心也被“镜像”,关节自然地以相反的方向旋转。
5.3 处理 IK 约束
好吧,你构建了你的骨架,你正在使用 IK 来控制他的脚并让它们保持在地板上。 你还在他的手上使用了 IK。 他向前迈出一步,注意他的手臂发生了什么变化。
![](http://www.bimant.com/blog/content/images/2023/02/image-406.png)
上图中,IK 中末端执行器的位置在世界空间中设置关键帧,而不是参考父级的位置(如在简单的层次结构中)。 这实际上是使用 IK 放置一只脚如此容易的原因 - 但它不适用于手腕位置,这需要与骨架相关联。 简单的解决方法是将手腕末端执行器约束为空对象或定位器(右图中的十字准线),然后将这些定位器作为父级返回到层次结构中。
这就是约束的来源。事实证明,直接对末端执行器设置关键帧几乎不是一个好主意。 这样做实际上会导致您在 IK 中发现的大部分问题,并且会阻止您的角色完成您在故事板上精心绘制的许多漂亮动作。
最好将约束描述为可以随意关闭和打开的强大磁力。 它们允许一个对象(甚至是空对象)影响其他对象。 不同的约束可以做不同的事情。 约束几乎总是作用于对象的中心或枢轴,这使得对象的中心或枢轴点的放置极其重要。 虽然有些包比其他包有更多类型的约束,但三个基本约束是主要的:目标或方向、方向、点或位置。
- 目标或方向
目标或方向约束会导致“受影响的”对象不断地将轴(某些包让您选择)瞄准“目标”对象的中心或枢轴。 想一想温布尔登网球公开赛的人群:当网球在网上来回跳跃时,面孔总是跟着网球。
- 方向
方向约束有点像花样游泳运动员。 当一名游泳者转身时,另一名游泳者也转身。 受影响对象的中心方向与目标对象的中心方向相匹配。
- 点或位置
点或位置约束是最常用于 IK 的约束。 此约束根据每个对象的中心位置将一个对象直接固定在另一个对象之上。 当一个物体移动时,另一个物体被迫移动。
用作约束目标的对象可以作为其他对象的父对象,这意味着它们服从基本层次结构的规则。 在层次结构中,它们的位置和移动是相对于父级的。
5.4 摘苹果问题
约束是我的骨架的手在前面图中被固定的原因。这是因为骨架层次结构与基本对象或几何层次结构之间的主要差异之一。 这也是为什么成功的 IK 动画通常涉及这两种类型。 作为层次结构中多个对象的示例,考虑飞机以主飞机作为父飞机编队飞行的情况。 如果我们决定让其中一架飞机漂移得高于或低于该组,我们可以为该运动设定关键帧,它会在围绕它们机动时继续与该组一起飞行。 那是因为它的移动是相对于它的父对象——主平面的移动。
在基本层次结构中,子级的位置是相对于该子级父级的位置的。 这就是为什么当一个角色完全由层次结构(没有骨骼)结合在一起时,脚会滑动的原因。旋转他或她的臀部。
在反向运动学链上并非如此。 末端效应器(IK 层次结构中最底层的子项)的位置是相对于世界空间的。 这就是使用 IK 设置动画的脚保持不动的原因。 不幸的是,这也是为什么使用 IK 设置动画的手会自然地尝试伸出到空间中它们被设置为关键帧的点。
IK 是脚放置的自然选择。 但是那个摘苹果的角色呢? 使用 IK 不是更容易完成该操作吗? 是的。 最好在基本层次结构和约束的帮助下完成。
我们想要使用 IK,因为将手放在苹果上比旋转肩膀、上臂、下臂等要容易得多。但我们也希望我们的角色在没有他的情况下走到苹果树 双手在他身后的空间中向后拖。 我们该怎么做呢?
5.5 苹果采摘解决方案
我们使用 IK 点约束和基本层次结构:
- 拿两个对象——正方形和圆形很好,因为它们只是样条曲线,不会渲染,所以你以后不必记得隐藏它们。 我们将使用圆圈。
- 将一个圆圈放在一只手腕上(手臂链的末端执行器),将另一个圆圈放在另一只手腕上。 如果您真的喜欢它,请使用点约束将圆圈直接放在手腕上,然后关闭这些约束。
- 使这些圆圈成为角色躯干的子对象(将它们分组或作为躯干的父级)。 这意味着它们将随躯干的移动而移动,并且它们所做的任何移动都将相对于躯干。 现在将手腕末端执行器约束到它们各自的圆圈中。 这个想法是为约束对象设置关键帧,而不是末端执行器。
- 最终结果是两全其美:当你的角色行走时,手与躯干一起移动,当你将约束圆放置到苹果上时,手也随之伸出,从而获得 IK 的动画优势。
使用约束对象的层次结构为 IK 驱动的骨骼提供动力可以解决大约 95% 的角色动画问题。 从两个角色接球到一个骑手从马上掉下来或跳上马,一切都可以通过某种形式的动画约束层次结构和 IK 来完成。 通过添加一些表达式形式的数学来控制脚部旋转等复杂行为,你将拥有处理任何事情所需的工具。
6、结束语
所以把机器人断电,挂上盔甲——单网格人物和表面变形是现在的办法。 我们已经介绍了层次结构、反向运动学与正向运动学,以及许多提供它们的主要动画软件包。 我们还使用 IK 和约束解决了一些相当常见(和讨厌的)动画问题。
现在由你自己进行实验。 首先确保您的引擎支持 IK 和约束层次结构,然后再使用它。 请记住,即使你的 3D 软件包未在本文中提及,大多数都具有 IK 系统、层次结构以及某种约束或链接,并且价格并不总是一个因素。 探索你所拥有的,去玩吧!
原文链接:Character Animation: Skeletons and Inverse Kinematics
BimAnt翻译整理,转载请标明出处