快轉到主要內容

Minecraft基岩版4D皮膚 & 披風 & 皮膚包製作教學

分類   遊戲攻略 Minecraft
標籤   Minecraft Skin
🗓️ 民國110年 辛丑年
✍ 切換正體/簡體字
目錄

這篇文章教你如何畫皮膚,以及製作4D皮膚模型。

皮膚(skin)的正式名稱叫做「外觀」,多個外觀組成的檔案就叫「外觀包」(skin pack)。

不管是4D還是5D皮膚,Minecraft基岩版都允許玩家自訂模型,除了像市集一樣能夠在方塊人身上增添配件外,也可以修改披風、使用更進階的.obj模型,讓玩家完全變成另一個遊戲的樣子,例如MMD的角色。

這篇文章結尾可以下載我製作的皮膚包範本,裡面包含一個普通模型(只改skin)、一個4D模型+皮膚,還有一個從MMD移植來的模型(請勿用於商業用途,並請註明作者)。

1. 了解Minecraft皮膚的格式
#

確保你已經知道怎麼 在基岩版中更改皮膚

Minecraft內建支援的是64x64像素解析度的png檔案,也就是所謂雙層皮膚,能製作帽子、外套、袖口。

使用圖片編輯器開啟檔案可以查看圖片的解析度。

因此,檔案格式或像素大小不對,Minecraft都會拒絕匯入,或者顯示錯誤。此外,如果玩家自己做模型,則皮膚的解析度就沒有限制。

以上是預設的Steve皮膚,該檔案就像是摺紙的立方體展開圖(引用自Minecraft Wiki):

看起來有點抽象,所以採用顯示玩家3D模型,並能直接在上面畫畫的軟體會比較直觀,在這個教學中,我會使用Blockbench做示範。

2. 使用Blockbench畫皮膚
#

Blockbench這個軟體能在網頁上直接使用,或者安裝到電腦。

你可以直接畫一個新的皮膚,或匯入現有的皮膚並進行編輯。

  1. 點選新建皮膚

  2. 選取要使用Steve還是Alex的模型,分辨率設64x64 (或按照你匯入的皮膚解析度做選擇)。

「材質」可以按 這裡下載Steve的檔案,然後以此為基礎進行修改。Steve皮膚的解析度是64x64。

取消勾選「動作」,勾選「貼圖圖層」。

  1. 可以開始編輯皮膚了。

右邊會有模型的部位,預設來說外層皮膚都是關閉的。點一下眼睛的圖案可以開關顯示,例如「帽子」的部位。

可善用這些功能來暫時關閉某個部位,例如畫左腳內側時暫時關閉顯示右腳。

4.按一下網格的圖案可顯示網格

皮膚外側的就是帽子、袖口部分的材質,會比玩家身體部分的材質大上一圈。點選「大綱」下面的「切換皮膚圖層」可關閉顯示。

使用筆刷開始繪製,右邊有調色盤。

此外也能夠使用油漆桶快速填充,和使用圖形工具畫圓形。

  1. 畫好皮膚後,點選左下角的皮膚,右鍵儲存檔案。

P.S. Blockbench還可按左上角「文件」,保存項目,儲存目前的專案。

這樣就完成了,匯入至Minecraft中試試!

3. 製作皮膚包
#

如果皮膚只有一個,則不需要使用到皮膚包。不過,自己做一個皮膚包,能像商城購買的皮膚包一樣能顯示一組皮膚,便於在遊戲中快速切換,而且可以自訂玩家模型。

假設我們現在已經擁有兩個不同的皮膚,我們要把他做成一個皮膚包。

註解: 以下步驟也可改用 bridge.製作,操作上比較快。

  1. com.mojangskin_packs/裡新建一個資料夾,新增manifest.json,輸入以下內容:

(兩個uuid的數值要不一樣,按這裡取得 UUID)

