帧动画,tween动画 动画,骨骼动画等动画的关系及分类是怎样的

第5章_动画制作技法_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
第5章_动画制作技法
上传于||暂无简介
大小:2.80MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢动画有哪几种类型?是如何分类的,关于 IK, FK 和帧动画,骨骼动画,tween动画又有什么关系?--本题来自知乎圆桌 >>,欢迎关注讨论。
我来简单说点原理吧:用手臂的动作来简单解释下ik和fk的区别fk其实就是让大臂绕着肩关节转动,小臂绕着肘关节转动,手掌绕着腕关节转动,关键帧纪录的是旋转运动。想象我们要去拿一个杯子,fk会甩动我们的大臂到一定位置,然后甩动小臂到一定位置以让手掌够到杯子。怎么样?听着都觉得别扭对不?那让我们来试试ik。ik就人性化多了,ik会在我们的肩关节,肘关节,和腕关节三点间构建一个三角,腕关节的位移会带动肘关节的相应位移,而关节的位移会带动大臂与小臂被动旋转。现在,让我们再试试用ik来拿杯子,我们抓起腕关节移向杯子就可以了,大臂和小臂自己知道该怎么旋转。这和我们平时用手臂的方式是一致的,很自然,也更简单。现在我们来说说关键帧。在3D动画里,关键帧其实就是需要你去定义的帧,以拿杯子这个动作来说,手掌从a点移动到杯子处,手臂在a点会有一个关键帧,到达杯子处一个关键帧,至于关键帧之间的中间帧,电脑会自动插值计算,如果需要干涉电脑的插值方式,可以调节插值曲线或者再插入关键帧。现在我们去看看骨骼的绑定,一开始搭建的骨骼都是fk状态,然后我们在四肢上面加上ik,让动画师可以抓着角色的手去做动作,而不是单纯去旋转那些大臂小臂,煸情点说,ik可以让我们用鼠标和角色握手了,一个最简单的骨骼就绑定好了(好的骨骼绑定可以非常复杂,但这里没必要深入探究)。骨骼搭建好了,现在电脑需要知道每根骨骼的旋转需要带动模型上哪些相应的点对吧,对于许多相邻的骨骼来说,有些点例如肘弯部分的点是既属于上臂也属于下臂的,这就需要进行权重的划分,为不同的骨骼分配点的权重,权重分配适当后,骨骼的动作才会被很好地赋予模型。这就是蒙皮。
应该说所有动画都是基于关键帧的。&br&&br&帧动画:一张一张的图片,每张图片是一个关键帧。&br&&br&骨骼动画:仿照“真实”的骨骼结构,建立一个节点树,每个节点算是一个骨骼的关节,然后在这些关节上指定关键帧,通过一些计算来生成中间帧。所谓FK和IK,都是计算中间帧节点位置的方法。3D骨骼需要两个步骤,一是rigging(绑骨),就是建立一个骨骼框架,而是skinning(贴皮?),就是把3D模型对应到骨骼框架上。2D骨骼其实是一个比较模糊的概念,可以按照3D这个流程走,进行绑骨和贴皮,但是很多游戏所谓的2D骨骼并没有一个严谨的骨骼结构(通常也没有必要),而是直接在“皮”上做动画。在骨骼基础之上,用一些拉伸变形的非骨骼技巧也是非常常见的。&br&&br&FK(Forward Kinematics,翻译成正向运动?):就是直接指定节点的位置,然后简单的计算中间帧位置。&br&&br&IK(Inverse Kinematics,翻译成反向运用?):正向的指定节点位置太麻烦了,根据一些简单的观察,大家(搞机器人和计算机图形的)发现典型的人体运动是有规律的,关节弯曲的时候会以一个尽量“省力”的方法。IK就是定义一个“省力的标准”,自动生成中间节点的位置。比如一个动画师在调手臂的动画,用FK,他需要分别指定手关节和肘关节两个节点的骨骼位置和方向,用IK,他只需要放置手关节的节点,动画工具会根据算法自动生成肘关节的位置和方向。因为大部分IK的实现是基于经验的简单算法,所以通常会有一些死角和不可用的情况。想准确的计算骨骼中间节点位置需要模拟肌肉和骨骼的biomechanics,在一般的动画软件中做不大,也没多大必要。&br&&br&所谓tween动画,我接触这个名字是在flash里。基本意思就是“补间”,也就是把两个关键帧连起来。通常做法就是线性的计算中间数值(也可以是任何函数变换)。这种简单的线性插值计算可以用在任何参数上,位置,大小,方向,等等等等。FK/IK可以说都在用,仅仅是计算两帧之间的中间值而已。
应该说所有动画都是基于关键帧的。 帧动画:一张一张的图片,每张图片是一个关键帧。 骨骼动画:仿照“真实”的骨骼结构,建立一个节点树,每个节点算是一个骨骼的关节,然后在这些关节上指定关键帧,通过一些计算来生成中间帧。所谓FK和IK,都是计算中间帧…
这里面混杂着好几种不同性质,无法类比的概念。一个一个说。&br&&br&首先“帧动画”应该是指的是逐帧动画,也就是动画的每一帧都独立地保存在媒体内,连续播放这些帧即形成了连续动态。一般常见于GIF动画。广义上来说,所有的视频都属于这个范畴。&br&&br&“Tween动画”是一个比较特殊的叫法。我估计可能是受到了Flash的影响。Tween其实是In-between的简写,指的是计算机自动插值补全关键帧Keyframe之间的动画。补全的动画既可以是动态Motion也可以是变形Morph。所以Tween其实只是一个补全的过程,更加合理的称呼应该是关键帧动画。&br&&br&逐帧动画和关键帧动画才是相对应的两个概念。在实际制作的过程中,由于成本的原因,很少有人逐帧制作了,但也有例外,可以查一下Rotoscoping,不展开了。即使传统手绘动画制作的过程中也是“原画”和“动画”两组人马分开进行——前者相当于Keyframing,后者Tweening。&br&&br&“骨骼动画”并不是一种动画制作形式,而是一种制作手段。目前的动画物体,特别是有机体,其构成和变形非常复杂,比方说一个由成千上万个点构成的3D角色。尽管动画本质上是这些点在空间内做位移构成的,但直接驱动这些点非人力能为。因此我们把运动简化成骨骼来代表,并把点一一映射到骨骼上。构成骨骼的过程叫Rigging,把点映射到骨骼上的过程叫蒙皮Skinning。目前技术所限,Rigging和Skinning的过程基本上都是手工为主。专业的生产流程中由专人负责。&br&&br&骨骼蒙皮完成后,采取何种形式动画,那就是你的自由了。&br&&br&反向动力学IK和正向动力学FK是一对骨骼系统特有的概念,指的是两种相反的骨骼层级控制方式。举个典型的例子,在上臂——前臂——手的层级上进行动画,利用IK我们可以直接动画手,前臂和上臂会自动调整成合理的角度,这是因为通过逆向动力学,我们可以计算出上臂和前臂骨骼应有的角度。如果没有IK,而是使用FK,子物体是无法影响父物体。如果想让手抬起来的话,就要先抬一点上臂,再抬一点前臂,最后调整手。这种显然反直觉的动画方式是效率非常低的。&br&&br&总结一下,“逐帧动画”和“关键帧动画”是动画制作形式。“骨骼动画”是动画制作手段,而IK和FK则是基于骨骼系统的两种相对的控制方式。
这里面混杂着好几种不同性质,无法类比的概念。一个一个说。 首先“帧动画”应该是指的是逐帧动画,也就是动画的每一帧都独立地保存在媒体内,连续播放这些帧即形成了连续动态。一般常见于GIF动画。广义上来说,所有的视频都属于这个范畴。 “Tween动画”是…
已有帐号?
无法登录?
社交帐号登录
得之我幸,失之我命【图文】帧动画和骨骼动画_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
帧动画和骨骼动画
上传于||文档简介
&&帧​动​画​和​骨​骼​动​画
大小:1.37MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢关于帧动画,tween 动画,骨骼动画等动画的关系及分类是怎样的_百度知道cocos2dx骨骼动画Armature源码剖析(一)
字体:[ ] 类型:转载 时间:
cocos2dx中的骨骼动画在程序中使用非常方便,从编辑器(cocostudio或flash插件dragonBones)得到xml或json数据,调用代码就可以直接展示出动画效果,下面通过本篇文章给大家分享cocos2dx骨骼动画Armature源码剖析,需要的朋友一起来学习吧。
cocos2dx从编辑器(cocostudio或flash插件dragonBones)得到xml或json数据,调用类似如下所示代码就可以展示出动画效果
ArmatureDataManager::getInstance()-&addArmatureFileInfoAsync(
"armature/Dragon.png", "armature/Dragon.plist", "armature/Dragon.xml",
this, schedule_selector(TestAsynchronousLoading::dataLoaded));
Armature *armature =
armature = Armature::create("Dragon");
armature-&getAnimation()-&playWithIndex(1);
addChild(armature);
那么调用内部是怎么实现的呢?
Armature::create和armature-&getAnimation()-&playWithIndex都实现了些什么呢?这几篇文章将从源码上分析Armature。
本文是Armature分析的第一篇,将从整体上对cocos2dx里的骨骼动画进行分析。涉及到内容如下:
什么是骨骼动画
编辑器导出数据格式概览
什么是骨骼动画
游戏中的动画大体可以分成下面三种:
补间动画(Tween)
骨骼蒙皮动画
这个是最基本的动画,也是下面两个动画的基础,一帧展示一张图,cocos2dx Action中Animate就是帧动画。优点是实现简单,缺点是浪费资源(一帧一张图,可对比下面两种动画)。
flash中补间动画用的比较多,不需要一帧一张图,只需起始状态和结束状态,中间的状态可以进行根据差值与经过时间计算出来。优点是节省资源,美术人员比较熟悉。
骨骼蒙皮动画
骨骼动画可以认为是补间动画的一种扩展,让动画的各个部分之间产生关联结构(骨骼),之后把图绑定到骨骼上。缺点是程序实现较复杂,其优点较补间动画有下面两点(其他优点暂时没有发现):
1.导出配置数据少并且美术制作简单
假设有一个下面这样结构的骨骼
假设想在一帧中把动画整体向右移动,采用补间动画需要把body、armLeft、legRight等等全部移动,创建新的帧,而骨骼动画只需移动body的位置,其子节点会跟随父节点移动。对应导出的配置中,补间动画要处理body、armLeft等所有子节点导出的数据,而骨骼动画只有body一个节点数据的改变,导出的数据会小很多。
2.关节裂纹修复
下面的图是偷的《游戏引擎架构》449页,意思是如果美术作图时候不注意,关节链接处可能会有裂缝。采用骨骼动画可以解决这个问题,骨骼动画中的蒙皮可以按权重绑定到多个关节(骨骼中),并且可以按权重进行拉伸,cocostudio骨骼动画编辑器不熟,不知可不可多绑定,flash的dragonBones插件是不行的。 spine 对这种多绑定有不错的支持。
编辑器导出数据格式概览
cocostudio导出的json结构和dragonbones导出的xml结构相似,都是骨骼层,动画层,图片层三层结构,已dragonbones官方的demo为例(有删减):
&skeleton name="DragonBones_Tutorial_MultiBehavior" frameRate="24" version="2.2"&
&armatures&
&armature name="Dragon"&
&b name="tail" parent="body" x="45.9" y="-70.8" kX="30" kY="30" cX="1" cY="1" pX="11.5" pY="176.35" z="10"&
&d name="parts-tail" pX="0" pY="-63.8"/&
&/armature&
&/armatures&
&animations&
&animation name="Dragon"&
&mov name="stand" dr="7" to="6" drTW="100" lp="1" twE="0"&
&mov name="walk" dr="8" to="5" drTW="200" lp="1" twE="0"&
&mov name="jump" dr="5" to="3" drTW="5" lp="1" twE="NaN"&
&mov name="fall" dr="5" to="6" drTW="5" lp="1" twE="NaN"&
&/animation&
&/animations&
&TextureAtlas name="DragonBones_Tutorial_MultiBehavior" width="512" height="512"&
&/TextureAtlas&
&/skeleton&
&armatures&&/armatures&是骨骼部分,对应flash中1区域,一个layer就是一个bone。
&animations&&/animations&是动画部分,对应flash中2区域,用帧标签区分哪个动画,比如stand、walk、jump等。
&TextureAtlas&&/TextureAtlas&是骨骼部分,对应flash中3区域,是皮肤,也就是图信息。
有了这些信息,就可以在程序中还原flash中的动画效果,具体dr、drTW、x、kX、kY等等是什么意思之后的文章里会说。
代码大体可以分成xml或json数据的解析 和 用解析出的数据产生动画两部分。
数据解析的相关代码的UML
大致介绍下每个类的作用:
DataReaderHelper:解析armatures、animations、TextureAtlas的数据生成程序能直接使用的数据结构ArmatureData、AnimationData、TextureData。
ArmatureDataManager:管理DataReaderHelper及其解析出来的数据。
ArmatureData:对应xml中的&armature&&/armature&。
AnimationData:对应xml中的&animation&&/animation&。
TextureData:对应xml中的&SubTexture&&/SubTexture&。
BoneData:对应xml中的&b&&/b&。
DisplayData:对应xml中的&d&&/d&。
MovementData:对应xml中的&mov&&/mov&。
MovementBoneData:对应xml中的&mov&&b&&/b&&/mov&。
FrameData:对应xml中的&mov&&b&&f&&/f&&/b&&/mov&。
产生动画相关代码的UML
大致介绍下每个类的作用:
Armature:里面包含了骨骼信息及动画信息,有个这个就可以播放动画。
Tween:骨骼动画的补间,一个骨骼一个Tween。对应上面的flash面板就是stand动画的tail层的第一到第七帧。
ArmatureAnimation:所有Tween的集合,够成一个动画。
Bone:带有Tween的骨骼信息,从这里面可以得到某个时间点的骨骼状态。
DisplayFactory:创建skin等显示对象。
DisplayManager:每个Bone中有一个,管理骨骼上的显示对象。
Skin:图的显示对象。
以上内容就是脚本之家的小编给大家分享的cocos2dx骨骼动画Armature源码剖析(一),希望大家喜欢。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 android tween动画 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信