【Unity】10.1 类人动画的导入和设置

分类:Unity、C#、VS2015

创建日期:2016-05-02

一、制作或购买类人模型

为了充分使用 Mecanim 类人动画系统和类人动画的动画重定位功能,需要先使用其他3D建模软件(例如3ds Max 2015),制作一个搭好了骨架和蒙皮的类人网格模型。

1、什么是类人模型

类人模型也叫类人网格模型,它通常由一组多边形或者三角形网格来组成。

创建类人模型的过程称为建模。

image

在上面这个图中,1是通过“建模、搭骨架、蒙皮”后最终完成的类人模型,2是为该模型搭的骨架,3是蒙皮的效果。

2、制作类人模型的基本思路

这里简单介绍如何利用3ds Max 2015从头开始创建类人网格模型,即简单解释“建模、搭骨架、蒙皮”的三个基本步骤。

(1)建模

建模是指在三维建模软件(3ds Max、Maya、Blender 等)中创建类人网格的过程。

下面给出的是你在建模时应该遵循的要点,这样做可确保模型在 Unity 工程的动画中能很好地使用类人模型。

(1)网格拓扑结构要“合理”。什么叫“合理”每个人的理解都不太一样,但通常情况下,你应当牢记:模型在动画化时其顶点和三角形的变形方式很重要。在没有难看的网格变形的情况下,糟糕的网格拓扑结构可能会导致模型无法运动。

掌握拓扑结构快速入门的捷径是:通过大量学习别人已经制作好的三维角色网格模型,逐步了解和理解拓扑结构的含义,以及如此安排的原因。

(2)注意网格缩放比例。要注意导入的模型和“米立方体”的大小是否一致(标准 Unity 基本立方体的边长为一个单位,所以大多数情况下,通常认为是 1m 立方体)。或者说,一定要检查三维资源包使用的单位是否是“米”,如果不是就调整导出设置,以确保模型大小与立方体的比例正确。

这一原则看似简单,其实也很重要。除非极其小心,否则一不留神很容易创建出没有任何缩放比例概念的模型,导致导入 Unity 后形成的是一组大小不成比例的对象。

(3)排列网格时,一定要让角色的双脚站在坐标原点或模型的“锚点”。由于角色通常在地面上直立行走,如果其锚点(即变换位置)本来就在地面上,那就会更容易控制。

(4)如果可以的话,尽量使用 T 字姿势 (T-pose) 建模。这样有助于留出空间,让你在需要的地方(例如腋下)完善多边形细节。同时这还能让你更容易在网格中放置装置。

(5)清理模型。如果可能,覆盖孔洞,焊接顶点,移除隐藏面,这样有助于蒙皮,特别是自动蒙皮过程。

下图是蒙皮网格 (Skin Mesh),即:经建模、加纹理及三角化后的结果。

image

(2)搭骨架

为了控制角色运动,必须先利用3ds Max 2015等建模软件创建一个定义网格内骨骼及其相互之间运动关系的关节层级(joint hierarchy)。

这个创建关节层级的过程称为“搭骨架(rigging)”。

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

三维资源包提供了多种方式,为类人装置创建关节。范围包括已经构建好、可以缩放后放入网格的两足动物骨架,以及创建自己的骨骼结构的单块骨骼创建和父子化工具。尽管细节已超出 Unity 的范围,这里还是有一些通用指南:

学习已有的类人骨架层级(例如两足动物),且如果可能,使用或模仿骨骼结构。

确保臀部是骨架层级的父骨骼。

骨架中至少需要十五块骨骼。

关节/骨骼层级应遵循所创建角色的自然结构。假如手臂和腿成对出现,应当为它们使用一致的名称(例如,"arm_L" 表示左臂,"arm_R" 表示右臂等)。可能的层级包括:

臀部 – 脊椎 – 胸部 – 肩膀 – 大臂 – 前臂 – 手

臀部 – 脊椎 – 胸部 – 脖子 – 头

