跳转至

材质

材质(Material)是Minecraft基岩版资源包中用于定义渲染阶段配置的资源类型。材质决定模型在渲染时使用的着色器、渲染状态和顶点输入布局,是纹理与几何体能够被正确绘制的关键环节。

概述

材质定义文件位于资源包的materials/目录,扩展名通常为.material。实体和附着物不会直接写入底层着色器路径,而是先在客户端实体定义中声明材质短名称,再由渲染控制器通过Material.前缀进行选择。

材质本身不描述“使用哪张纹理”,而是描述“如何渲染”。纹理选择通常由客户端实体定义与渲染控制器完成。

主要作用

材质主要用于统一描述以下内容:

  • 着色器入口与渲染变种。
  • 渲染状态,例如混合、剔除、深度写入。
  • 顶点字段布局与采样器状态。
  • 某些渲染功能开关,例如覆盖色或UV动画相关定义。

与渲染控制器的关系

渲染控制器中的materials字段负责将骨骼映射到材质短名称。引擎渲染骨骼时,会先匹配到对应材质,再结合纹理与几何体完成最终绘制。因此,材质是渲染控制器资源组合链中的核心节点之一。

实体局部发光、半透明等效果通常同时依赖“正确的材质类型”与“正确的纹理内容”。仅替换纹理而不调整材质,往往无法得到预期结果。

旧版着色器文件

RenderDragon不兼容

本节所述的着色器机制与RenderDragon渲染引擎不兼容。在1.16.200及以后版本的Windows和主机设备,以及1.18.30及以后版本的其他设备上,此类自定义着色器均无法生效。

在RenderDragon引入之前,.material文件可以通过vertexShaderfragmentShader字段直接引用自定义着色器源文件,实现光影级别的视觉效果修改。着色器文件分为glsl/hlsl/两个目录;要在所有设备上生效,需同时用两种语言编写。

.material文件中与着色器相关的通用字段如下:

字段 说明
vertexShader 顶点着色器路径,相对于hlsl/glsl/目录,HLSL文件会自动追加.hlsl后缀
fragmentShader 片段着色器路径,规则与vertexShader相同
vertexFields 传递给顶点着色器的字段数组,通常从原版材质复制
variants 材质变种定义数组
+defines 向着色器源码追加的#define指令数组
-defines 从继承材质中移除的#define指令数组
+states 启用的渲染状态数组,如BlendingDisableDepthWrite
+samplerStates 纹理采样方式定义数组,包含samplerIndextextureFilter等字段
msaaSupport 多重采样抗锯齿支持设置
blendSrc 颜色源混合因子
blendDst 颜色目标混合因子

材质支持继承,使用冒号语法(如entity_alpha:entity_base)声明父材质,子材质会继承父材质的所有字段并按需覆盖或追加。

材质系统在不同渲染时代存在明显差异。旧版社区部分可行做法在RenderDragon渲染路径下可能失效,或仅在特定版本、特定平台生效。维护跨版本内容时,应始终以目标版本的内容日志和实际设备测试结果为准。

质量分级控制文件

在旧版着色器系统中,materials/目录可包含以下质量分级配置文件:

:file-type-sad.json:{ title="" }json
低画质分级的材质覆盖定义,对应游戏画面设置中的"低"档位。
:file-type-fancy.json:{ title="" }json
高画质分级的材质覆盖定义,对应游戏画面设置中的"高"或以上档位。
:file-type-common.json:{ title="" }json
所有质量等级共用的通用材质定义。

+states可选值

+states字段用于启用渲染状态,其可选值如下:

说明
EnableAlphaToCoverage 启用Alpha覆盖度(MSAA环境下将Alpha值映射为覆盖率)
Blending 启用Alpha混合
DisableAlphaWrite 禁止写入Alpha通道
DisableColorWrite 禁止写入颜色通道
DisableRGBWrite 禁止写入RGB通道(允许写入Alpha)
DisableDepthWrite 禁止写入深度缓冲
DisableDepthTest 关闭深度测试
DisableCulling 禁用面剔除(双面渲染)
InvertCulling 反转剔除方向(渲染背面)
Wireframe 线框模式渲染
StencilWrite 启用模板缓冲写入
EnableStencilTest 启用模板测试

混合因子可选值

blendSrcblendDst字段控制Alpha混合的源因子与目标因子。常见可选值如下:

说明
Zero 因子为0
One 因子为1
SourceColor 使用源片段的颜色值
OneMinusSourceColor 使用1 - 源颜色
DestColor 使用目标缓冲区的颜色值
OneMinusDestColor 使用1 - 目标颜色
SourceAlpha 使用源片段的Alpha值
OneMinusSourceAlpha 使用1 - 源Alpha
DestAlpha 使用目标缓冲区的Alpha值
OneMinusDestAlpha 使用1 - 目标Alpha
SourceAlphaSaturate 取源Alpha与1 - 目标Alpha中的较小值

启用混合时,游戏默认使用blendSrc: SourceAlphablendDst: OneMinusSourceAlpha的标准Alpha混合模式。

+samplerStates详情

+samplerStates字段为数组,每项描述一个采样器。常用字段如下:

