总结一下制作红警2步兵时需要注意的各种细节
ICE Lab Inc. Copyright 2021,All rights reserved.
本文共12000字
曾几何时,红警2modder们还在为找到XCC Mixer能打开原版Ra2.mix与Ra2md.mix而欣喜,但随着modder们对自身能力的不断提高,简单修改配置文件就算制作了mod的时代一去不复返了。各种拥有全新引擎,全新素材,自定义客户端的mod们的横空出世让红色警戒2在度过了它的21年岁月以后依旧拥有极高的热度。这些新功能也对后来的modder们提出了更高的要求。反编译,进阶PS,多软件建模,特效插件与AE这种曾经很高级的功能也逐步走进了红警2modder们制作mod的日常。在玩家眼里,比拼狂兽人血量与天启攻击特效是不是核弹爆炸的审美不存在了,取而代之的是接近独立游戏的审美标准——战役剧情的连贯性,与原版完全不一样的单位多样性,对战地图的平衡性,单位设计的合理性等等。这些新要求对于每个modder来说都是挑战,所幸在如今发达的互联网下,那些曾经让人觉得高高在上的专业软件也能在网上轻易的找到教程。这也让各种modder能较快的达到前人的成就,并且在更短时间内做出一个更加优秀的作品来。

制作效率的提升一般会直接体现在学习资料的易于获取上。新引擎的修改需要modder了解C++与反编译,这些对于一个正常coder来说都算是能力范围内的东西;新地图的制作需要玩家熟练使用FinalAlert2,这对于经常关注优秀mapper们的设计,时不时自己动手做出一个作品的mapper来说也十分轻松;新vxl模型需要熟练掌握vxl section editor或是使用magicavoxel/voxelshop等可转vxl格式的体素建模软件,这对于想学习vxl制作的新人来说只需针对性的搜索相关教程与圈内vxler的素材制作视频即可。然而,新shp素材的制作却相对比较自由。除了最后转shp所需要的软件相对统一以外(Pal Studio,ImageShaper与Shp Builder),制作shp的前期工作却是非常个性化与多元化的。并且适用于一般建模动作与流程的教程多半不适用于红警2,为红警2素材制作所特别撰写的教程的缺失让红警2 shp制作者们的交流还仅限于互相帮忙与口耳相传上,这也就是我在B站上写这些文章的原因。回想我写的第一篇专栏里,我更多是对biped这种古老而简单的插件在动作制作上的一个入门介绍。那篇文章是我在B站撰写的第一篇专栏,同时也是我在max的学习里最初得到的成果。但事实上,制作一个合理的动画远比如何去绑定并拉动各部分要简单。当你完成绑定的时候,你的动画制作才只迈出第一步。随着我越来越多的制作各种各样的步兵,我也遇到了越来越多的问题。

对于我来说,在制作了许多步兵以后,以下这些问题是我所面对的常见问题:
1.步兵动作如何设计更加合理
2.如何让步兵的步伐与你在ini中设定的速度匹配
3.动作在max内的实时渲染是否与游戏内一致?
4.步兵的体型到底应该是怎样的
5.步兵的游泳动作,如何做出来更合适
6.开火动画是否应该做进步兵
上面这些问题基本上是我要做一个步兵的时候常见的一些问题。本文中,我也将会以这些问题来展开话题,聊一聊关于我在制作步兵动作上的一些心得。希望能起到抛砖引玉的效果,如有错误,欢迎各位对我及时纠正,本人不胜感激。
一.速度与大小
不同于现代游戏,红警2这种老游戏的帧率会影响游戏的运行速度而并非流畅程度,这也就是玩家嘴里的“不锁帧”。现代游戏的高帧数会体现在游戏运行流畅度上而非游戏时间流逝速度上,因此现代游戏的模型在设计动画上一般会考虑最高的帧率。比如暴雪的模型在动画设计上就使用300fps以便适应更高的帧率。红警2这种老游戏的速度设置则是播放速度设置,比如经典的6速150+fps,AI反应快的玩家根本操作不过来。所以现代电脑在玩红警2单机游戏时更多会使用5速锁60fps的方式来防止速度过快难以操作。这点会直接体现在素材制作上。我使用3dsmax制作红警2步兵素材时,我往往会将时间配置的播放速度设置成1/4x来匹配红警2内4速的播放速度(因为从战役默认速度我们可以知道,4速是西木给玩家设计的最优速度,也就是30fps)。以下是设置相关截图:


