网格权重工作流程
May 18th, 2020
使用权重可以将网格的顶点绑定到骨骼。也可以通过移动绑定的骨骼来移动顶点,而不是在单个顶点上使用自由形式变形]。使用骨骼变形网格可以更轻松地控制复杂的网格设置,并且比设置变形关键帧效率高很多。
在我们之前关于创建网格技巧和网格分类的博文中,我们讨论了创建网格的基础。本文我们将继续探讨为网格顶点指定权重的工作流程技巧。
一个网格,多个输出
相同的网格,使用不同的骨骼和权重来操作顶点位置,可以获得非常不同的结果。
例如,此技巧显示一个立方体,被加权使其围绕前面的骨骼旋转:
下面是同一个立方体网格,有相同的骨骼集,但是权重反转,因此网格围绕立方体背面的骨骼旋转。反转是通过反转权重和网格加权到的骨骼列表来完成的。
下面还是同一个立方体网格,但是设置了权重,以便立方体围绕左右角顶点之间的轴旋转:
提前规划
在之前有关网格的博文中,我们建立了基于网格目的放置网格顶点的简单规则。可以将此基于目的的思维扩展到权重设置。幸运的是,当我们确定网格结构时,我们已经进行了大部分规划。
我们已经在上一节中看到了一些基于目的的权重思维示例,其中考虑了网格及其顶点应该围绕哪些骨骼旋转。
在设置权重时,我们需要回答以下问题:哪些顶点应该由哪些骨骼移动以实现网格的目的?
为了让工作更轻松,我们应该始终追求简单。设置权重时,应将顶点的权重设置为网格实现其目的所需的最小骨骼数。操纵网格需要处理的骨骼越少,设置网格动画就越容易。
这里还有另一个例子:可以通过首先修改网格结构以允许弯曲,然后设置权重,以便单个骨骼可以轻松地控制弯曲,从而将相当静态的立方体变成可弯曲的果冻立方体。请注意,此设置仅允许我们弯曲如下图GIF所示的立方体。以这种方式限制立方体的“目的”可以使设置变得简单。
将网格绑定到骨骼时注意
通过在动画模式下绑定网格,可以创建高级设置,添加使用不同骨骼配置的交替姿势。我们已经在此篇博文中介绍了这个过程,在这个过程中,同一翅膀的两个不同姿势被绑定到同一组骨骼上。
然而,对于新用户来说,如果不慎使用,这种自由可能是危险的。
网格将记住它绑定到骨骼时骨骼的位置。初学者常见的错误是四处移动骨骼,将网格绑定到它,然后将骨骼移回其原始位置。这样做会导致顶点在更改权重时移动,因为骨骼位置现在与我们将顶点绑定到它时的位置不同。
在动画模式下绑定网格时,意外发生这种情况的可能性甚至更高,因为我们在动画模式下移动骨骼的次数要比在设置模式下多得多。
因此,除非特别需要在动画模式下绑定网格以添加交替姿势,否则最好在设置模式下绑定网格。
幸运的是,如果发生这种小意外,可以通过按更新绑定按钮为所选网格指定新的绑定位置。这将把顶点“记住”的骨骼位置更新为当前骨骼位置,放弃以前的位置。
在动画模式下设置和测试权重
第一次将网格绑定到骨骼时会自动设置权重。要查看权重的效果,我们可能会尝试在设置模式下移动骨骼。可以移动骨骼以查看权重如何变形,然后使用撤消,但如上一节所述,在设置模式下移动骨骼意味着在调整权重时顶点也会移动。
如何才能使这个过程更安全呢?可在动画模式中直接设置权重!创建一个测试动画,其中应该使网格变形的骨骼正在移动,然后调整权重,直到对结果满意为止。
这在模拟深度或处理复杂网格时特别有用。与看静止姿势时设置权重相比,看运动中的权重会更容易调整它们。
按Ctrl
(Mac上为Cmd
)可暂停动画,方便使用权重指向工具选择顶点。
从极端开始
在测试指定给网格的权重的有效性时,始终从极端开始。也就是说,两个最相反的值或位置。我们可以将此过程应用于骨骼位置和权重,从而有两个不同的工作流程。
为网格设置权重的最简单方法是从为网格需要进行移动的最两端的顶点指定100%
值开始。下一步,使用中间的顶点来平衡权重的混合,符合网格计划的移动量。这适用于除简单网格之外的几乎所有网格,简单网格则为串接的。
例如,对于模拟深度的网格,从距离观察者最远的顶点开始,并将初始权重100%
指定给将控制它们的骨骼。接下来,确定应该是最近的顶点,并将其100%
影响指定给将控制这些顶点的骨骼。最后,在播放测试动画时,调整中间顶点的权重以实现深度效果。
另一种从极端开始的方法包括将控制网格的骨骼移动到动画时实际需要之外的位置或姿势。如果一条腿应该弯曲,可稍微超出可能的角度折它一下。如果脸应在空间中旋转,可以将其推到极限(有时看起来会很滑稽)。
这样做的原因是,在如此的极端情况下,权重的微调会更容易,因为需要校正的权重非常突出。此外,支持更大范围的运动可为动画师提供更多自由。
通常需要多次通过:在一个方向或极端位置看起来一切正常之后,测试相反的极端并修复任何看起来不太好的权重。然后将骨骼放到前一个姿势中,看看修复另一个方向时是否有不合适的地方。
所有极端的姿势看起来都很好之后,中间姿势很可能已经很棒了。
权重分组
一种简化权重指定过程的方法是在开头查找具有相同权重或相近权重的权重组。
仅从侧视图弯曲的网格可使此过程非常简单。例如,如果希望手臂上部保持其形状,则需要选择至少4个顶点并将它们全部加权到上臂骨骼。然后对下手臂重复该过程。这样,计算肘部(手臂弯曲的地方)顶点的权重就容易多了。如果网格是管状的,也可以成对选择两个顶点。
模拟深度的网格要稍微复杂一些。想象一下将网格分割成几个切片。切片从网格中距离最远的部分朝向距离观察者最近的部分以规则的间隔分割。每个切片都是一组具有相同权重的顶点,因为距离观察者的深度相同。
即使这些权重最终不会有完全相同的权重,在微调还不太正确的权重之前,拥有大致的近似值仍然非常有用。
此原理类似于视差滚动,其中图像组以不同的速度移动以模拟深度。
从父级开始
当网格绑定到两个以上骨骼时,最好从树层次中最高的骨骼开始加权网格,然后一次向下一个骨骼。如果骨骼是独立的,即一个骨骼不是另一个骨骼的子对象,则只需选择从网格的一侧开始并向另一侧前进即可。
通过从父骨骼开始,可以首先定义常规运动。然后,可以移到子骨骼以向依赖于父骨骼权重的网格部分添加细节。
例如,要重新创建果冻立方体,请设置权重,使其可以首先很好地弯曲。接下来,添加控制立方体顶部的第三个子骨骼的权重。
Spine自动计算权重
手动设置权重以使顶点逐渐受到骨骼的影响可能会很繁琐。制作柔和弯曲网格的最快方法是将其一半的100%
顶点加权到一个骨骼,另一半加权到另一个骨骼,然后框选中间的权重,然后按平滑按钮,直到结果令人满意。
通过对顶点较少的网格加权,然后向网格添加更多顶点,可以获得类似的结果。Spine会根据周围顶点自动计算权重。
重叠三角形
当网格与自身重叠时,有时图像的一部分应该在后面,而不是绘制在顶部。发生这种情况时,可以通过更改三角形顺序来修复。
对网格绑定到的骨骼进行排序可能很有用,以便最远的骨骼在列表中位于最低位置,而最近的骨骼位于列表的开头。为更好地表示其绘制顺序的骨骼指定更多的顶点权重可解决任何重叠问题。
就像权重一样,网格权重视图中的骨骼顺序不能在动画中设置关键帧。这也意味着对三角形顺序的任何调整都将反映在所有动画中。
网格清洁度
在网格上自动计算权重、平滑权重或绘制权重后,网格中可能会出现不必要的权重。修剪这些权重可提高性能、减小文件大小,并使权重更易于管理。
也可能在设置完美权重后,几个顶点都具有完全相同的权重。通过编辑网格并删除它们来移除这些额外的顶点是另一种很好的方法来提高性能并使调整权重更容易。
变形关键帧是鸡肋
本文全篇都是关于权重的,但是变形关键帧呢?许多Spine新用户都倾向使用变形关键帧来变形其网格。变形关键帧功能强大并且有其用武之地,但在大多数情况下,使用权重更优越,原因有很多。
首先,设置网格变形的关键帧会将所有顶点一起设置关键帧。例如,如果网格是头部,并且使用变形关键帧来设置耳朵摆动的动画,则无法在之后返回并设置鼻子移动的动画,因为设置耳朵动画的每个关键帧也设置了鼻子顶点的关键帧。你需要使用一个一直向前工作流程来同时设置耳朵和鼻子的动画。在第一次通过时很难做到这一点,而且很难在以后返回并调整现有关键帧。要在同一网格(如眼睛或嘴巴)中设置动画的元素越多,问题就越严重。
使用权重时,可以将耳朵和鼻子的顶点指定给不同的骨骼。然后分别为骨骼设置关键帧,而不是为整个网格设置关键帧。
避免变形关键帧的另一个原因是每个变形关键帧会存储顶点加权到的每个骨骼的顶点位置。如果有40个变形关键帧和100个顶点,并且每个顶点加权到4个骨骼,则这些关键帧将存储40 * 100 * 4
= 16,000
个顶点位置!随着添加越多的网格和变形关键帧,这种情况只会变得越来越糟,并且可能会导致骨架数据远大于所需大小。
使用权重时,只需为骨骼设置关键帧,这些关键帧只需要存储少量信息。
在变形关键帧之间插值时的移动始终是一条直线,而权重允许顶点通过使用骨骼旋转或将顶点绑定到多个骨骼来更动态地移动。
最后,在运行时设置骨骼动画比应用变形关键帧更有效。在这两种情况下,顶点仍由骨骼变换,但需要在变形关键帧之间进行附加插值。
那么什么时候该使用变形关键帧呢?很少用到!如果确实需要单独移动每个顶点,并且需要许多骨骼才能使用权重来执行此操作则是有意义的。请记住,变形关键帧可以与网格权重结合使用。有时,权重会提供全部所需的变形,但是对于权重不会完全按需变形的特定姿势除外。在这种情况下,使用一两个变形关键帧使网格行为完全符合要求是有意义的。
总结
希望本文这些技巧能帮助你更自信地处理一般的权重和网格。如果还没有阅读,别忘了读一读前两篇探讨网格创建技巧和网格分类的博文。接下来你想了解什么?欢迎在Spine论坛提出来。