在三维计算机动画中,把人体作为其中的角色一直是研究者感兴趣的目标,因而关节动画越来越成为人们致力于研究的课题。在这方面,引人注目的早期工作从动画电影《Tony de Peltrie》和《Rendezvous a Montreal》中可见一斑,而近期这方面的工作更是令人惊叹不已,如电影《终结者Ⅱ》、《侏罗纪公园》、《恐龙》。虽然计算机动画在许多领域占据越来越重要的地位,但人体和动物动画的许多问题仍未能很好地解决。其原因就在于人体共有200个以上的自由度,其运动非常复杂,人的形状不规则,人的肌肉随着人体的运动而变形,人的头发、皮肤和衣服模拟起来困难,人的个性、表情千变万化等。另外,由于人类对自身的运动非常熟悉,不协调的运动很容易被观察者所察觉。可以说,人体动画是计算机动画中最富挑战性的课题之一。

正向运动学 正向运动学是一种设置关节动画的有效方法。通过对关节旋转角设置关键帧,得到相关联的各个肢体的位置,这种方法一般称为正向运动学方法。Denavit和Hartenberg最早提出了一种通过相对坐标系来描述各个关节位置的矩阵描述方法,并被从事关节动画的研究者所广泛采用。但对于一个缺乏经验的动画师来说,通过设置各个关节的关键帧来产生逼真的运动是非常困难的。 采用正向运动学的一种实用的解决方法是通过实时输入设备记录真人各关节的空间运动数据,即运动捕获(motion capture)。Alias公司产品部经理Gary Mundell曾称:"Motion capture is the future。" 但实时输入设备较为昂贵,使用中也有许多不便之处,目前有不少人采用基于视频的方法来获取关节数据。 为了克服运动捕获方法缺乏灵活性的缺点,Witkin通过混合动画曲线来编辑捕获的数据,从而使建立可重用的运动库、运动过渡、运动时间的整体缩放等成为可能。Bruderlin提出了运动的多分辨率信号处理方法,可很好地应用于运动捕获数据的编辑和重用。Unuma通过对运动数据进行Fourier级数展开和抽取性情参数,提出了用情绪控制运动角色的方法。 Autodesk的Gleicher提出了一种运动重定向的新概念,能把一个角色的动画赋给另一个具有相同关节结构但具有不同关节长度的角色,并保持原有动画的质量,因而非常适合运动捕获动画重用的处理。Popovi提出了考虑动力学因素在内的运动捕获数据的编辑方法,还提出了一个把某一角色运动数据映射到另一个完全不同关节结构的运动重定向方法,这使运动捕获数据的重用性得到了进一步加强。基于一个中间关节,Monzani等人也提出了一个针对不同关节结构和几何的运动重定向方法。Lee等人提出了一种层次交互编辑运动数据的方法,基于多分辩率B样条曲线逼近,该方法能改造已有的运动数据使运动满足一系列约束。Brand等通过从一系列差异很大的捕获运动数据序列中学习运动模式,提出了一种风格化运动合成方法。

逆运动学 逆运动学方法(IK)在一定程度上减轻了正运动学方法的烦琐工作,用户指定末端关节的位置,由计算机自动计算出各中间关节的位置。逆运动学分析求解方法虽然能求得所有解,但随着关节复杂度的增加,逆运动学的复杂度急剧增加,分析求解的代价也越来越大,数值求解成了一种可行的方案。 Korein提出了一种对每一关节段采用层次工作空间的直觉方法,该方法尽量使关节位置的移动最小。该方法带来的问题是用户对得到的解无法控制,对于复杂的关节结构,得到的不一定是产生自然运动的解。 Girard和Maciejewski提出了一种用逆运动学生成关节运动的方法。在他们的方法中,用户指定脚的世界坐标系位置,然后用伪逆Jacobian矩阵求解从脚到臀部关节的旋转角。该方法是生成逼真关节运动的最好方法之一。采用运动学求解的一个优点是可以对关节的某些关键位置设定约束。例如,当一个人弯曲他的膝盖时,可将他的脚约束在地板上,而身体则往下倾。类似地,当人行走时,先使身体绕一只脚旋转,然后绕两只脚旋转,再绕另一只脚旋转。带约束的关节动画常采用逆运动学求解,这相当于从众多的解中选取一个满足约束的解。如果约束的只是一个点,可采取重新构造关节树的方法。Badler等人的方法允许对关节多重约束,当所有的约束不能同时满足时则按约束的重要性排序,并采用迭代法求解逆运动学方程。

