寫一寫在紅警2里vxl轉(zhuǎn)shp制作動畫過程中的小技巧

ICE Lab Copyright 2021,All right reserved.
前排感謝克洛瑞德曼(B站ID:阿聯(lián)UASR)在Voxelshop與MagicaVoxel上的幫助,感謝萌新(B站ID:上仙-符華)為本文演示提供的vxl素材。
注意事項:
本文需要一點PS基礎(chǔ)與一些3dsmax基礎(chǔ),當(dāng)然,對其他3D軟件或圖像處理軟件的同等功能有所了解也可以。
本文共7894字
vxl與shp(pcx),這兩者共同決定了紅警2內(nèi)的所有的美工素材。vxl作為體素文件格式,與shp這種2D素材存在著相互轉(zhuǎn)換的障礙。許多時候我們需要制作一些單位變形動畫,而這些單位往往又是vxl單位,這時候轉(zhuǎn)換vxl為shp就變得格外重要。當(dāng)然,vxl轉(zhuǎn)shp并不難,只需要用Voxel Section Editor(下文簡稱vse)的1.39版本里的3D Modelizer功能即可。不過,modder們轉(zhuǎn)vxl為shp最大的需求并不是單純做圖標(biāo)或是做碎片,而是做vxl變形成建筑或是變形成另一個單位的動畫(Ares的vxl變形成vxl時調(diào)用shp動畫的功能似乎有bug,此處待查,我不保證這句話的準(zhǔn)確性),這個過程中出現(xiàn)的問題就遠(yuǎn)比簡單的轉(zhuǎn)換來得多多了。在此本文就簡單以vxl的變形動畫為引子,聊一聊關(guān)于vxl轉(zhuǎn)shp中我認(rèn)為需要注意的一些問題與動畫制作過程中的小技巧。

一般來說vxl轉(zhuǎn)shp的步驟分為vxl端處理,3D端處理與渲染成png序列后轉(zhuǎn)換成shp這三部分,所以本文也按這些步驟的順序來逐個介紹其中我所知道的一些小技巧。
一.vxl轉(zhuǎn)通用3D格式(obj等)
一般來說,vxl轉(zhuǎn)3D會用到的方法是使用vse1.39里的3D Modelizer功能。該功能我就不再詳細(xì)介紹了,部分內(nèi)容可以看我之前發(fā)過的專欄CV3465938。但是這個功能有許多不好的地方,比如轉(zhuǎn)出的單位面數(shù)過多,轉(zhuǎn)出的單位并不像vxl那么棱角分明,貼圖過于模糊等等問題。下面我針對以上問題提出一些在實際使用中我的解決方案。
1.vxl棱角不夠分明
在vse1.39的Tools工具欄里,我們可以找到vse自帶的轉(zhuǎn)3D必備的3D Modelizer選項,然而這個選項并不是完美轉(zhuǎn)換。一方面vxl模型作為是體素模型,轉(zhuǎn)換成通用3D模型后應(yīng)該是類似mc內(nèi)方塊場景般的顆粒感,然而實際使用中轉(zhuǎn)換后的效果如下:


很明顯,轉(zhuǎn)換后的模型比原來顯得更糊了。那么有沒有辦法轉(zhuǎn)出完美vxl模型,也就是跟原版一樣棱角分明的那種呢?vse在此其實留了個后門,我們可以打開3D Modelizer的Views菜單,菜單入口樣式如下圖所示:

然后選擇這個菜單里Model Quality選項,你會發(fā)現(xiàn)一個如下的菜單。

然后你就會發(fā)現(xiàn),當(dāng)你選擇Quad Based 3D Model選項的時候,3D Modelizer的模型樣子就變成了很舒服的倒角但不模糊的樣子。

而當(dāng)你選擇那倆Very Low或者是Visible Triangle Cubes樣式的時候,vxl原本的棱角分明回來了。

然而,當(dāng)你滿懷欣喜的以為你真的能轉(zhuǎn)出這樣的模型的時候,事實卻并不是這樣。熟悉vse轉(zhuǎn)換的人都知道,打開3D Modelizer后第一個步驟便是調(diào)整貼圖格式并加入材質(zhì)效果。而這時你會發(fā)現(xiàn),如果你使用的不是Medium樣式而是Low或者Very Low樣式的話,Texture Effects的貼圖渲染區(qū)整個都灰掉了,換句話說就是你無法輸出貼圖,你輸出的模型只能是白模。

