魔兽争霸war3:模型相关细节介绍

时间:2024-03-04 10:28:16

   warcraft是非常经典的游戏,而由warcraft衍生出来的各种玩法(dota、3C以及各种剧情版的war3游戏),同样是经久不衰。这些得益于warcraft的牛逼编辑器。  

    不管是策划还是玩家都梦想着有一套功能强大且使用方便的编辑器来实现自己想法,而WorldEditor(简称WE)就是这样的编辑器。WE应该是本人见过的最强大的地图编辑器(没有“之一”),这种强大不仅是建立在精妙的算法上,同时更为重要的是建立在一种开放、规范的机制和流程之上。其中规范化的模型制作流程是这种强大的重要组成部分。

  PS:可能有人会问:“你丫一个服务器端程序员,为啥要研究模型呢?”;答曰:“不想当策划的程序不是一个好美术!”

 

一、背景介绍及所需工具

    Warcraft3强大的WE不仅能刷出变化多样的地形,也能导入遵循一定规范的模型。这使得玩家能利用WE发挥自己的想象,创作出很多不同的场景和玩法。下面就来谈谈模型。

    3D游戏开发中模型制作是美术同学的主要工作量(这里也没有“之一”),那么一套好用的工具往往能达到事倍功半的效果。什么工具才能称得上好用呢?美术同学制作3D模型,最熟悉的莫过于3dsmax和maya。但是由于各家的公司的引擎对模型的要求不一致,而且很多细节上实现方法也不尽相同(比如ribbon、Particle、Attachment Point等等)。因此3dsmax和maya导出的模型往往不能直接使用。现今比较流行的工作流程是:3dsmax制作模型并导出 -》对应引擎的模型编辑器修改模型及动作等等 –》 使用模型编辑器导出成引擎可用的模型格式。这种流程实际上就是对MAX这样的流行开发工具的导出模型做了一次转化,这样有一个比较严重的问题:非商业化的引擎(比如某些号称自主研发的山寨引擎)的模型编辑器往往不是很好用,而且编辑器框架定型后由于文档缺失以及代码不规范等原因,很少有公司愿意会大改这些架构。这就导致“新三年旧三年缝缝补补又三年”的局面。还有没有别的方法来解决通用建模软件到特殊3D引擎的格式转化呢?答案是有!可以在3dsmax上做二次开发,把模型编辑器的功能写成MAX的插件,这样就能在3dsmax里使用并导出成3D引擎可用的模型格式,这是一种比较友好的方案。Blizzard就为war3提供了这样一套工具——War3ArtTools。虽然Blizzard称不对这套工具提供任何技术支持,也不知道Blizzard内部是不是使用这种方案,但这套工具确实给其他游戏开发公司提供了一种思路。

    War3ArtTools是Blizzard官方发布的制作war3 model的工具集,由于年代的原因以及Blizzard并没有对这个工具集提供直接的技术支持,因此War3ArtTools只能在3dsmax4、3dsmax5上使用。win7用户肯定郁闷了。

    首先来看看War3ArtTools里都有哪些东西:

image 

    这是War3ArtTools的工具集列表,除此之外War3ArtTools包里还有一篇pdf文档、几个MAX model和几个samples。使用这套工具完全可以做出风格迥异的模型。

War3ModelExp.dle 模型导出工具

War3bmtls.dlt 材质编辑工具

War3Preview.dlu 模型预览工具

War3UserProp.dlu 自定义属性编辑工具

War3BlizardPart.dlo 粒子编辑工具

War3Ribbon.dlo 条带编辑工具

  

 

二、比例尺

    使用Max为war3制作模型,第一步要确定的是比例尺问题。在文档中一开始就给出说明,War3中一个单位等于Max中一个inch(0.0254米),也就是说在3dsmax中:

一个农民70个单位高(1.778米)

war3中最高的建筑为300个单位(7.62米)

一个寻路路径块(Pathing Cell)宽度为32个单位(0.8128米)

一个地形块(Terrain Cell 或 Terrain tile)宽度为128个单位(3.2512米)

一级悬崖(Cliff)高度为128个单位(3.2512米)

    WE编辑器和游戏中会始终以origin的位置来摆放对象,所以一般会把origin设在任务的脚底下,建筑物则设在地板上。

    模型的初始朝向则是这么规定的:3dsmax中的前视图方向就是war3中人物面对的方向,因此一般会把前视图的方向调成面向制作者。

    War3Arttools工具集中提供了预览工具,在制作过程中可以随时看到模型在游戏中的效果。这对美术来说无疑是相当方便的。不需要导出模型,然后启动游戏加载模型。模型预览工具效果如下:

image

 

 

三、模型的多边形数及模型优化

    为了让游戏能流畅的运行,游戏引擎都会对模型的多边形面数做出相应的限制,使得制作出来的模型能最大程度上利用引擎同时不会导致引擎渲染不过来。War3ArtTools定义了一个表格对各种类型模型的多边形面数、贴图大小、骨骼数和带动画的Geoset数量做出了限定,用以指导模型制作者。

