War3ArtTools是Blizzard官方發布的制作War3 Mod的工具集,雖然其模型導出工具只支持Max4,不過我們的目的也不是為了拿它來給War3做模型。通過War3ArtTools附帶的文檔,了解War3制作的一些技術細節,也是很不錯的。
其實在差不多三年前歷時很短的一段3D開發經歷里就參考過這玩意,對照War3ArtTools的工具集及相關功能,實現了一套我們需要的美術制作工具,包括模型導出插件、專用材質編輯插件、模型預覽插件,不過當時還未涉及到粒子(Partical)與帶子(Ribbon)。
閑話少說,讓我們來看看War3ArtTools里空間都有哪些東西吧。
這是War3ArtTools的工具集列表,當然除此之外還有一篇pdf文檔加幾個max model和tga texture samples。應該來說,有了這套工具,再加上War3本身強大的Editor,完全可以做出一個全新的Mod來。
War3ModelExp.dle 模型導出工具
War3bmtls.dlt 材質編輯工具
War3Preview.dlu 模型預覽工具
War3UserProp.dlu 自定義屬性編輯工具
War3BlizardPart.dlo 粒子編輯工具
War3Ribbon.dlo 帶子編輯工具
要想在Max中為War3制作模型,首先第一步要確定的是比例尺問題。文檔中也是一開始就說明了,War3中一個單位等于Max中一年inch(也就是0.0254米),一個農民的身高是70個單位(也就是1.778米),這樣看來也是按照現實比例來進行設計的。然后約定了最高的建筑物大約為300個單位(約等于7.62米),一個尋路塊(Pathing Cell)寬度為32單位,而一個地形塊(Terrain Cell)寬度為128單位。
另外在Max中做好的模型原點就是導出的對象的原點,編輯器和游戲中會始終以原點位置來擺放對象。所以一般情況下我們會把原點設在人物的腳底下,建筑物的話也就要設在地板上。
然后是模型的初始朝向,War3要求在Max中制作時,前視圖中的模型應該正對著你。
使用工具集中的預覽工具,可以隨時在制作的過程中看到游戲中的效果,這個工具對美術來說相當方便,不需要先導出,再啟動游戲編輯器加載導出的模型。而且即使這樣做了,有時候游戲編輯器中看到的效果與最終的游戲效果也還是有差異。這是War3ArtTools的模型預覽工具的外觀:
對貼圖和材質的要求
貼圖必須使用Diffuse Color Map Channal, 只能使用24bit或32bit的tga文件,文件大小必須是2的整數次冪,最大支持512 * 512的貼圖,長寬(或寬長)比例最大不能超過8:1。
在貼圖的alpha通道上可以繪制團隊顏色(Team Color),或者為模型創建透明區域。白色(1)為完全不透明,黑色(0)為完全透明。
材質類型只支持自定義的Warcraft III類型和混合材質類型。一個Geometry只支持一張材質,但可以使用組合材質來實現多層效果。
在材質工具的參數設置中也做了一些規則限制,比如某些參數必須使用哪些項,等等。然后還有一些War3自定義的材質屬性,用來實現游戲特殊需求,比如Replaceable Texture, Unshadered, No Depth Set, No Depth Test, 2-Sided, UnFogged, UnSelectable等等。
制作動畫序列
War3使用Max Track View中的”Note track” Key來定義動畫序列的相關屬性,比如長度、時間、是不是循環播放、動畫出現的概率等等,一個3ds max文件包含了該模型所有的動畫序列。比如一個”Note track” key可能是這樣的:
“Stand – 2”
rantity 3
上面的”Stand – 2”就是動畫名,War3ArtTools對動畫名也做了一定的規則限制。動畫名由一個或多個由空格分隔的單詞構成,如果有多個部分,則必須用引號將動畫名括起來。完整的動畫名包括主名和次名,比如”Stand Ready”。
引擎內部有一套動畫名稱匹配規則,用來選擇最合適的動畫進行播放。比如一個對象進入攻擊行為,這時要播放攻擊動畫,在兩次攻擊動畫中間會有一個暫停,這時引擎會查詢這個模型是否有”Stand Ready”動畫序列,如果有就播放,如果沒有則會回退到”Stand”動畫序列,引擎內的動畫規則包括各種各樣可能的動畫組合。
“Note track”的參數中有一項Move Speed,定義了unit的移動速度。一般的對象移動速度在250~400個單位之間,也就是6.35~10.16米之間,也是人的正常跑步速度。這個參數在War3中只是給預覽工具用的,游戲中不會使用這個數據。
移動速度的調整關系到unit移動時是否會出現滑步,這個速度與動畫播放速度之間要協調好。比如一個unit,根據其模型的大小基本上可以確定這個模型每跨出一步所移動的距離,也就是步長,假設為x,這樣在給定的移動速度s之下,便可以計算出一秒內需要跨出s/x步,這個步數包括了左右兩只腳的步數。然后再根據動畫播放幀速率,在Max中默認為30幀每秒,便可以計算出一個跨步動作需要在幾幀之內播完,也就是動畫的播放速度應該有多快。
以后在游戲過程中如果想要加快或減慢unit的移動速度,不僅是加減其位移的變化速度,還要讓動畫播放速度也做相應比例的改變,也就是讓這個unit的動畫在一秒內不是播放30幀,這樣來避免出現滑步現象。
然后還有一個Rarity參數。當相同的動畫名稱出現多個時,可以用此數值來表示該動畫出現的概率。也就是一個休閑站立動作美術可能做了好幾種,程序在播放的時候會隨機選擇一種來播,隨機選擇的依據就從這個Rarity參數來。
War3使用的MDX模型因為實現的比較早,所以對動作制作方面的限制比較多,一些較新的技術都不能使用,比如IK與bipped動畫。
另外每個unit必須有兩個骨骼:bone_head和bone_chest,War3編輯器會用到這兩個骨骼,類似的,turreted buildings必須有bone_turret骨骼。
Position/Rotation/Scale控制器必須使用Bezier, Linear或TCB,并且Rotation控制器兩個關鍵幀之間的角度差必須小于90度。
掛載點設置
掛載點制作時就是綁定了一個box在骨骼上,這個box不需要設置材質,但需要在自定義屬性編輯面板上標注為Attachment Point。這些box不會被渲染,在它們上也不應該有動畫數據。
與骨骼類似,掛載點也有一些是必須定義的,如下所示:
相對于目前越來越復雜的MMO來說,War3的掛載點信息還是比較少的。
模型的優化
War3ArtTools定義了一個表格,指導模型制作者對各種類型的模型其面數,貼圖大小,骨骼數和帶動畫的Geoset數量做了規定。
其他
每個unit模型可以帶一個頭像模型,只需要在名稱后加一個_Portrait即可,另外頭像模型上必須帶一個攝像機。
小物件可以成組,這樣在War3編輯器中刷小物件的時候可以隨機的刷出各種物件來,只要在命名時將其名稱設為一樣,同時在后面加上數字即可,如ModelName0.mdx, ModelName1.mdx, ……
動畫列表
如前面所說,War3中有一套動畫替換規則,每個unit和building也都定義了一些動畫名,有些是必須要有的,有些是可選的,美術在制作的時候必須要有的可以先做,可選動畫可以在后期慢慢加入,下表是幾個動畫名及其描述:
可替換的貼圖ID
TeamColor
用于顯示團隊顏色,通常情況下,一個”underpainting”貼圖被應用于模型的一部分或者整個模型上,并且這個貼圖被設置為Team Color,然后模型的Skin再被附加一層帶alpha“空洞”的貼圖,通過這些“空洞”把下面的Team Color顯示出來。
Team Glow
用Billboard實現的,可以讓英雄單位或英雄所帶的武器發光的一種貼圖方式。
Trees
被標記為Tree的可替換貼圖在游戲中會被替換為適合當前tileset的Tree貼圖。
注:以上內容大部分未經驗證,屬于個人理解,小心被誤導