UDN
Search public documentation:

AnimationMirroringCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3主页 >动画 >动画镜像
UE3主页 >动画设计师 >动画镜像

动画镜像


概述


在游戏中,需要彼此是镜像图像的动画是很常见的。比如,您需要一个'向左看' 和 一个'向右看'的动画版本。尽管可以通过在类似于3DSMax、Maya等3D内容创建包中创建这两个动画,然后将它们导入到引擎中;但这不是理想的解决方案。因为有时候需要在游戏运行过程中生成这些动画,也需要镜像动画的动态混合过程。要想使用这个镜像系统,很重要的一点就是您的骨架必须是对称的。

SkeletalMeshMirrorExample.jpg

设置骨架网格物体


在您使用镜像功能之前,您必须在您的骨架网格物体中设置镜像表格。如果您在动画集编辑器中打开网格物体,您可以在右侧的‘Mesh(网格物体)’标签下找到镜像相关的设置。第一个要设置的是SkelMirrorAxis,该项设置了针对哪个轴镜像骨架网格物体。注意这是在‘网格物体’的空间里;也就是,在应用RotOrigin 之前 网格物体在3D包中进行创建时的参考系统。下一个要设置的东西是 SkelMirrorFlipAxis 。当您镜像一个骨骼变换时,为了使骨骼不会“从内侧向外侧”旋转,您必须翻转其中的一个坐标轴。具体翻转哪个坐标轴根据您的骨架网格物体的构造决定,这个设置允许您使用默认的坐标轴。然而,您可以在SkelMirrorTable中基于每个骨骼默认地覆盖该项。

这里是一些使用翻转坐标轴的例子。在第一个例子中,骨骼62镜像映射到骨骼37,然后翻转X-轴:

SkeletalMeshMirroringShoulderPads.jpg

在这个例子中,骨骼9镜像映射到骨骼4,然后翻转X-轴。

SkeletalMeshMirroringFeet.jpg

设置骨架网格物体镜像的最耗费时间的部分便是设置 SkelMirrorTable(骨架网格物体镜像表) 。这个表格提供了将每个骨骼映射到另一个骨骼的所有信息。比如,右侧膝盖的源应该是左侧膝盖;脊柱的源是脊柱本身,因为这个骨骼是沿着中心线的(假设这是个对称的哺乳动物的骨架网格物体)。

SkeletalMeshMirrorProperties.jpg