运动学和动力学 的结合 把运动学和动力学相结合,允许动画师以适合他的方式思考问题。Isaacs把运动学和动力学约束显式表达出来,然后求解这些方程。遗憾的是,这种方法的计算量极大。Boulic提出了一种适合关节运动编辑的正向和逆向运动学相结合的方法,动画师可对已有的关节运动做交互的基于目标的修改。该方法的关键思想是把所要求的关节空间运动插入逆向运动学控制机制中。Phillips等人提出了一个交互的通过运动学约束来控制双足关节动物运动的方法,这些约束模型能抓住运动的特点,并能控制人的平衡和稳定。Calvert提出了一个舞蹈的动画合成方法。动画软件Maya、Softimage、Alias|Wavefront、3DMAX等都提供正向运动学和逆向运动学动画设置方法。Maya 是一个面向角色动画的软件,Softimage则专门有一个设置关节动画的模块Actor。

动力学中的控制问题 与运动学相比,动力学方法能生成更复杂和逼真的运动,并且需指定的参数相对较少。但动力学方法的计算量相当大,且很难控制。基于Euler动力学方程,Armstrong和Green提出了一种用于图形仿真的递归方法,避免了矩阵的建立过程。该递归方法的复杂度与自由度的个数呈线性关系,速度快而且稳定。 动力学方法中另一个重要问题是对运动的控制,若没有有效的控制手段,用户就必须提供具体的如力和力矩这样的控制指令,而这几乎是不太可能的。因而,有必要提供高层的控制和协调手段。能够满足上述要求的一种方法是预处理方法,该方法把所需的约束和控制转换成适当的力和力矩,然后包括到动力学方程中。另一种方法将约束以方程的形式给出,如果约束方程的个数与未知数的个数相等,也即系统是全约束的,则可用一般的稀疏矩阵法快速求解;但如果系统是欠约束的,则情形就比较复杂,因为有无穷多的解,例如,给定手的到达目标,就有许多关节构造方法可使手到达所要求的位置。Witkin提出了一种使某种目标函数极小的附加约束方法,并用共轭梯度法求解。在上述例子中,目标函数可选为运动的总动能。 Hodgins用动力学方法模拟了人跑步、骑自行车和跳跃运动。Laszlo提出了一个通过运动学方法控制动力学关节运动的方法。Hodgins提出了一个把已有的行为自动适应到一个新角色的方法,首先根据新旧角色的大小、质量、力矩、转动惯量等物理参数对控制系统参数进行比例调整,然后用基于模拟退火的搜索策略进行微调。基于物理仿真的一大优点在于能自动地模拟物体之间的相互作用。这实际上涉及到两个问题,即作用在何时发生及相互作用后的响应。Moore提出用一系列方程来描述碰撞时的动量守恒,并用分析法求解碰撞后物体新的位置和速度。碰撞检测及响应虽然增加了仿真的真实性,但同时计算量也急剧增加。 在基于目标的运动控制方面,较早的有Zeltzer所做的工作。在他的面向任务的系统中,能实现诸如行走和跳跃这样的人体运动。但他在计算关节旋转角时,采用的是运动学和对测试数据插值的方法,因而不能实现如改变速度、改变步长这样的运动控制。Bruderlin和Calvert提出了一个人体走路动画的混合方法,该方法结合了基于目标和动力学两种运动控制技术。在他们实现的实验性动画系统KLAW中,用户指定一些参数如速度、步长和步频后,几乎可以以实时的速度生成大范围的人体行走方式。在他们后来提出的过程控制方法中,用步伐之间的三次和线性插值取代了原来的动力学方法,而真实性与原来相差无几。因而,动画师几乎可以实时交互控制人体的运动。

