材料
即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文档>其它文档>材料 查看