zoukankan      html  css  js  c++  java
  • 动画系统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)负责一个类型的角色行为,好处是提供简易的动画操作接口。

  • 相关阅读:
    Python实现机器人聊天
    node.js使用express框架进行文件上传
    nginx让所有的http地址重定向到https
    nginx配置https
    vscode源码编译运行打包使其由英文变为中文
    阿里云配置tomcat https
    springboot打成的jar包如何在Linux上持久运行
    wordpress数据表分析
    DevExpress Components16.2.6 Source Code 重编译教程
    DataGridView绑定泛型List时,利用BindingList来实现增删查改
  • 原文地址:https://www.cnblogs.com/tekkaman/p/3639902.html
Copyright © 2011-2022 走看看