[SceneKit專題]19-MagicaVoxel的使用,3D體素網格建模

蘋果API搬運工發表於2017-12-25

說明

本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會

此書對應的程式碼地址

SceneKit系列文章目錄

MagicaVoxel 是個很棒的3D內容建立工具,因為它是免費的! 你可以從這裡下載ephtracy.github.io

注意: 1. MagicaVoxel for Mac 啟動後可能是黑屏,啥都沒有,什麼都點不了?把軟體MagicaVoxel.app先拖出資料夾,再放回去應該就好了

  1. 如果出現"App can't be opened" ,開啟終端,嘗試以下命令: chmod +x [directory]/MagicaVoxel-mac.app/Contents/MacOS/MagicaVoxel

WX20170820-133653@2x.png

介面從左到右分別為:

  • Color Palette調色盤:可以點選選擇整個範圍內的顏色.還可以從正正方選擇自定義顏色.
  • Brush筆刷:選擇筆刷模式.可選模式包括V (Voxel), F (Face), B (Box), L (Line), C (Center) and P (Pattern).還可以用當前筆刷選擇動作模式,Attach新增, Erase擦除, Paint上色 或 Move移動.
  • View Options檢視設定:該區域在在筆刷下方.可以設定不同的顯示設定,如DG (Display Ground顯示地面), SW (Display Shadow顯示陰影), BG (Display Background顯示背景), Grid (Display Grid顯示網格), Edge (Display Edges顯示邊緣) and Frame (Display Frame顯示框架-大網格)
  • Editor編輯器:體素創作區.可以用滑鼠控制導航顯示.右鍵旋轉,滾輪縮放,左鍵選擇.編輯區最上方可以命名.編輯區右上方還可以設定體素創作的尺寸.
  • Edit Options編輯設定:右邊第二列.Zero清空模型, Fill用相同顏色填充, Full設為完整狀態. Rotate旋轉, Flip對稱翻轉Loop沿座標軸旋轉.
  • File Options檔案設定:最右一列.你可以Load, Save, Save As, Duplicate甚至Delete體素模型和圖案.
  • Export Options輸出設定:在檔案設定的正方.展示所有可用的輸出格式.

建立體素模型

建立一個新模型

先給自己建立一個空白的工作臺. 在右側的檔案設定裡選擇New來建立一個新模型.設定體素模型規格尺寸為9 9 9 ,然後點選編輯設定下面的Zero來清空整個模型:

WX20170820-143032@2x.png

在編輯區頂部命名這個模型為MrPig,並按回車.當提示儲存時選擇save:

WX20170820-143044@2x.png

建立基礎層

我們將從建立小豬身體的基礎層開始. 從左側的顏色皮膚中選擇合適的顏色. 按B來設定筆刷為Box Mode,然後按T來選擇Attach. 移動位置到(x: 1, y: 7, z: -1).左鍵單擊並按住,拖拽到(x: 7, y: 7, z: -1).到位後釋放,就得到了一個一體素高的基礎層:

WX20170820-143059@2x.png

拉伸基礎層

更改筆刷型別,按F來切換到Face Mode,同時確認Attach仍然是被選中的. 左鍵單擊基礎層的頂部平面並向上拉伸一個體素高.重複操作直到基礎層有6體素高:

WX20170820-143111@2x.png
可以點選檢視設定中的Grid來幫忙看清尺寸.

建立頭部

現在建立頭部. 更改筆刷模式,按B回到Box Mode,同時確保Attach仍是被選中的. 從(x: 2, y: 6, z: 5)位置開始.單擊並拖動到(x: 6, y: 4, z: 5):

WX20170820-143127@2x.png

建立鼻子

從左側皮膚中選擇深粉紅色. 使用和上一步一樣的筆刷設定,從(x: 2, y: 1,z:3)到 (x:6,y:1,z:1)建立一個盒子:

WX20170820-143140@2x.png

雕刻鼻孔和眼睛

更改筆刷模式,按V切換到Voxel Mode,然後按R選擇Erase. 擦除鼻子上的兩個鼻孔,參考下面的圖片:

WX20170820-143154@2x.png
分隔他的兩個眼睛:
WX20170820-143213@2x.png

建立尾巴

選中和前面鼻子一致的深粉紅色. 將小豬沿y軸旋轉180度,讓後面顯示出來. 仍然是Voxel Mode,按T來選擇Attach模式,從(x: 4, y: 7, z: 2)開始建立一條螺旋狀的尾巴,如下圖:

WX20170820-143227@2x.png
完成後,再沿y軸旋轉180度,讓前面顯示出來.

新增耳朵

選中和前面一致的深粉紅色. 按1來開啟x軸對稱.你會注意到映象X按鈕處於開啟狀態.現在你在一邊所做的所有的操作會自動映象到另一邊. 開始一個體素一個體素建立耳朵,會看到另一隻耳朵也在同時建立.參考下面的圖片:

