【歌姬計(jì)劃MEGA39+】導(dǎo)入Comfy制作的自制譜 ② 補(bǔ)充
2023.11.24:
增加如何使用Krita制作圖標(biāo)的方法,如果你找不到Photoshop我現(xiàn)在更建議使用Krita,Krita比GIMP小巧很多,也有類似PS的剪貼蒙版的功能
這篇專欄會補(bǔ)充②里面沒有說明的添加小圖標(biāo),已經(jīng)轉(zhuǎn)換xml格式的spr_db時(shí)可能遇到的坑要怎么判斷
添加小圖標(biāo)
所需圖片處理工具:Krita或者GIMP或者Photoshop(CS6版本就行,不一定非要最新的版本)
Photoshop:自己找,找不到就老實(shí)用Krita或者GIMP
Krita:https://krita.org/zh/download-zh/
GIMP:https://www.gimp.org/downloads/
導(dǎo)出小圖標(biāo)素材
首先使用 MikuMikuModel 打開MEGA39+的小圖標(biāo)文件(spr_sel_pvtmb.farc)
(網(wǎng)盤里也會有份簡中版的小圖標(biāo)文件)

在 Textures 里面選一張圖(建議使用這種有九個(gè)格子的,方便以后自己要加新歌的時(shí)候直接在一張圖里塞九個(gè)),然后右鍵選擇 export flipped 選擇素材圖將其導(dǎo)出并上下翻轉(zhuǎn)
(如果你使用的 Miku Miku Model 是舊版可能就只有 export 選項(xiàng),這個(gè)不會有太大影響,你只需要在 GIMP/Photoshop 里面將圖片垂直翻轉(zhuǎn)即可)

接下來就需要對素材進(jìn)行編輯,我會分別說明GIMP和Photoshop需要怎么操作
修改小圖標(biāo)原素材圖
Photoshop:
將導(dǎo)出的素材圖從photoshop里面打開(拖入也可以打開,不過cs6版本因?yàn)橄到y(tǒng)兼容問題,不能拖入導(dǎo)入)

然后選擇 置入 將你打算用來制作小圖標(biāo)的圖導(dǎo)入(也可以直接拖入窗口導(dǎo)入,但cs6版本同樣由于兼容性問題,win10不能拖入導(dǎo)入)


按下 保持長寬比 按鈕激活,將圖片縮放到一個(gè)合適的大?。梢韵襁@樣放到小圖標(biāo)一側(cè)做參考對比)

調(diào)整好后選擇工具欄的 鼠標(biāo)圖樣 的按鈕切換到 移動工具 導(dǎo)入小圖標(biāo)素材,隨后在彈出的窗口里選擇 置入

在 圖層 區(qū)找到我們導(dǎo)入的素材右鍵,選擇?柵欄化圖層 以便于我們直接使用 剪貼蒙版

接著右鍵選擇 創(chuàng)建剪貼蒙版 ,素材就會自動根據(jù)透明區(qū)裁剪素材(如圖)

選中我們導(dǎo)入的小圖標(biāo)素材所在的圖層,調(diào)整小圖標(biāo)位置


調(diào)整好后選中素材所在圖層,利用 矩形選擇工具 將不需要的部分刪除
注意:一定要確認(rèn)選擇的是小圖標(biāo)素材所在的圖層再進(jìn)行操作

最后選擇 垂直翻轉(zhuǎn)畫布 ,將修改好的小圖標(biāo)保存為png文件


Krita:
在Krita里面打開導(dǎo)出的圖,然后將要制作小圖標(biāo)的圖拖進(jìn)窗口,選擇 插入為 - 新圖層

選中我們要制作小圖標(biāo)的圖層,利用圖層里面的縮放圖層調(diào)整大小,這里不需要根據(jù)圖標(biāo)位置縮放,只是為了更方便我們后面的操作先提前縮小一點(diǎn),可以像gif里面一樣把最大的值調(diào)整為100%縮放

選中所有圖層,使用 圖層編組 將其放到同一個(gè)圖層組里面

選擇我們導(dǎo)入的小圖標(biāo)模板,在右鍵菜單選擇 透明度通道操作→ 拆分透明度到蒙版 拆分出透明度蒙版,然后將透明度蒙版放到圖層組最下方

選擇我們導(dǎo)入的小圖標(biāo)圖層,調(diào)整位置和大小到你打算使用的小圖標(biāo)位置

需注意調(diào)整圖層位置要使用?移動圖層 工具

使用 選區(qū) 工具,將多余的地方刪除

最后在上方的 圖形 菜單 垂直翻轉(zhuǎn)圖xiang,然后保存為PNG即可
GIMP:
由于 GIMP 沒有Photoshop 的 剪貼蒙版 功能,操作起來會相對麻煩點(diǎn)
首先在GIMP中打開導(dǎo)出的圖,然后將做小圖標(biāo)的圖拖進(jìn)窗口導(dǎo)入