{
	"format_version": 2,
	"header": {
		"name": "pack.name",
		"description": "pack.description",
		"min_engine_version": [
			1,
			17,
			0
		],
		"uuid": "9c2e8104-71f9-442e-92f0-52dcf4a43338",
		"version": [
			1,
			0,
			0
		]
	},
	"modules": [
		{
			"description": "自製皮膚包範本",
			"type": "skin_pack",
			"uuid": "541c25fb-f836-4460-975c-f08732c8eef1",
			"version": [
				1,
				0,
				0
			]
		}
	]
}
  1. 再來新增記載這個皮膚包有哪些皮膚的skins.json,裡面輸入二個:
{
	"geometry": "skinpacks/skins.json",
	"skins": [
		//第一個皮膚
		{
			"localization_name": "skin1",
			//皮膚ID
			"geometry": "geometry.humanoid.custom",
			//皮膚使用的模型
			"texture": "skin1.png",
			//皮膚材質名稱
			"type": "free"
		},
		//第二個皮膚
		{
			"localization_name": "skin2",
			"geometry": "geometry.humanoid.custom",
			"texture": "skin2.png",
			"type": "free"
		}
	],
	//皮膚包名稱
	"serialize_name": "CustomSkinPack",
	"localization_name": "CustomSkinPack"
}

請注意texture的部分,這代表的是要使用的皮膚檔案名稱。

  1. 新建一個texts資料夾,裡面新增"zh_TW.lang",這個檔案代表中文語言。

輸入:

pack.name=普通皮膚包範本
pack.description=這是自製皮膚包 by Twitter@Ivon852
skinpack.CustomSkinPack=自製皮膚包
skin.CustomSkinPack.skin1=第一個皮膚
skin.CustomSkinPack.skin2=第二個皮膚
  1. 將皮膚檔案放進去,注意必須跟texture裡面所寫的,檔案名稱要一致。

可放入一張圖片,取名為pack_icon.png,當作皮膚包的圖示。

  1. 重新開啟Minecraft,應該就會在「已擁有」看到你所製作的皮膚包。

  2. 皮膚包要打包給人安裝的話,則將資料夾壓縮成.zip,然後副檔名改成.mcpack。就能像 安裝Add-On一樣匯入。可以在本文結尾下載這個普通皮膚包範本。

註解:如果要自訂披風,你不是從這裡改,而是要改資源包,請往下看。

4. 使用Blockbench建模+製作4D皮膚
#

前面說到,玩家不只改皮膚,也能自訂模型。

使用Blockbench建模,修改玩家的造型。

以下這個範例,我在預設的玩家模型上,讓玩家的雙手有額外裝備。

  1. 先用Blockbench建立一個皮膚,然後按左上角「文件」,轉換項目,選擇基岩版模型。

接著按下「文件」,項目,修改模型ID。

圖中輸入有錯,文件名和模型ID應該全部都叫做"beefist"

再對左下角的材質右鍵,按「調整大小」成128x128,這樣才有空間畫額外材質。

  1. Blockbench切換到編輯模式,點選左右手的cube,右鍵各複製一個,然後按右邊的尺寸,膨脹。

  2. 按左邊的UV,移動UV到沒有像素的材質部位。然後開始畫材質。

  1. 按左上角文件,導出,導出基岩版幾何體,取名beefist.geo.json

  2. 將畫好的皮膚也匯出,取名beefist.png

接下來,實現4D皮膚有二種方法,選擇其中一個。不管你採用哪種方法,本文結尾都可以下載到各自的範本檔案。

資源包方法
#

這個方法可以順便改披風。

首先先建模,然後:

選擇「整個取代掉」

或是只給玩家模型添加「配件」

但請注意,使用「整個取代掉」的方法,必須把你安裝的皮膚換回預設的史蒂夫,否則不會生效。

如果使用「只添加配件」方法,則你可以繼續使用自己的皮膚,如圖。

將建模匯出的模型放到資源包/resource_packs/models/entity/

材質則是放到/textures/entity/

接下來選擇其中一種方法來達成4D效果。

整個取代掉

這個方法比較簡單,直接修改玩家預設使用的模型。

缺點是無法隨便換skin。適合用於把玩家整個身體都改掉的模型,甚至能讓頭不見。

從原版範本資源包複製/entity/player.json到自己的資源包,進行如下修改:

