模型

From Minecraft基岩版开发Wiki

模型(Model)是Minecraft中表現物體形態結構的一種形式,用於定義模型資料的JSON稱為幾何(Geometry),幾何決定了模型以什麼的樣式呈現出來。

檔案[edit]

幾何檔案一般命名為<example>.geo.json,並存放於models資料夾。實體幾何儲存於/models/entity/路徑下,方塊幾何儲存於/models/blocks/路徑下。[注 1]

相關檔案[edit]

路徑 描述
/models/ 原版幾何檔案的儲存路徑。
/models/mobs.json 雜項幾何儲存路徑。

元件[edit]

型別 名稱 描述
字串 format_version 定義幾何資料使用的格式版本。
物件 geometry.<example> 該幾何的識別碼。在末尾加上:然後再在後面加上其他幾何的識別碼可以繼承其他幾何的資料。
物件 description 對該模型的定義描述。
型別 名稱 描述
字串 identifier 該幾何的識別碼[注 2]
浮點數 texture_width[注 3]
浮點數 texture_height[注 3]
浮點數 visible_bounds_width
浮點數 visible_bounds_height
陣列 visible_bounds_offset
物件 bones 骨骼列表。
字串 name 定義骨骼名稱。
陣列 pivot 定義元素的樞軸。
陣列 rotation 定義元素的旋轉參數。
陣列 cubes 立方體組。
陣列 origin 定義元素的頂點。
陣列 size 定義立方體尺寸。
陣列/物件[注 4] uv 定義UV的參數。
陣列 uv_size 定義UV的尺寸。
字串 material
字串 material_instance 定義材質映射面的名稱。包含三個預設值:updownsides,分別表示立方體的頂面、底面和側面。此元件用於minecraft:material_instances對指定映射面設定參數。
浮點數 inflate 定義立方體的膨脹係數。可填寫負數。
物件 locators 定位器。
字串 parent 定義父級骨骼。
布林值 neverRender
布林值 mirror 鏡像UV。
布林值 reset

骨骼[edit]

模型由骨骼(Bone)構建,每個骨骼中可包含零個或多個立方體(Cube)

樞軸[edit]

UV[edit]

UV用於定義立方體各個面使用的紋理。「U」和「V」分別代表紋理上的兩個座標軸,UV座標中U代表橫向座標上的分佈,V代表縱向座標上的分佈,在Minecraft中,座標值的單位是像素。

要選取一張圖片作為這個模型的紋理,需要UV對圖片上選取的位置進行定義並確定選取的面積。uv元件包含兩個值,第一個值表示U座標,第二個值表示V座標。確定了UV後,遊戲就會自動根據立方體展開圖以UV座標為原點,向正方向[注 5]延伸一定距離將展開圖的面積區域框選起來。

不同UV之間的框選區域可以重疊。如果UV框選到了圖片以外的區域,則會導致紋理無法正常顯示。在逐面UV中,如果將UV的框選區域設定得比立方體該面所需面積大,則紋理會被拉伸,反之則會被壓縮。

錯誤的UV尺寸
左邊為UV拉伸,右邊為UV壓縮

型別[edit]

箱型UV[edit]

箱型UV所有面的貼圖全部包含於一張圖片,每個立方體的UV以展開圖的形式加入在這張圖片中。遊戲中的實體就是使用的箱型UV。

史蒂夫外觀的箱型UV貼圖
史蒂夫外觀的箱型UV貼圖

在箱型UV中,立方體展開圖六個面的相對位置是固定的。下圖展示了這六個面的相對位置佈局:

下表列出了上方圖片的註釋含義:

註釋
Top 頂面 Bot 底面
Left 左面 Frnt 前面
Rt 右面 Bck 後面

當幾何中包含多個立方體時,例如玩家的幾何模型,這些立方體的展開圖會全部根據UV佈局於一張圖片中(淺色部分表示玩家的外層外觀):

註釋
Head 頭部 Hat 頭部外層
Body 身體 Jacket 身體外層
lArm 左手臂 lSleeve 左手臂外層
rArm 右手臂 rSleeve 右手臂外層
lLeg 左腿 lPants 左腿外層
rLeg 右腿 rPants 右腿外層

逐面UV[edit]

逐面UV可對每個面使用的貼圖進行定義。遊戲中大部分方塊就是使用的逐面UV。

紋理與材質映射[edit]

定位器[edit]

定位模型

你知道嗎[edit]

  • 原版中類似頭顱這樣的實體繪製方塊也能透過修改mobs.json檔案來改變其模型。

畫廊[edit]

註釋[edit]

  1. 方塊幾何檔案在1.16.200.52之前儲存於/models/entity/路徑下。
  2. 對幾何的基本定義既可寫成:
    {
      "format_version": "1.12.0",
      "geometry.xxx": {
        
        "bones": [
          
        ]
      }
    }
    
    也可寫成:
    {
      "format_version": "1.12.0",
      "minecraft:geometry": [
        {
          "description": {
            "identifier": "geometry.xxx",
            
          },
          "bones": [
            
          ]
        }
      ]
    }
    
  3. 3.0 3.1 可不加下劃線。
  4. 箱型UV使用陣列來定義UV逐面UV使用物件中的各種參數來定義UV。
  5. 在UV座標系中,U軸的方向是從左往右,V軸的方向是從上往下。