右鍵要制作成小圖標(biāo)的圖層,選擇 縮放圖層 調(diào)整圖層圖片大小,設(shè)置好數(shù)值后按下 縮放 就能看到縮放后的效果。如果覺得縮的太小可以按下 Ctrl + Z 撤銷縮放操作

如果你覺得填像素值不夠直觀也可以選擇 percent 修改為百分比縮放模式調(diào)整


縮放完后我們先關(guān)閉素材圖層顯示便于在原素材圖上畫一個(gè)新的選區(qū),按下眼睛按鍵即可關(guān)閉圖層顯示

右鍵我們導(dǎo)出的素材圖所在圖層,選擇 添加圖層蒙版

設(shè)置初始化圖層蒙版為 圖層的 Alpha 通道然后點(diǎn)擊添加,這樣GIMP就會根據(jù)哪些區(qū)域是透明區(qū)域創(chuàng)建一個(gè)黑白的蒙版

你也可以右鍵圖層選擇 顯示圖層蒙版 查看

關(guān)閉 顯示圖層蒙版 ,使用 模糊選擇?工具點(diǎn)擊你要把小圖標(biāo)放到的格子那創(chuàng)建一個(gè)選區(qū)
注意:一定要在選中了 圖層蒙版(也就是選中這個(gè)圖層多出來黑白部分) 后再使用 模糊選擇 工具

恢復(fù)小圖標(biāo)素材圖層顯示,點(diǎn)擊 移動工具 按鈕切換狀態(tài),根據(jù)選區(qū)框調(diào)整小圖標(biāo)位置

右鍵 小圖標(biāo)素材 圖層,選擇 創(chuàng)建圖層蒙版,然后設(shè)置為 選區(qū) 后 點(diǎn)擊添加

效果如下

最后 豎直翻轉(zhuǎn) 后保存為PNG格式


這里按了導(dǎo)出后會讓你選一些選項(xiàng),不用管直接選導(dǎo)出即可

至此我們的小圖標(biāo)的素材圖就完成了
將新的小圖標(biāo)添加回Frac
回到我們的?MikuMikuModel,打開spr_sel_pvtmb.farc
首先添加一個(gè)新的Texture,右鍵 Texture Set?選擇Import導(dǎo)入我們剛制作好的修改版小圖標(biāo)素材


根據(jù)?Texture Set?里面的名字規(guī)律修改新導(dǎo)入的圖的Name(應(yīng)該不難看懂吧,如圖)

這樣我們就成功導(dǎo)入了素材圖,接下來我們需要為我們的自制譜添加對應(yīng)的小圖標(biāo) 精靈,也就是 sprite
往上翻對著bin右鍵選擇 Add dummy sprite(添加空白的精靈)添加一個(gè)新的sprite

新添加的sprite名字默認(rèn)都是dummy,應(yīng)該都不難找到

根據(jù)你的自制譜的id修改name,比如我的id是998,就需要把Name改名為998。注意如果是兩位數(shù)應(yīng)該寫為0xx這樣子的格式,一位數(shù)則是00x

接著修改 Texture index 和 Resolution mode,第二個(gè)和前面一樣直接改成 HDTV1080,第一個(gè)則是根據(jù)你新導(dǎo)入的 Texture 在 Texture set 里面是第幾張來決定,例如我導(dǎo)入的圖按順序是第五張,也就是 5 - 1 = 4,這里要填 4

X 和 Y 代表 Sprite 要引用?Texture 的部分圖片的左上角坐標(biāo),這個(gè)先不管
Width 和 Height 代表 sprite 引用的圖片部分的長寬,小圖標(biāo)默認(rèn)都是 Width 128 ,Height 64
填好后切換下 sprite 后重新查看,就可以看見我們新加的 sprite 已經(jīng)可以顯示圖片了

回到 X?和 Y 參數(shù),我們可以考慮抄官方的數(shù)據(jù)來定位,這也是為什么我推薦選擇這種 3 * 3 方格的素材圖的原因:可以用來一次性在一個(gè)Texurte 里面導(dǎo)入 9 個(gè)新的小圖標(biāo),要記住這9個(gè)圖標(biāo)的坐標(biāo)也不會很難記憶
這九個(gè)圖標(biāo)的 X 和 Y起始規(guī)律如下:
第一行的 Y 坐標(biāo)是 2,下一行基于上一行的 Y 坐標(biāo)加 68,也就是說第二行 Y 坐標(biāo)是 70,第三行 Y 坐標(biāo)是 138
第一列的 X 坐標(biāo)是2,下一列基于上一列的 X?坐標(biāo)加?132,也就是說第二列?X?坐標(biāo)是?134,第三列?X?坐標(biāo)是 266
這里我選擇的位置是第一行 第一列,所以這里 X 和 Y 都填的 2