很明顯,作者功能沒做完,目前我的vse1.39.273在這里就是個未完成品??赡芎罄m(xù)vse出了新版修了這個問題,如果修了的話,vse直接轉(zhuǎn)完美vxl模型就不是夢了。(所以說vse的作者很工口,他早就想寫這個功能了,但是留個口沒寫完。等到用戶等的受不了了再放出來)
但是當(dāng)前這個問題對于我們來說并非無解。還記得VoxelShop嗎?一個為vxl導(dǎo)入MagicaVoxel提供跳板的完美軟件。VoxelShop能直接打開紅警2的vxl模型并將其轉(zhuǎn)換成vox文件。vox文件則能被MagicaVoxel讀取,而MagicaVoxel自帶obj模型導(dǎo)出功能。雖然繞了點,但是經(jīng)過這一系列的轉(zhuǎn)換,我們就可以獲取完美的3D版vxl模型。(在此感謝克洛瑞德曼(阿聯(lián)UASR)的指導(dǎo))。
只不過MagicaVoxel有個128大小限制(詳情見我之前寫的專欄CV3465938),沒有限制的0.99.5現(xiàn)在網(wǎng)上又只能找到MacOS版,同時下載官網(wǎng)的Github掛了(估計是域名沒續(xù)費),永碩網(wǎng)盤也掛了,所以目前暫時破除限制的方式是按照以下克洛瑞德曼視頻中的描述來弄。




不過u1s1,當(dāng)你的vxl考慮法線烘焙后,游戲內(nèi)顯示效果或許更接近vse轉(zhuǎn)出的模型的那種圓滑邊緣。因此用完美vxl轉(zhuǎn)obj的方法還是選擇vse的3D Modelizer的方法,兩者的選取就見仁見智了。電腦配置低的建議前者,不想費勁轉(zhuǎn)多個軟件而只想用vse搞定的建議后者。
2.vxl轉(zhuǎn)出的模型面數(shù)太高
現(xiàn)在主流的3D模型其實都是“空的”,即模型表面布滿節(jié)點,點與點之間構(gòu)建面的空心模型。然而vxl卻不是空的,它是以體素為單位的實心模型(你可以理解為單位體素內(nèi)實心且不可分),同時根據(jù)obj的轉(zhuǎn)換規(guī)則模型會以每個表面的體素的四角為點來構(gòu)筑模型。這樣往往使vxl轉(zhuǎn)換后的模型面數(shù)與點數(shù)高的離譜,尤以vse的3D Modelizer功能轉(zhuǎn)出的模型更甚,而MagicaVoxel轉(zhuǎn)換obj的面數(shù)情況則會好很多。


那么我們是否能追求極致,把面數(shù)進(jìn)一步減少呢?
在vxl轉(zhuǎn)shp上,我曾經(jīng)做了個厄普西隆縫合怪。縫合怪本身不難做,拼合模型加綁定骨架就行了。但是當(dāng)時我轉(zhuǎn)換vxl后,每個vxl轉(zhuǎn)出的模型部件都有幾十萬面,而它們拼合起來以后則形成了一個上百萬個面的怪物模型,要知道上百萬面的模型在影視級都算是精模了,無疑這讓我的電腦變得巨卡無比,我制作骨骼動作時都必須在綁定骨骼與蒙皮后單獨導(dǎo)出骨骼,再在另一個空max文件里單獨創(chuàng)立一個biped骨骼,拉完動作后用biped的腳本導(dǎo)入功能才完成了動畫制作。視頻如下:

盡管我的模型動畫與綁定是分開做的,但當(dāng)時我為了減輕電腦壓力,曾經(jīng)使用了一個方法來減少面數(shù)。
首先選中需要減面的部分,然后點擊3dsmax的工具欄框。也就是如下圖所示的這個部分。


選擇后,由于obj導(dǎo)入max的模型都是網(wǎng)格模型,我們先將其轉(zhuǎn)換為多邊形模型。

注意,這個操作與轉(zhuǎn)換為可編輯多邊形是等價的。轉(zhuǎn)換好以后,選擇建模菜單中的幾何體子菜單,點擊四邊形化全部。