臀部 – 大腿 – 腿 – 脚 – 脚趾 – 趾端

下图为两足动物骨架 (Biped Skeleton),放置成 T 字姿势 (T-pose):

image

(3)蒙皮

类人网格必须与关节层级关联起来,这样看着才像个“人”。另外,只有关联以后,才能通过指定关节的动画来控制特定网格的运动。

简单来说,这个“将骨架连接到网格的过程”称为“蒙皮(skinning)”。说白了,就是给类人骨骼(或骨架)模型套一层“人皮”或“穿衣”,当然了,叫“蒙皮”比叫“套一层人皮”或“穿上衣服”好听和高大上多了。

准确来说,蒙皮就是向“骨架”附加“网格”的过程。

蒙皮包括将网格中顶点绑定到骨骼,可以直接绑定(称为刚性绑定),或者结合对许多骨骼的混合影响予以绑定(称为柔性绑定)。不同的软件采用的蒙皮方法可能不同,例如分配独特顶点和在网格上逐骨绘制影响权重。初始设置通常是自动的,例如通过找到最接近的影响或使用“热图”。

蒙皮通常需要开展大量的工作和使用动画进行测试,以确保获得满意的蒙皮变形效果。

这个过程的一些通用指南如下:

(1)最初使用自动化过程来设置蒙皮(请参阅 3DMax、Maya 等相关教程)。

(2)为你的装置创建简单的动画,或者导入一些动画数据作为蒙皮测试。这样可让你快速评估蒙皮在运动中的效果。

(3)逐步编辑并完善蒙皮方案。

(4)坚持在柔性绑定时“最多”使用四种影响,这是 Unity 可以处理的数目上限。如果部分网格受到的影响超过四种,那么在 Unity 中播放动画时至少会丢失一些信息。

下图为交互式皮肤绑定 (Interactive Skin Bind),这是众多软件采用的蒙皮方法之一。

image

二、制作类人角色

利用3ds Max 2015做完“建模、搭骨架和蒙皮”的过程以后,就可以将其导入到Unity中,然后再利用Mecanim制作类人角色。

1、创建或获取类人模型的途径

在Mecanim 中,有三种途径来得到 Mecanim 动画所用的类人模型。

(1)通过专业的3D建模软件(例如3ds Max、Maya、Blender等),从头开始自己制作需要的人体模型。这种方式需要熟悉3D建模软件的用法,优点是自己想做成什么样就做成什么样,缺点是需要花时间。

(2)从 Unity 资源商店购买适当的类人模型资源。这种方式的优点是模型来得快,缺点是可能需要花费点钱。

(3)利用过程式的人物建模软件(称为程序化角色系统或角色生成器,例如 Poser、Makehuman 或者 Mixamo)加快制作类人模型的过程。其中有些软件可同时为网格搭骨架和蒙皮(例如 Mixamo),而另外一些软件却没有此功能。此外,应该在使用这些软件的过程中尽可能减少原始类人网格中的多边形数量,以便让其更好地适用于 Unity。这种方式的优点是可能会提高一些制作效率,缺点是还得再学新的软件用法,如果新的软件不会用,可能还没有“直接用3ds Max 2015直接做”来的快。

2、将模型导出为按单个FBX文件

Unity引擎可导入大量不同的通用和本地3D文件格式。

不论用哪种建模软件,建议将其导出为FBX格式的文件。这种格式的优点是:

·FBX格式的网格模型可以同时包含关节层级、法线、纹理以及动画信息。

·可以将FBX网格模型导入到3ds Max 2015,来验证动画模型的正确性。

·可以从FBX文件中直接导出不包含网格的动画信息。

对于Unity 5.3.4来说,建议用3DS Max 2015制作或导入用其他软件制作的人体模型,完成后再将其导出为FBX 2014格式的文件,然后就可以在Unity中使用这个FBX文件,即利用Mecanim动画系统对其进行动画处理了。

3、将导出的FBX文件导入到Unity

