1.角色动画类型
  赛璐璐动画(cel animation):基于帧的,电子版本为精灵动画(sprite animation),可以设计成循环动画(looping animation) 
  刚性层阶式动画(rigid hierarchical animation):可能在关节处产生裂缝
  每顶点动画(per-vertex animation):网格添加动画,数据密集
  变形目标动画(morph target animation):极端的网格姿势+混合
  蒙皮动画(skinned animation):骨骼+皮肤
2.骨骼
刚性 关节(joint)的树形层级结构构成。骨骼只是关节间的空位,关节是动画师控制的
内存中存储:关节名字,父关节索引,关节绑定姿势的逆变换矩阵(蒙皮绑定时关节的姿势)
3. 姿势
关节相对模型参考系的位置、定向和缩放。用矩阵或者 SQT数据结构表示(缩放scale、四元数旋转quaternion、平移translation)
绑定姿势:参考姿势、放松姿势、T姿势
局部姿势:相对父关节的姿势,SQT表示。每个关节定义了一个坐标空间。把关节姿势变换Pj施于关节j坐标系表示的点时,得到的是父关节空间表示该点。即从子关节空间变换到父关节空间。Pj=P(j->parent(j))
全局姿势:在模型空间的姿势。从关节到根关节,乘以局部姿势得到。P2->m = P2->1*P1->0*P0->m
4. 动画片段(animation clip)
互动:动画
非互动:游戏内置电影(in-game cinematics IGC)、非交互连续镜头(non interactive sequence NIS)、全动视频(full motion video FMV)
半互动: 快速反应事件(quick time event QTE)
动画片段的采样定义了连续函数。动画片段是 SQT组成的通道函数(channel funciton),通道函数是连续的。游戏引擎使用分段线性逼近的方法插值。
4.1 局部时间线:
时间:0-T
关键姿势(key pose)、关键帧+插值。t是实数,不一定是整数
时间比例(time scale):负值则动画倒转
帧:有时指一段时间,有时指一个时间点
采样(sample):代表时间点,那相应的时间可以指帧了。非循环动画:N帧有N+1个采样、循环动画:N帧有N个采样
相位(phase):归一化的时间,0表示开始,1表示结束
4.2 全局时间线
播放动画:局部时间映射到全局时间。循环就使用模除。起始时间、播放速率/时间比例、循环次数、持续时间
同步动画时,由于通信系统的时间延迟,造成动画不同步。使用全局时钟可以同步动画,将动画的全局开始时间匹配即可。
4.3 动画重订目标(retarget):
动画通常只兼容特定骨骼,此技术可以让动画适用于不同骨骼
4.4 元通道(metachannel):
非关节通道,如事件触发器通道,定位器通道。
定位器用于记录游戏中物体的位置和方向,也是一个仿射变换。可以设置摄像机的位置和角度
5. 蒙皮
网格每个顶点可以绑定至一个或者多个关节,再加权平均
蒙皮矩阵(skinning matrix):把网格顶点从绑定姿势的位置变换至骨骼的当前姿势的位置。蒙皮顶点的位置在模型空间定义的,所以变换前后的位置都在模型空间。
顶点在绑定至关节的位置时,在关节空间是不变的:顶点在模型空间的位置->顶点在关节空间的位置->关节变换->顶点回到模型空间
假设只有一个关节:则绑定姿势的网格位置VmB, 关节在模型空间中的绑定姿势B,关节在模型空间中的当前姿势C可得到:VmB * B^-1 * C = VmC      ==>  蒙皮矩阵:B^-1 * C:绑定姿势的逆矩阵*目标姿势的变换矩阵 
矩阵调色板(matrix palette): 一系列矩阵,每个矩阵对应了关节j的蒙皮矩阵。将网格顶点关联的蒙皮矩阵取出,加权求和后,将顶点从绑定姿势位置变成目标姿势位置,由于C是每帧变化的,B^-1会缓存起来
将模型空间变化到世界空间:乘以矩阵Mm->w,可以预处理将B^-1*Mm->w缓存
动画实例(animation instancing):多个角色同时播放单个动画。此时不应该将B^-1*Mm->w缓存
6.动画混合(animation blending)
将多个动画片段混合,对角色最终姿势起作用
6.0 无需混合
核心姿势:站立、蹲下
确保每个动画片段都以某个核心姿势开始核心姿势结束,就无需混合
6.1 线性插值混合
linear interpolation(LERP),混合百分比、混合因子=[0,1]
姿势混合通常在局部进行
应用:
时间混合
动作连续性(淡入淡出):混合因子随时间按三次函数变化:缓出曲线(ease out curve)、缓入曲线(ease in curve)
圆滑过渡:两个片段的混合因子都同时变换,同时播放
冻结过渡:一个片段冻结,另一个片段一遍播放一遍增加混合因子
方向性运动:
轴转移动(pivotal movement):按轴旋转
靶向移动(targeted movement):面朝着一个方向,身体朝不同地方移动。制作三个基本动画:朝前、朝左、朝右做一个半圆,按照移动方向和靶向的角度选择混合因子
复杂的线性插值混合:
一维线性插值混合:多个片段的一维混合
二维线性插值混合:三个一维混合可得:x轴方向两个,求出中间姿势,y轴方向使用前面的两个中间结果得到。
三角形的二维线性插值混合:a,b, 1-a-b的加权混合
泛化的二维插值混合:利用Delaunay三角剖分求出一组三角形,再找到对应的姿势所在的三角形,最后用三角形的二维线插值混合得到结果
6.2 骨骼分部混合:
达到一只手做A一只手做B的效果
通过允许不同关节有不同的混合百分比实现。
混合因子为0,1时可以实现 混合遮罩(blend mask)
6.3 加法混合(additive blending):
区别片段(difference clip)
来源片段(source clip) + 区别片段 = 参考片段
目标片段 : 任何动画,+ 区别片段 = 其他片段,也是加法混合的意义
来源于矩阵的乘法,除法
加法混合的应用
移动噪声
瞄准及注释:对最左最上最右制作区别动画,混合至向前动画就可以得到其他的瞄准动画。(可以利用时间轴lerp)
7. 后期处理
布娃娃
逆运动学(inverse kinematics IK): 输入是全局姿势,称为末端受动器,根据误差最小化求出局部姿势
正向运动学(forward kinematics FK):输入是一组局部姿势,输出是一个全局姿势以及每个关节的蒙皮矩阵。
8. 压缩技术
通道省略:移除平移通道,减少存储姿势
量化:减少存储为数。浮点数转化为n整数表示
采样频率减少
选择性载入
9. 动画系统
9.1 动画系统架构
动画管道(animation pipeline):动画片段和混合因子作为输入局部骨骼姿势作为输出
动作状态机(action state machine ASM)
动画控制器(animation controller):每个控制器通常父子一个类型的角色行为,如掩护、跑步。能提供高层次的动画管理接口
9.2 动画管道
片段解压以及姿势提取->姿势混合->全局姿势生成->后期处理->重新计算全局姿势->矩阵调色板生成
数据结构:
共享资源数据(shared resource data):骨骼、蒙皮网格、动画片段。骨骼是中心,蒙皮绑定至骨骼,动画应用于骨骼
每实体状态信息(per-instance data structure):动画片段的状态(局部时钟、播放速率)、混合方法、混合权重、局部姿势、全局姿势、矩阵调色板
混合方法:
加权平均法
混合树:将6变成树的结构,就是加法混和必须为一个叶子节点,而其他的混合可以而且是叶子节点和内节点。
淡入淡出:
加权平均法:调整片段权重、将片段逻辑分组,调节组权重
混合树:加入一个二叉混合节点,混合原来的树和新的树
9.3 动作状态机
每个状态对应一个任意复杂的动画片段集合,在混合树架构中状态对应一棵树、加权平均法中状态对应一系列权重何一组片段
过渡:定义状态间的过渡矩阵
过渡方法:跳转、淡入淡出(引入过渡状态节点 transitional state)
状态层
预备动作(anticipation):由一个部位引领其他部位的动作,即要独立操控不同部位,同时有多个状态出现
引入状态层:每层在某一刻只有一个状态,不同层之间状态是独立的
9.4 约束
依附:依附点/ 定位器(locator):特殊的关节,仅仅为依附中的父子关系加入额外的变换
对准:多个角色参与一个动画
利用定位器,使多个角色的动画中的定位器在世界空间内重合
解决滑步的方法:
  1. 动作提取:从动画中提取出每帧角色重心到局部空间原点的距离(利用元通道),作为速度参数来移动角色。同时将局部空间原点移动到此帧的角色重心处