在设置好以后,我们在制作动画上就有了一个播放速度参考。单独建立了播放速度参考会直观告诉素材制作者动作在游戏内的播放速度,但这种直观又是片面的。以走路动作为例,走路动作在制作时模型会在原地进行走路的相关动作,但走路本身是一个移动的过程,我们需要匹配游戏中素材需要的移动速度与动画播放速度的值。每次都一次次匹配毫无疑问是麻烦的,所以在此我给出一个经过我多次试验个人最喜欢的一个步态动作制作方案供各位读者参考。
首先我们可以参考现成的方案来辅助我们的设计,打开西木自己做的素材与原始rules.ini我们不难发现,红警2步兵们绝大多数的速度都是4,少数是5-6,每个方向的运动shp帧数都是7。所以我们可以得到一个结论:在人眼的识别范围内,速度是4-6都可以使用7帧循环步态动画。而恐怖机器人的速度是10,大小与普通步兵相似,恐怖机器人采用了6帧每个方向,所以我们又可以得到一个结论,速度是10左右的步兵可以使用6帧循环步态动画。然后我们结合红警2自身引擎缺陷与现在普遍使用的ares平台中AE动画的增益功能来看,shp单位的实际速度超过13时容易卡在原地不动(13仅为经验数值并非程序规定硬性数值,数据仅供参考)(实际速度就是当前单位的真实速度,就比如一个ini里设定速度为7的单位,当身上有了一个速度增益2.0倍的AE动画时,其自身的速度达到了14,就容易产生卡在原地不动的行为)。所以结合步兵大小来看,一般每个方向的帧数为6或7,步兵速度极慢时用8即可匹配游戏内速度。


当然,这一切都是建立在大小是步兵大小的shp之下的相关规则。为了确立步兵大小,我一般会以高度来定整个步兵的尺寸基调,这是因为步兵高度决定了其身体比例,而身体比例中腿的尺寸决定了其正常行走的步伐尺寸。学过绘画的人都知道,绘画中的人物设计有“n头身”的概念,即头的比例占全身的大小可以快速确认身体的高矮与画风。红警2的步兵大多为五头身左右,即头占全身高度的比例约为1/5,同时红警2的步兵比起正常体型的人来说大多四肢较粗,身体较厚而短,这主要也是为了方便游戏内辨认。

在红警2中,一般的步兵自身都是28像素左右(以美国大兵为案例),算上由于等线视角时向上的伸手动作,单个步兵的图像像素高度可能会25(佝偻)到35(高个),特殊则可能更高(高个体型可以拉到40;外骨骼,机甲等特殊装备可以拉到50),如果你要设计一个更大的步兵,随着你单步距离的增大,每个方向单运动周期内的帧数一定也会相应变化。

对于单一步伐的距离来说,我一般会把步伐长度跟身体长度挂钩,即单一步伐长度等于主身体长度。同时在一个动画周期内应该是左右双腿轮流向前,一个周期的最后一帧应该能无缝连接第一帧的动画才是合理的步伐动画。所以我每次制作行走动画时,往往会拉一个比我预期循环帧数多一帧的时间轴环境,在第一帧与最后一帧都放上第一帧动画,并在中间建立循环来保证动画循环内的连贯性。

二.步态动作简析
下一个就是步态问题,步态设计对于许多动画设计师来说基本是必修课,而且对于某些需要做步态分析的程序员来说这也是一个经过专业训练以后的东西,所以在此我只写一点个人的拙见,细节也就不过于展开了。

在描述之前,对于3D动作的文字化记录,我在此创立一个空间三维坐标系来辅助我的描述。以下是坐标系说明:

