模型

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轴的方向是从上往下。