时空约束动画 指定关节动物的运动,使它能以符合物理规律的真实的方式达到给定的目标(如投一个篮球到球筐中)是动画师的目标之一。Witkin等人所提出的时空约束是生成角色动画的一种新方法。在时空约束方法中,动画师指定角色必须做什么,例如从这里跳到那里;怎样运动不浪费能量;角色的物理结构,如几何、质量、连接性质;角色为完成运动可利用的物理资源,如角色的肌肉、可以产生推力的地板。基于这些描述,加上牛顿定律,构成一个约束的最优化问题。求解该约束问题得到一个符合物理规律的运动。该方法生成的真实运动与传统动画的一些原则如压扁和伸展、期望等相符合。 时空约束得到的是一个非线性约束变分问题,通常该问题没有唯一解。一个解决方法是用三次B样条基函数的线性组合来减少可能的轨迹数,并用约束优化来求解B样条的系数。但这类非线性优化问题的一般解是未知的。为此,Cohen提出采用符号和数值混合技术来进行交互控制。在该系统中,用户能干涉迭代数值优化过程,并能指导优化过程使它收敛到可接受的解。但是随着关节数和任务复杂度的增加,其计算量仍然很大。分析表明,计算复杂度主要取决于对表示广义自由度有限基的选择上,Liu等人提出了用小波基来表示广义自由度对时间的函数,该方法的优点在于能自动地只在需要的地方增加运动细节,从而使离散变量的数目减少到最小,求解的收敛速度更快。Rose采用时空约束和逆运动学约束相结合的方法来生成运动间的无缝过渡。

虚拟动物的动画 在计算机动画中,建立有趣且逼真的虚拟实体并能同时保持对它们的控制是相当困难的,(上接第B12版)通常在复杂度和控制的有效性之间取一折衷。对于固定的关节结构,常用优化方法来自动生成动力学控制系统,如Ngo提出的针对刺激-反应对的算法,这些算法成功地生成了二维刚体模型的运动。对于非固定的三维动物,Sims提出了能生成自主三维虚拟动物的方法,该方法无需用户提供烦琐的设计指定工作,动物形态学和控制肌肉的神经系统由算法自动产生。Funge等人提出了一个智能角色的感知模型,该模型管理一个虚拟角色,使其知道怎么获取知识和怎样规划自己的行动,这一方法使虚拟生物的行为能以一种自然直观和高层的方法来指定。

脸部表情动画 脸部表情动画实际上涉及两个问题:脸部造型和脸部动画。在脸部造型方面,DeCarlo提出了一种基于变分技术自动生成人脸几何模型的系统。基于人脸样本的数据库、纹理映射和Morphing(渐变)技术,Blanz等提出了一个由照片合成人脸的方法。 在脸部表情的动画模拟方面,Bergeron提出用数字化仪将人脸的各种表情输入到计算机中,然后用这些表情的线性组合来产生新的脸部表情。该方法的缺点是缺乏灵活性,不能模拟表情的细微变化,并且与表情库有很大关系。1987年,Waters提出了一个基于Facial Action Coding System的脸部表情动画模拟方法。该方法由一个参数肌肉模型组成,人的脸用多边形网格来表示,并用肌肉向量来控制人脸的变形。它的特点在于可用一定数量的参数对模型的特征肌肉进行控制,并且不针对特定的脸部拓扑结构。Waters用该方法生成了高兴、恐惧、愤怒、厌恶、惊奇等逼真的表情,Waters的算法已成为模拟脸部表情动画的核心算法之一。 由于一些常用的表情是由一组肌肉按某种协调的方式运动产生的,Reeves提出了一种通过高层的宏肌肉控制低层肌肉的方法。宏肌肉由一系列低层的肌肉组成,每一块低层的肌肉赋以权,宏肌肉收缩引起低层肌肉按某种加权形式收缩。Guenter等人提出了一种根据真人脸部表情捕获人脸三维几何信息、颜色和绘制信息的系统,然后由捕获的数据重建出非常逼真的三维动态表情。Pighin提出了一种根据照片建立人脸三维模型的纹理映射,并采用Morphing技术生成不同脸部表情间的过渡。Brand提出了一种称为"声音木偶"的脸部表情动画方法,该方法首先自动学习一个真人的脸部表情,得到脸部控制模型,然后由一段声音来驱动一个虚拟人的发音和讲话。