人类的行走比起轮胎的滚动来说有着更多的重心转移。虽然我们都知道双腿行走是左右腿轮流上前的动作,但除了腿与你不自觉摆动的手以外,其他细节确实很难被没有相关经历的普通人注意到。
首先,一个合理的步态一定伴随着重心的变化。想当初我还在用那个初音模型照着网上的教程学习骨骼动作制作的当年,使用那个模型来教学的老师也只是在他的免费视频里拉了一个腿部的关键帧与简单动画就没了。那个动画确实简单到草率,但同时那个动画也给予了我一个最基础的步态特征,即腿在运动中的极限位置一定是略微弯曲,前腿较直而后腿朝后,同时上肢则是相反的互相弯曲。这种状态其实可以用一张图来简单概括——安全出口:

当然,这只是极限状态,而且这种动作其实在实际制作中稍显夸张。不过我还是会在一个步伐的首尾帧里将身体在XZ平面内弄成近乎上图一样的样子,然后我会在大概正中间的帧时将四肢的动作左右反过来,这样根据关键帧规则,双腿与双臂会形成了一个大概的往复动作,为之后的调节创造更好的条件。

当然,光弄好首尾与中间关键节点是不够的,系统自动运算的动作会让双腿在XZ平面内以最直接的方式——绕大腿根部旋转来运动,此时我们需要修正这种转动以避免与地面的穿模现象。根据步伐的模拟分析(就是自己在屋里走动走动体会一下),我们可以得出一个结论:即对于脚部来说,向后运动的脚一定是着地的,则其运动是与地面平行的;向前运动的脚一定是悬空的,而且悬空向上是一个向上弓的弧形。脚会在脚踝向上抬的时候略微放大与小腿的角度以放松肌肉,而地面端的脚则会因为人体保持平衡而保持紧密接触地面。这也让人类的运动会在XZ平面上上下起伏,当你的步伐最大时你会相对矮一些,当你的步伐最小时你又会相对高一些。

说完了XZ平面,我们来看一下YZ平面的姿态运动。人体行走是一个规律性的重心移动的过程。这点是会体现在你的步伐里的左右摇摆上的。诚然,我们都看过阅兵式上帅气的仪仗队队员在踢正步时走直线上身不动的精彩表演,但即使是他们几乎平行于X轴的重心移动上,上身也会呈一个极其微小的周期性的左右变化,而当你在跑动时这种变化会幅度更大。这是因为你每个步伐中很少有双脚同时着地的情况。当你左脚着地时,你运算平衡的小脑会操你的身体将你的重心左移以便平衡你左右质量与惯性,右脚时同理。这种运动规律会使得你的上肢与主身体会倾斜于你当前落地的脚的方向。人类上身的倾斜往往能通过肩部的倾斜来看出,所以我们可以得出一个结论,那就是在YZ平面上,落地脚的那边肩会更低,上身会略微向落地脚的那边弯曲。同时,由于人颈椎在行走中不自觉地平衡脑部,你的颈椎虽然会跟着左右弯曲,但幅度往往会小于你的重心摆动,除非你处于跑步态势。说到跑步态势,在跑步中的人类往往上身的左右摆动幅度会更大,而人类在悠闲地走路时上身的摆动非常不明显。所以上身的摆动也可以反应步兵的运动速度。如果你想让你的步兵是跑步前行,那么你在动作中对于上身的摆动需要好好设计;但如果你只是想让你的步兵是悠闲的往前走,那么上身摆动则一定要小甚至不需要做。