然后我們就能發(fā)現(xiàn),模型的面被明顯的減少了。

與此同時,我們發(fā)現(xiàn)模型的質(zhì)量沒有明顯變化。

當(dāng)然,作為3dsmax來說,還有另一個更普遍的方法來減少面數(shù),即專業(yè)優(yōu)化(英文名ProOptimizer)修改器。

修改器初始化后,修改器設(shè)置如下圖:

大多數(shù)設(shè)置按照默認(rèn)設(shè)置即可,由于我們導(dǎo)入的模型帶有貼圖,所以別忘了勾選材質(zhì)與UV欄中的保持紋理,然后點擊計算即可得到結(jié)果,計算后我們自由設(shè)置頂點百分比,個人推薦50%左右即可,太小會失真,太大又沒意義,鑒于vxl模型的精度,保持35%-50%的頂點都是可以的。


上述演示我所用的是3D Modelizer處理的模型。MagicaVoxel處理后的模型的減面方法與之有所不同,由于MagicaVoxel軟件本身的優(yōu)化,專業(yè)優(yōu)化修改器處理會使MagicaVoxel處理后的模型產(chǎn)生嚴(yán)重的失真。

不過,石墨工具四邊形化的減面方式還是可以用的,使用石墨工具以后,我們可以在原模型的面數(shù)上減少約50%。同時石墨工具讓大量三角面合并,為之后制作動畫提供了便利。

3.貼圖轉(zhuǎn)換
熟知shp的人都知道,shp的所屬色是靠16-31號色來完成的。我們轉(zhuǎn)換vxl時vxl單位色盤自帶紅色非所屬色區(qū),很明顯,如果我們依舊按照紅色來導(dǎo)出很明顯不明智。

vxl一般很少使用綠色,所以此時我們可以將vxl所屬色改成綠色后導(dǎo)出,導(dǎo)出方式依據(jù)3D Modelizer與MagicaVoxel處理方式的不同有如下兩種修改方式:
1.3D Modelizer


2.MagicaVoxel
MagicaVoxel里可沒有所屬色這個東西,所以我們需要PS來手動修改貼圖的紅色為綠色。最方便的方法就是使用調(diào)整工具欄里的可選顏色功能,選擇顏色為紅色,修改青色-2%左右,洋紅-100%,黃色+20%左右,黑色+50%左右,然后再在矢量蒙版里選中貼圖中的橙色與黃色區(qū)選中,蒙版填充黑色將濾鏡改色效果對該區(qū)塊顏色無效化即可。


當(dāng)然,PS的功能無疑是強大的,使用PS手動調(diào)色的方法也適用于3D Modelizer法導(dǎo)出的貼圖。綠色只是一個例子,當(dāng)你的vxl含有綠色時,你也可以用上述兩種方式將所屬色變成藍(lán)色后導(dǎo)出,導(dǎo)出幀序列后,配合修改過的自定義色盤可以讓你方便把幀序列變成可用的shp,自定義色盤神器Palette Studio一般用來制作該步驟的自定義色盤。它的使用方式參考該軟件作者的聲明與我之前寫的說明書,下載地址也在作者聲明與我的說明書里有提及。


當(dāng)然,下文也會進(jìn)一步在轉(zhuǎn)換部分提到自定義色盤的制作過程。
二.轉(zhuǎn)換后的動畫制作
轉(zhuǎn)換這一初級的步驟完成以后,下一步就是做動畫了。給3D模型做動畫的教程多如牛毛,我在此針對vxl這個特殊的模型格式介紹一些特殊的技巧。
1.拆分零件做動畫
當(dāng)你成功導(dǎo)出模型后,由于我剛才介紹的空心特性,你的vxl許多實心方塊的作用在導(dǎo)入模型后都被省去了,假如你需要用到這些實心方塊的時候怎么辦呢?舉例說明,我們需要制作某個支架展開的動畫,但是支架由于導(dǎo)出的原因與原模型粘在一起。強行分開的話支架與模型貼合的部分會丟失背面貼圖。


此時我們可以在vxl層面直接解決它。我們打開部署后完全體的vxl,將其支架與車體單獨分為兩個vxl并分別用3D Modelizer分別導(dǎo)出成不同部位,這樣我們就可以得到一個支架的單獨模型,背面丟失的貼圖也因為重新生成而回來了。