{
  "format_version": "1.10.0",
  "minecraft:client_entity": {
    "description": {
      "identifier": "minecraft:player",
      "materials": {
        "default": "entity_alphatest",
        "cape": "entity_alphatest",
        "animated": "player_animated"
      },
      "textures": {
        "default": "textures/entity/beefist",
        //把玩家材質直接換成模型的
        "cape": "textures/entity/cape_invisible"
      },
      "geometry": {
        "default": "geometry.beefist",
        //修改玩家模型,換成beefist
        "cape": "geometry.cape"
      }
  //(下略)
  }
}
}

接著在世界中啟用資源包。

只添加配件

這個方法的原理是利用多重render_controller,達到在同一個實體上顯示多個模型的效果。

就像是市集購買的皮膚配件一樣,可以讓任何皮膚的玩家都穿戴上「配件」。

  1. 因為我這個模型只是在玩家手上加二個拳套而已,其實模型部分的史蒂夫根本不需要。所以在Blockbench其他cube全部刪除,只留下bone的資料夾,以及拳套的那二個cube。匯出模型。

  2. 然後修改player.json,插入新的material、材質、geometry、render_controller。

{
  "format_version": "1.10.0",
  "minecraft:client_entity": {
    "description": {
      "identifier": "minecraft:player",
      "materials": {
        "default": "entity_alphatest",
        "cape": "entity_alphatest",
        "animated": "player_animated",
        "beefist": "entity_alphatest"
        //添加material
      },
      "textures": {
        "default": "textures/entity/steve",
        "cape": "textures/entity/cape_invisible",
        "beefist": "textures/entity/beefist"
        //添加材質
      },
      "geometry": {
        "default": "geometry.humanoid.custom",
        "cape": "geometry.cape",
        "beefist": "geometry.beefist"
        //添加geometry
      },
      "scripts": {
        "scale": "0.9375",
        "initialize": [
          "variable.is_holding_right = 0.0;",
          "variable.is_blinking = 0.0;",
          "variable.last_blink_time = 0.0;",
          "variable.hand_bob = 0.0;"
        ],
        "pre_animation": [
          "variable.helmet_layer_visible = 1.0;",
          "variable.leg_layer_visible = 1.0;",
          "variable.boot_layer_visible = 1.0;",
          "variable.chest_layer_visible = 1.0;",
          "variable.attack_body_rot_y = Math.sin(360*Math.sqrt(variable.attack_time)) * 5.0;",
          "variable.tcos0 = (math.cos(query.modified_distance_moved * 38.17) * query.modified_move_speed / variable.gliding_speed_value) * 57.3;",
          "variable.first_person_rotation_factor = math.sin((1 - variable.attack_time) * 180.0);",
          "variable.hand_bob = query.life_time < 0.01 ? 0.0 : variable.hand_bob + ((query.is_on_ground && query.is_alive ? math.clamp(math.sqrt(math.pow(query.position_delta(0), 2.0) + math.pow(query.position_delta(2), 2.0)), 0.0, 0.1) : 0.0) - variable.hand_bob) * 0.02;",
          "variable.map_angle = math.clamp(1 - variable.player_x_rotation / 45.1, 0.0, 1.0);",
          "variable.item_use_normalized = query.main_hand_item_use_duration / query.main_hand_item_max_duration;"
        ],
        "animate": [
          "root"
        ]
      },
      "animations": {
        "root": "controller.animation.player.root",
        "base_controller": "controller.animation.player.base",
        "hudplayer": "controller.animation.player.hudplayer",
        "humanoid_base_pose": "animation.humanoid.base_pose",
        "look_at_target": "controller.animation.humanoid.look_at_target",
        "look_at_target_ui": "animation.player.look_at_target.ui",
        "look_at_target_default": "animation.humanoid.look_at_target.default",
        "look_at_target_gliding": "animation.humanoid.look_at_target.gliding",
        "look_at_target_swimming": "animation.humanoid.look_at_target.swimming",
        "look_at_target_inverted": "animation.player.look_at_target.inverted",
        "cape": "animation.player.cape",
        "move.arms": "animation.player.move.arms",
        "move.legs": "animation.player.move.legs",
        "swimming": "animation.player.swim",
        "swimming.legs": "animation.player.swim.legs",
        "riding.arms": "animation.player.riding.arms",
        "riding.legs": "animation.player.riding.legs",
        "holding": "animation.player.holding",
        "brandish_spear": "animation.humanoid.brandish_spear",
        "holding_spyglass": "animation.humanoid.holding_spyglass",
        "charging": "animation.humanoid.charging",
        "attack.positions": "animation.player.attack.positions",
        "attack.rotations": "animation.player.attack.rotations",
        "sneaking": "animation.player.sneaking",
        "bob": "animation.player.bob",
        "damage_nearby_mobs": "animation.humanoid.damage_nearby_mobs",
        "bow_and_arrow": "animation.humanoid.bow_and_arrow",
        "use_item_progress": "animation.humanoid.use_item_progress",
        "skeleton_attack": "animation.skeleton.attack",
        "sleeping": "animation.player.sleeping",
        "first_person_base_pose": "animation.player.first_person.base_pose",
        "first_person_empty_hand": "animation.player.first_person.empty_hand",
        "first_person_swap_item": "animation.player.first_person.swap_item",
        "first_person_attack_controller": "controller.animation.player.first_person_attack",
        "first_person_attack_rotation": "animation.player.first_person.attack_rotation",
        "first_person_vr_attack_rotation": "animation.player.first_person.vr_attack_rotation",
        "first_person_walk": "animation.player.first_person.walk",
        "first_person_map_controller": "controller.animation.player.first_person_map",
        "first_person_map_hold": "animation.player.first_person.map_hold",
        "first_person_map_hold_attack": "animation.player.first_person.map_hold_attack",
        "first_person_map_hold_off_hand": "animation.player.first_person.map_hold_off_hand",
        "first_person_map_hold_main_hand": "animation.player.first_person.map_hold_main_hand",
        "first_person_crossbow_equipped": "animation.player.first_person.crossbow_equipped",
        "third_person_crossbow_equipped": "animation.player.crossbow_equipped",
        "third_person_bow_equipped": "animation.player.bow_equipped",
        "crossbow_hold": "animation.player.crossbow_hold",
        "crossbow_controller": "controller.animation.player.crossbow",
        "shield_block_main_hand": "animation.player.shield_block_main_hand",
        "shield_block_off_hand": "animation.player.shield_block_off_hand",
        "blink": "controller.animation.persona.blink"
      },
      //插入新的render controller,這裡設成第三人稱才顯示
      "render_controllers": [
        {
          "controller.render.player.beefist": "!variable.is_first_person && !variable.map_face_icon"
        },
        {
          "controller.render.player.first_person": "variable.is_first_person"
        },
        {
          "controller.render.player.third_person": "!variable.is_first_person && !variable.map_face_icon"
        },
        {
          "controller.render.player.map": "variable.map_face_icon"
        }
      ],
      "enable_attachables": true
    }
  }
}
  1. 再在資源包的render_controllers資料夾,新增一個新的render_controller,叫做beefist.json :
{
  "format_version": "1.8.0",
  "render_controllers": {
    "controller.render.player.beefist": {
      "geometry": "Geometry.beefist",
      //entity/player.json所新增的geometry
      "materials": [
        {
          "*": "Material.beefist"
        }
      ],
       //entity/player.json所新增的material
      "textures": [
        "Texture.beefist"
      ]
      //entity/player.json所新增的材質
    }
  }
}

