动画系统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的更多相关文章

  1. Unity Animation System(动画系统)

    动画系统: 支持:动画融合,混合,叠加动画,行走循环的时间同步,动画层,控制动画的各个方面(时间,速度,融合权重)   带有每顶点1.2或4骨骼的蒙皮网格,以及支持基于物理的布娃娃系统和程序动画.   ...

  2. Android动画学习(一)——Android动画系统框架简介

    2015-11-09补充:Drawable Animation极有可能是Frame Animation 这几天在找工作,面试的时候被问到了Android动画,之前完全没接触过这部分,直接给懵了,当然其 ...

  3. unity3D5旧动画系统注意事项

    最近在写人物控制时因为习惯用旧动画系统所以也没想那么多,就直接在新系统下按照老样子写了,突然发现animation.play不能用了,后来重新声明了变量: public Animation anim; ...

  4. unity5.0新功能-布料、动画系统

    原作者:只待苍霞 这一章讲一下布料系统, 这次的布料系统有很大的改良.Unity4中, 需要对SkinnedMeshRenderer使用SkinnedCloth, 或者对Cloth Renderer使 ...

  5. 【腾讯GAD暑期训练营游戏程序开发】游戏中的动画系统作业

    游戏中的动画系统作业说明文档   一.实现一个动画状态机:至少包含3组大的状态节点

  6. 时光煮雨 Unity3D实现2D人物动画② Unity2D 动画系统&资源效率

    系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoT ...

  7. 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 ...

  8. Unity3d之Mecanim(新版动画系统)

    1,动画系统配置,2,代码控制动画 原文地址:http://blog.csdn.net/dingkun520wy/article/details/51247491 1,动画系统配置 创建Animato ...

  9. Unity3D之Legacy动画系统学习笔记

    Unity3D的Mecanim动画系统是非常强大的,而且作为Unity推荐的动画系统,其未来会完全代替老的一套动画系统,即Legacy动画系统.目前的情况是Mecanim与Legacy两套动画系统同时 ...

随机推荐

  1. 提高看log效率的小工具

    文本型的log,比如Android的log,都是普通文本.在大家连续奋战的时候,难免看起来容易眼花. 这时候如何提高效率?我们给它搞个高亮好不好? 这就是我们要介绍的看log工具:TextAnalys ...

  2. ng 过滤器

    1.ng中自带的过滤器过滤器:实现对数据的筛选.过滤.格式化. 过滤器是一个有返回值的方法. 过滤器语法:{{ expression |过滤器1:'参数' | 过滤器2:'参数' }} | --> ...

  3. Precision/Recall、ROC/AUC、AP/MAP等概念区分

    1. Precision和Recall Precision,准确率/查准率.Recall,召回率/查全率.这两个指标分别以两个角度衡量分类系统的准确率. 例如,有一个池塘,里面共有1000条鱼,含10 ...

  4. C++11 Lambda表达式(匿名函数)

    http://www.cnblogs.com/RainyBear/p/5733399.html http://blog.163.com/lvan100@yeah/blog/static/6811721 ...

  5. Java 对称加密

    最近在做一个用户 token 功能,学习了加密相关 AES/DES.RSA 等.其中涉及一个对称和非对称加密问题.对称加密虽然没有非对称加密那样安全性高,但好处是加密速度快,但某些场合还是可以选择使用 ...

  6. [qt][问题记录] 无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll

    无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll 该问题是没有打包库的问题,之所以出现这个问题的是直接用系统自带的命令行使用qt的windeployqt命令导致提供的库 ...

  7. 剑指offer-第五章总结

    优化时间和空间效率的方法: 1,时间换空间. 2,动态规划. 3,找规律.

  8. envoy  功能介绍

    L3/L4 filter architecture: At its core, Envoy is an L3/L4 network proxy. A pluggable filter chain me ...

  9. 解决----Word无法创建工作文件,请检查临时环境变量

    用户在运行Word2003或打开Word2003文档时,可能会出现“Word无法创建工作文件,请检查临时环境变量”的错误提示,此问题主要是由于Word2003的用户设置出现损坏而造成的.网上针对此问题 ...

  10. IBM Cognos 10.2 最新体验之旅

    IBM Cognos Data Manager 数据集市的构建利器 本文详细的介绍了 Cognos 最新版本 10.2 的数据集市构建器 Data Manager 的使用,对于希望系统了解 Cogno ...