处理好上身重心的左右摇摆与腿部运动以后,最后我才会处理上臂的运动。一方面,上臂的运动并不是一个固定的左右摇摆,毕竟空手的步兵并不是很多,不同的步兵其持有的不同武器决定了上肢的运动轨迹。我最近做的这个黑色步兵的案例是一种典型的双手持枪步兵案例。如果是单手手枪案例或是掷雷兵案例,读者可以参考美国大兵的类似无武器手部运动,如果是双手持手枪或是持长枪的案例,则手部位置会相对限定与一个点或是一根轴上。这同时会影响上肢在步态中的运动。不过,肩部围绕人中轴的转动的主要规律并不会因为你姿势的改变而改变,而是恒定的以根部为转轴进行左右各画圆的运动,这种圆形由于整个肩膀可视作刚体的转动而左右方向一致,但相位完全相反。从前方看左右肩膀都是上下移动,但从右边看,双肩的运动围绕转轴则一定是顺时针转动。以下是图示:



以上就是步态的相关分析,接下来我会写到一个在制作中很具有红警2特色的部分——开火序列。
三.步兵开火序列的注意事项
开火序列对于红警2来说是一个很特别的部分,首先我先展示一些西木的步兵案例:



这三个示意能很好的体现出我接下来要表述的内容,现在我将会以Q&A的形式来展开我对开火序列的理解。
a.开火动画到底应不应该做进步兵本体?为什么?
答:应该。
既然答案是应该,那么如果没做进步兵本体会怎么样呢?这点就是ww的经典bug了。我们都知道在ares里,载具可以做成32面。AlexB老爷之所以要设计这个功能绝不仅仅是因为能让载具转弯变得顺滑,因为毕竟任何一个地面载具在红警2里都只会以8面的形式向前运动,也就是说除了转弯会出现32面中其他24面的效果以外其他都不会出现,空中载具由于其直接飞过去的功能,这使32面载具会极大增加空中shp载具的表现力。但是,每个单位在art里都是需要写FLH即开火位置的,而开火位置又是32面的。这就会直接导致一个结果,当你的步兵朝一个方向时,开火动画并不一定是这个方向。诚然,Ares也做了开火动画是32面的功能。只不过AlexB老爷似乎并未100%将开火动画与开火位置对准,即使是32面开火动画的开火单位依旧会出现开火位置/移动位置与单位目前方向不匹配的情况。有炮台的单位往往不会出现这种情况,这是因为炮台会实时跟随自己攻击的目标的方向精准的运动。但如果无炮塔单位的话,那就不一定是精准朝向了。以下是示意图


而上图都是vxl单位的示意,vxl单位好歹作为红警2这个2.5D游戏里唯一的还算与3D沾点边的玩意能表现出自由自在转动的效果,然而步兵这种纯粹的2D图像可就没那么正常了。


这种现象在武器很长的步兵单位里尤为明显,这也就是我使用防空步兵这种武器很长的步兵当示意的原因。西木肯定是赶工懒得修这个bug了,于是就在步兵图像本体上加入开火动画来避免了这个bug的出现。
当然,把开火动画做进步兵帧序列内是需要一定能力的,我一般会使用avi动态材质的方式,AE转动摄像机+PS仿色+blender帧序列合并的方式,亦或是直接在max里使用开火动画样子的简单几何体+高亮度材质+动画直接模拟的方式将开火动画做进步兵帧序列内,具体怎么做就看各位读者的聪明才智了。而假如你真的不会把步兵开火动画做进帧序列,我也有三种方法来避免这种情况的发生:1.制作近战步兵,2.把步兵的武器做短使bug的影响降到最低,3.把步兵的开火动画改成统一的圆形烟雾,降低开火动画方向bug被看出来的几率。
同时,每种武器开火都会伴随周围环境亮度的改变,地板亮度的改变我们可以用开火动画绑武器绑闪光弹头的方式,但这种光线并不会与步兵自身产生交互,因此我们可以在制作步兵时在枪口加入光源闪烁的动画来模拟武器开火对步兵自身的光学变化,从而产生更好的效果。(西木也是这么做的,这也就是为何西木的每个步兵开火时身体都会产生光线交互)

b.步兵的开火频率与动作设计是否有关联?
答:有,且很大。
这又不得不说到红警2的一个bug了。每次开火之前步兵也好shp载具也好一定会在开火前一帧强制回到空闲帧ready/guard的状态。所以开火频率高的步兵其平时空闲动作一定要与开火时的动作非常接近,不然就会抽搐。

