材料

Materials,实体在资源包中的的重要部分之一
材料文件都被放置在资源包根目录的materials文件夹内,这些文件后缀名为“.entity”,实质上是一个json格式的文件

总览

材料用于指定渲染游戏不同部分的着色器文件,以及着色器应为每个元素的状态和设置。目前,游戏中的大部分内容都是经过硬编码形式以使用特定的材料,并且可能不会分配新的材料。更改这些元素的唯一方法是直接编辑它们的材质(可能也会对其他元素产生影响)。允许分配、删除默认或自定义材料的唯一功能是实体和粒子效果。

语法结构

大多数材料都继承了先前定义的材料的设置(底板材料),然后进一步构建它们。
基本格式:

    "新材料ID:底板材料ID": {  //注意,这不是命名空间与ID!
    	//定义、状态、设置定义
    },

一些物料文件包含大量的物料分支树。例如,几乎所有默认实体使用的材料最终都是entity.material文件中材料“ entity_static”为基础。
以下是村民的材料:

    "villager_v2_masked:entity_multitexture_masked": {
      "depthFunc": "LessEqual"
    },

我们可以看到材料的名称为“ villager_v2_masked”,并且它是基于“ entity_multitexture_masked”材料的。
可以找到“ entity_multitexture_masked”材料,它继承了“ entity_alphatest”的设置并在其上进一步构建:

    "entity_multitexture_masked:entity_alphatest": {
      "+defines": [
        "MASKED_MULTITEXTURE"
      ],
      "+samplerStates": [
        {
          "samplerIndex": 0,
          "textureWrap": "Clamp"
        },
        {
          "samplerIndex": 1,
          "textureWrap": "Clamp"
        }
      ]
    },

然后可以在“ entity_alphatest”中发现又是基于“ entity_nocull”

    "entity_alphatest:entity_nocull": {
      "+defines": [ "ALPHA_TEST" ],
      "+samplerStates": [
        {
          "samplerIndex": 1,
          "textureWrap": "Repeat"
        }
      ],
      "msaaSupport": "Both"
    },

剩下的也是同理,就不解释了

    "entity_nocull:entity": {
      "+states": [ "DisableCulling" ]
    },
    "entity:entity_static": {
      "+defines": [ "USE_OVERLAY" ],

      "msaaSupport": "Both"
    },

entity_static没有冒号被其他材料跟随,表明它是该继承树的底部。

    "entity_static": {
      "vertexShader": "shaders/entity.vertex",
      "vrGeometryShader": "shaders/entity.geometry",
      "fragmentShader": "shaders/entity.fragment",
      "vertexFields": [
        { "field": "Position" },
        { "field": "Normal" },
        { "field": "UV0" }
      ],
      "variants": [
        {
          "skinning": {
            "+defines": [ "USE_SKINNING" ],
            "vertexFields": [
              { "field": "Position" },
              { "field": "BoneId0" },
              { "field": "Normal" },
              { "field": "UV0" }
            ]
          }
        },
        {
          "skinning_color": {
            "+defines": [ "USE_SKINNING", "USE_OVERLAY" ],
            "+states": [ "Blending" ],
            "vertexFields": [
              { "field": "Position" },
              { "field": "BoneId0" },
              { "field": "Color" },
              { "field": "Normal" },
              { "field": "UV0" }
            ]
          }
        }
      ],
      "msaaSupport": "Both",
      "+samplerStates": [
        {
          "samplerIndex": 0,
          "textureFilter": "Point"
        }
      ]
    },

材料预设

*请前往>API文档>其它文档>材料 查看