动画系统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. Arcgis Desktop连接GIS Servers报错“Proxy server got bad address from remote server ...”

    今天打开Arcgis Desktop时突然发现连接GIS Servers报错“Proxy server got bad address from remote server ...” 网上查找到解决方 ...

  2. ajax传递数组后台接收不到值的问题

    背景: JQGrid需要进行批量删除操作传给后台的是数组,结果后台接收不到值. 后台语言:java 原因: ajax传递参数时,traditional 默认为false,JQuery会深度序列化参数对 ...

  3. 剑指offer-第四章解决面试题的思路(二叉树的镜像)

    题目:请完成函数,输入一个二叉树,该函数输出它的镜像. 思路:可能没有听说过书的镜像,但是可以通过画图等来找灵感.就像照镜子一样,人的左边和右边交换了. 如图: 通过如下图变化就可以由左图得到右图: ...

  4. 批量插入数据利器之SqlBulkCopy

    工作中要频繁的处理一些数据导入,又不想手工去做,因此用了神器SqlBulkCopy.在MSDN查看了此类的帮助文档几经波折终于搞定,记录下来方便以后查阅. MSDN实例: using System.D ...

  5. Spring源码学习之:ClassLoader学习(5)-自测

    [一]测试目的(ClassLoader的作用) 1:测试涉及三个jar包,nonbankcard-configure-0.0.1-SNAPSHOT.jar,nonbankcard-persist-0. ...

  6. call()方法和apply()方法用法总结

    1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...

  7. mysql之 explain、optimizer_trace 执行计划

    一.explain mysql> explain select host,user,plugin from user ;+----+-------------+-------+------+-- ...

  8. 为什么中国出不了facebook和Twitter?

    我们坐拥全球最大基数的网民,我们拥有让人骄傲的四大发明,我们有有流传全世界的孙子兵法,可是在互联网时代,我们却落后了.互联网可以说是江山人才辈辈出,各领风骚三两年. 让我们来简单地回顾一下近几年的互联 ...

  9. TCP/IP/HTTP

    一.什么是TCP连接的三次握手 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1 ...

  10. 【转】学习使用Jmeter做压力测试(三)--数据库测试

    JMeter可以做为Web服务器与浏览器之间的代理网关,以捕获浏览器的请求和Web服务器的响应,这样就可很容易的生成性能测试脚本.根据脚本,JMeter可通过线程组来模拟真实用户对Web服务器做压力测 ...