完成。

但是這裡只設定在第三人稱顯示,如果要在其他視角顯示,就請自行複製player的render controller進行細部調整吧!

請參閱NPA這個 Add-On了解這方面的問題。改用「全部取代掉」的方法,再把自己的皮膚檔案複製到這個資源包的/textures/entiy/裡面,再重新命名成steve.png即可。

另外,想改披風的話,請下載 這個資源包依樣畫葫蘆。

皮膚包方法
#

不推薦。

這個製作方法很麻煩,而且只適用Windows 10版本,Android要安裝別人修改過的apk,iOS更是不可能,而且遊戲主程式一更新就要重裝,因此不推薦。

基岩版雖允許玩家安裝皮膚包,但非市集購買的皮膚包一律只會使用史蒂夫的模型。只有從市集購買的皮膚包,才能使用自訂模型。

原理: 把做好的皮膚包取代掉系統檔案,就能夠讓皮膚包載入自訂的模型。

本文撰寫時遊戲版本為1.17.10,也許未來會開放。

  1. 將做好的模型檔案的匯出到皮膚包,改名為geometry.json。

如果有多個模型,則每個geometry之間要有逗號隔開。

在這個範例中,確保geometry的ID為geometry.beefist。

Blockbnech輸出的模型檔案結構應該長這樣:

