理解和简单使用unity的模型动画功能,以及插件。以FBX与Generic类型的骨骼蒙皮动画为主要叙述。

官方链接: 模型 - Unity 手册

3D资源文件-模型与动画
基本概念

首先,我们得知道,3d游戏中,我们说到一个模型动画的时候,包含两个部分,一个是模型,一个是动画,都来自于.fbx格式文件,或其他支持的格式文件:模型文件格式 - Unity 手册。本篇是以.fbx格式文件为叙述。

模型基本组成是网格:网格 - Unity 手册。网格是指的由顶点组成三角片,再由三角片组成整个可见外观的数据集合。而一个模型可以包含多个这样的集合。比如人,如果需要,我们可以把身体、四肢、头都拆成单独的网格,并形成一个统一的.fbx文件。当然,如无必要,尽量不要拆分这么多网格。

引用参考,可以了解相关的更多概念,入门可以直接跳过,全部可能劝退:

维基百科:https://en.wikipedia.org/wiki/FBX
官网FBX的SDK,有介绍明码数据结构:Help
自定义FBX二级制读取器:FBX binary file format specification — Blender Developers Blog
 

https://en.wikipedia.org/wiki/FBX

FBX binary file format specification — Blender Developers Blog

资源常见的划分与命名方式

        通常,我们会将模型数据文件单独导成一个.fbx,而将其他的动画文件也导成独立的.fbx。分别按照model_name.fbx和model_name@animation_name.fbx的形式进行命名,则动画.fbx文件会自动生成一个内置的 animation_name.anim 动画剪辑组件,可供后续的 Animator组件使用。这些概念后面还会提到。
 

模型与动画类型

unity 播放动画代码 unity播放fbx动画_unity



Unity模型类型

 基础概念与使用场景

 

       从Unity的角度来讲,模型动画类型有三种分别是 Legacy、Generic、Humanoid。Legacy基本是在被舍弃了,用的多的是Generic和Humanoid。而从程序的角度来讲模型动画是:顶点动画、蒙皮骨骼动画等等分类。

Unity Generic与Humanoid的若干基础点除盲:

Humanoid类型使用范围与Generic类型使用范围是等价的,但是内部实现方式不一样,即是说使用Generic能达成的效果,Humanoid基本都能达成。但是Unity对Humanoid做了更多上层应用的封装.
Generic满足于一般的动画需求,而Humanoid类型结合Unity的Avartar可以使用Unity内置的IK、AvartarMask、重定向等等功能(提出这个是因为不少同事都是基于商业引擎开始学习的,误将Avartar这类定义在概念层面与3D模型动画绑定在了一起,这里除下盲)。
Humanoid的性能消耗>Generic。一般的模型动画播放,使用Generic也可以满足要求,即使是人形态的模型动画。
常见的几种程序和美术意义上的动画类型:

骨骼蒙皮动画(SkinnedMesh):类比于:如同人体运动骨骼带动皮肤。概述一下就是,由世界矩阵驱动根骨骼,根骨骼矩阵驱动子骨骼,逐层递进驱动全身骨骼,再通过蒙皮信息决定每个骨骼对物体模型网格上每个顶点的权重影响,最终决定物体上每个顶点的实际运算位置。这一篇blog写的比较清楚,想继续了解,可以找专门的3D知识学习:

混合形状动画(BlendShape):这个和骨骼动画不同,它是由相同网格顶多,预定义出不同的网格形状,进行插值运算,而不是通过骨骼层层递进去运算,顶点动画:在Unity中很少直接接触到顶点动画,顶点动画与混合动画类似,不过它是记录每一帧的所有顶点数据,逐帧播放。这种对于大顶点数的模型,会占据相当大的内存,不过没啥运算压力。而在一些动画解决方案中,会有bake烘焙动画的功能,其实就是把骨骼动画的每帧计算结果转化成顶点动画,记录下来.由于用得少,这里只提一下.