演示视频参考连接:

https://www.youtube.com/watch?v=nvjq7C9BbAQ&list=PLdcL5aF8ZcJuHJFQgb4altQWs-RCKA7Bq&index=3&ab_channel=CGDive%28BlenderRiggingTuts%29

https://www.youtube.com/@CGDive/videosBlender骨骼绑定教程3:清除绑定 & Deform & 权重修改_哔哩哔哩_bilibili

https://www.youtube.com/watch?v=qz86PWlK_8s&ab_channel=OutlawVideoProduction

(用Auto Rig Pro插件) 

https://www.youtube.com/watch?v=nvjq7C9BbAQ&ab_channel=CGDive

Ctrl-P

  • Armature Deform: 这个功能可以将一个对象(通常是一个3D模型)绑定到一个骨骼结构上,使其可以通过骨骼的移动来进行形变和动画。它有以下几个子功能:
    • With Empty Groups: 这个子功能可以为对象创建空的顶点组,每个顶点组对应一个骨骼。顶点组可以用来指定哪些顶点受到哪些骨骼的影响,用户可以自己分配顶点到顶点组中。
    • With Envelope Weights: 这个子功能可以根据骨骼的信封权重来为对象分配顶点组和权重。信封权重是一种根据骨骼的形状和大小来计算顶点受到骨骼影响程度的方法。
    • With Automatic Weights: 这个子功能可以根据对象和骨骼的拓扑结构来为对象自动分配顶点组和权重。这是一种比较智能的方法,可以快速地完成绑定过程,但可能不够精确。

图片中的Bone功能是一种将一个对象设置为另一个对象的子对象的方法,但不是用骨骼结构来绑定,而是用单个骨头来控制。这样,子对象就会完全跟随父对象的骨头的移动、旋转和缩放,不会有任何形变。这种方法适合用于一些简单的对象,比如武器、道具等。

“With Automatic Weights”是一种将一个对象绑定到一个骨骼结构上的方法,使其可以通过骨骼的移动来进行形变和动画。这种方法会自动为对象分配顶点组和权重,根据对象和骨骼的拓扑结构来计算每个顶点受到哪些骨骼的影响程度。这种方法适合用于一些复杂的对象,比如人物、动物等。

对给定人体Mesh建立骨骼的操作步骤:

  1. 在Blender中打开人体Mesh模型,并确保该模型处于object模式。
  2. 或者使用快捷键“Shift + A”并选择“骨骼”。
  3. 在添加骨骼的窗口中,选择“自定义”选项卡,并设置骨骼的名称、长度、形状等属性。
  4. 将骨骼拖动到人体Mesh模型上,并将其放置在需要添加骨骼的位置。
  5. 重复上述步骤,直到人体Mesh模型上添加了足够的骨骼。
  6. 1. 在“对象”模式下,选择“网格”对象,然后按住 Shift 键并选择“骨架”对象,然后按 Ctrl-P 并选择“具有自动权重的父级”12。 这将在网格对象的“对象数据”面板中创建与骨骼同名的顶点组。
    2. 在编辑模式下,选择网格对象并进入权重绘制模式。 您可以使用画笔工具在网格上绘制或擦除权重³。 不同的颜色代表不同的权重值,红色为1,蓝色为0。您还可以在编辑模式下使用权重工具面板来调整权重⁴。
    3. 如果您遇到自动称重的任何错误或问题,例如“骨热称重:无法找到一根或多根骨头的解决方案”,您可能需要检查以下事项:
        - 确保您的网格是封闭体积的单个连接网格。 如果您有多个网格,则可以使用 Ctrl-J 将它们连接起来,并使用 M > 按距离按距离合并顶点。
        - 确保您的骨骼位于网格内部并对周围的顶点有足够的影响。 您可以在编辑模式下使用 Alt-S 调整骨骼包络大小。
        - 使用 Ctrl-A > 应用所有变换确保网格和骨架已应用缩放和旋转。
        - 确保您的网格和骨架没有任何会干扰父子关系过程的修改器。

注意:

  1. 按"E"键可以挤出新骨骼。这将从选定骨骼的末端创建一个子骨骼。