那么解决方案是什么呢?很简单,开火动作与站立动作很相近即可。这也是我放出第二个案例——魔鬼终结者的开火效果的原因。

c.是否所有的shp单位都能随心所欲的制作攻击前摇与后摇?
答:不能,甚至shp载具无法制作攻击前摇。
开火动画一般都存在攻击后摇的过程,即单位在攻击之后需要放下武器或是其他解除攻击姿态的动作。在步兵本体的art里有个字段叫“FireUp=(后接int型整数)”(非帧序列内的FireUp,帧序列内的FireUp是用来给开火动画帧序列确定位置与帧数的),这个字段决定了步兵开火的帧序列中,第几帧才会播放开火动画并且武器会运行。而如果你的武器过早开火而ROF(武器开火频率值)时间又低于你的攻击后摇,那么你的攻击后摇会强制播放完整,这会导致ROF强制高于某个数值而无法更低。

shp载具的开火前摇又十分奇怪。在心灵终结中三轮使用了“DelayedFireDelay=”与“FiringSyncFrame1=”来控制shp载具的开火前摇,但是通过应用了这两句话的巨齿鲨机甲的伤害作用时间来看,这两句话好像没起到任何作用。我之后也测试过诸多其他的需要开火前摇的shp载具,发现他们的开火都强制在第一帧起效了。我去ini英文教程,modenc在线字典与Ares说明书中查找这两句话的来源发现,第一句话仅对建筑起效,而第二句话更是不知道来源如何(所以三轮就瞎写的呗)。所以我暂时得出一个结论,即shp载具无法规定攻击前摇,也就是说你的shp酷炫机甲只要做成载具模式,那么你的开火动画设计就不能有任何攻击前摇。(如果有读者发现了给shp载具增加指定帧开火的方法欢迎告诉我,本人不胜感激)

这三个问题详细的描述了开火动画的相关问题,即:建议将步兵开火动画与火光闪烁做进步兵本体,应该合理设置开火动画帧数以匹配ini,shp载具应设计无攻击前摇的动作以防止bug。
四.两栖步兵
步兵的水上帧动画的制作是个特殊的问题。首先,我们需要了解一个事实,那就是在相同帧数下,步兵游泳的帧率更大。也就是说,如果一个步兵的游泳帧与陆地帧使用相同的帧,游泳的动画播放会更快。

下面来分析动作。相同人类的游泳姿势中,爬泳姿势是速度最快也是最耗体能的(自由泳比赛不限泳姿,大家都在用爬泳的方式进行游泳主要是因为它最快,并且开局用一小段潜泳的方式加速)。蛙泳的速度是最慢也是动作最慢的。然而,蛙泳的声音与水花相对最小,而且蝶泳太费体力,仰泳又看不见路。所以我们会看见红警3的忍者使用蛙泳进行游泳,谭雅也会使用后脚上下摆动的半蛙泳方式。因此一般我们做两栖步兵会使用蛙泳的方式来完成自己的水上行走帧。

我曾经做过一个两栖步兵,由于我想用爬泳姿势,然后又误以为游泳帧的播放速率与行走帧一致,这导致我的那个两栖步兵的游泳姿势极其滑稽……从这个反例可以说明,原版谭雅的游泳姿势毫无疑问是最适合红警2步兵游泳的姿势,所以各位步兵制作者们可以参考谭雅的运动姿势来制作自己的两栖步兵。如果硬要使用标准蛙泳姿势,请务必把游泳帧的运动周期拉长一点,比如正常的如谭雅这种半蛙泳的泳姿约为6-7帧,正常蛙泳就应该为20帧左右。

