﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-白云哥-随笔分类-WoW</title><link>http://www.cppblog.com/helloqinglan/category/11340.html</link><description>身披半件长工衣，怀揣一颗地主心</description><language>zh-cn</language><lastBuildDate>Sat, 08 Aug 2009 20:07:47 GMT</lastBuildDate><pubDate>Sat, 08 Aug 2009 20:07:47 GMT</pubDate><ttl>60</ttl><item><title>War3ArtTools学习笔记</title><link>http://www.cppblog.com/helloqinglan/archive/2009/08/09/92656.html</link><dc:creator>白云哥</dc:creator><author>白云哥</author><pubDate>Sat, 08 Aug 2009 16:45:00 GMT</pubDate><guid>http://www.cppblog.com/helloqinglan/archive/2009/08/09/92656.html</guid><wfw:comment>http://www.cppblog.com/helloqinglan/comments/92656.html</wfw:comment><comments>http://www.cppblog.com/helloqinglan/archive/2009/08/09/92656.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/helloqinglan/comments/commentRss/92656.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/helloqinglan/services/trackbacks/92656.html</trackback:ping><description><![CDATA[
<p><font size="4">&nbsp;&nbsp;&nbsp; War3ArtTools是Blizzard官方发布的制作War3 Mod的工具集，虽然其模型导出工具只支持Max4，不过我们的目的也不是为了拿它来给War3做模型。通过War3ArtTools附带的文档，了解War3制作的一些技术细节，也是很不错的。</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">&nbsp;&nbsp;&nbsp; 其实在差不多三年前历时很短的一段3D开发经历里就参考过这玩意，对照War3ArtTools的工具集及相关功能，实现了一套我们需要的美术制作工具，包括模型导出插件、专用材质编辑插件、模型预览插件，不过当时还未涉及到粒子(Partical)与带子(Ribbon)。</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">&nbsp;&nbsp;&nbsp; 闲话少说，让我们来看看War3ArtTools里空间都有哪些东西吧。</font></p> <p><font size="4"></font>&nbsp;</p> <p align="center"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="war3arttools_0" border="0" alt="war3arttools_0" src="http://www.cppblog.com/images/cppblog_com/helloqinglan/WindowsLiveWriter/War3ArtTools_A87/war3arttools_0_1.jpg" width="469" height="212"> </p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">&nbsp;&nbsp;&nbsp; 这是War3ArtTools的工具集列表，当然除此之外还有一篇pdf文档加几个max model和tga texture samples。应该来说，有了这套工具，再加上War3本身强大的Editor，完全可以做出一个全新的Mod来。</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; War3ModelExp.dle 模型导出工具</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; War3bmtls.dlt 材质编辑工具</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; War3Preview.dlu 模型预览工具</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; War3UserProp.dlu 自定义属性编辑工具</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; War3BlizardPart.dlo 粒子编辑工具</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; War3Ribbon.dlo 带子编辑工具</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">&nbsp;&nbsp;&nbsp; 要想在Max中为War3制作模型，首先第一步要确定的是比例尺问题。文档中也是一开始就说明了，War3中一个单位等于Max中一年inch(也就是0.0254米)，一个农民的身高是70个单位(也就是1.778米)，这样看来也是按照现实比例来进行设计的。然后约定了最高的建筑物大约为300个单位(约等于7.62米)，一个寻路块(Pathing Cell)宽度为32单位，而一个地形块(Terrain Cell)宽度为128单位。</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 另外在Max中做好的模型原点就是导出的对象的原点，编辑器和游戏中会始终以原点位置来摆放对象。所以一般情况下我们会把原点设在人物的脚底下，建筑物的话也就要设在地板上。</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 然后是模型的初始朝向，War3要求在Max中制作时，前视图中的模型应该正对着你。</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">&nbsp;&nbsp;&nbsp; 使用工具集中的预览工具，可以随时在制作的过程中看到游戏中的效果，这个工具对美术来说相当方便，不需要先导出，再启动游戏编辑器加载导出的模型。而且即使这样做了，有时候游戏编辑器中看到的效果与最终的游戏效果也还是有差异。这是War3ArtTools的模型预览工具的外观：</font></p> <p><font size="4"></font>&nbsp;</p> <p align="center"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="war3arttools_1" border="0" alt="war3arttools_1" src="http://www.cppblog.com/images/cppblog_com/helloqinglan/WindowsLiveWriter/War3ArtTools_A87/war3arttools_1_1.jpg" width="640" height="484"> </p> <p><font size="4"></font>&nbsp;</p> <p><font color="#004080" size="4"><strong>对贴图和材质的要求</strong></font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 贴图必须使用Diffuse Color Map Channal, 只能使用24bit或32bit的tga文件，文件大小必须是2的整数次幂，最大支持512 * 512的贴图，长宽(或宽长)比例最大不能超过8:1。</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 在贴图的alpha通道上可以绘制团队颜色(Team Color)，或者为模型创建透明区域。白色(1)为完全不透明，黑色(0)为完全透明。</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 材质类型只支持自定义的Warcraft III类型和混合材质类型。一个Geometry只支持一张材质，但可以使用组合材质来实现多层效果。</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">&nbsp;&nbsp;&nbsp; 在材质工具的参数设置中也做了一些规则限制，比如某些参数必须使用哪些项，等等。然后还有一些War3自定义的材质属性，用来实现游戏特殊需求，比如Replaceable Texture, Unshadered, No Depth Set, No Depth Test, 2-Sided, UnFogged, UnSelectable等等。</font></p> <p><font size="4"></font>&nbsp;</p> <p><font color="#004080" size="4"><strong>制作动画序列</strong></font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; War3使用Max Track View中的&#8221;Note track&#8221; Key来定义动画序列的相关属性，比如长度、时间、是不是循环播放、动画出现的概率等等，一个3ds max文件包含了该模型所有的动画序列。比如一个&#8221;Note track&#8221; key可能是这样的：</font></p> <p>&#8220;<font size="4">Stand &#8211; 2&#8221;</font></p> <p><font size="4">rantity 3</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">&nbsp;&nbsp;&nbsp; 上面的&#8221;Stand &#8211; 2&#8221;就是动画名，War3ArtTools对动画名也做了一定的规则限制。动画名由一个或多个由空格分隔的单词构成，如果有多个部分，则必须用引号将动画名括起来。完整的动画名包括主名和次名，比如&#8221;Stand Ready&#8221;。</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">&nbsp;&nbsp;&nbsp; 引擎内部有一套动画名称匹配规则，用来选择最合适的动画进行播放。比如一个对象进入攻击行为，这时要播放攻击动画，在两次攻击动画中间会有一个暂停，这时引擎会查询这个模型是否有&#8221;Stand Ready&#8221;动画序列，如果有就播放，如果没有则会回退到&#8221;Stand&#8221;动画序列，引擎内的动画规则包括各种各样可能的动画组合。</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">&nbsp;&nbsp;&nbsp; &#8220;Note track&#8221;的参数中有一项Move Speed，定义了unit的移动速度。一般的对象移动速度在250~400个单位之间，也就是6.35~10.16米之间，也是人的正常跑步速度。这个参数在War3中只是给预览工具用的，游戏中不会使用这个数据。</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 移动速度的调整关系到unit移动时是否会出现滑步，这个速度与动画播放速度之间要协调好。比如一个unit，根据其模型的大小基本上可以确定这个模型每跨出一步所移动的距离，也就是步长，假设为x，这样在给定的移动速度s之下，便可以计算出一秒内需要跨出s/x步，这个步数包括了左右两只脚的步数。然后再根据动画播放帧速率，在Max中默认为30帧每秒，便可以计算出一个跨步动作需要在几帧之内播完，也就是动画的播放速度应该有多快。</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 以后在游戏过程中如果想要加快或减慢unit的移动速度，不仅是加减其位移的变化速度，还要让动画播放速度也做相应比例的改变，也就是让这个unit的动画在一秒内不是播放30帧，这样来避免出现滑步现象。</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">&nbsp;&nbsp;&nbsp; 然后还有一个Rarity参数。当相同的动画名称出现多个时，可以用此数值来表示该动画出现的概率。也就是一个休闲站立动作美术可能做了好几种，程序在播放的时候会随机选择一种来播，随机选择的依据就从这个Rarity参数来。</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">&nbsp;&nbsp;&nbsp; War3使用的MDX模型因为实现的比较早，所以对动作制作方面的限制比较多，一些较新的技术都不能使用，比如IK与bipped动画。</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 另外每个unit必须有两个骨骼：bone_head和bone_chest，War3编辑器会用到这两个骨骼，类似的，turreted buildings必须有bone_turret骨骼。</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; Position/Rotation/Scale控制器必须使用Bezier, Linear或TCB，并且Rotation控制器两个关键帧之间的角度差必须小于90度。</font></p> <p><font size="4"></font>&nbsp;</p> <p><font color="#004080" size="4"><strong>挂载点设置</strong></font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 挂载点制作时就是绑定了一个box在骨骼上，这个box不需要设置材质，但需要在自定义属性编辑面板上标注为Attachment Point。这些box不会被渲染，在它们上也不应该有动画数据。</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 与骨骼类似，挂载点也有一些是必须定义的，如下所示：</font></p> <p><font size="4"></font>&nbsp;</p> <p align="center"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="war3arttools_2" border="0" alt="war3arttools_2" src="http://www.cppblog.com/images/cppblog_com/helloqinglan/WindowsLiveWriter/War3ArtTools_A87/war3arttools_2_1.jpg" width="644" height="191"> </p> <p><font size="4"></font>&nbsp;</p> <p><font size="4">&nbsp;&nbsp;&nbsp; 相对于目前越来越复杂的MMO来说，War3的挂载点信息还是比较少的。</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4"></font>&nbsp;</p> <p><font color="#004080" size="4"><strong>模型的优化</strong></font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; War3ArtTools定义了一个表格，指导模型制作者对各种类型的模型其面数，贴图大小，骨骼数和带动画的Geoset数量做了规定。</font></p> <p><font size="4"></font>&nbsp;</p> <p align="center"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="war3arttools_3" border="0" alt="war3arttools_3" src="http://www.cppblog.com/images/cppblog_com/helloqinglan/WindowsLiveWriter/War3ArtTools_A87/war3arttools_3_1.jpg" width="644" height="147"> </p> <p><font size="4"></font>&nbsp;</p> <p><font color="#004080" size="4"><strong>其他</strong></font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 每个unit模型可以带一个头像模型，只需要在名称后加一个_Portrait即可，另外头像模型上必须带一个摄像机。</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 小物件可以成组，这样在War3编辑器中刷小物件的时候可以随机的刷出各种物件来，只要在命名时将其名称设为一样，同时在后面加上数字即可，如ModelName0.mdx, ModelName1.mdx, &#8230;&#8230;</font></p> <p><font size="4"></font>&nbsp;</p> <p><font color="#004080" size="4"><strong>动画列表</strong></font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 如前面所说，War3中有一套动画替换规则，每个unit和building也都定义了一些动画名，有些是必须要有的，有些是可选的，美术在制作的时候必须要有的可以先做，可选动画可以在后期慢慢加入，下表是几个动画名及其描述：</font></p> <p><font size="4"></font>&nbsp;</p> <p align="center"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="war3arttools_4" border="0" alt="war3arttools_4" src="http://www.cppblog.com/images/cppblog_com/helloqinglan/WindowsLiveWriter/War3ArtTools_A87/war3arttools_4_1.jpg" width="644" height="150"> </p> <p><font size="4"></font>&nbsp;</p> <p><font color="#004080" size="4"><strong>可替换的贴图ID</strong></font></p> <p><font size="4">TeamColor</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 用于显示团队颜色，通常情况下，一个&#8221;underpainting&#8221;贴图被应用于模型的一部分或者整个模型上，并且这个贴图被设置为Team Color，然后模型的Skin再被附加一层带alpha&#8220;空洞&#8221;的贴图，通过这些&#8220;空洞&#8221;把下面的Team Color显示出来。</font></p> <p><font size="4">Team Glow</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 用Billboard实现的，可以让英雄单位或英雄所带的武器发光的一种贴图方式。</font></p> <p><font size="4">Trees</font></p> <p><font size="4">&nbsp;&nbsp;&nbsp; 被标记为Tree的可替换贴图在游戏中会被替换为适合当前tileset的Tree贴图。</font></p> <p><font size="4"></font>&nbsp;</p> <p><font size="4"></font>&nbsp;</p> <p><font color="#ff0000" size="5"><strong>注：以上内容大部分未经验证，属于个人理解，小心被误导</strong></font></p><img src ="http://www.cppblog.com/helloqinglan/aggbug/92656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/helloqinglan/" target="_blank">白云哥</a> 2009-08-09 00:45 <a href="http://www.cppblog.com/helloqinglan/archive/2009/08/09/92656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>