{
	"format_version": "1.12.0",
	"minecraft:geometry": [
{
//...(中略)
}
]
}

修改成1.8.0的結構:

{
	"format_version": "1.8.0",
	"geometry.Beefist": {
		"texturewidth": 128,
		"textureheight": 128,
		"visible_bounds_width": 3,
		"visible_bounds_height": 3.5,
		"visible_bounds_offset": [0, 1.25, 0],
        "bones": [
//(中略)
]
	}
}

再將皮膚檔案放置進來。

  1. 然後在skins.json,針對這個修改過的模型,填入要使用的geometry(即模型ID):
{
	"skins": [
		//第一個皮膚
		{
			"localization_name": "Beefist",
			//皮膚ID
			"geometry": "geometry.Beefist",
			//皮膚使用的模型
			"texture": "Beefist.png",
			//皮膚材質名稱
			"type": "free"
		}
	],
	//皮膚包名稱
	"serialize_name": "Custom4DSkinPack",
	"localization_name": "Custom4DSkinPack"
}

皮膚包資料夾改名為"persona",現在資料夾應該長這樣。

  1. 下載這套軟體: [IOUnlocker](IObit Unlocker),用於修改系統檔案。

  2. 按下「添加」,找到這個persona資料夾。

該資料夾位於C:\Users\使用者名稱\AppData\Local\Packages\Microsoft.MinecraftUWPConsole_8wekyb3d8bbwe\data\skin_packs

(WindowsApp這個資料夾要調整使用者群組給權限才能開啟)

  1. 按解鎖旁邊的按鈕「解鎖&刪除」,刪除內建的皮膚包"persona"。

然後退出程式,重新開啟。

  1. 把自己做的皮膚包資料夾拖曳到「選擇的檔案&資料夾」,按下「解鎖&複製」將資料夾複製到剛剛刪除皮膚包的位置。

  2. 安裝這個 皮膚包,避免無法載入。

這個皮膚包其實就是skin_packs裡面原本的檔案,不安裝這個的話,皮膚的介面會一直處在載入畫面。

  1. 開啟遊戲,應該就會看到自己的模型了。

總結: 技術上來說,即使這樣可以讓玩家使用自訂模型,但還是做不到市集那種「自訂額外配件」。

這樣的好處大概就只有方便玩家在多個造型間切換而已,但資源包的subpack也是能達到類似效果。

5. 將obj模型做為皮膚
#

在閱讀完上一章節後,請參考以下二篇文章了解obj模型的原理。

接著參考上一章節的資源包或者皮膚包的步驟,把模型和材質檔案放進去。

6. 我製作的皮膚包範本下載
#

這些可以自由修改,但MMD模型的部分請勿隨意商用,並請註明作者。

MMD模型來源: 【Fate/MMD】BBペレちゃん【モデル配布】

作者: つみだんご

相關文章

Minecraft基岩版如何更改皮膚
分類   遊戲攻略 Minecraft
標籤   Minecraft Skin
[1.17+] Minecraft基岩版TEX-D2資源包,非官方移植版本
分類   遊戲攻略 Minecraft
標籤   Minecraft Resource Pack
【模組分享】手機版JEI,Toolbox for Minecraft: PE
分類   遊戲攻略 Minecraft
標籤   Minecraft Bedrock Android

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。