手冊:材質

出自Minecraft基岩版开发Wiki

在原版附加包中,大部分的材質可以透過資源包materials資料夾中的.material副檔名檔案來定義。該檔案的程式碼遵循JSON的語法格式,僅僅是副檔名較為特殊。這些檔案本是為HAL繪製引擎而設計的,不過在RenderDragon繪製引擎更新後也可在一定限制下(如不可自訂宏定義)適用於RenderDragon。不同附加包定義的同名.material檔案在遊戲引擎載入時會按順序合併而不會互相覆蓋。

檔案格式[編輯]

  • :一個.material檔案。
    •  version:該材質檔案的格式版本,目前最新為1.0.0,不填寫時預設為0.0.0
    •  <material_name>[:<inherited_material_name>]:一個材質。

材質格式[編輯]

材質欄位的格式由格式版本控制。

該格式版本下允許欄位繼承。

  •  <material_name>[:<inherited_material_name>]:一個材質,可以使用:繼承另一個材質。
    •  states:定義了該材質的繪製狀態列表,決定了該材質提供的功能。該欄位的前綴會影響該欄位的繼承型別。此時不加入前綴,為替換模式,將替換掉所繼承的材質中所有的繪製狀態。
    •  +states:定義了該材質相比於所繼承的材質新增加的繪製狀態列表。此時前綴為+,為增加模式,只有在 states欄位不存在時才會解析,先於 -states的解析。
    •  -states:定義了該材質相比於所繼承的材質要刪去的繪製狀態列表。此時前綴為-,為刪去模式,只有在 states欄位不存在時才會解析。
      • :一個繪製狀態。如果在所有 [+-]states解析結束時列表中存在EnableAlphaToCoverage繪製狀態,將自動為該材質加入ALPHA_TO_COVERAGE宏定義,該操作先於 [+-]defines的解析。
    •  vertexShader:定義了該材質的頂點著色器路徑,格式通常為shaders/<shader_name>.vertex。引擎會為GFX API插入中間值和追加後綴,對於HLSL,會在shaders後插入/hlsl,並在檔案末追加.hlsl副檔名以構成完整路徑;對於GLSL,會在shaders後插入/glsl以構成完整路徑。該追加操作適用於以下所有型別的著色器路徑。
    •  fragmentShader:定義了該材質的片元著色器路徑,格式通常為shaders/<shader_name>.fragment
    •  geometryShader:定義了該材質的幾何著色器路徑,格式通常為shaders/<shader_name>.geometry
    •  vrGeometryShader:定義了該材質的VR幾何著色器路徑,格式通常為shaders/<shader_name>.geometry
    •  defines:定義了該材質使用的宏定義列表,用於配合啟動或切換著色器程式碼中的特定部分。該欄位的前綴會影響該欄位的繼承型別。此時不加入前綴,為替換模式,將替換掉所繼承的材質中所有的宏定義。
    •  +defines:定義了該材質相比於所繼承的材質新增加的宏定義列表。此時前綴為+,為增加模式,只有在 defines欄位不存在時才會解析,先於 -defines的解析。
    •  -defines:定義了該材質相比於所繼承的材質要刪去的宏定義列表。此時前綴為-,為刪去模式,只有在 defines欄位不存在時才會解析。
    •  depthFunc:該材質的深度模板測試中使用的深度函式,是一個比較函式,負責源深度值與深度緩衝區比較。
    •  depthStencilFaceName:該材質的模板測試中使用的面的名稱,目前為一個占位符。
    •  frontFace:該材質正面的模板測試。
      •  stencilFunc:該材質正面的模板函式,是一個比較函式,負責模板參考值與模板緩衝區比較。
      •  stencilFailOp:該材質正面的模板失敗操作,是一個模板操作,在模板測試失敗時執行。
      •  stencilDepthFailOp:該材質正面的深度失敗操作,是一個模板操作,在模板測試透過但深度測試失敗時執行。
      •  stencilPassOp:該材質正面的模板透過操作,是一個模板操作,在模板測試與深度測試皆透過時執行。
    •  backFace:該材質背面的模板測試。
      •  stencilFunc:該材質背面的模板函式,是一個比較函式,負責模板參考值與模板緩衝區比較。
      •  stencilFailOp:該材質背面的模板失敗操作,是一個模板操作,在模板測試失敗時執行。
      •  stencilDepthFailOp:該材質背面的深度失敗操作,是一個模板操作,在模板測試透過但深度測試失敗時執行。
      •  stencilPassOp:該材質背面的模板透過操作,是一個模板操作,在模板測試與深度測試皆透過時執行。
    •  stencilRefOverride:該材質的模板測試中是否使用參考值覆寫,如果為真,將使用 stencilRef的值為模板測試參考值,預設為假。
    •  stencilRef:該材質的模板測試的參考值覆寫,接受非負整數。存在該欄位時 stencilRefOverride預設為真。
    •  stencilReadMask:該材質的模板測試的讀取掩碼,會在模板測試比較前與參考值進行按位與運算,接受非負整數。
    •  stencilWriteMask:該材質的模板測試的寫入掩碼,會在模板測試比較後與參考值進行按位與運算,接受非負整數。
    •  blendSrc:顏色混合前源顏色需要採取的操作,是一個混合目標,預設為SourceAlpha
    •  blendDst:顏色混合前緩衝區中的目標顏色需要採取的操作,是一個混合目標,預設為OneMinusSrcAlpha
    •  alphaSrc:透明度混合前源顏色需要採取的操作,是一個混合目標,預設為One
    •  alphaDst:透明度混合前緩衝區中的目標顏色需要採取的操作,是一個混合目標,預設為OneMinusSrcAlpha
    •  samplerStates:定義了該材質使用的紋理採樣狀態列表,用於組態紋理的過濾與折繞。該欄位的前綴會影響該欄位的繼承型別。此時不加入前綴,為替換模式,將替換掉所繼承的材質中所有的紋理採樣狀態。
    •  +samplerStates:定義了該材質相比於所繼承的材質新增加的紋理採樣狀態列表。此時前綴為+,為增加模式,只有在 samplerStates欄位不存在時才會解析。
    •  -samplerStates:紋理採樣狀態列表的刪去功能尚不可用,該欄位此時為占位符。
      •  [0-7]:一個紋理採樣狀態。一個材質最多只支援存在8個紋理採樣狀態。
        •  samplerIndex:採樣索引,代表第幾張紋理。
        •  textureFilter紋理過濾模式,決定源紋理與實際顯示的縮放過的紋理間點的映射關係。
        •  textureWrap紋理折繞模式,決定了紋理的UV超過[0,1]時折行或環繞的模式。
        •  shaderStage著色器階段
        •  comparisonFunc比較函式
    •  vertexFields:該材質使用的頂點場列表,用於決定該材質繪製時網格的每個頂點都存有何種資訊。
    •  depthBias:該材質光柵化時使用的深度偏差。
    •  slopeScaledDepthBias:該材質光柵化時使用的斜率縮放深度偏差。
    •  depthBiasOGL:OpenGL平台上該材質光柵化時使用的深度偏差。
    •  slopeScaledDepthBiasOGL:OpenGL平台上該材質光柵化時使用的斜率縮放深度偏差。
    •  msaaSupport:材質光柵化時是否支援多重採樣抗鋸齒(MSAA),支援的值見MSAA支援
    •  primitiveMode:該材質的基本圖元模式,預設為TriangleList
    •  renderTargetFormats:該材質的繪製目標格式列表。
      • :一個繪製目標格式列表。
    •  isAnimatedTexture:該材質的繪製目標是否是動態紋理。
    •  varients:定義了該材質的變體,變體會繼承本體定義的所有屬性,並支援覆寫、加入或刪去一些屬性。該欄位的前綴會影響該欄位的繼承型別。此時不加入前綴,為替換模式,將替換掉所繼承的材質中所有變體。
    •  +varients:定義了該材質相比於所繼承的材質新增加的變體。此時前綴為+,為增加模式,只有在 states欄位不存在時才會解析。
    •  -varients:變體的刪去功能尚不可用,該欄位此時為占位符。
    •  varient:相當於 varients
    •  +varient:相當於 +varients
    •  -varient:相當於 -varients
      • :變體列表中的一個元素。
        •  <variant_name>:一個變體,變體列表中每個元素只允許定義一個變體,最終變體的可以用於引用的完整名稱將為<material_name>.<variant_name>