字段 说明
samplerIndex 采样器索引,通常为0(漫反射纹理)或1(自发光/叠加纹理)
textureFilter 纹理过滤模式
textureWrap 纹理寻址模式

textureFilter可选值:

说明
Point 邻近点采样,无过滤(像素风格)
Bilinear 双线性过滤
Trilinear 三线性过滤(含Mipmap混合)
MipMapBilinear Mipmap双线性过滤
MipMapLinear Mipmap线性过滤
TexelAA 纹素抗锯齿过滤
PCF 百分比邻近过滤(主要用于阴影贴图)

textureWrap可选值:

说明
Repeat 平铺重复(默认)
Clamp 边缘拉伸(夹紧)
Mirror 镜像重复
Border 超出范围使用边框颜色(不常用)
MirrorOnce 仅镜像一次后夹紧

msaaSupport可选值

msaaSupport字段控制材质在多重采样抗锯齿(MSAA)环境下的行为:

说明
NonMSAA 仅在非MSAA渲染路径中使用此材质变体
MSAA 仅在MSAA渲染路径中使用此材质变体
Both 在所有路径中通用(默认)

primitiveMode可选值

primitiveMode字段指定几何体的图元装配方式:

说明
TriangleList 三角形列表(默认,每三个顶点组成一个独立三角形)
TriangleStrip 三角形条带
LineList 线段列表
Line 线段条带
QuadList 四边形列表(每四个顶点组成一个四边形)

原版材质列表

以下列出基岩版中供附加包引用的原版材质标识符及其已知属性。可在客户端实体定义中直接引用这些标识符名称。由于材质系统在RenderDragon时代经历了较大变化,部分材质在新渲染路径下的具体表现可能与早期测试结果存在差异,建议实际使用时在目标设备上验证效果。

行为不稳定

材质系统不适合轻率使用。部分材质可能导致崩溃、内容日志报错或加载缓慢。强烈建议自行实验并以实际设备测试结果为准。

材质标识符 主要属性
alpha_block 背面剔除、完全不透明
alpha_block_color 背面剔除、Alpha通道(半透明)
banner 无特殊属性(透明物体后方渲染不稳定)
banner_pole 背面剔除、透明效果(透明物体后方渲染不稳定)
beacon_beam 完全不透明
beacon_beam_transparent Alpha通道(后方粒子呈"正面剔除"效果)
charged_creeper 自发光、固定透明度(透明物体后方渲染不稳定)
conduit_wind 透明效果、Alpha通道(半透明)
entity 完全不透明、背面剔除
entity_alphablend 背面剔除、Alpha通道(透明物体后方渲染不稳定)
entity_alphablend_nocolorentity_static 未知属性,可能导致崩溃
entity_alphatest 透明效果、Alpha通道(半透明)
entity_alphatest_change_color 透明效果、Alpha通道(不透明)
entity_alphatest_change_color_glint 未知属性
entity_alphatest_glint 未知属性
entity_alphatest_glint_item 未知属性
entity_alphatest_multicolor_tint 灰度处理、背面剔除、透明效果(不透明)
entity_beam 透明效果、Alpha通道(半透明)
entity_beam_additive 透明效果、自发光、背面剔除、固定透明度(始终渲染在最上层)
entity_change_color 完全不透明
entity_change_color_glint 未知属性
entity_custom 背面剔除、Alpha通道(透明物体后方渲染不稳定)
entity_dissolve_layer0 未知属性(透明物体后方渲染不稳定)
entity_dissolve_layer1 未知属性
entity_emissive 自发光、完全不透明、背面剔除
entity_emissive_alpha 自发光、Alpha通道、透明效果
entity_emissive_alpha_one_sided 自发光、Alpha通道、透明效果、背面剔除
entity_flat_color_line 背面剔除、完全不透明
entity_glint 未知属性
entity_lead_base Alpha通道(透明物体后方渲染不稳定)
entity_loyalty_rope 未知属性
entity_multitexture 未知属性
entity_multitexture_alpha_test 未知属性
entity_multitexture_alpha_test_color_mask 未知属性
entity_multitexture_color_mask 未知属性
entity_multitexture_masked 未知属性
entity_multitexture_multiplicative_blend 未知属性
entity_nocull 完全不透明(无背面剔除)
guardian_ghost 未知属性
item_in_hand 完全不透明、背面剔除
item_in_hand_entity_alphatest 透明效果、Alpha通道(半透明)
item_in_hand_entity_alphatest_color 未知属性
item_in_hand_glint 未知属性
item_in_hand_multicolor_tint 灰度处理、背面剔除、透明效果
map 未知属性
map_decoration 未知属性
map_marker 未知属性
moving_block 完全不透明
moving_block_alpha Alpha通道(半透明)
moving_block_alpha_seasons Alpha通道(半透明)
moving_block_alpha_single_side 背面剔除、Alpha通道(半透明)
moving_block_blend 混合透明
moving_block_double_side 完全不透明(无背面剔除)
moving_block_seasons 完全不透明
opaque_block 完全不透明、背面剔除
opaque_block_color 完全不透明、背面剔除(带颜色叠加)
opaque_block_color_uv2 完全不透明、背面剔除(带颜色叠加及UV2)