Texture Atlases
A texture atlas (also known as a spritesheet) is an image that contains many smaller textures. The use of atlases reduces the number of textures that the game loads, which improves performance and reduces the likelihood of reaching the texture limit. For example, rather than loading each block texture separately, the terrain texture atlas loads as one large texture.
If an atlas contains too many sub textures, Minecraft will decrease the resolution of textures in the atlas until they all fit.
Below is a section of the vanilla item texture atlas which Minecraft generates from entries in the Vanilla RP/textures/item_texture.json
file. The full atlas contains many more textures, including custom item textures!

PADDING
Notice the stretched pixels between the book textures? That's called padding and helps to prevent graphical issues!
List of Atlases
Banner
atlas.banner
- Contains banner textures, including banner patterns and the Ominous Banner texture.
- The list of textures included in this atlas cannot be modified.
Items
atlas.items
- Contains item textures, including equipment slot placeholders, trimmed armor and the shield texture.
- Textures can be added to this atlas via the
item_texture.json
file.
Shield
atlas.shield
- Contains shield banner pattern textures.
- The list of textures included in this atlas cannot be modified.
Terrain
atlas.terrain
- Contains block textures, including those with flipbook animations.
- Has mipmapping and padding applied by default.
- Textures can be added to this atlas via the
terrain_texture.json
file.
Mipmapping
Mipmaps are used by Minecraft to reduce the resolution of textures as they get further away from the camera. This reduces aliasing of distant textures and may provide some performance benefits.
Mip Levels
The number of mip levels for a texture atlas is determined by the num_mip_levels
parameter.
At each mip level, the resolution of the texture is halved.
By default, block textures in atlas.terrain
have 4 mip levels:
{
"resource_pack_name": "vanilla",
"texture_name": "atlas.terrain",
"num_mip_levels": 4,
...
}
For a 16×16 texture, this would produce textures similar to the following:




Comparison


Padding
Padding refers to the stretched out area around textures that prevents them from bleeding into each other due to imprecise rendering.
The width of the padding can be adjusted using the padding
parameter. The value of this parameter must be at least num_mip_levels
. For instance, if an atlas has 6 mip levels, it requires a minimum padding of 32 texels (
By default, there are 8 texels of padding around each block texture:

Textures
An object where each key is a shortname that can be used to reference an area in the texture atlas.
{
"texture_data": {
"wiki:texture_shortname": {
"additive": false, // Optional; default is false
"textures": [
{
"path": "textures/path/to/texture",
"quad": false, // Optional; default is false
"tint_color": "#ffffff", // Optional
"overlay_color": "#ffffff" // Optional
}
]
}
}
}
Path
A string relative to the root folder of the resource pack that points to a file with one of the following extensions:
.texture_set.json
(requirespbr
capability)- If a texture set is referenced, all included textures (such as
color
andheightmap
) are added to the atlas.
- If a texture set is referenced, all included textures (such as
.tga
.png
.jpg
.jpeg
The path string must not include the texture's file extension.
Textures that are not square will be stretched to be square when added to the atlas. Only the first frame of textures containing multiple frames will be added to the atlas.
Tint Color
Vanilla Usage
In vanilla, tint_color
is used to apply a green tint to the Lily Pad texture.


Tint Blending
The following calculations assume that color channel values are floats (0-1).
- The color channels of the texel (
, , ) are multiplied by those of the tint_color
(, , ). - The alpha channel of the texel (
) is preserved..
Overlay Color
This parameter is similar to tint_color
, but discards the alpha (opacity) channel of the texture and instead uses its value to determine the intensity of the tint.
- This results in an opaque texture, even if the original texture included transparency.
- For opaque textures, this parameter produces the same results as
tint_color
.
Vanilla Usage
In vanilla, overlay_color
is used to apply a green tint to part of the Grass Block's side texture, without tinting the dirt texture green too!
Below you can see the original grass side texture, a version of it without an alpha channel (revealing the hidden dirt texture) and a version with overlay_color
applied.



TRANSPARENT PIXELS
Many image editors will not save RGB values for pixels with an alpha value of 0. In order to created untinted areas of a texture, you'll need these values to be saved.
Here's how to ensure that they are saved in GIMP:
Overlay Blending
The following calculations assume that color channel values are floats (0-1).
- The color channels of the texel (
, , ) are multiplied by those of the overlay_color
(, , ). - A portion of the texel's original color is added based on its inverse alpha value (
). - The alpha channel of the texel (
) becomes 1.
Additive
Layers the specified textures
on top of each other to create a new combined texture. Translucent texels fully override previous layers.
Overlay color only works when placed in the first textures
entry and affects all layers.
Quad
A boolean determining whether only the top left quadrant of the texture should be displayed.
This parameter only changes the area in the atlas covered by this shortname, the entire texture is included in the atlas.
May also be set to a number, where 0
represents false
and all other numbers represent true
.
Additional Parameters
default_leather_color
: HEX String- Determines the default color of leather armor when undyed.
default_leather_horse_armor_color
: HEX String- Determines the default color of leather horse armor when undyed.
{
"default_leather_color": "#ffffff",
"default_leather_horse_armor_color": "#ffffff"
}
Contributors
Edit Texture Atlases on GitHubText and image content on this page is licensed under the Creative Commons Attribution 4.0 International License
Code samples on this page are licensed under the MIT License