本帖最后由 ⑨⑨⑨⑨⑨ 于 2012-12-12 11:29 编辑
第二讲 全局动作和全局骨骼的应用
在这一讲会针对于全局动作在贴图动画实例应用,以及全局骨骼对骨骼绑定,模型放缩等等的重大意义做出详细的讲解
首先讲一下贴图动画吧,贴图动画有两种,分为单张流动图,和多张频换图。
单张流动图只需要用一张贴图就能达到贴图运动的效果,做法如下:
首先用wme打开你的模型,然后打开全局动作管理器,我们要新建一个全局周期动作,比如这个埃辛诺斯战刃,我们要让它表面的蓝色火焰贴图流动起来,就必须先有这么一个周期,这与上一讲中的罗宁法杖头是一个道理,这个周期假设为6667,即6.667秒,然后记下这个全局动作的id(顺便说一下,每次打开wme,全局动作的名字都是不一样的,贴图动作名和组织名也是如此。)
现在全局动作已经设置好了,接下来有两种方法可以将这个全局动作运用到贴图动画里。
第一种方法是运用wme修改,首先后打开贴图动画管理器,新建,这里有三种常规运动(移动、旋转、缩放),咱们这里选择移动,然后在移动上面动态化的选栏里面打钩,点击移动,会出现一个新的窗口,最上面白框中的那一组数据记录着你贴图的运动轨迹,这里咱们看到的是0: { 0, 0, 0 }冒号左边那个0代表着时间帧,这里的0即0秒“{}”中第一个0代表着贴图坐标沿y轴从左到右的运动,第二个0代表贴图坐标沿x轴从下到上的运动,第三个0代表贴图坐标沿z轴正方向的运动,不过大家都知道,贴图是平面的,所以没有z轴,所以这一项无效。下面可以看到两个拉栏,第一个拉栏是全域顺序id,即你要使用在这个贴图动画中的全局动作的id,第二格式变换类型,分别有Bezier(矢量曲线运动)Hermite(矩阵式运动)Linear(直线运动)3种,对于这个埃辛诺斯战刃,我们在全域顺序id一栏选择咱们刚才新建的那个(id刚刚不让是你记下来嘛),变换类型选择最简单的Linear(直线运动),然后轨迹这么设,第一行保留它原来的0:{0,0,0} 第二行这么写6667: { 0, 3.98438, 0 },这就代表该贴图从0秒到第6.667秒沿x轴正方向匀速运动了3.98438个单位,至于为什么写3.98438,因为这是埃辛诺斯战刃的原始数据,比较美观。然后确定,记下这个贴图动画的id名,然后咱们进入组织编辑,先在模型视图里按住ctrl,然后用鼠标左键去点埃辛诺斯战刃上的火焰贴图多边形,这样你就选上它所对应的组织了,然后打开组织编辑,看到蓝色的那一行,双击,然后选中白色框里那一行,再双击,会出现一个窗口,在窗口里找到动画贴图id,然后选择刚刚你设好的那个,点确定,这是比较简单的方法。
第二种方法是将模型保存为mdl,然后用记事本编辑,前几步和上面那种方法一样,直到你设置完贴图动画,然后保存,用记事本打开你的mdl模型,比如你需要动画的贴图是RuulBlade.blp,然后你搜索RuulBlade.blp语句,可以看到它是模型第9个贴图,那么它的贴图id就是8,因为第一个贴图id为0,第二个为1,其他以此类推、然后搜索语句static TextureID 8(8即你贴图的id号),然后在下面加一行TVertexAnimId 0(0为你贴图动画的id号,这个和贴图id同理第一个动画id亦为0),注意在TVertexAnimId前面要复制一下static TextureID前面的空白,不能空格,否则会出错的,特别注意的是static TextureID 8和TVertexAnimId 0后面别忘了要有逗号,这个逗号建议你去别的语句里复制,否则会出错,然后保存,你就可以看到贴图运动的效果了。
至于刚才所说的三个动作中的旋转,你应用的时候它的格式是0: { 0, 0, 0, 1 },冒号左边的0仍是帧数,括弧中的一个0无效,可无视,第二个0代表贴图坐标沿x轴顺时针旋转,第三个0代表贴图坐标沿y轴顺时针旋转,第四个0代表贴图坐标沿z轴顺时针旋转,0为0° ,1为顺时针旋转一周即360°,那么顺时针旋转180°就是0.5,逆时针旋转180°就是-0.5,道理是差不多的,大家自己去体会吧。
下面讲频换图
有个经典的模型, 是大天使泰瑞尔的,它在做任何动作的时候翅膀都在不停地飘舞,非常好看,这就是典型的换频图,换频图是有多张贴图在一个周期时间段轮流变换形成的,就像幻灯片电影一样,首先咱们还是要设置一个全局动作,比如周期为1065的全局动作,这里有15张贴图作为换频贴图,设完全局以后,进入组织编辑,选择你翅膀的组织,然后双击,在贴图id那里点上勾,点击贴图id,然后你看会到一个菜单,和我们之前在流动贴图里设贴图动画的菜单差不多,下面全域顺序id拉栏选择你之前设好的1065帧全局动画,因为是多张贴图,所以也不存在变换类型问题,所以变换类型就选择none,然后上面有0:× , 0仍然是帧数时间,× 是你贴图的id,进入文本查一下你贴图的id,具体方法在上一节已经讲过,然后按顺序来,假设这一组贴图在模型贴图的次序都是按照播放顺序挨着的,首帧贴图是模型里所有贴图的第7张,那么就如下编写:
0: 6
71: 7
142: 8
213: 9
284: 10
355: 11
426: 12
497: 13
568: 14
639: 15
710: 16
781: 17
852: 18
923: 19
994: 20
这样子就表示在1.065秒内,15张贴图匀速接连变换,而且是循环的,保存,就可以看到效果了。
接下来说说全局骨骼在骨骼绑定方面的应用,很多人用截取器截取后的模型都是非标准姿态的,非标准姿态即不是普通站姿或丁字型站姿的姿态,这样的模型骨骼不大好绑,因为大多数骨骼都是按标准站姿排列的,有一种蠢办法是通过调整多边形将模型变为标准姿态,不过这个非常麻烦,现在有一种好办法就是通过全局骨骼,具体操作是这样:
比如你要将模型A的骨骼导入模型B,模型B非标准姿态,首先你用mdlvis骨骼绑定法将模型a的骨骼导入到模型b里,然后你看下原来模型A的骨骼位置,除了总骨骼(bone_b0)以外,你把它们的位置记好,然后再看看模型b,然后你对比两个模型试想一下,当模型A的骨骼点运动到模型B这个姿态的时候大概在什么位置,然后一一对应的在模型b里建立相对位置的骨骼点,名字最好别重,比如模型a的bone_b2骨骼,在模型b里简历建立的对应骨骼就叫bone_b2a,这样好一一对应,都建好之后就要把这些新建的骨骼点分别绑上所对应的多边形,注意,这些新建的骨骼点不能有任何从属关系,绑定的时候你就可以把这些新建骨骼当做它所对应的骨骼去绑,比如你要将模型A的骨骼导入模型B,模型B非标准姿态,首先你用mdlvis骨骼绑定法将模型a的骨骼导入到模型b里,然后你看下原来模型A的骨骼位置,除了总骨骼(bone_b0)以外,你把它们的位置记好,然后再看看模型b,然后你对比两个模型试想一下,当模型A的骨骼点运动到模型B这个姿态的时候大概在什么位置,然后一一对应的在模型b里建立相对位置的骨骼点,名字最好别重,比如模型a的bone_b2骨骼,在模型b里简历建立的对应骨骼就叫bone_b2a,这样好一一对应,都建好之后就要把这些新建的骨骼点分别绑上所对应的多边形,注意,这些新建的骨骼点不能有任何从属关系,绑定的时候你就可以把这些新建骨骼当做它所对应的骨骼去绑,比如模型a的手绑定的是bone_b33,那模型b手多边形所要绑的点就是bone_b33a,都绑完以后,你就该建立骨骼关系了,把新建的骨骼点与他们所对应的模型a骨骼点一一绑定,也就是说bone_b1只与bone_b1a绑定,bone_b2只与bone_b2a绑定,并且原骨骼是你新建骨骼的父骨骼,都绑完以后,在全局动作0里,你把那些自制的末端骨骼全都移动到它们所对应父骨骼的位置,这样你再播放一下动作,他就能正常运动了。
另一个应用是模型的放大与缩小,比如说山丘之王的天神下凡技能,他之所以能变大并且动作不发生扭曲就是因为在那个动作的首帧,他的全局骨骼放大了,也就是控制他周身所有骨骼点的那块bone_b0变大了,于是所有骨骼点就像牵线木偶一样也跟着放大。(大家改的时候,只要把首帧的总骨骼放大,然后再复制首帧动作到尾帧就可以了。如果所有动作都想放大那么就建立全局0-0帧动作,在那个全局动作里放大就可以了) |