当前课程知识点:游戏程序设计 > 第九章 《游戏动画》 > 9.4 骨骼蒙皮动画 > 9.4 骨骼蒙皮动画
啊
接下来我们来介绍本科的重点章节
骨骼蒙皮动画
骨骼蒙皮
顾名思义就是指在骨骼上蒙上皮
通过骨骼驱动蒙皮进行运动
这里的蒙皮
指的就是3D模型的网格顶点
那接下来我们来分析一下
骨骼蒙皮动画
跟刚性阶层动画的主要的区别
这张图左边是刚性阶层动画
右边是骨骼蒙皮动画
然后这个白色部分是骨架结构
骨骼蒙皮动画
跟刚性阶层动画第一点区别是
他们组成阶层结构的对象是不一样的
刚性阶层动画是通过身体部位
本身组成刚性阶层结构
而骨骼蒙皮动画
它是通过一个虚拟的骨骼
来组成阶层关系
然后第二点区别是
骨骼蒙皮动画的模型
网格是一个整体
它并没有按照身体的部位单独拆开
第三点区别是
骨骼蒙皮动画
是通过骨骼
组成的骨架来驱动模型顶点运动的
最后一点区别是
骨骼蒙皮动画
关节点处的顶点
可能会受到多根骨骼的影响
这也是他解决关节裂缝问题的关键
这样我们可以通过编辑器调节关节处顶点
它受不同骨骼影响的权重
然后使得关节处的顶点运动时
表现出比较平滑自然的效果
接下来我们来介绍一下
骨骼这个概念
在蒙皮骨骼动画中
骨骼其实他是一个虚拟概念
在游戏中
骨骼一般
一般是不渲染的
他只是用来存储阶层
存储阶层关系以及保存SQT变化数据
一般在编辑器中为了调试方便
会通过设置显示骨架结构
根据前面的图形学知识
我们知道
SQT三个变化
他可以合并为一个矩阵
我们把它记为M
接下来我们来解释一下
骨骼和关节之间的关系
这个是初学者很容易混淆的地方
而现实生活中
骨骼是有长度的
它是连接关节之间的桥梁
但是
骨骼蒙皮动画中所指的骨骼
它并没有长度的概念
实际上
这里的骨骼指的就是关节的意思
我们一定不能混淆了
西西动画编辑工具
经常会把骨骼的长度给绘制出来
其实是为了方便展示
骨架的阶层关系
然后接下来我们来介绍一下
骨骼蒙皮动画的制作流程
我们先来介绍T-POSE这个概念
首先建模人员
他创建一个初始模型
一般会把人物模型做成T字形
因为这个姿势是一种放松的姿势
能够比较方便
后面骨架的设置
以及蒙皮的操作
这个姿势我们把它称之为T-POSE
然后把初始的T-POSE模型作为一个模板
在这个基础上设置骨架结构
这个过程叫骨架设置
设置好后的骨架姿势
也是一个T-POSE的姿势
然后接下来在T-POSE模型跟骨架上
进行蒙皮操作
蒙皮指的就是模型的顶点
蒙皮操作就是把
模型的顶点与关联的骨骼绑定在一起
蒙皮操作是一个体力活
尤其是关节点位置的顶点
需要做大量的骨骼权重的调整
才能达到较为平滑的顶点动画的效果
动画设计人员
一般通过在时间轴上调整骨架的不同的姿势
来设置关键帧
达到让骨架运动的目的
然后输出编辑好的动画片段
供程序游戏程序使用
这就是蒙皮骨骼动画
制作和导出的过程
然后接下来我们来讲
蒙皮算法的原理
在介绍原理之前
我们先要搞清楚
骨骼蒙皮动画
相关的几个坐标空间
第一个世界空间
它指的是游戏世界的坐标系
第二个模型空间
它指的是模型制作时的局部坐标系
第三个骨骼空间
它指的是以骨骼为原点的坐标系
蒙皮动画的目的就是通过骨骼动画的驱动之后
求得顶点
在目标支持下的模型空间的位置
接下来
我们来看一下骨骼驱动
蒙皮顶点的过程
我们假设手臂上有一个顶点位
他跟骨骼B关联
然后当骨骼B转动的时候
顶点位也跟着转动
然后当骨骼B的副骨骼转动的时候
骨骼B也跟着转
进而带动了顶点V的转动
所以
骨骼对蒙皮顶点的影响
具有阶层式的驱动作用
然后现在我们来介绍一下蒙皮顶点的计算
我们先来假设一些条件
为了简化问题
我们采用手臂骨骼链
来分析计算的过程
至于身体其他部位的骨骼
骨骼蒙皮计算都可以以此类推
首先第一张图它是手臂模型的初始姿势
而这个手臂有三根骨骼
我们假设跟骨骼为B0
他的指骨骼也就是肘关节的骨骼
为B1
最上面的骨骼因为没有关联顶点
我们直接忽略
假设手臂模型上有个顶点V
他只关联骨骼B1
至于顶点V
关联多根骨骼的情况
我们后面会来讲解
那左下角
是模型空间下的原点
第二张图
为了方便分析我们把网格模型去除
只留下顶点V
第三张图
是目标之事项
顶点V和手臂骨架的姿势
这里有几个已知的条件
第一个已知条件是
顶点V初始姿势下的模型空间位置
是知道的
第二个条件
是不同的姿势下
每根骨骼的SQT数据都是已知的
在建模工具导出动画片段数据的时候
会带有SQT数据
骨骼的SQT数据是相对于
副骨骼的空间而言
我们把它记为Mb
这里大写的M指的是矩阵
小写的b
指的是骨骼空间
蒙皮顶点计算的目的
就是要求出顶点V
在这个目标支姿势下
他的模型空间的位置
接下来我们来分析一下
骨骼空间跟模型空间之间的联系
这里B1是B0的子骨骼
然后B1的曲线变化
是相对于B0而言的
因为B0是根骨骼
所以我们可以得到B零的模型空间下的矩阵变化
就是B0在骨骼空间下的矩阵变化
我们把它记为Mm0=Mb0
所以我们进而能够推导出
第一 在模型空间下的矩阵变换
Mm1
等于Mb1*Mb0
同理以此类推
假设这个骨骼链上有n根骨骼
第n根骨骼
我们假设为bn
同理
可以得出bn在模型空间下的矩阵变化
Mmn=Mbn*Mb(n-1)...Mb0
所以后面我们为了推导方便
我们假设
骨骼在模型空间下的矩阵变化都是已知的
另外
我们再来看另外一个隐含的条件
我们首先假设初始姿势下
顶点V相对于骨骼b1的位置为
Pb0
这里小写的b指的是骨骼空间
在角色目标姿势下
V点相对于骨骼b1的位置为Pb1
我们可以发现
顶点V是跟着骨骼b1运动的
他相对于b1的位置
无论在什么姿势下永远都是不变的
所以我们可以得出
Pb0=Pb1
我们统一记为Pb
接下来我们来求
顶点V在目标姿势下的位置PMt
然后首先我们假设初始姿势下b1
在模型空间下的矩阵变换为M1i
这里数字1代表骨骼的序号
小写的字母i代表初始姿势
我们前面分析过
M1i可以认为是已知的
所以根据图形学的知识可以得到
PMi等于Pb乘以M1i
也就是说
顶点V在初始模型空间下的位置
PMi等于
顶点在骨骼B1下的骨骼空间位置
Pb乘以b1在
初始模型空间下的矩阵变换
M1i
从而我们能够得出Pb
等于PMi乘以
M1i的逆
然后我们再假设
目标空间下
骨骼b1的相对模型空间的
矩阵变换为M1t
于是同样可以得出
PMt=Pb*M1t
我们根据前面的结论得出PMt
等于PMi*M1i的逆
再乘以M1t
等式后面这些变量
我们前面分析过
都可以认为是已知的
所以PMt目标姿势的
模型空间位置就求出来了
然后这里我们把Mni逆
乘以Mnt称为蒙皮矩阵
记为Mns
这里S指的是蒙皮
所以最终
顶点的在目标支持下的模型空间位置等于
顶点V初始之下的模型空间位置
乘以它对应的蒙皮矩阵
Mns
接下来
我们来看顶点关联多根骨骼的情况
假设顶点V关联n根骨骼
顶点相对于每一根骨骼都有一个权重值Sn
在西西动画工具里
可以保证
S0+S1
一直加到Sn结果一定是1
并且每一个权重值
他们的范围一定在零到一之间
所以通过累加
我们可以得出
顶点在目标姿势下的模型空间位置
PMt
等于顶点在初始姿势下的模型空间位置
PMi
乘以括号S0
乘以骨骼0的蒙皮矩阵
然后一直垒乘到
Sn乘以骨骼n的蒙皮矩阵
这就是顶点关联多根骨骼的计算的结果
-1. 1什么是游戏(上)
--选择题
-1.2 什么是游戏(下)
--选择题
-1.3 游戏是如何开发出来的
-1.4 游戏引擎(上)
-1.5 游戏引擎(下)
--单选题
-1.6 如何成为一个游戏开发者
--多选题
-2.1 什么是游戏服务器
--单选题
-2.2 游戏服务器的和分类发展
--单选题
-2.3 核心技术和实现难点
--单选题
-2.4 设计原理与方法论
--单选题
-3.1 三维坐标系统
--多选题
-3.2 向量与运算
--单选题
-3.3 矩阵与线性变换
--双选题
-3.4 四元数
--3.4 四元数
--多选题
-4.1 游戏循环概述(上)
--多选题
-4.2 游戏循环概述(下)
--单选题
-4.3 《无尽之路》的实现
--单选题
-4.4 支撑游戏的功能
--选择题
-4.5 支撑游戏的机制与系统
--多选题
-5.1 基本介绍
--5.1 基本介绍
--单选题
-5.2 随机数生成器
--单选题
-5.3 随机数分布与应用
--单选题
-6.1 什么是游戏玩法开发
--单选题
-6.2 建立愿景 Vision
--单选题
-6.3 划定边界 Scope
-6.4 迭代 Iteration
--单选题
-6.5 迭代 Iteration+抛光Polish
--单选题
-7.1实时图形渲染管道 宏观渲染系统
--单选题
-7.2实时图形渲染管道 应用阶段
--单选题
-7.3实时图形渲染管道 几何阶段
--单选题
-7.4实时图形渲染管道 光栅化阶段
--单选题
-7.5实时图形渲染管道 总结 参考
-8.1 物理回顾1
--单选题
-8.2 物理回顾2
--单选题
-8.3 材质 1
--8.3 材质 1
-8.4 材质 2
--8.4 材质 2
-8.5 材质3
--8.5 材质3
-8.6局部光照
--8.6局部光照
--单选题
-8.7 全局光照
--8.7 全局光照
--单选题
-9.1 动画介绍
--9.1 动画介绍
--多选题
-9.2 游戏动画介绍
-9.3 动画技术类型
--多选题
-9.4 骨骼蒙皮动画
--多选题
-9.5 动画流水线
--多选题
-9.6 动画前沿趋势
--多选题
-10.1 .基本概念
--多选题
-10.2 设计目标
--多选题
-10.3 传输数据分析
--多选题
-10.4 常用同步方案 1
-10.4 常用同步方案 2
-10.4 常用同步方案 3
-10.4 常用同步方案 4
--多选题
-10.5 方案对比
--多选题
-11.1 基本图元
--单选题
-11.2 图元距离(上)
--单选题
-11.2 图元距离(下)
--单选题
-11.3 图元相交测试+ 其他几何方法
--单选题
-12.1 著名物理引擎介绍
--单选题
-12.2 物理引擎原理(上)
--单选题
-12.3 物理引擎原理(下)
--单选题
-12.4 游戏中的物理体
--单选题
-12.5 物理引擎使用入门
--单选题
-13.1开发语言
--13.1开发语言
--单选题
-13.2 开发环境
--单选题
-13.3 腾讯开发组件介绍
--单选题
-13.4 网络通信+业务框架介绍
--多选题
-14.1 进程间通信(上)
-14.2 进程间通信(下)
-14.3 通信格式
-14.4 并发模型
-14.5 超时处理
-14.6 大系统小做(上)
--多选题
-14.7 大系统小做(下)
-14.8 架构层面的技术支持(上)
--单选题
-14.9 架构层面的技术支持(下)
-14.10 分布系统的关键能力
--多选题
-15.1 游戏人工智能综述
-15.2 人工智能在游戏中主要方法 上
--多选题
-15.3人工智能在游戏中主要方法 (下)
-15.4 人工智能在游戏制作中的应用领域1
--多选题
-15.5 人工智能在游戏制作中的应用领域2
-15.6 人工智能在游戏制作中的应用领域3
--多选题
-15.7 人工智能在游戏运营中的应用实践(上)
-15.8 人工智能在游戏运营中的应用实践(下)
--多选题
-16.1 游戏支撑系统(1)
--单选题
-16.2 游戏支撑系统(2)
--单选题
-16.3 游戏支撑系统(3)
--单选题
-16.4 游戏支撑系统(4)
--单选题
-16.5 游戏支撑系统(5)
-17.1 游戏逻辑服务器(上)
--单选题
-17.1 游戏逻辑服务器(下)
-17.2 外挂与反外挂(上)
-17.2 外挂与反外挂(下)
--多选题
-18.1运行环境
--18.1运行环境
--多选题
-18.2物理部署
--18.2物理部署
--多选题
-18.3系统的可运维性
--多选题
-18.4运维案列分析
--多选题