列舉[編輯]

繼承型別[編輯]

繼承型別列舉
鍵名 介面字串 描述
Subtract 0 - 刪去
Add 1 + 增加
Replace 2 空字串 替換

繪製狀態[編輯]

繪製狀態列舉
鍵名 值(BIN) 介面字串 國際版 中國版 描述
None 0 0000 0000 0000 0000 N/A N/A
DisableDepthTest 1 0000 0000 0000 0001 DisableDepthTest 可用 可用
Blending 2 0000 0000 0000 0010 Blending 可用 可用
DisableCulling 4 0000 0000 0000 0100 DisableCulling 可用 可用
DisableColorWrite 8 0000 0000 0000 1000 DisableColorWrite 可用 可用
DisableAlphaWrite 16 0000 0000 0001 0000 DisableAlphaWrite 可用 可用
DisableDepthWrite 32 0000 0000 0010 0000 DisableDepthWrite 可用 可用
StencilWrite 64 0000 0000 0100 0000 StencilWrite 可用 可用
InvertCulling 128 0000 0000 1000 0000 InvertCulling 可用 可用
EnableStencilTest 256 0000 0001 0000 0000 EnableStencilTest 可用 可用
EnableAlphaToCoverage 512 0000 0010 0000 0000 EnableAlphaToCoverage 可用 可用
Wireframe 1024 0000 0100 0000 0000 Wireframe 可用 可用
PolygonOffset PolygonOffset 已移除 已移除
DisableRGBWrite 2048 0000 1000 0000 0000 DisableRGBWrite 不可用 可用

定義[編輯]