游泳的步兵在水里不动的时候是需要保持一个上浮姿势的,这点与地面的idle不一样。步兵的idle一般我们都会用一帧就行,毕竟你站在地面不动,空气也不能把你淹死。但在水里,你在原地不划水的话会沉下去,除非步兵坐在一个特别机器上或是这个步兵是个机器人自带气垫。因此,西木的游泳闲置组是支持多帧闲置的。而对于shp载具来说,你可以让闲置帧播放行走动画,只需要你的代码中加入“IdleRate=”即可,Ares还为空中载具增加了一个特殊的“AirRate=”来使气球类shp单位能在空中闲置时播放它的行走帧。步兵在水中的上下是会引起水中波纹的,动画师可以在水平面上增加增大的圆环来模拟这种变化。由于这种波纹很小,宽度甚至有时不足1像素,所以材质可以简单的使用淡浅蓝色或是灰蓝色即可。

我做步兵在水里的时候一般会隐去场景中用来渲染陆地影子的那个平面而改成一个半透明的平面来模拟步兵身体在水下变色的部分。(当然,水的折射效果我就没弄了,毕竟一般来说步兵小到可以不在乎这个细节)
另外,除了游泳动画与原地动画以外,水里的攻击动画,闲置动画与死亡动画都是特别的,这些动画都需要步兵制作者们去填充制作。值得注意的是,水中步兵无法欢呼,当你按欢呼键时,水中步兵将无法对你的指令做出反应。

五.飞行兵部分
红警2单位的运动是由“Locomotor=”,“MovementZone=”与“SpeedType=”决定的。了解ini的人都知道,Jumpjet类单位(标准代表火箭飞行兵,基洛夫,夜鹰直升机。其中,夜鹰直升机因为BalloonHover=no而能落地,不能落地的我一般会叫它气球类单位,因为其BalloonHover=yes得名)的移动方式在游戏中是独一无二的。你正常撰写的speed将无法影响其单位速度,jumpjet使用一套独特的ini代码组来控制单位的上浮速率,坠落速率,移动速率,是否上下摆动等特殊参数。

而jumpjet类步兵也用一套独一无二的帧序列来控制其运作方式。其中Hover=对应了地面步兵的Ready=/Guard=(其实我也不知道这俩有啥区别,可能guard是原地警戒G以后的动作?(仅猜测未证实)),同时其也类似于游泳状态下的步兵会原地持续播放动画的特性,空中的步兵在原地休息时也会不停地播放hover帧,这意味着hover与tread一样都可以做很多帧。Fly=对应了地面步兵的Walk=;FireFly=对应了地面步兵的FireUp=;Tumble=对应了地面步兵的Die1=。最后一个可以看出,不同于Die1,Die2这种设置,空中的死亡动画只能有一个。
飞行兵还有一个特别的死亡方式就是坠落。尽管坠落补刀导致的升级bug已经让许多mod禁止了(即Crashable=no),但这个功能确实并未消失。坠落与匍匐类似,都需要一个开启动作与结束动作。正如火箭飞行兵在开始坠落时会四肢向上,背包失去控制,而落地后则会四肢散成一堆碎片,背包也散落一地一样,坠落条目由AirDeathStart=,AirDeathFalling=与AirDeathFinish=控制,从前往后第一个条目是开始坠落动画,第二个是坠落过程中的动画,第三个条目是坠落到地面以后的动画。

此外,jumpjet类步兵的影子都会缩小成一个点。这是系统强制写死的效果。与之类似的还有空降时影子变成一个点。当然,载具jumpjet就没这个问题。因此当你想做一个新的火箭飞行兵类单位时,你甚至可以不用做影子,影子也会是一个黑点。


同时,jumpjet字段与地面行走字段并不冲突,你可以让你的步兵既能在空中飞并且开火,也能让它在地上走路开火。西木甚至为火箭飞行兵制作了地面行走动画。一方面这是方便间谍模仿(玩家得多蠢才看不出来走地的火箭飞行兵是间谍),另一方面在运动方式上红警2确实做得出来近处行走远处起飞的效果,只不过因为当有水时短距离移动火箭飞行兵会由于不飞行而走到水里淹死才被西木隐藏了起来(所以还是有bug咯)。

