【Unity编程】Unity动画系统(二)


距离上次翻译Unity 动画文档过去三个月,它已经从Unity5.6更新到了Unity2017,所以接下来的翻译在2017的文档上继续,动画文档的内容较多,为了能清楚显示当前阅读在哪里,我也作为分段落处理。
我将根据2017版的文档段落来进行分段:

Animation

  • Animation System Overview
  • Animation Clips
    • Animation from external source
      • Working with humanoid animations
        • Creating the Avatar
        • Configuring the Avatar
        • Muscle setup
      • Asset preparation and import
        • Using humanoid Characters
        • Preparing your own character
      • Non-humanoid Animations 【目前翻译到这里-_#!】
      • Splitting Animations
      • Looping animation clips
      • Masking Imported Clips
      • Animation Curves on Imported Clips
      • Animation events on imported clips
      • Selecting a Root Motion Node
      • Euler Curve Import
    • Animation Window Guide
      • Using the Animation view
      • Creating a New Animation Clip
      • Animating a GameObject
      • Using Animation Curves
      • Editing Curves
      • Key manipulation in Dopesheet mode
      • Key manipulation in Curves mode
      • Objects with Multiple Moving Parts
      • Using Animation Events
  • Animator Controllers
    • The Animator Controller Asset
    • The Animator Window
    • Animation State Machines
      • State Machine Basics
      • Animation Parameters
      • State Machine Transitions
      • State Machine Behaviours
      • Sub-State Machines
      • Animation Layers
      • Solo and Mute functionality
      • Target Matching
      • Inverse Kinematics
      • Root Motion - how it works
        • Tutorial: Scripting Root Motion for “in-place” humanoid animations
    • Blend Trees
      • 1D Blending
      • 2D Blending
      • Direct Blending
      • Additional Blend Tree Options
    • Animation Blend Shapes
    • Animator Override Controllers
  • Retargeting of Humanoid animations
  • Performance and Optimization
  • Animation Reference
    • Animation Clip
    • Animator Component
    • Animator Controller
      • Creating an AnimatorController
      • Animation States
      • Animation transitions
    • Avatar Mask
    • Human Template files
    • Importing models
      • Models
      • FBX Importer, Rig options
      • FBX Importer - Animations Tab
      • 3D formats
  • Animation HOWTOs
    • Animation FAQ
    • Using Blender and Rigify
  • Playables API
    • The PlayableGraph
    • ScriptPlayable and PlayableBehaviour
    • Playables Examples
  • A Glossary of animation terms

动画片段>使用外部导入的动画>使用人形动画>肌肉绑定

Mecanim允许您使用肌肉控制不同骨骼的运动范围。
如果Avatar 被正确配置,Mecanim将“理解”骨骼结构,并激活Avatar检视面板(选中FBX文件中的Avatar组件并单击常规检视面板中的”Configure Avatar”可以进入Avatar检视面板)中的Muscles & Settings(“肌肉&设置”)选项卡。 在这里,可以方便地调整角色的运动范围,角色的肢体将在人类关节变化所能到达的范围内的发生变形,不会发生变形错误或自我重叠。

【Unity编程】Unity动画系统(二)_第1张图片

你可以调整身体中的单个骨骼(上图中的下半部分),也可以使用预定义的几种操作方式来操纵角色的变形,这些预定义的操作可以一次性操纵几个骨骼(图中的上部)。
Additional Setting(附加设置)部分底部显示的“Translate DoF”选项允许你启用对人形骨骼的移动动画(例如:手臂可以伸长)。 禁用此选项后,骨骼仅能发生旋转。 只有在你的动画中包含针对某些骨骼的运动,你才需要启用此选项。 启用“Translate DoF”选项具有一些性能成本,因为动画系统需要做一个额外的步骤来重新定位人形动画。 “Translate DoF”可用于Chest(胸部),UpperChest(胸部上部)、Neck(颈部)、LeftUpperLeg(左腿上部)、RightUpperLeg(右腿上部)、LeftShoulder(左肩)和RightShoulder(右肩)部分的肌肉。

动画片段>使用外部导入的动画>准备和导入资源>使用人形动画

为了充分利用Mecanim的人形动画系统和重定位功能,你需要有一个可操纵的、已经蒙皮的人形网格。

  1. 角色模型通常由存储于一个3D数据包裹中的多边形组成的,也可能它是源于很复杂的一个网格模型,后来被导出为多边形或三角形网格使用。
  2. 我们需要创建一个关节层次结构,也被称为“骨架”,它定义了网格内的骨骼以及骨骼之间的相对运动关系(层次结构中的每个节点在Unity内部都是一个GameObject),我们通过骨架来控制角色的运动。创建这个骨架的过程被称为“骨骼绑定”。
  3. 然后,网格或皮肤将被关联到这个骨架,以便定义出,在给定的关节发生运动时,网格哪些相应部分的将发生移动。将骨架关联到网格的过程称为“蒙皮”。

【Unity编程】Unity动画系统(二)_第2张图片

怎样获得人形动画模型

