动画系统II
【动画系统II】
1、动画混合(animation blending)是把某个时间点的两个或更多的输入姿势结合,产生骨骼的输出姿势。例如,通过混合负伤的及无负伤的步行动画,我们可以生成二者之间不同负伤程度的步行动画。我们可以混合角某角色的左瞄准及右瞄准动画,就能令角色瞄准左右两端之间的所需方位。动画混合可以用于对面部表情、身体站姿、运动模式等的极端姿势之间插值。
2、我们对关节姿势进行插值,即是提对4x4变换矩阵进行插值。然后直接对矩阵插值并非切实可行。这也是通常使用SQT格式表示局部姿势的原因之一。
3、姿势混合通常在局部姿势进行。若直接在模型空间混合全局姿势,其结果从生物力学上看显得不真实。由姿势混合是在局部姿势进行的,每个关节姿势的线性插值完全独立于同一骨骼上的其它关节插值。这意味着,线性插值可完全并行地在多处理器架构上运行。
4、淡入/淡出的各类:
1)圆滑过渡(smooth transition):播放动画A&B,同时把beta从0至1递增。要效果好,两个片段应该同步至手脚大致匹配。
2)冻结过渡(frozen transition):冻结动画A,B的beta从0至1递增。适合于混合两个不相关且不能在时间上同步的片段。
5、方向性运动
1)转身改变方向时,能一直面向移动的方向。称为轴转移动(pivotal movement)。
2)保持面向某方向,而同时向前后左右步行,使移动方向和面向方向互相独立。称为靶向移动(targeted movement)。若角色在转向时不保持完全笔直,轴转移动会显得更自然,真实人类在转向时会造成少许倾斜。我们可以令整个角色的垂直轴倾斜一点,但这会造成一些问题,内脚会插进地下,外脚则会离地。可使用3个向前步行或跑步的动画,一个完全向前,一个是极端向左转,一个是极端向右转。
6、我们可以在步行时挥动右臂,并同时令左臂指着某物。实现这一动作的方法之一是骨骼分部混合(partial-skeleton blending)的技术。我们对每个关节j定义一个独立的混合百分比,而非普通混合中所有关节使用同一个百分比beta。整个骨骼的百分比集合称为混合遮罩(blend mask)。
7、加法混合(additive blending)为引入一种称为区别片段(difference clip)的新类型动画。区别动画存储了一个姿势变换至另一个姿势所需要的改变。区别动画在游戏业界常称为加法动画片段。加法混合技术之美在于,制作一个区别片段后,可以把该片段加进其他不相关的片段,而不仅限于原来的参考片段。我们称这些动画为目标动画(target clip)。
8、区别动画D为来源动画S和参考动画R之间差异。如果把区别动画D加到参考动画R上,便会得出我们预期的来源动画。我们要处理的是关节姿势,而不是标量,不能简单地把姿势相减。以矩阵来说,等价于标量减法的运算是矩阵乘法。所以D=S*R^-1。
9、加法混合百分比。我们可以混合某百分比的区别动画,以产生不同程度的效果。例如,若区别片段能使角色的头部向右转80度,混合该片段的50%应该可令他的头部仅向右转40度。
10、相对于分部混合看上去的“分离”问题,加法混合的同类问题较少。加法混合有旋转过度的问题。想象有一个角色左臂弯曲90度的目标动画。若我们再加入一个弯曲90度的动画,那么整体效果便是弯曲了180度。
11、在渲染角色前,通常还需要再修改姿势。此修改称为动画后期处理(animation post-processing)。例如,当车辆转弯时,调整前轮和方向盘的转向令它们更显真实。
12、有时候角色的手会碰不到物体,有时候又会穿过物体。在这种情况下,我们希望可以调整骨骼的最张姿势,令角色的手能完全与目标物体对齐。名为逆运动学(inverse knematics, IK)的技术可以达成此事。输入是某关节想要的全局姿势,此输入称为末端受动器(end effector),我们要求输出其他关节的局部姿势,使末端受动器能达到指定的位置。
13、布娃娃(ragdoll)是一组由物理模拟的刚体,每个刚体代表角色的半刚体身体部分,例如下臂或上腿。这些刚体彼此受限于角色的关节位置。刚体的位置和定向都是由物体系统计算的,然后用于驱动角色骨骼中某几个重要关节的位置和定向。
14、压缩技术
1)省略通道,如使用统一绽放,四元数一直保持归一而省略w。
2)量化。
3)降低采样率。
4)选择性载入。
15、动画系统架构分为:
1)动画管道(animation pipeline):把一个输入(动画片段及混合设置)变换成输出(局部及全局姿势、渲染用的矩阵调色权)的管道。
2)动作状态机(action state machine, ASM)
3)动画控制器(animation controller)
16、共享资源数据包括骨骼、蒙皮网络、动画片段。某个种类的角色会引用一个骨骼、一个或多个网络、一个或多个动画片段。
17、每个角色的每个实体需要其私有数据结构,以记录当前播放中的动画片段、片段混合的方式, 以及当前的骨骼姿势。
18、混合的方式包括扁平加权混合以及混合树。混合树的类型包括:
1)浮华一维LERP混合
2)简单二维LERP混合
3)三角LERP混合
4)浮华三角LERP混合
5)加法混合:一个输入为区别姿势,另一个输入为正常姿势
19、动画状态机(animation state machine, ASM)。ASM中每个状态对应一个任意复杂的动画片段混合。在混合树架构中,每个状态对应至某个预先定义的混合树。用户输入动画状态机的方式有很多种。有些引擎采用简单、最基础的方式,把动画状态以简单的语法写于文本文件里。还有一些引擎提供图形界面。
20、有一个含有n个状态的状态机中,最多可以有n^2个过渡。我们可以想象有一个正方形矩阵,它的行及列都分别列举所有状态。这样的矩阵叫做(transition matrix)。在真实的游戏中,过渡矩阵通常是稀疏矩阵,因为并非线个状态都能过渡至所有状态。例如,死亡状态不能过渡至任何其它状态。
21、身体不同部位的动作通常并不完全同步。但某一时刻只能设置一个状态。此问题的解决方案之一就是,引入状态层(state layer)的概念。每个状态层每一时刻只能有一个状态,但不同状态层之间在时间上是独立的。骨骼最终姿势的计算方法是,对n个层各自的混合树取值,产生n个骨骼姿势,再用预告设计的方法把这些姿势混合在一起。
22、角色动画控制的另一重要方面在于,以多种方式约束角色及物体的移动。例如,我们可能要令武器总是约束至携带者的手中。又例如,我们希望两个角色握手时,两只手被约束在一起。另外,角色的脚部通常会约束至和地面贴齐。在最简单的模式中, 物体对物体的依附通常是一个父子关系。在父关节和子关节之间加入一个偏移(offset),例如,我们可以把枪的把手和角色的右腕重叠。又或者可以在右腕下加入一个右手握枪关节。然后增加关节会在动画混合入矩阵调色板计算中有处理成本,也在内存上有成本。所以我们需要做的是为一睦关节打标记,使动画混合管道忽略它,但却能用于依附之用。这种关节有时候称为依附点(attach point),
23、解决多个动画对准方法之一是,为多个动画提供一个共同的参考点。动画师可以在场景中放置一个定位器(locator)。这些定位器分别存储至3个片段数据文件中。在运行时,这些局部空间的参考定位器与世界空间的定位器对齐,从而重新把演员对齐。求出世界空间定位器的方法是选择其中一个演员的定位器为基准,其它演员的定位器以此为参考。
24、逆向运动学(inverse kenematics,IK)。需要修正的关节称为末端受动器(end effector)。IK求解程序会令末端受动器尽量接近目标。因为演员不断地运行,所以通常IK也需要不断地计算。IK适合于关节和目标本身已相当接近。若关节的实际位置和目标位置相距甚远,IK的表现就不会理想。
25、滑步(foot sliding)有多种解决方法,最常见的是动作提取及脚部IK。我们预先把移动速度的动画数据存储为一个特别的“提取动作(extracted motion)”通道,然后在游戏中取出而使用。对于不平坦的道路,可以使用脚步IK来调整腿的位置。
26、动画控制器(animation controller)负责一个类型的角色行为,好处是提供简易的动画操作接口。
动画系统II的更多相关文章
- Unity Animation System(动画系统)
动画系统: 支持:动画融合,混合,叠加动画,行走循环的时间同步,动画层,控制动画的各个方面(时间,速度,融合权重) 带有每顶点1.2或4骨骼的蒙皮网格,以及支持基于物理的布娃娃系统和程序动画. ...
- Android动画学习(一)——Android动画系统框架简介
2015-11-09补充:Drawable Animation极有可能是Frame Animation 这几天在找工作,面试的时候被问到了Android动画,之前完全没接触过这部分,直接给懵了,当然其 ...
- unity3D5旧动画系统注意事项
最近在写人物控制时因为习惯用旧动画系统所以也没想那么多,就直接在新系统下按照老样子写了,突然发现animation.play不能用了,后来重新声明了变量: public Animation anim; ...
- unity5.0新功能-布料、动画系统
原作者:只待苍霞 这一章讲一下布料系统, 这次的布料系统有很大的改良.Unity4中, 需要对SkinnedMeshRenderer使用SkinnedCloth, 或者对Cloth Renderer使 ...
- 【腾讯GAD暑期训练营游戏程序开发】游戏中的动画系统作业
游戏中的动画系统作业说明文档 一.实现一个动画状态机:至少包含3组大的状态节点
- 时光煮雨 Unity3D实现2D人物动画② Unity2D 动画系统&资源效率
系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoT ...
- Unity3D Mecanim 动画系统骨骼动画问题解决方法
http://7dot9.com/2014/08/16/unity3d-mecanim%E5%8A%A8%E7%94%BB%E7%B3%BB%E7%BB%9F%E9%AA%A8%E9%AA%BC%E5 ...
- Unity3d之Mecanim(新版动画系统)
1,动画系统配置,2,代码控制动画 原文地址:http://blog.csdn.net/dingkun520wy/article/details/51247491 1,动画系统配置 创建Animato ...
- Unity3D之Legacy动画系统学习笔记
Unity3D的Mecanim动画系统是非常强大的,而且作为Unity推荐的动画系统,其未来会完全代替老的一套动画系统,即Legacy动画系统.目前的情况是Mecanim与Legacy两套动画系统同时 ...
随机推荐
- oracle 存储过程心得2
1.退出存储过程 return if old_save_time = new_save_time then--没有最新数据,退出 insert into hy_data_handle_mark(id, ...
- unity 事件顺序及功能说明
unity3d中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Start,Update等函数,以下做个总结. Awake 当 ...
- Reinforcement Learning Q-learning 算法学习-3
//Q-learning 源码分析. import java.util.Random; public class QLearning1 { private static final int Q_SIZ ...
- 使用MS VS的命令来编译C++程序
以前,我是在linux下使用命令或者makefile来编译C++程序的,最近需要在windows上做点测试.于是使用ms VS来作为开发工具,这种大揽全包的IDE确实好用:点一下菜单,编译结果就出来了 ...
- Microsoft Office 2013 (64位) 免费完整版(安装 + 激活)
Microsoft Office 2013(Office 15)是微软的新一代Office办公软件,全面采用Metro界面.Microsoft Office 2013官方下载(Office2013专业 ...
- hibernate 一对一(One-to-One)
一对一(one-to-one)实例(Person-IdCard) 一对一的关系在数据库中表示为主外关系.例如.人和身份证的关系.每个人都对应一个身份证号.我们应该两个表.一个是关于人信息的表(Pers ...
- JS 隔行变色
<script type="text/javascript"> window.onload=function(){ var oUl= ...
- GDI与OpenGL与DirectX之间的区别
图形编程的几种技术对比: GDI,图形设备接口,MS开发的通用的windows系统图形编程接口,功能强涉及面广,一般的编程都用它.但是用来做多媒体开发就差强人意了 OPENGL是SGI开发的一套三维图 ...
- 关于fpga的m9k的部分理解
1.控制信号包括时钟使能,读写使能,字节使能,地址使能,异步清零等 2.可配置为单端口,简单双端口,真双端口,fifo,rom,移位寄存器. 3.关于移位寄存器模式的介绍如下: 一个 ( w × m ...
- envoy 测试试用
备注: 为了简单测试使用的是docker 镜像进行的测试 1. Dockerfile FROM lyft/envoy:latest RUN apt-get update COPY envoy ...