关节动画和 人体动画相关推荐

  1. iOS自制火柴人动画CC_Sprite程序员自己做动画 轻量级iOS动画引擎 游戏引擎

    CC_Sprite 面向的主要用户群体 CC_Sprite 主要面向: 没有ps.美术基础又想做小动画.小游戏的iOS开发. 你不想学习ps或其他动画软件,也不想安装其他软件,你只想做一个单纯的.天真 ...

  2. 四足机器人|机器狗|仿生机器人|多足机器人|MATLAB动画仿真|Simulink动画仿真

    四足机器人|机器狗|仿生机器人|多足机器人|MATLAB动画仿真|Simulink动画仿真 四足机器人的连杆模型,利用机器人工具箱,行走规划是用的CPG,详情见 https://blog.csdn.n ...

  3. UE4源码阅读_骨骼模型与动画系统_动画流程

    0. 写在前面 本文为个人学习的笔记整理,如有错误,望不吝指出. 本篇粗略的描述UE4中每帧动画计算的主流程,该流程涉及的相关代码,因为动画设置的多样性,还有相当多的分支代码. 本篇只描述角色跑起一个 ...

  4. Unity3D游戏开发之使用Mecanim动画系统控制2D动画

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是http://blog.csdn.net/qinyuanpei.博主今天想和大家分享的是在Unity3D中使用Mecanim动画系统来 ...

  5. Unity3D教程:动画融合、动画层、动画混合、附加动画、程序动画、动画重放和取样

    原帖地址:http://www.unitymanual.com/5323.html 动画脚本 Animation Scripting Unity's 动画系统允许你创建一个漂亮的动画蒙皮角色,动画系统 ...

  6. Unity Mecanim动画系统 之 动画层(Layers)和 动画遮罩(Avatar Mask)的简单使用

    Unity Mecanim动画系统 之 动画层(Layers)和 动画遮罩(Avatar Mask)的简单使用 目录 Unity Mecanim动画系统 之 动画层(Layers)和 动画遮罩(Ava ...

  7. 【游戏动画】游戏动画总结

    动画的概念 为什么通过这种方式能产生动画的效果呢? 动画的形成过程是由于一张一张的图片快速在人眼识别后,并在大脑里形成短暂影像,因为人眼的视觉暂留,从而每一张图片的动作和场景形成连贯性而形成的.视觉暂 ...

  8. Games104 Lecture 9 高级动画技术:动画树、IK和表情动画

    高级动画技术:动画树.IK和表情动画 1. 动画混合 1.1 线性插值 1.2 Align Blend Timeline 2. 混合空间 Blend Space 2.1 Skeleton Masked ...

  9. 【Unity3D】动画回调函数、动画事件、动画曲线

    1 动画回调函数 动画回调函数是指动画在开始时.执行中.结束时回调的函数,主要有:OnStateEnter.OnStateUpdate.OnStateExit.OnStateMove.OnStateI ...

最新文章

  1. 番茄工作法:番茄时间管理方法与番茄工作法软件图解提高工作效率
  2. ReentrantLock可重入锁的使用场景(转)
  3. isalpha等同于Java的_isalpha
  4. Theano深度学习入门
  5. 【数据结构与算法】之深入解析“二叉树的后序遍历”的求解思路与算法示例
  6. yslow客户端性能测试
  7. ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  8. 再讲IQueryablelt;Tgt;,揭开表达式树的神秘面纱
  9. python实现组合问题_python3 最基本且简单的实现组合设计模式
  10. ORA-00600:[kclchkinteg_2]及[kjmsm_epc]内部错误一例
  11. Android 图片缓存机制
  12. 关于unity,Player打包面板的信息(上)
  13. Android-Binder机制
  14. 运算放大器基本参数—压摆率(直观解释)
  15. springboot2.0和mysql8的时间问题
  16. 二维占用栅格地图Occupancy grid maps
  17. 虚拟化环境下,如何高效开展勒索病毒防护加固?
  18. php繁体网站配置,php网页是繁体字怎么办
  19. SVG中以任意直线为对称轴的镜像变换及其矩阵
  20. linux中的ubiq命令用途,学习Linux命令(一)

热门文章

  1. PELAGO佩拉戈 | 初见
  2. sed 的基本使用【详图】
  3. linux 串口八字节,四柱推命基本法则源头、收局、阻节
  4. 苹果手机的屏幕是什么屏幕
  5. 【flyway】SpringBoot集成Flyway
  6. vue中关闭浏览器清除localStorage
  7. 紫荆视通发布新品V2.0 打造云视频全生态
  8. Excel绘制三个纵坐标的折线图
  9. html自动识别密码,HTML登录表单:提供用户名,自动填写密码
  10. Java中继承关系的构造函数的调用顺序