2d游戏中的动画


2d游戏中的动画,最简单直接的实现方式就是一帧一帧的静态图片依序播放,也被称作精灵动画(sprite)。


考虑到大量图片导致的内存消耗问题,发展出了一些2d动画精灵压缩方式。例如一个人物走动的动画,可以将身体、胳膊、腿单独切成一个个碎片图,然后在每一帧里,用同样的身体碎片图,配上不同的胳膊、腿,形成完整的一帧。动画只需要导出身体、胳膊、腿的碎片图即可。这样既节省了动画里大量的不变部分,同时每一帧里哪些透明背景区域也不需要存储到图里了。


最早的3d游戏,例如doom,采用的仍然是精灵动画的方式。游戏里的人物只是一张张朝向摄像机的2d图片(人物模型只是一个矩形),人物的走动动画就是一系列2d图片的顺序播放。对于低精度和远距离物体,例如成百上千的士兵,体育场观众等,这种方式仍然适用。



接下来有了刚体分层动画(rigid hierarchical animation),仍举一个人物走动的例子,将人物模型分成身体、胳膊、腿几个刚体(不会产生形变),这些刚体各自由一堆顶点组成。动画里每一帧记录这些刚体的位置、角度等。刚体分层动画的缺陷是,因为刚体不会因为相互位置关系的影响产生形变,在刚体和刚体的连接处,因为一个刚体位置角度的变化,就有可能使原本严丝合缝的连接,产生撕裂的效果。


其实不考虑内存消耗的话,3d动画最直接的方式,是存储每一帧里模型的所有顶点位置(baked animation)。但随着游戏规模的扩大,这种方式的内存消耗变得不可接受。开发者们又想出了变形目标动画(morph target animation)。即只存储形态变化较大的一些关键帧里的顶点,关键帧之间的帧,采用两帧的插值计算顶点位置。

变形目标动画相对刚体分层动画来讲,有更好的形变效果,但是消耗内存较大,也缺少一些运行时生成动画的能力(例如在刚体动画里,程序完全可以做到让人物的胳膊晃一晃什么的)。二者的结合,产生了现在广泛流行的骨骼动画技术(skeleton animation),或称蒙皮动画(skinning animation)。


在骨骼动画里,我们像刚体动画一样,存储每一帧里人物身体、胳膊、腿的位置和角度,身体、胳膊、腿即是骨骼。但是在渲染时,并不将这些骨骼直接渲染出来,而是渲染这些骨骼影响着的皮肤顶点。一个皮肤顶点,可能被几个骨骼影响,这样在骨骼与骨骼的连接处,就不会产生刚体动画哪种明显的断裂了。


下篇文章里,会具体介绍骨骼动画的计算方法,并提供一个几百行代码的简单实现。


注:本文内容大体选自《Game Engine Architecture》一书

原文地址:http://blog.csdn.net/wtyqm/article/details/7908628

           
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值