小屋創作

日誌2017-07-06 23:19

【Minecraft PE】ModPE的模型轉Add-ons的可能構想

作者:ivon852

大家好,我是Ivon。

自Add-ons正式推出(2016/10)到現在半年來,如我所見,還沒有一個能為Add-ons做模型的圖像化軟體。

不過,最近有一套叫做Cubik Studio的付費電腦軟體宣布支援Add-ons的模型編輯。

我實際詢問推出過侏儸紀公園、跑車等許多精緻Add-ons的Gonza,他的回覆是「憑空想像」。


至於BlockLauncher 的ModPE(.js),製作模型已經行之有年(教學見此文),且ModPE有對特定召喚出來的生物改外形的方法(Add-ons現行改生物外形比較類似材質包,一旦改了,全部那種生物的外形都會跟著變化)
建模使用的是Windows的Techne,配合Anti推出的Techne Porter,可以轉成ModPE的模型碼。
Techne Porter用法教學見此

如果說目前迫切需要,又沒有想像力的話,那麼就試著來對ModPE的模型碼動手腳吧,看看能不能把他們轉成PE版的程式碼。



首先先認識構成ModPE模型的基本要素,上方的Blogger連結已經有寫,而Techne Porter只能選定全部轉成body。
以下我的轉換器構想也是這樣,不過你可以分開轉以達到分散各部件的效果。

首先認識一下構成Add-ons模型的要素:
{
"geometry":{} ←標示這是什麼生物,bones的上一層。
"bones":[] Minecraft Wiki寫是骨頭,陣列裡下轄身體的各部件,如head、body之類。
"texturewidth": ←皮膚的寬度
"textureheight": ←皮膚的高度
}

在bones裡面,每個部件可以看到定義方法為

{
"name":"head": ←部件名
"pivot":[] ←這個裡面的座標表該部件應以哪個點做旋轉。
"cubes":[] ←加入此部件的模型塊。

以下的屬性可以不用寫出來。

"rotation":[] ←旋轉模型。
"mirror":Boolean ←未知
"reset": Boolean ←調用模型時才有效,會把調用過來的模型部份重設
"neverRender":Boolean ←未知,通常用在帽子的部件。
}


接著看看cubes裡是如何添加模型塊的(12~14行):
{
"origin": [] ←模型塊的起始點
"size": [] ←模型塊的長寬高
"uv": [] ←該模型塊材質的座標
}


知道了之後拿來跟ModPE的程式碼做一些比較:

1.Add-ons各部件的名稱對應ModPE的modelPart。
2.origin對應addBox的前三個數字;size對應addBox的後面倒數三個數字;uv對應setTextureOffset。


3.Add-ons的Y座標起始點和ModPE的座標起始點相反、Y座標生成方向相反。
ModPE的長寬高允許負值(雖然Techne跟Add-ons不允許),方塊自起始點往下生成。
X座標負就是往左,正就是往右;Y座標負就是往上,正就是往下;Z座標負就是往前,正就是往後。
Add-ons只有Y值相反而已,且方塊生成是往上。


以下是我的推導過程,覺得麻煩就跳下一段吧。



知道了這個,我們就能加以利用。
當然不是叫你手動轉換,下面我使用程式來轉換大量的程式碼。
而且第3點是令人頭大的問題。
如果直接轉換,整個模型就會上下顛倒,畢竟二者的Y座標規則不一樣。

因為我的程式碼僅是把ModPE對應的部件抓出來填入一組又一組的cubes而已。

你可能會想到,可以使用rotate轉過來不是?是可以x座標填180讓模型上下翻轉。
不過,是「模型」上下翻轉,TextureOffset可不會跟著轉,這樣就變成材質上下顛倒了。
僅僅把座標正負顛倒也是不行的。

所以在轉換過程中需要想個算法,讓我們可以把ModPE的東西轉成Add-ons的規則。

我在讀取模型碼時,我把對應的值都存入oArr的陣列,因此下圖,我使用二個迴圈變數讀取,i奇數行讀TextureOffset,j偶數行讀addBox。(注意陣列是從0開始算)
陣列裡j的0~2表起始座標、3~5表長寬高;i的0~1即為TextureOffset。

在40行~47行,我的算法是:

原本Y座標是負的轉成正,新的座標為轉正的減掉Y高度。
相反,原本Y座標是正的轉成負,新的座標為轉負的減掉Y高度。

轉完之後,第48行我再將Y座標加26增加一點高度(不見得需要)



這個程式就是這樣。
由於我不會用BlockLauncher以外的程式編譯,所以我寫的這個js是要用BlockLauncher才能執行。
而操作過程有點不人性化。

JS下載

使用方法為:
首先,Techne Porter轉換後的檔案只需要留下addBox和TextureOffset的部份。
Techne Porter有一個bug,每行後面會多一個「);」需要把他們刪到每行都只剩一個。

1.導入前,在games/com.mojang/下新增「convert」資料夾。
2.convert資料夾裡面新增一個convert.txt。
3.該檔案裡面放入ModPE的模型程式碼。
注意,按目前我的寫法,格式必須得是下圖這樣,奇數行為TextureOffset,偶數行為addBox。且部件全為「body」。


4.啟用本js,幾秒後會生成一個output.txt在同一個目錄下。
生成的這個檔案,末尾會多一個逗號,記得刪掉。
然後把它貼到mobs.json你想要的bones的部件的cubes裡。
相較於官方的原始檔案,使用本js輸出的沒有任何排版。
如果你要再轉換一次,刪掉output.txt,再重新導入本js(轉換時會有提示出現)



目前這個算法我自己測試沒有什麼問題,不過有些材質好像還是會相反。
而且不是用Techne做的模型也不清楚能不能這樣轉,當然你也能自行把程式碼改成你需要的樣子。


分享一下之前做的零戰52型甲,沒有很細緻。


0

0

LINE 分享

相關創作

自製Minecraft手機/基岩版模組作品集

2個簡單的開區域服APP

【Minecraft PE】Ivon的仿古地圖: 水獺式建築+地板門陷阱

留言

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】