最后保存,F(xiàn)rac部分修改就完成了
題外話:如果你想添加多個(gè)圖標(biāo),可以考慮在一個(gè) Texture 里面放多個(gè)小圖標(biāo),然后在Script里引用對應(yīng)的Texture,設(shè)置好 X 和 Y 的起始坐標(biāo)即可
編寫mod_spr_db添加數(shù)據(jù)到數(shù)據(jù)庫
首先使用 DatabaseConverter 轉(zhuǎn)換mega39+的spr_db,然后右鍵編輯搜索?SPR_SEL_PVTMB ,將與?SPR_SEL_PVTMB 所在的? <SpriteSetInfo> 全部都復(fù)制下來

如果你覺得這么多要尋找結(jié)尾很麻煩,并且你使用的是我在前面提過的三個(gè)編輯器中的任意一個(gè),可以先將其折疊,然后再復(fù)制
vscode是這樣子復(fù)制

notepad++則是這樣子(注意光標(biāo)必須在下一行起始位置往上拉)

將這部分粘貼到mod_pv_db里面,注意要粘貼到 <SpriteSets>?標(biāo)簽里面,或者粘貼到任意一個(gè) </SpriteSetInfo> 標(biāo)簽下面(因?yàn)?<SpriteSetInfo> 標(biāo)簽在我們之前寫的時(shí)候是一定會在?<SpriteSets>?標(biāo)簽里面的,可以降低錯誤率)

在 </Sprites> 標(biāo)簽里面給我們新加的小圖標(biāo)添加信息,復(fù)制一份 <Sprites>?標(biāo)簽里面的? <SpriteInfo> 標(biāo)簽粘貼到后面準(zhǔn)備修改

現(xiàn)在開始填寫新添加的 sprite 信息:
<Id>:sprite 編號,只要不和其他 db 里面的 Id 重復(fù)你想寫多少都可以(不過不能超過2,147,483,647)。
<Name>: sprite 的名字,具體是怎么寫的這里不詳細(xì)解釋,你只需要記住你添加的小圖標(biāo) sprite?名字的數(shù)字是多少,然后修改 <Name> 標(biāo)簽里面的數(shù)字即可(比如我的是998,這里 <Name> 我就改成了 SPR_SEL_PVTMB_998)
<Index>:索引,不用管具體是啥意思,按前面的數(shù)字順序 +1 寫就行了,同樣的<Index>里面的數(shù)值也不能重復(fù)
修改完后大概是這樣子:

這樣子sprite的數(shù)據(jù)信息就添加好了
接下來添加 Texture 的數(shù)據(jù)信息,與?Sprites 類似,在</Textures> 里面復(fù)制一段?<SpriteTextureInfo> 標(biāo)簽的內(nèi)容為添加 Texture 數(shù)據(jù)信息做準(zhǔn)備

現(xiàn)在開始填寫新添加的 Texture 信息:
<Id>:Texture?編號,只要不和其他?db?里面的?Id?重復(fù)你想寫多少都可以(不過不能超過2,147,483,647)。
<Name>: Texture?的名字,如果你有好好按我教程寫的法子命名,那就直接根據(jù)名字差異修改最后面的數(shù)字即可,比如教程里新加的 Texture 最后的數(shù)字是 4,就把最后面的 3 改成 4 即可
<Index>:索引,不用管具體是啥意思,按前面的數(shù)字順序 +1 寫就行了,同樣的<Index>里面的數(shù)值也不能重復(fù)
修改完后大概是這樣子:

最后保存修改好的xml,使用?DatabaseConverter 轉(zhuǎn)換回去,小圖標(biāo)就添加好了

擴(kuò)展:怎么理解DatabaseConverter的報(bào)錯信息
有時(shí)候可能會遇見轉(zhuǎn)換xml回去的時(shí)候發(fā)現(xiàn) DatabaseConverter 只閃了一下黑窗就關(guān)閉了,同時(shí)也沒生成bin文件
這種情況極有可能是你寫的db信息缺失了什么 結(jié)束標(biāo)簽,但因?yàn)楹诖瓣P(guān)的太快,所以我們可以利用批處理弄個(gè)簡易的 “DEBUG” 模式出來
首先在你的?DatabaseConverter 文件夾里創(chuàng)建一個(gè)新的txt文件打開編輯,將下面的內(nèi)容復(fù)制進(jìn)去:

cd /d %~dp0
DatabaseConverter.exe %1
pause

保存,然后將txt后綴名改為bat,這樣子一個(gè)簡易的 “DEBUG” 模式就弄出來了
現(xiàn)在把報(bào)錯的xml文件拖到bat上面轉(zhuǎn)換看看(這里我隨便改了個(gè)肯定會報(bào)錯的xml出來做參考)

注意看 異常 那一行:他寫著 開始標(biāo)記 與 結(jié)束標(biāo)記 不匹配,說明我們可能復(fù)制漏了啥
我們使用編輯器轉(zhuǎn)到報(bào)錯顯示的1433行看看:

可以看到這里很明顯少了?<SpriteTextureInfo>?的結(jié)束標(biāo)簽?<\SpriteTextureInfo>,我們把它添加回去保存就能處理好這個(gè)問題(如圖)

以上只是異常情況中的一種,實(shí)際情況需要對db有一定熟練度才能更準(zhǔn)確的判斷