這種方法適用于所有vxl動畫,只要有剛性零件需要參與運動的一律都可以拆分零件制作動畫,缺點是這個方法比較費時,需要shp制作者對vxl的編輯有一定基礎(chǔ)。
2.max內(nèi)拆分做動畫
vse的建模操作相比max是麻煩不少,大多數(shù)時候我們也不需要在vse里把部件一個個分離后制作動畫。再以支架為例,我現(xiàn)在需要制作支架的下半部分伸縮結(jié)構(gòu)的動畫,而我們現(xiàn)在擁有伸縮結(jié)構(gòu)后的模型,也就是說動畫只需要需要把模型推進(jìn)去然后反轉(zhuǎn)時間軸即可,此時最簡單的方法是在可編輯多邊形/可編輯網(wǎng)格中選中架子的下半部分,單獨將下半部分支架分離成一個部分并K幀縮進(jìn)即可。



這種方法最適合伸縮效果的制作,畢竟這種情況下將零件去vse里單獨摳出來很麻煩且不必要。
3.綁定骨骼做動畫
骨骼綁定一般在max里用來制作關(guān)節(jié)性運動,就比如雙腿,機械臂,搖桿擺臂結(jié)構(gòu)等。同時骨骼也可以用來進(jìn)行一些可以抽象為多搖桿結(jié)構(gòu)的東西比如頭發(fā)尾巴啥的。在vxl里,搖擺支架,吊車擺臂等模型最適合用骨骼綁定法來制作了。骨骼綁定的原理即是將原模型的點映射到骨骼的運動上,從而骨骼的運動能抽象原模型的運動。通過原模型自身點與骨骼對應(yīng)的權(quán)重不同從而實現(xiàn)原模型更先進(jìn)的運動方式。以下是例子:


4.動畫節(jié)奏與設(shè)計
動畫節(jié)奏與設(shè)計往往比技術(shù)更重要。為何PS拼接的建筑與原版風(fēng)格有些差距?為何自制建筑動畫總感覺有些詭異?這些問題都集中在動畫節(jié)奏與設(shè)計上。我在此提出一些我自己的思路供大家參考。
首先,既然你決定用3D軟件來做動畫效果,很多時候就沒必要讓零件運動顯得直來直去,使用一些適當(dāng)?shù)呐でc旋轉(zhuǎn)都有助于玩家增強對動畫設(shè)計的好感。

同時,并不是所有時候零件設(shè)計都能完美切合你預(yù)想中的動畫,有時候在零件設(shè)計上產(chǎn)生的錯誤,用一些適當(dāng)?shù)姆趴s或是錯位等手段是可以遮蓋住玩家對動畫合理性的疑慮。

在動畫設(shè)計節(jié)奏上,均速設(shè)計會讓人感到死板,而帶有合理加速度變動的動畫與一些彈跳功能則會使動畫顯得更富有生氣且靈動。

最后,我們可以利用一些模型內(nèi)元素來讓動畫的表現(xiàn)形式更具合理性。

三.動畫轉(zhuǎn)幀序列再轉(zhuǎn)shp
當(dāng)動畫在max里做好以后,渲染成幀序列再轉(zhuǎn)shp則是必經(jīng)之路。vxl動畫的渲染并沒有想象的那么簡單,無論是尺寸大小,渲染樣式還是最終轉(zhuǎn)換都需要注意一些必要的東西,否則做出來的效果會比較差勁。
1.場景搭建
關(guān)于vxl的燈光場景搭建,在ra2diy論壇的精華貼里mk給了一個適用于原版玩家的很好的例子。不過,vxl在游戲內(nèi)的表現(xiàn)力與vpl有關(guān),做個不那么準(zhǔn)確的解釋,vpl定義了vxl在游戲內(nèi)渲染環(huán)境的燈光參數(shù)與部分高亮色參數(shù)。當(dāng)你做的mod更改了vpl以后,vxl燈光的合理搭建則成為了渲染一個好的vxl動畫的必備步驟。適當(dāng)調(diào)節(jié)vxl燈光的曝光度能加強vxl動畫與原模型的擬真度。