六.杂项
上面是一些步兵制作的一些主要情况,但是通过shp builder工具中的序列书写工具我们可以看见步兵序列art代码中的所有种类代码。下面我就根据这些代码来逐个介绍一些不足以成一个大段但依旧很重要的重点。


1.帧序列参数内额外的字母
这属于基本ini知识,但是为了方便个人查阅我还是在此写一遍。
在帧序列中,闲置,欢呼,死亡,水中死亡,水中闲置这些参数内后面会有一个额外的,由字母组成的参数,其字母的含义代表着朝向。比如你做的闲置动画是步兵面朝左下做出的,那么你写ini时最后一个参数就需要填"E"。下图举出了所有字母及其代表的朝向。

2.帧序列内数字的含义
这也属于基本ini知识,但是为了方便个人查阅我也写一遍。
一般任意帧序列内都有三个数字。第一个数字需要填写动作开始于第几帧减1。就比如ready序列一般是第一帧开始,所以你第一个数字需要写0;第二个数字除死亡,欢呼,闲置动作外与第三个数字应一致;第三个数字表示的是你单个方向的帧长度,例如你的行走帧每个方向是7帧,那么你就写7。死亡,欢呼,闲置动作,第一个数字还是开始帧数-1,第二个数字是动作帧数,第三数字就写0,第四参数是方向,是步兵播放完动作后面对的方向,也是上个条目已经解释过的内容。
3.阴影问题
如果我们打开西木的步兵素材我们可以发现,西木的步兵帧序列脚下一般都是有影子的。值得注意的是,这并不代表正常情况下shp的规律,即偶数帧数的shp的前半部分为本体,后半部分为影子的规律失效了。西木之所以把影子做进了帧序列内而非做到后面的原因是shp后半部分的影子帧在红警2系统内,只要影子帧的颜色不是色盘0号色(即第一个颜色),都会被强制更换为半透明黑色。但是西木想要步兵的影子始终保持纯黑实心效果,也就是假如步兵的影子在建筑下方依旧可以清晰可见,所以西木的步兵影子被西木做进了步兵帧序列内。


我反正不喜欢这种做法,所以我自己做的步兵是影子与本体分离。当然,如果各位读者想学习西木这种做法的话也是可以的。
4.匍匐与惊恐
控制匍匐的代码是art里的“Crawls=”。如果这里写了yes的话步兵在收到攻击时会有匍匐帧。步兵匍匐时速度减慢且防御会增加。如果你想让你的步兵拥有匍匐帧,你需要用你的动作填充Crawl=,Up=,Down=与FireProne=。其中Crawl=是趴在地上不动的状态,Down=是从正常站立到趴下的状态,Up=是从匍匐到爬起的状态,FireProne=是趴着开火的状态。值得注意的是趴下与站起都分别是两个动作,这并不是简单的挨打以后立刻切换为匍匐,步兵是可以拥有趴下与站立起来的过程的,这个动作不仅可以做出低姿态交战,还能做出持盾的步兵举盾减伤的效果。

惊恐则是挨打以后步兵速度增加但无序奔跑的效果,在rules里由Fearless=控制,站在动画师的角度上来看就是一种特殊的行走动画。帧序列里由Panic=控制,填写规则与Walk一致。

查阅原版英文教程以后我发现,idle能做两个,分别是Idle1=与Idle2=。wetidle也是两个,分别为WetIdle1=与WetIdle2=。

5.死亡动画到底要做几个?
死亡动画非常特别,所以我认为需要单独拿出来说明一下。(我能说我写这一段之前其实也不算特别清楚么)