要在Unity中使用角色模型,必须先将其导入到Unity工程中。

导入FBX格式的动画到Unity中很简单,只需要将模型直接拖到工程面板中的Assets文件夹中即可。

导入后,就可以在检视器(Inspector)的【Import Settings】中编辑导入设置。

三、导入多个模型动画到Unity

除了前面介绍的分别将单个动画模型导入到Unity中以外,还有一种导入动画模型的方式,该方式按照 Unity用于动画文件的命名规则来为其命名。

使用这种方式时,可对分别创建的模型文件使用 “modelName@animationName.fbx”的约定为其命名。例如,对一个叫做 "goober" 的模型,可以使用名称为下面的4个文件分别导入单独的空闲、走路、跳跃和跳墙动画:

空闲动画文件名:goober@idle.fbx

走路动画文件名:goober@walk.fbx

跳跃动画文件名:goober@jump.fbx

跳墙动画文件名:goober@walljump.fbx"

这样虽然原始文件同网格数据一起导出,但只有这些文件的动画数据才会被使用。

下图是动画角色所用4个动画文件的示例(注意,.fbx扩展名在 Unity 中默认不显示,单击选择某个文件后,才能看到其扩展名):

image

当将这4个文件拖到Project的Assets文件夹下以后,Unity 就会自动导入全部4个文件,并将所有动画收集到一个没有 @ 标记的文件中。例如,在上图所示的示例中,程序会将 其收集到goober.mb 文件中,该文件会自动引用空闲、跳跃、走路和跳墙的动画。

对于 FBX 文件来说,导入多个动画时,只需导出每个文件需要的关键帧(在 FBX 对话框中激活动画),然后将没有勾选动画的模型文件(例如 goober.fbx)和4个片段导出为 goober@animname.fbx即可。

四、分割动画

分割动画就是将动画分解为动画片段(Animation Clips)。

一个动画角色一般来说都会具有一系列的在不同情境下被触发的基本动作,比如行走、奔跑、跳跃、投掷、死亡、……等。这些基本动作都被称为动画片段。

根据具体需求,上述基本动作有两种处理方式:

方式1:导入按固定顺序播放各个基本动作的单一动画片段。

方式2:分别导入若干个独立的动画片段。这样在Unity内部就不再需要分割动画了。

下面分别解释这两只方式。

1、使用包含预先分割片段的动画模型

包含预先分割动画的模型是使用起来最容易的模型类型。

对于这种动画,你将在动画导入检视器 (Animation Importer Inspector) 中的Animations选项卡中看到一列可用片段,在预览窗口 (Preview Window,在检视器下方)中点击【播放 (Play)】,就可预览这些片段。如果需要,还可以编辑(调整)这些片段的帧范围。

2、使用包含未分割动画的模型

对于这种情况,使用动画前必须在Unity内部先将该单一动画片段分解为若干个子片段。具体做法是:导入FBX格式的模型后,在导入设置 (Import Settings) 中的分割动画 (Split Animations) 中告知 Unity 资源文件中的哪些帧构成了哪个动画片段 (Animation Clip)。在此处指定的名称用于在游戏中用来激活动画。

对于那些将片段作为连续动画来提供的模型,在动画导入检视器 (Animation Importer Inspector) 中的动画 (Animation) 选项卡中,可以定义符合独立动画序列(走路、跳跃等)的帧范围。按下 (+) 并选择包含在片段中的帧范围,即可创建一个新动画片段。

 

对于包含肌肉线条 (Mecanim) 的模型,分割动画的步骤如下:

(1)创建一个新的动画控制器 (New Animator Controller)

(2)打开动画控制器窗口 (Animator Controller Window)

(3)将需要的动画片段拖入动画控制器窗口 (Animator Controller Window)

(4)将模型资源拖入层次视图 (Hierarchy)。

(5)向资源动画器 (Animator) 组件添加动画控制器。

posted @ 2016-05-02 06:50  rainmj  阅读(6334)  评论(0编辑  收藏  举报