Mecanim动画系统主要有三种方法获取人形动画模型:

  1. 使用程序化角色系统或角色生成器,如Poser,Makehuman或Mixamo。 这些系统中有的将对你的网格进行绑定和蒙皮(例如,Mixamo),有些则不会。 此外,这些过程中有的可能会要求你减少原始网格中的多边形数量,以使其适用于Unity。
  2. 从Unity Asset Store购买角色模型。
  3. 你当然可以从零开始制作自己的角色模型。

导出和验证

Unity可以导入许多不同的3D文件格式,有通用的,也有原生的格式。 我们建议你使用FBX 2012格式来导出和验证你的模型,因为它将允许你:

  • 在导出网格时,可以包含骨架层次、法线,贴图和动画
  • 它允许你重新导入3D包裹(FBX文件),来验证你的动画模型是否按照你预期的方式导出
  • 它允许你仅仅导出动画,不包含网格

动画片段>使用外部导入的动画>准备和导入资源>制作你自己的角色

从零开始创建你自己的人形动画角色的话,需要三个步骤:建模、骨骼绑定、蒙皮

建模

这个阶段,你将在一些3D模型软件( 3DSMax, Maya, Blender等等)中创建你自己的人形角色的模型网格。尽管这是另外一个非常庞大的主题,但是这里仍然需要你遵循一些准则,来确保模型在Unity项目中与动画可以正常协调工作。

  • 遵守合理的拓扑结构。模型的网格结构是相当敏感的,一般来说,您需要清楚的是,模型的顶点和三角形将如何跟随动画而变形。拓扑结构不合理的话,甚至将导致模型无法移动,以避免对网格造成不好的变形。你可以通过研究别人制作的3D人物网格,可以了解到如何布置拓扑结构以及为什么。
  • 注意模型网格的尺寸。你可以进行一次导入测试,即将导入的模型的大小与“1米标准立方体”(Unity的标准立方体原型边长为一个单位(1米),因此可以用作很多测量的用途)进行比较。检查你的模型使用的单位,并调整导出设置,使导出的模型的尺寸比例正确。除非你很小心,否则很容易创建没有任何尺度概念的模型,这样最终会导致你导入模型到Unity时大小不一致。
  • 调整你的网格,使得人物的脚站立在模型的本地原点或“锚点”上。由于角色通常都是在地板上直立行走,所以如果锚点(即其变换位置Transform)直接位于地面位置的话,那么它更容易处理。
  • 如果允许的话,最好使用T型的模型。这将在一些需要的地方留有空间,有助于处理多边形细节(例如腋下)。这也将使您的网格更容易与骨骼进行绑定。
  • 把你的模型清理干净。在可能的情况下,执行封孔、焊缝和去除隐藏的面等清理操作,这将有助于蒙皮操作,特别是自动蒙皮过程。

【Unity编程】Unity动画系统(二)_第3张图片
Skin Mesh, textured and triangulated

骨骼绑定

这是创建关节骨架以控制模型运动的过程。

很多3D软件提供了许多方法来为人形骨架创建关节。 这些提供的方法可以让你:从现成的两足动物骨架,缩放以适应您的网格;也可以使用独立的骨骼创建工具,以创建您自己的骨骼结构。 要与Mecanim协调工作,臀部应该是骨骼层级的根元素,另外,整个骨架中至少需要15个骨骼。
关节/骨骼层次应该遵循您所创建的角色的自然结构。 鉴于手臂和双腿成对,您应该使用一致的约定来命名它们(例如,左臂的“arm_L”,右臂的“arm_R”等)。 层次结构的可能结构可能是:

  • HIPS - spine - chest - shoulders - arm - forearm - hand
  • HIPS - spine - chest - neck - head
  • HIPS - UpLeg - Leg - foot - toe - toe_end

【Unity编程】Unity动画系统(二)_第4张图片
Biped Skeleton, positioned in T-pose

蒙皮

这是将模型网格连接到骨架的过程。

蒙皮是为了将网格中的顶点绑定到骨骼,这个过程可以采用直接绑定(硬绑定),或者采用影响到多个骨骼的混合绑定(软绑定)。不同的软件会使用不同的方法。例如,在计算每个骨骼对的网格顶点的影响权重的过程的时候,此数据计算的初始化过程是自动的,不过有软件的会通过查找临近区域来计算影响权重,有的则会使用”热度图”(heatmaps)的方法来产生。蒙皮过程通常需要在动画测试上做大量的工作,以获得满意的皮肤变形结果。在这个过程中,存在一些一般准则:

  • 首先使用自动化过程设置一些皮肤(请参阅3DMax,Maya等相关教程)。
  • 为您的骨架创建一个简单的动画或导入一些动画用作蒙皮的测试。这样你可以快速查看皮肤在运动过程中是否是否完好。
  • 逐步编辑来改善你的蒙皮方案。
  • 使用软绑定时,每个顶点最多可能会受到四根骨骼的影响,因为这是Unity将处理的最大数量。如果使用超过四个影响值,那么在Unity中播放动画时,有一些信息将会丢失。

【Unity编程】Unity动画系统(二)_第5张图片
交互式皮肤绑定,许多蒙皮方法之一

你可能感兴趣的:(Unity基础教程)