定義列舉
鍵名 介面字串 描述
AlphaTest 0 ALPHA_TEST
ColorSecondTexture 1 COLOR_SECOND_TEXTURE
ColorBased 2 COLOR_BASED
DisableTinting 3 DISABLE_TINTING
Fancy 4 FANCY
EnableFog 5 ENABLE_FOG
EnableLight 6 ENABLE_LIGHT
Glint 7 GLINT
ItemInHand 8 ITEM_IN_HAND
MultiColorTint 9 MULTI_COLOR_TINT
MultiplicativeTint 10 MULTIPLICATIVE_TINT
NoTexture 11 NO_TEXTURE
TintedAlphaTest 12 TINTED_ALPHA_TEST
UIEntity 13 UI_ENTITY
UseColorMask 14 USE_COLOR_MASK
UseEmissive 15 USE_EMISSIVE
UseMultitexture 16 USE_MULTITEXTURE
MaskedMultitexture 17 MASKED_MULTITEXTURE
UseOnlyEmissive 18 USE_ONLY_EMISSIVE
UseOverlay 19 USE_OVERLAY
UseSkinning 20 USE_SKINNING
UseUVAnim 21 USE_UV_ANIM

比較函式[編輯]

比較函式列舉
鍵名 介面字串 描述
Equal 0 Equal 源值等於目標值時透過
NotEqual 1 NotEqual 源值不等於目標值時透過
Always 2 Always 源值總是透過
Less 3 Less 源值小於目標值時透過
Greater 4 Greater 源值大於目標值時透過
GreaterEqual 5 GreaterEqual 源值大於或等於目標值時透過
LessEqual 6 LessEqual 源值小於或等於目標值時透過
Never 7 源值總不透過

模板操作[編輯]

模板操作列舉
鍵名 介面字串 解釋
StencilOpKeep 1 Keep 保留
StencilOpZero 2 置0
StencilOpReplace 3 Replace 替換
4 自增飽食
5 自減飽食
6 按位取反
StencilOpIncr 7 自增折繞
StencilOpDecr 8 自減折繞

混合目標[編輯]

混合目標列舉
鍵名 介面字串 描述
DestColor 0 DestColor 置源色
SourceColor 1 SourceColor 置目標色
Zero 2 Zero 置(0,0,0)
One 3 One 置(1,1,1)
OneMinusDestColor 4 OneMinusDestColor 置(1,1,1)減目標色
OneMinusSrcColor 5 OneMinusSrcColor 置(1,1,1)減源色
SourceAlpha 6 SourceAlpha 置源透明度
DestAlpha 7 DestAlpha 置目標透明度
OneMinusSrcAlpha 8 OneMinusSrcAlpha 置1減源透明度

紋理過濾[編輯]

紋理過濾列舉
鍵名 介面字串 描述
PointFiltering 0 Point 點採樣
BilinearFiltering 1 Bilinear 雙線性採樣
TrilinearFiltering 2 Trilinear 三線性採樣
MipMapBilinearFiltering 3 MipMapBilinear MIP映射採樣
TexelAA 4 TexelAA 紋素抗鋸齒採樣
PCF 5 PCF 透過比較函式採樣

紋理折繞[編輯]

紋理折繞列舉
鍵名 介面字串 描述
ClampToEdge 0 Clamp 鉗制拉伸
Repeat 1 Repeat 重複平鋪
MirroredRepeat 2 鏡像重複平鋪

著色器階段位[編輯]

著色器階段位列舉
鍵名 值(BIN) 介面字串 描述
NoShaderStagesBit 0 0000 0000 無著色器階段
VertexShaderStageBit 1 0000 0001 Vertex 頂點著色器階段
PixelShaderStageBit 2 0000 0010 Pixel 像素著色器階段
GeometryShaderStageBit 4 0000 0100 Geometry 幾何著色器階段

頂點場[編輯]

頂點場列舉
鍵名 介面字串 描述
Position 0 Position 位置
Color 1 Color 顏色
Normal 2 Normal 法向
Tangent 3 Tangent 切向
UV0 4 UV0 第0張紋理UV
UV1 5 UV1 第1張紋理UV
UV2 6 UV2 第2張紋理UV
PBRTextureIdx 7 PBRTextureIdx PBR紋理索引
BoneId0 8 BoneId0 第0個骨骼ID
PreviousPosition 9 PreviousPosition 先前位置
HummingbirdPosition 10 HummingbirdPosition 蜂鳥位置
HummingbirdColor 11 HummingbirdColor 蜂鳥顏色
HummingbirdAdditional 12 HummingbirdAdditional 蜂鳥額外

MSAA支援[編輯]

MSAA支援列舉
鍵名 介面字串 描述
NonMSAA 1 NonMSAA 不支援MSAA
MSAA 2 MSAA 僅支援MSAA
Both 3 Both MSAA是否開啟皆支援

基本圖元模式[編輯]

基本圖元模式
鍵名 介面字串 描述
None 0 None 不繪製
QuadList 1 QuadList 四邊形列表
TriangleList 2 TriangleList 三角形列表
TriangleStrip 3 TriangleStrip 三角形條帶
LineList 4 LineList 線段列表
LineStrip 5 Line 線段條帶

紋理格式[編輯]