Die1=是当士兵被指定了InfDeath=1的弹头杀死后的动画。Die2=则是士兵被指定了InfDeath=2的弹头杀死后的动画。然而Die3=却并不是InfDeath=3的弹头杀死后的动画,而是InfDeath=1杀死后的另一种动画。而且Die2与Die3是一组,当InfDeath=2的弹头杀死了这个步兵以后会在Die2与Die3中随机播放一组动画。Die1与Die3又是一组,当InfDeath=1的弹头杀死了这个步兵后会在Die1与Die3中随机播放一组动画。Die4=则是士兵被指定了InfDeath=3的弹头杀死后的动画;Die5=则是士兵被指定了InfDeath=4的弹头杀死后的动画。值得注意的是,查阅了InfDeath=条目我们可以知道其参数分别为0:立即死亡,1:转动倒下,2:爆炸,3:弹飞,4:烧死,5:电死,6:尤里造成的大脑爆炸,7:核辐射。InfDeath=不写时默认是0。烧死动画与弹飞动画在尤里复仇中其实都是有默认指定的(一个是燃烧的小人,一个是被狂兽人打死后血肉横飞的效果),因此对于一个普通步兵来说,最少需要两个死亡动作Die1=与Die2=。除非你有特殊需求,Die3,Die4与Die5一般都会被系统默认的动画替代。

水中死亡效果默认WetDie1=与WetDie2=中二选一,规则与Idle一致。

值得注意的是,如果你死亡动画没做完,InfDeath=或是Ares的InfDeathAnim=不存在时。步兵死亡会直接消失。为了避免这种突兀的情况发生,死亡动画最少做两个(你只做了一个怎么办?写两次不就完了)

7.帧间动画突变问题
这个条目是特别针对我使用3dsmax中遇到的情况而展开的。我们需要坚定一个点,即最终效果一定是整数帧时刻的效果的帧序列的叠加。这句话看起来有点绕,我用一个通俗的方法解释就是说,在你模拟播放时,每个帧之间的动画其实在游戏内是不显示的。

为啥我要去强调这个点呢?我使用max制作步兵帧序列的时候,有时候需要在两个动作之间插入一个动作,可是这个时候摄像机已经转动调好了怎么办?于是我这时只能把两个动作片段中间的那一帧无限放大,然后插入一些动作。由于旋转摄像机的问题,有时候max的自动关键帧功能会出现bug导致摄像机在预览时会快速乱转。但其实这种乱转是发生在一帧以内的事情,所以后期渲染根本看不出来。(我在制作动作时将动作预览的播放速度设置在了1/4,所以这种旋转看着会格外明显)

这一点同时也会影响到你制作带旋翼旋转的动画。举个例子,当你需要制作四片翼的直升机的升翼旋转动画时,直升机升翼单帧旋转角度只有接近于45度时才能获得最快的旋转效果。而如果直升机的升翼只有2片的话,你就可以让机翼在单帧之内旋转45-120度来展现较快的角速度。但如果你只是单独追求帧数最大旋转量的话,可能在预览里你转的飞快的机翼反而在最后渲染中变成了慢悠悠的倒转。这点毫无疑问是我们需要避免的。

8.四肢比例
红警2的步兵的四肢都需要粗一点,太纤细的四肢会使步兵的效果很差。(所以如果你要想把你老婆做进红警2里,请做高一点,否则你老婆的一个像素的瘦腿只会让你呕吐而不是蛇爆)


七.后记
到此,这篇专栏的主要内容也结束了。当写到这里时,我才发现这是我两年来写的第二篇万字专栏。回望过去,从第一篇专栏开始的初入动画坑,到如今转眼已有三年。在这三年里我单算步兵就做了一百余个,算上所有特效与载具可能有一千个左右,所以这篇文章可以算是我在这三年的懵懵懂懂的探索中积累出的一点经验之谈。万字技术专栏往往意味着读完全文的人少之又少,但我觉得这篇文章是我这三年来制作的素材中所给我积累的宝贵财富的总结。对于任何一个圈子里的modder来说,兴趣永远是他们前进的动力,创新与分享都是他们战胜困难的途径。红警2至今转眼推出了21年,虽说游戏未变,但是我却实实在在的感受到了modder们平均能力的提高与素材制作工具的进化。所以对于任何一个热爱这个游戏的人来说,只有不断追求进取,才能让自己在大环境的不断进步下有着不断创新的能力。
最后预祝大家2022年快乐,希望新的一年里疫情能情况好转,大家也能开心的开启自己的又一年学习与生活。

