Minecraft では、物理ベース レンダリング (PBR) の色パイプライン (例: レイ トレーシングに使用) をサポートしています。 これは単に "色" だけでなく多くのテクスチャ データを使用するため、より豊かでリアルなビジュアルを実現できます。 PBR を使用すると鏡面反射、放射率、ノーマル マップなどごとにレイヤーを用意できます。この点は、バニラの Minecraft で使用されているクラシック色パイプラインよりも優れています。 テクスチャ セットは、テクスチャ リソースに複数の PBR レイヤーを定義するための機能として追加されています。 テクスチャ セットは json ファイルのデータによって動作します。
レイヤー
texture_set.json ファイルでは複数のレイヤーを指定できます。 レイヤーはテクスチャ画像リソースへの参照です。 また、レイヤーは、パック内の参照テクスチャ画像の代わりに、均一の無地色の値として JSON に定義することもできます。
color
- これは、RGB 3 チャンネル画像 (アルファ値はデフォルトで 1.0 になります) または RGBA 4 チャンネル画像 (アルファ値と共に一定の色を表す 4 値配列) です。
- これは唯一の必須レイヤーです。
- これはクラシック パイプラインによって使用される唯一のレイヤーです。
- 通常、色画像にはライティングがベイクされます。
normal
- これは、3 チャンネルのノーマル マップ画像です (または 4 チャンネル目が無視された 4 チャンネル画像)。
- このレイヤーと
heightmap
レイヤーの両方を、1 つのテクスチャ セットで同時に定義することはできません。
heightmap
- 1 チャンネルのレイヤー画像、つまり均一の高さマップを表す、JSON ファイル内の単一値です。
- このレイヤーと
normal
レイヤーの両方を、1 つのテクスチャ セットで同時に定義することはできません。
metalness_emissive_roughness
- これは、3 チャンネルの画像 (または 4 チャンネル目が無視された 4 チャンネル画像)、つまり均一の MER を表す 3 値配列です。
- RGB 画像では、赤はメタルネス、緑はエミッシブ、青はラフネスにマップされます。
均一値の指定
テクスチャ セットのレイヤーについてテクスチャ画像を参照する代わりに、*texture_set.json ファイルに値を指定できます。これは、その値または各チャンネルの値で均一に塗りつぶされたテクスチャ画像を参照することと事実上同じです。
json ファイルの値は、次のいずれかの形式で指定できます。
- 0 から 255 の数値範囲、またはマルチチャンネル レイヤーを表す整数から成るベクター。
- 16 進数の RGB (3 チャンネル) または ARGB (4 チャンネル)、あるいは単一のチャンネル レイヤーを表す 2 桁の 16 進数として。
*.texture_set.json ファイルの例
注意
テクスチャ セット JSON ファイルのレイヤー値には、画像テクスチャへの参照、16 進数値、数値を混在させることができます。
{
"format_version": "1.16.100",
"minecraft:texture_set": {
"color": [ 180, 140, 190, 255 ],
"metalness_emissive_roughness": "#FBA34C",
"normal": "grass_carried_normal"
}
}
この例では、同じフォルダー内にある参照画像を使用しています。 ノーマル マップと MER マップを使用しています。
{
"format_version": "1.16.100",
"minecraft:texture_set": {
"color": "grass_carried",
"metalness_emissive_roughness": "grass_carried_mer",
"heightmap": "grass_carried_heightmap"
}
}
また、数値または 16 進数値を使用してテクスチャの値を指定することもできます。
{
"format_version": "1.16.100",
"minecraft:texture_set": {
"color": [ 180, 135, 190, 170 ],
"metalness_emissive_roughness": [ 130, 135, 140 ]
}
}
無効な *.texture_set.json
テクスチャ セットが無効な場合、CONTENT_ERROR がログに記録され、テクスチャ セットは使用されません。 テクスチャ セットは以下の場合に無効になります。
- JSON データを解析できない、または JSON データがテクスチャ セットのスキーマを満たしていない。
- color レイヤーが指定されていない。 .texture_set.json ファイルには color レイヤーを指定する必要があります。
- heightmap と normal の両方のレイヤーが定義されている。
- 参照されているテクスチャが同じリソース パックに存在しない、または参照されているテクスチャを解析できない。
- いずれかのレイヤーが予期しないチャンネル数を使用して定義されている。
- 参照画像を使用して指定されているレイヤーの場合: color、MER、および normal は 3 または 4 チャンネルの画像をサポートします。heightmap は 1 チャンネルの画像のみをサポートします。
- 数値または 16 進数値を使用して指定されているレイヤーの場合: color は 4 チャンネルの値をサポートし、MER は 3 チャンネルの値をサポートします。
リソース スタックの動作
- テクスチャ セットの定義では、定義と同じリソース パックに存在する画像のみを参照できます。
- 優先度の高いリソース パック内のテクスチャ画像によって、テクスチャ セットによる独自のパック内のテクスチャへの参照がオーバーライドされることはありません。
- リソース パック スタック内で、同じテクスチャ リソースに対する複数のテクスチャ セット定義がマージされることはありません。 優先度の高いパックのテクスチャ セットの定義によって優先度の低いパックの定義がオーバーライドされます。
テクスチャ リソースの参照
画像参照が重複している場合、ファイル拡張子の優先順位は、.tga、.png、.jpg、.jpeg の順になります。
例: grass.png と grass.tga の両方がフォルダー内に存在する場合、grass.tga が選択されます。 このことは、テクスチャ リソースを参照するアクター json などの他のデータ駆動型ファイルにも適用されます。
テクスチャ セットの Json スキーマ
{
version "format_version"
object "minecraft:texture_set"
{
color "color" : opt // Fill RGBA channels of a textureset layer with the specified values in an array or hex string
string "color" : opt // The texture name of a textureset layer
string "normal" : opt // The texture name of a textureset layer
string "heightmap" : opt // The texture name of a textureset layer
color "metalness_emissive_roughness" : opt // Fill RGB channels of a textureset layer with the specified values in an array or hex string
string "metalness_emissive_roughness" : opt // The texture name of a textureset layer
}
}