Skip to content
All documentation pages

Blocks, items and how a model becomes a render

Which state of a block gets rendered, why an item is sometimes a sprite and sometimes a cube, how biome tints are applied and which assets have no model at all.

The resting state

A Minecraft block is not one thing. oak_stairs has 80 states, redstone_wire has over a thousand, and each of them has its own model. Only one of them can be the picture of oak stairs, so a block render always uses the block's resting state:

  • Nothing rotated: whichever facing leaves the model at its own orientation, which is the one the inventory icon shows.
  • Nothing connected: a fence is its post, a wall is its post, a pane is its centre.
  • Nothing powered, open, occupied or waterlogged; every numeric property at zero.
  • The exception is anything whose unlit state is a different texture — a redstone torch, a campfire — which renders lit, because a burnt-out redstone torch is not what "redstone torch png" means.

That is the same choice the wiki makes, and it is why /render/block/oak_door is a closed door rather than one of the eight ways it can hang.

Sprites and cubes

An item resolves through the game's own item model definition, which since 1.21.4 is a small decision tree: is the bow drawn, is the crossbow loaded, which trim does the armour have. There is no item in hand here, so every branch takes its resting case — the fallback of a select, the on_false of a condition. A bow renders undrawn, a crossbow unloaded, leather armour undyed in its default brown.

What comes out of that is one of two things:

  • A flat model (item/generated or item/handheld) is drawn as its sprite, scaled with nearest-neighbour sampling. A 512 px diamond sword is 32 square pixels per texel, not a blurry upscale. There is no camera in a picture of a sprite, so view, yaw and the rest of the camera parameters are accepted and do nothing.
  • Anything else is geometry, rendered exactly like a block. That is how a grass block in your inventory is a cube and not a picture of a cube.
diamond_sword item render
diamond_sword — flat sprite
bow item render
bow — flat, undrawn
grass_block item render
grass_block — block model
oak_fence item render
oak_fence — inventory model

Shading and the camera

The default view is the one the game uses for an item in a slot: 45° round and 30° down, orthographic, with the block's north face on the left. Faces are shaded by the direction they point, with the game's own table:

FaceBrightness
Top1.0
North and south0.8
East and west0.6
Bottom0.5

shading=0 switches it off and draws every face at full brightness, which is occasionally what you want for an icon on a dark background. Elements the model marks shade: false — the crossed planes of a torch flame or a flower — are always full brightness, as in the game.

yaw is measured from the block's front, which is its north face: the side a furnace opens on and where a crafting table's grid is. So view=front shows a furnace's door, and view=iso shows it on the left, exactly as the inventory does.

Biome tints

Grass, leaves and water have no colour of their own: the texture is grey and the game multiplies it by a colour looked up in a 256×256 colormap at the biome's temperature and rainfall. Renders here default to plains, #91bd59 — the green everyone pictures.

text
https://blockrender.dev/render/block/oak_leaves.png?biome=swamp
https://blockrender.dev/render/block/grass_block.png?tint=b6db61
Oak leaves tinted for the plains biome
biome=plains
Oak leaves tinted for the swamp biome
biome=swamp
Oak leaves tinted for the badlands biome
biome=badlands
Oak leaves tinted for the cherry grove biome
biome=cherry_grove

26 biomes are accepted; the list is in the parameter reference. Birch and spruce leaves ignore the biome, as they do in the game — their colour is a constant. tint=<hex> overrides everything, and touches only the faces that are tinted at all, so a grass block keeps its dirt sides.

What has no model

1,102 of 1,198 blocks and 1,473 of 1,537 items render. The other 96 blocks and 64 items have no JSON model at all, because the game draws them with code:

  • Block entities: chests, ender chests, banners, shulker boxes, beds in hand, heads and skulls, decorated pots, conduits, copper golem statues.
  • Liquids: water and lava, whose surfaces the game builds at runtime.
  • Invisible or technical blocks: air, barriers, light blocks, structure voids, moving pistons.

They answer 404 with that sentence rather than an empty image, they have no page, and they are not in the sitemap. Rendering them would mean re-implementing an entity renderer and inventing geometry Mojang does not ship, and a picture of a chest that is not quite the game's chest is worse than no picture.

The version pin

Everything comes from Java Edition 26.2, pinned in one constant and printed in the footer. It is deliberately not "the latest release": a silent bump would change images that other people have already linked to, and would quietly retire ids that Mojang removed. When it moves, it moves on purpose.