WX20170820-143239@2x.png
WX20170820-143250@2x.png

新增腿

目前,小豬是處於邊界的底部,所以你需要將他向上移動來騰出空間給他的腿. 你可以進入Move Mode並向上拖拽模型,或按住Command鍵並向上拖拽也可以. 向上旋轉小豬,露出他的腹部. 用同樣顏色和筆刷設定,並確保沿x軸映象模式仍然是開啟狀態. 開始建立他的後腿,然後是前腿.參考下面的圖片:

WX20170820-143302@2x.png
WX20170820-143314@2x.png

最後著色

只剩下著色了. 按G進入Paint Mode. 從左側顏色皮膚中選擇白色,在眼睛位置單擊著色.完成後,再選擇黑色給瞳孔著色:

WX20170820-143327@2x.png
接著,轉動小豬,讓他正面對著你. 將他的耳朵和鼻孔塗成黑色,如下:
WX20170820-143348@2x.png

匯出體素模型

模型已建立完成,但SceneKit並不支援MagicaVoxel的原生格式 .vox.幸運的是還可以將模型輸出為常見的 .obj格式. .obj格式是Wavefront Technologies開發的開放標準幾何體定義,並被很多3D創作工具支援. 從MagicaVoxel中輸出體素模型易如反掌.

以.obj格式輸出體素模型

小豬還需要一個敵人-小狼.

WX20170820-144903@2x.png

resources資料夾下,你會找到MrWolf.vox檔案.複製到Applications/MagicaVoxel/vox,然後在MagicaVoxel中開啟.

載入完成後,可以以特定格式輸出了. 要輸出為 .obj格式,只需單擊Export區域的obj就可以了.

WX20170820-144916@2x.png

輸入檔名,選擇輸出路徑,其餘保持預設,點選 save.

WX20170820-144927@2x.png
可以在Applications/MagicaVoxel/export/ 下找到輸出的檔案了.同時在你專案的resources資料夾下也會有一個複本.
WX20170820-144939@2x.png
共輸出了三個不同的檔案:

  • MrWolf.mtl: 這是一個材料庫檔案,包含了顏色定義,紋理和反射貼圖.
  • MrWolf.obj:這是Wavefront的 .obj檔案,包含體素模型的幾何體資訊.
  • MrWolf.png:這是你體素模型的漫反射紋理貼圖,它包含了你在模型中用到的所有顏色.

匯入體素模型

現在已經輸出了模型,可以匯入到Xcode中了,然後轉換為合適的SceneKit場景檔案.

匯入.obj到Xcode

WX20170820-145750@2x.png
選中MrWolf.objMrWolf.png,並拖拽到Xcode專案的MrPig.scnassets資料夾下.

將.obj轉換為.scn

選中MrPig.scnassets資料夾下的MrWolf.obj檔案.模型是全黑色的,不要緊,我們馬上修復它. 在選單設定裡找到Editor,然後選擇Convert to SceneKit file format (.scn):

WX20170820-145805@2x.png

這裡提示,你可以選擇建立一個原始 .obj檔案的複本,或者用轉換後的 .scn 版本替換原來的檔案.選擇Convert繼續:

WX20170820-145821@2x.png

MrWolf.obj檔案已經轉換為合適的 MrWolf.scn檔案了.

選中場景中的小狼節點,開啟材料檢查器.更改Lighting model光照模型Lambert並更改Diffuse確保它使用了MrWolf.png 作為紋理:

WX20170820-145835@2x.png

配置體素模型

在節點檢查器中,更改IdentityMrWolf.並更改縮放為(x: 0.08, y: 0.08, z: 0.08).這樣的縮放讓他和小豬有了相同的尺寸:

WX20170820-150055@2x.png
切換到物理檢查器,更改物理形體的TypeKinematic:
WX20170820-150113@2x.png
設定Category mask為2,Collision mask為-1.更改Physics Shape的Type 為Bounding Box並設定Scale為0.05,這樣碰撞幾何體更貼緊小狼的形體了.
WX20170820-150137@2x.png

你可以在projects/final/ Mr.Pig/ 下面找到完成版.

挑戰

再來點小挑戰吧! 將小狼新增到遊戲中,並讓他繞著樹林追尾巴.準備好了麼?別擔心,這裡有些小提示可以幫你. 選中MrWolf.scn並做點改變:

  • 給MrWolf建立一個父節點並命名為RunningWolf.
    WX20170820-150335@2x.png
  • MrWolf沿x軸偏移4個單位.然後新增一個Rotate Action到父節點,旋轉-90度並無限迴圈. 當你點選play按鈕時,小狼將會跑一個大圈.
    WX20170820-150351@2x.png
  • 最後,新增一個MrWolf.scn的引用到GameScene.scn.將他放置在(x: 0, y: 0, z: -17)位置上.
    WX20170820-150407@2x.png
    執行遊戲,就能看到小狼繞著樹林追尾巴了.

相關文章