一句話就是,vxl燈光場景的搭建應(yīng)匹配游戲內(nèi)效果,參考vpl效果后再考慮渲染才是良策。
2.渲染設(shè)置
shp渲染中”不與邊緣抗鋸齒處理“這個設(shè)置是每個RA2素材制作者的必修課。vxl更極端一點,因為vxl自身就是充滿了鋸齒,如果在渲染中你加入了抗鋸齒選項,反而會多此一舉。因此渲染時直接取消抗鋸齒勾選有時反而會更好。
只不過這也與你的vxl有關(guān),如果你的vxl突出像素感與顆粒感,花紋正交較多,方形點綴燈需要突出顯示則這條比較適用。但如果你的vxl需要營造弧線感,細(xì)節(jié)一般以弧形花紋為點綴而不是小燈的話,抗鋸齒選項還是勾選更佳。

無論如何,不與邊緣抗鋸齒處理這項始終要保持勾選以省去不必要的麻煩。
3.動畫尺寸與匹配
快速確定動畫尺寸與原vxl匹配是一件必要的事。由于ImageShaper無法放縮幀序列,而Shp?Builder的放縮功能又很蠢(除了硬邊緣保留這個還可以以外,Shp?Builder的非整數(shù)倍率放縮會使模型變得明顯有拉伸感與低質(zhì)感),在渲染時一步到位渲染出合理大小的幀序列無疑是更佳選擇。在此我提供一個我現(xiàn)在用到的合理辦法。
首先我會進(jìn)游戲?qū)xl在游戲內(nèi)的表現(xiàn)截圖,地板背景最好是空白且易分辨的來方便我們辨認(rèn)vxl的邊界。(海洋的藍(lán)色明顯比陸地的黃綠色好分辨,所以你可以用地圖編輯器直接把你的新單位擺海里)

然后將上述截圖的100%大小導(dǎo)入PS內(nèi),選取特征像素并用輔助線做好標(biāo)記(輔助線快捷鍵Ctrl+R,打開輔助線狀態(tài)時再次使用快捷鍵會關(guān)閉輔助線系統(tǒng))。

回到max,任意設(shè)定當(dāng)前攝像機距離下的渲染尺寸,并且得到一張背景透明的渲染圖,將其以原大小丟入PS并將一側(cè)對齊。

我此時設(shè)定的渲染大小是300*300,很明顯渲染出的圖片組比vxl在游戲內(nèi)的顯示效果大了。這時我們在PS里鎖定長寬比例放縮,直到圖像與游戲內(nèi)顯示效果幾乎重疊為止。此時記住放縮的倍率值。

根據(jù)上圖所示,我們在max所需要輸出的真實邊框長度即為300*94.78%,取整后約為283。代入檢驗后果然符合要求。

但在此時,幀序列僅僅只完成了校準(zhǔn)尺寸的步驟,我們還需要完成校準(zhǔn)shp中心的步驟才能做出合格的shp來。vxl做部署動畫一般有兩種需求。一是做單位部署成單位,比如原版武裝直升機的部署動畫;二是做單位部署成建筑,比如原版基地車展開動畫。若是單位部署成單位,則動畫中心點與vxl單位中hva的設(shè)定點對齊;若是單位部署成建筑,則動畫依據(jù)建筑尺寸按照建筑部署時單位的中心點對齊。
在此我個人推薦的做法是,首先一律按照單位部署成單位的要求來做,即動畫與絕對中心點對齊。第二將所有幀用ImageShaper制作成一個shp,然后打開Shp Builder內(nèi)的建筑網(wǎng)格功能,按照建筑網(wǎng)格的尺寸再考慮通過Resize Carvas功能與建筑中央對齊。最后再利用Shp Builder的幀移動功能,將對齊完成的shp拆成多個部分(如建造動畫,建筑本體,建筑動畫,毀壞動畫等)逐一輸出。以下是例子:


3.所屬色問題
所屬色一直是所有幀序列轉(zhuǎn)shp的通用問題。剛才我提到,所屬色需要設(shè)定成一種與模型其他部分都不一樣的顏色來方便自定義色盤導(dǎo)入。那么當(dāng)你模型處理好以后在色盤方面你需要怎么做呢?在此我繼續(xù)介紹所屬色有關(guān)的問題。
首先,建筑在拋開自定義色盤的情況下一般都使用默認(rèn)的unit系色盤,再加上vxl無法自定義色盤,所以vxl部署后的建筑一般也用默認(rèn)色盤即unit系色盤。unit色盤里雪地色盤的顏色是最多的,有些mod甚至將雪地色盤強行在所有情況下均使用。所以我在這以unitsno.pal的自定義色盤為例,展開介紹如何使用新工具Palette Studio來自定義所屬色。
使用Palette Studio打開unitsno.pal色盤原稿,我們會發(fā)現(xiàn)所屬色區(qū)是紅色階梯填充。首位是252 0 0,末位是32 0 0。

200號色也是252 0 0。很明顯,為了讓導(dǎo)入時不產(chǎn)生顏色沖突,將所屬色區(qū)換成獨一無二的顏色。同時我們不需要長亮色來加入動畫,以此減少動畫在暗光條件下部分顏色異常閃亮的問題。我們需要刪掉色盤里的常亮色區(qū)域。
所屬色更換色系在老工具Pal Editor里是個苦差事,但是在新的Pal Studio里我們只需要用梯度工具即可解決。鑒于我剛才將該vxl動畫的所屬色改成了綠色,那么此時我們需要綠色的所屬色色盤來輔助導(dǎo)入。

然后我們用252 0?252的背景紫紅色刪掉常亮色區(qū)。



另存為完成以后,使用ImageShaper制作shp時導(dǎo)入該色盤即可。
(至于原始的unitsno.pal這個色盤在哪能找到的問題,我覺得能看下去這篇文章的人應(yīng)該都懂吧,這屬于modder基礎(chǔ)知識…………(在ra2.mix的子mix—cache.mix里即可找到,mix文件用XCC Mixer打開))
四.shp最終雜談
作為一個不會vxl制作的人來說,我一直認(rèn)為vxler們在簡陋的三視圖條件下搭建立體模型挺厲害的,所以我相信vxler們學(xué)習(xí)如何將自己做的vxl轉(zhuǎn)換成shp并做一個合適的部署動畫也是易如反掌。文章的最后我提幾個可能會用到的小細(xì)節(jié),以方便各位制作shp時不必另外再尋找資料。
1.shp建筑炮臺的素材旋轉(zhuǎn)方向
建筑炮臺方向第一幀應(yīng)垂直向上,然后沿中軸逆時針旋轉(zhuǎn)。一般炮臺為32向。以每個方向單幀的炮臺為例,前32幀為本體,后32幀是影子。

2.shp建筑炮臺的初始方向
建筑建造后炮臺初始部署方向為右上角(詳見原版巨炮建造動畫)

3.shp建筑影子完整性
shp單位需要完整影子,因為shp單位本體可以在圖層上高于影子。但shp建筑的影子繪制高度高于本體,所以shp建筑一定不能做完整影子否則會出現(xiàn)影子前置錯位bug。

4.建造動畫的推薦大小與幀數(shù)。
如果是vxl單位部署成建筑的話,建造動畫(部署動畫)一般不要超過50幀,最好不要超過100幀。50-100幀可能會出現(xiàn)ini寫對了但游戲內(nèi)不顯示的問題。100幀以上該問題發(fā)生概率會幾乎100%(有人說絕對不能超過100幀,但我做建造動畫的時候超過了一次100幀還成功了的例子。只是再想復(fù)制一次就很難了,哪怕我對那個shp刪掉2幀,那個shp也不再顯示了,有點玄學(xué))。
(玄學(xué):建筑大小似乎與建造動畫長度有關(guān),越大的建筑使用長建造動畫越不容易出bug,但是1*1的小建筑使用50幀以外的長建造動畫就容易出毛?。?/p>
建造動畫最好與建筑本身素材尺寸一致。否則可能會造成建筑缺角或是建造動畫無法顯示或顯示不全。(做紅警2mod的不罵個西木**那還能算modder?)

如果部署成單位的話似乎沒限制(待查),但是你確定真要做個一千幀動畫折磨玩家?
文章最后希望各位讀者看完本文后能入門vxl轉(zhuǎn)shp后做部署動畫的能力,在此我也提前祝各位讀者春節(jié)快樂,萬事如意。