2. 脚步IK:脚接触地面时,记下其在世界空间的位置,我们用IK去调整腿的姿势,令脚能固定于正确位置
注视
掩护对准

游戏引擎架构----动画相关推荐

  1. ITeye4月读书活动之《游戏引擎架构》

     前言: 其实自己是一个安卓手游党,也开发过一些非常小的游戏,所以选择了<游戏引擎架构>这本匹配度比较高的书,探其究竟. 而且确实游戏已经成为我生活中的一部分~    正文: 游戏团队的人 ...

  2. 《游戏引擎架构》笔记一

    <游戏引擎架构>该系列的博文部分参考下面的博客: http://raytaylorlin.com/categories/%E6%8A%80%E6%9C%AF/%E6%B8%B8%E6%88 ...

  3. [置顶]《游戏引擎架构》信息总汇

    豆瓣  当当  亚马逊  China-pub  京东  中国图书网  淘宝 PDF样章试读微盘下载  微云下载 中英词汇索引表 本页内容 基本信息 作者:Jason Gregory (杰森.格雷戈瑞) ...

  4. Game Engine Architecture by Jason Gregory:1.6 实时游戏引擎架构

    http://blog.csdn.net/skylmmm/article/details/6230420 一个游戏引擎一般是由工具集和一个运行时组件组成.下面部分我们将首先研究这个运行时组件,然后再看 ...

  5. 读 J. Gregory 之《游戏引擎架构》

    J. Gregory, 叶劲峰. 游戏引擎架构. ISBN: 978-7-121-22288-7 做游戏似乎是很多玩家或者网民心中的执念,但真正愿意去付诸实践的少之又少.而这些少之又少的人当中,相当一 ...

  6. 游戏引擎的动画系统及骨骼动画原理

    一.<游戏引擎架构>动画系统 动画的几种分类 <游戏引擎架构>中简单介绍了几种动画种类.用途以及优劣,在<计算机动画算法与技术>中详细介绍了各种动画的算法原理: 精 ...

  7. 3D游戏引擎架构设计基础 - 学堂在线慕课习题答案

    3D游戏引擎架构设计基础 - 学堂在线慕课习题答案 第一单元 第二单元 上完这门课顺便把课后的习题答案整理出来了 第一单元 问题:关于游戏引擎的正确描述是 答案:设计游戏的独立软件 问题:使用游戏引擎 ...

  8. Games104 Lecture 8 游戏引擎的动画技术基础

    游戏引擎的动画技术基础 动画技术的基础 2D游戏动画技术 3D游戏动画技术 Rigid Hierarchical Animation Per-vertex Animation 顶点动画 Morph T ...

  9. 《游戏引擎架构》笔记十四

    运行时游戏性基础系统 游戏性基础系统的组件 如果可以合理地画出游戏与游戏引擎的分界线,那么游戏性基础系统就是刚刚位于该线之下.理论上,我们可以建立一个游戏性基础系统,其大部分是各个游戏皆通用的.实际上 ...