这是在Blender中创建新骨骼的一种方法。按"E"键可以选择一个骨骼,然后在其末端创建一个新的子骨骼。这个新的子骨骼将作为原来骨骼的子级,并且它们将保持连接状态。

  1. 按"Alt + P"键后选择"断开骨骼"选项可以断开骨骼。这将断开新挤出的子骨骼与其父级的联系,使其成为独立骨骼。

这是在Blender中断开骨骼连接的方法。通过按"Alt + P"键,可以选择"断开骨骼"选项,这将断开新创建的子骨骼与其父级骨骼的连接,使子骨骼成为独立的骨骼。

需要注意的是,使用"E"键挤出新骨骼时,默认情况下,Blender会将新的子骨骼的根部(基部)定位在父骨骼的末端。这意味着它会继承父骨骼的所有变换。所以,当您按"Alt + P" => "断开骨骼"将它们断开后,子骨骼的根部将保留在父骨骼的末端的相同位置和变换。

这意味着,在断开骨骼连接后,子骨骼的位置和变换将仍然受到其父骨骼的位置和变换的影响,因为它们在断开连接之前是相互关联的。因此,如果您想对子骨骼进行不同的变换,您需要手动调整子骨骼的位置和变换,以使其独立于父骨骼。

 

 

技术原理:

 

 Blender mesh 到 骨骼自动权重蒙皮用的是"LBS(线性Jt混合)"²。这种方法使用了骨骼的包围体(Envelope)来计算网格顶点和骨骼之间的权重值,然后使用线性混合蒙皮来变换网格顶点的位置。

1. 每个网格点都由多个骨骼影响。Blender根据点与各个骨骼的距离自动计算每个骨骼对这个点的权重。2. 这些权重值的总和加起来等于1。3. 当骨骼移动时,每个点会根据各骨骼对它的权重进行平移。这导致网格产生变形效果。4. 权重值更高的骨骼对点的影响更大。当多个骨骼同时影响一个点时,它会向这些骨骼的加权平均位置移动。所以,基本上,LBS算法通过自动计算网格点与骨骼的权重关系,并使用这些权重驱动点向骨骼空间的加权平均移动,来实现网格的变形和蒙皮效果。

在Auto-Rig Pro中,“Heat Maps"引擎是一种基于热度分布的权重绘制方法。它通过分析模型的几何形状和骨骼的位置来计算每个骨骼对模型各部分的影响力。这个过程类似于热量在物体内部传播的方式,因此得名"热图”。

具体来说,"Heat Maps"引擎会对每个骨骼生成一个影响力的热图,这些热图反映了骨骼对网格顶点的影响程度。骨骼越接近某个顶点,它对该顶点的影响就越大,热图上的颜色也就越热(通常是红色)。反之,骨骼距离顶点越远,影响力越小,热图上的颜色也就越冷(通常是蓝色)。

这种方法的优点是能够自动地为复杂的模型生成比较准确的权重,特别是对于有许多细节和复杂拓扑结构的模型。这样,当模型进行动画操作时,各个部分能够自然而流畅地随着骨骼的移动而变形。

需要注意的是,"Heat Maps"引擎最适合密闭且没有太多重叠部分的网格。对于开放型或者有大量重叠的网格,可能需要使用其他权重绘制方法,如手动绘制或使用"Voxel Heat Diffusion"方法。这些方法可以更好地处理复杂的模型情况,确保权重分布的准确性

Auto-Rig Pro的**Voxelized**引擎,将使用体素化技术来处理权重绘制。这种方法适用于非密闭或复杂的网格,如开放型网格或有重叠部分的模型。

体素化引擎通过将模型转换成体素(三维像素),然后根据体素与骨骼的距离来计算权重。这样可以更好地处理模型中的空隙和重叠部分,因为体素化不依赖于网格的连续性。这意味着即使模型有缺口或重叠,体素化引擎也能有效地分配权重。

此外,体素化引擎允许调整体素分辨率,这影响权重计算的精度和所需的处理时间。分辨率越高,计算越精确,但也需要更长的时间来执行²。
 

缺点:

而作为权重蒙皮最简单的实现方式,LBS也存在一些问题:

- 皮肤塌陷(网格点被拉向骨骼中心)
- 糖纸效应(网格部分明显绕骨骼旋转)
- 单独变形(网格局部与整体不协调)
- 体积变化(无法妥善保留体积)

 效果参考图:

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