AnimSet编辑器包含着一个尝试自动创建映射表的工具。在‘Mesh(网格物体)’菜单下,选择`Auto-build Mirror Table(自动生成镜像表)'。这将会创建一个表格,当处于参考姿势时,将尝试匹配在镜像平面两侧处在相应位置的骨骼。您必须在运行这个工具之前设置 SkelMirrorAxis(骨架镜像坐标轴) 。对于身体的大部分构成来说该工具都能正常工作,包括腿、手臂、指甲等。如果您在同一个位置有多个骨骼,或者当许多骨骼聚在一起(比如使用许多面部骨骼)时,可能会出现问题。

SkeletalMeshAutobuildMirrorTable.jpg

一旦创建了表格,您可以通过按下动画集编辑器上的View Mirrored(查看镜像)按钮 SkeletalMirroringButton.png来查看它是如何工作的。

通常您需要对自动生成的表格进行一些修复,从而使得一切更加完美。在‘Mesh(网格物体)’标签下,当您展开 SkelMirrorTable(骨架镜像表格) 部分,您将会看到骨架中每个骨骼的条目。在每个条目项中显示了骨骼的编号,骨骼将要从这个编号获得变换信息。这些条目必须是成对的;如果骨骼88的源是骨骼65,那么骨骼65的源就必须是骨骼88。

SkeletalMeshMirrorTable.jpg

要想查找哪个索引和哪个骨骼相对应,您可以或者在3D视口中打开骨骼名称,并使用Mesh(网格物体)菜单下的Copy Bone Names To Clipboard(复制骨骼名称到剪切板)选项并将该列表复制到文本编辑器中;或者可以在骨架树种查看,括号内的骨骼索引号在和它相关的骨骼旁边。您也可以通过基于每个骨骼来调整 BoneFlipAxis(骨骼翻转坐标) 来覆盖 SkelMirrorFlipAxis(骨架镜像翻转轴) 的默认值。

在骨架树中和骨骼相关联的骨骼索引号

SkeletalMeshSkeletonTree.jpg

镜像工具


在动画集编辑器的Mesh(网格物体)菜单中,有一些选项可以使我们在使用镜像表进行工作时更容易一些。

Auto Build Mirror Table(自动生成镜像表)

这个功能将会尝试为当前的网格物体自动地生成一个镜像表格。您可能需要做一些调整工作,但是它可以提供一个很好的基础。当完成后,它也会通知您是否找到了任何错误。

SkeletalMeshPostAutobuildMirrorTable.jpg

Check Mirror Table (检查镜像表)

将会检查镜像表来查找问题,如果发现任何问题将会显示一个弹出窗口。

SkeletalMeshErrorsInMirrorTable.jpg

Copy Mirror Table To ClipBoard.(复制镜像表到剪切板)

允许您在文本编辑器中检查镜像表。
复制到剪切板中的镜像表示例
  0: 0 AXIS_NONE
  1: 1 AXIS_NONE
  2: 2 AXIS_NONE
  3: 3 AXIS_NONE
  4: 41 AXIS_NONE
  5: 5 AXIS_NONE
  6: 16 AXIS_NONE
  7: 7 AXIS_NONE
  8: 8 AXIS_NONE
  9: 14 AXIS_NONE
 10: 15 AXIS_NONE
 11: 11 AXIS_NONE
 12: 17 AXIS_NONE
 13: 13 AXIS_NONE
 14: 14 AXIS_NONE
 15: 10 AXIS_NONE
 16: 16 AXIS_NONE
 17: 12 AXIS_NONE
 18: 18 AXIS_NONE
 19: 19 AXIS_NONE
 20: 20 AXIS_NONE
 21: 21 AXIS_NONE
 22: 38 AXIS_NONE
 23: 39 AXIS_NONE
 24: 40 AXIS_NONE
 25: 25 AXIS_NONE
 26: 42 AXIS_NONE
 27: 43 AXIS_NONE
 28: 44 AXIS_NONE
 29: 45 AXIS_NONE
 30: 46 AXIS_NONE
 31: 47 AXIS_NONE
 32: 48 AXIS_NONE
 33: 33 AXIS_NONE
 34: 34 AXIS_NONE
 35: 51 AXIS_NONE
 36: 36 AXIS_NONE
 37: 37 AXIS_NONE
 38: 22 AXIS_NONE
 39: 39 AXIS_NONE
 40: 40 AXIS_NONE
 41: 41 AXIS_NONE
 42: 26 AXIS_NONE
 43: 27 AXIS_NONE
 44: 28 AXIS_NONE
 45: 29 AXIS_NONE
 46: 30 AXIS_NONE
 47: 31 AXIS_NONE
 48: 32 AXIS_NONE
 49: 49 AXIS_NONE
 50: 50 AXIS_NONE
 51: 35 AXIS_NONE

Copy Mirror Table From Selected Mesh.(从选中网格物体中复制镜像表)

当多个网格物体共享同样的骨架时,这是复制镜像表的比较容易的方式,而不需要重新创建它。

在动画树中使用镜像


一旦设置骨架网格物体使用镜像,那么就可以在动画树中轻松地使用它。有一个特殊的动画节点类型称为AnimNodeMirror(镜像动画节点),它有一个输入端和一个输出端。如果您在动画树中插入其中一个节点,它将会镜像输入端动画混合的任何动画。在这种方式中,您可以镜像一个单独的动画或者多个动画的混合,可以在镜像动画和非镜像动画间的混合,从而使得变换更加平滑。

AnimNode(动画节点)中的 bEnableMirroring(启用镜像 标志允许您切换镜像行为的打开和关闭。注意镜像一个动画的性能消耗是非常大的,所以请尽可能少地使用AnimNodeMirrors。

相关主题