image

 

 

四、材质和贴图

(1)贴图要求:贴图必须是使用diffuse color map channel,并且只能使用24bit或者32bit的tga文件。文件大小必须是2的整数次幂,最大支持512*512的贴图,长宽比最大不能超过8:1(宽长比同样不能超过8:1)。

(2)Mip levels:当处理一张纹理的mip map时,War3ArtTools统一使用简单的双线性过滤(simple bi-linear filter)。每一级mip levels是上一级的长宽的一半。导出后命名规则是在名字后加后缀及数字:“_mip1.tga”、“_mip2.tga ”

(3)材质要求:只支持自定义的Warcraft III类型和混合材质类型。一个Geometry只支持一张材质,但可以使用组合材质来实现多层效果。(这个地方我也不太理解)

(4)在贴图的alpha通道上可以绘制团队颜色(Team Color),或者为模型创建透明区域。白色(1)为完全不透明,黑色(0)为完全透明。

 

 

五、动画片断划分

    war3使用的是MAX -》 Track View中的“Note track” Key来定义每一个动画的开始和结束,同时定义时间、长度、是否循环播放等属性,最终连在一个时间轴上。比如阿尔萨斯模型上的一个Note key是这样的:

Walk
250.0
0
0.0
//KEY:
//Sequence Name
//Move Speed (0:static)
//Loop (0:loop; 1:no loop)
//Rarity (0:no rarity)

image

   

“Walk”是动画名字,War3ArtTools中对动画序列做出了一些规则限制(包括制作、命名)。

1. 每个动画的开始位置和结束位置都必须分别用相同名字的key来标识,而且这两个key之间不能用其他的“note key”。

2. 动画名由一个或者多个由空格分隔的单词构成,如果是多个,则必须用引号将动画名括起来。完整的动画名字包括primary name 和 secondary name,比如“Stand Ready”

    war3引擎内部有一套名字匹配的规则(best-match method),用来选择最佳的动画进行播放。比如一个对象进行攻击行为,这是需要播放攻击动画,在两次攻击动画中间会有一个间隙,这时引擎会尝试播放一个“Stand Ready”的动画,如果这个动画不存在,则会回退到“Stand”动画序列。引擎内的可能有多种动画组合用于播放。

    “Note track”的参数中有一项Move Speed,定义了unit的移动速度。对象的移动速度一般在250 ~ 400个单位之间(6.35 ~ 10.16米),也就是人的正常跑步速度。这个参数在War3ArtTools的预览工具中使用,游戏里不直接使用这个值。

    引用参考文献[2]:移动速度的调整关系到unit移动时是否会出现“滑步”,这个速度与动画播放速度之间要协调好。比如一个unit,根据其模型的大小基本上可以确定这个模型每跨出一步所移动的距离,也就是步长,假设为x,这样在给定的移动速度s之下,便可以计算出一秒内需要跨出s/x步,这个步数包括了左右两只脚的步数。然后再根据动画播放帧速率,在Max中默认为30帧每秒,便可以计算出一个跨步动作需要在几帧之内播完,也就是动画的播放速度应该有多快。在游戏过程中如果想要加快或减慢unit的移动速度,不仅是加减其位移的变化速度,还要让动画播放速度也做相应比例的改变,也就是让这个unit的动画在一秒内不是播放30帧,这样来避免出现滑步现象。

    动画note key还有一个叫Rarity的参数。war3的动画选择系统允许一个模型具有多个同名的动画片断,这个动画将被随机选择。Rarity就是用来调节概率的,war3规定该值的取值范围是1~9,数字越高动画被选中的概率越低。

    如上所说war3中有一套动画的选择替换规则,War3ArtTools文档中给出了详细的规则说明,有些动画是必须有的,有些动画是可选的。下面给出文档中的部分定义:

image

 

 

六、骨骼

    War3ArtTools支持MAX骨骼、几何体(Animating Geometry)和helpers作为动画的骨骼。一般使用几何体来充当骨骼。具体的制作过程不再本文的讨论范围,这里不进行展开。在制作完成后找到自定义属性面板-》Object Type -》Bone选中即可。

    需要注意的是:war3的骨骼是预先定义好的,因此制作骨骼时,骨骼的命名必须遵循一定的规定。

image

 

 

七、挂载点

    挂载点其实就是绑定在骨骼上的一些特殊定义的box。这些box不需要材质,引擎也不会对它进行渲染。制作时需要在自定义属性编辑面板上点选“Attachment Point”。

    挂载点也是事先定义好的:

image

 

八、其他

    War3ArtTools中还定义了其他一些模型细节,比如TeamColor,TeamGlow,Trees,Portrait。这些在参考文献[2]中都给出详细的说明,本文就不再做解释。

 

 

九、粒子系统

    粒子系统由于内容过多,将会写在另外一篇blog里,尽请期待!

 

 

 

References

[1] Warcraft III Art Tools Documentation

[2] http://www.cppblog.com/helloqinglan/default.html?page=3