最新文章

  1. 我也能做CTO之程序员职业规划
  2. 还应该如何实现“模板化函数指针”?
  3. 机器学习常见基本概念笔记
  4. InputStream 类型
  5. 绑定事件的几个方法总结
  6. Python菜鸟入门:day09数据结构
  7. linux 性能检测工具之 dstat
  8. python零基础能学吗-Python真的零基础可以学会吗?
  9. 奥特曼传奇英雄存档丢了怎么找回_热血传奇复古传奇:传奇游戏手机版竟然比端游还火爆?你觉得呢?...
  10. Acrobat Pro DC 教程,如何发送电子签名文件?
  11. 120.三角形最小路径和
  12. 【FFmpeg】srs引入ffmpeg转码
  13. win10内置ubuntu, 启动时提示“指定的网络名不再可用”解决办法
  14. 汇率转换方法java,[java] 汇率换算器实现(2)
  15. 三维模型重建(1):关于三维模型重建的一些简介
  16. 1099 PIPI的油田(使用查并集)
  17. 在线工具大全,在线办公
  18. sql select半角html全角,SQL转换全角和半角函数
  19. 南京原市长季建业受贿1132万获刑15年
  20. 什么是python大数据研发,它有什么特点吗

热门文章

  1. Kotlin:关于Sealed密封类
  2. 理解什么叫“自然拼读”
  3. 蓝桥杯web:3.【功能实现】封装函数实现个人所得税计算器
  4. windows 优化详解
  5. Android应用测速组件实现原理,这篇看完还不懂跟我去摆地摊,全网首发
  6. Java-GUI编程之ImageIO的使用
  7. win10系统服务器的ip地址,win10系统查看电脑IP地址和默认网关的操作方法
  8. 深度优先搜索--不撞南墙不回头
  9. java画笑脸_canvas 画笑脸
  10. win10如何截屏_win10使用技巧分享!