Skip to content

Paint and materials

This page covers three things.

  • Paint: Paint the textures of custom block and prop models directly in 3D. Includes layers, selection and symmetry.
  • Custom blocks from textures: Make a new block np:<id> from a texture or your own PNG, along with variant blocks such as slabs and stairs.
  • Materials (LabPBR): Apply material values such as smoothness, metal, emission and normals to custom block textures. For people who use shaders.
What you wantWhere to open
Paint a modelRight-click a custom block or prop in the Content Browser › Paint
Paint tab ↔ World tabCtrl+Tab (Tools › Switch Paint tab / World tab)
Paint modePaint in the mode row of the main toolbar
Texture listWindow › Texture (bottom area panel)
Custom block from texturesChoose a texture in the Texture panel and press Create custom block
Materials (LabPBR)Material… in the custom block window, or the console command texblock material <id>

Pressing Open in main window’s Paint tab in the Paint tab of the Asset Editor opens the same Paint tab.

  1. Right-click a custom block or prop in the Content Browser and choose Paint.
  2. The center area switches to the Paint tab. The 3D model is on the left, the 2D texture in the middle and the Tools panel on the right.
  3. Press B (Brush) and choose a color.
  4. Drag over the model in the 3D view. The 2D window is painted at the same time.
  5. Save the layers with Ctrl+S. The world is saved too.
  6. Return to the World tab with Ctrl+Tab.

The painted result is applied every 0.25 seconds (and when you return to the World tab) to blocks and props placed in the world and to open UV windows. The original model file is not changed.

  1. Open the Texture panel with Window › Texture.
  2. Choose a texture and press Create custom block. The Create a custom block from textures window appears.
  3. Choose the face mode: Top · side · bottom or 6 faces separately.
  4. For each face, add an image with Selected (the texture chosen in the Texture panel) or PNG…. To all faces puts the chosen texture on all 6 faces.
  5. Set Name, id, Light and Collision.
  6. If you need variants, turn on Also create variants and choose the shapes.
  7. Press Create. The block is added to the project registry.

From then on, the same window becomes Update (np:). When you update it, the variants are updated to a new version too.

ToolKeyWhat it does
PencilPPaints pixel by pixel.
BrushBA round brush with hardness and opacity.
EraserEErases the current layer.
FillGFills at once according to Mode.
EyedropperIPicks a painted color (Alt+left click in the 3D view does the same).
Rectangle select · LassoM · LSelects the area to paint in the 2D window. Clicking in the 3D view selects the UV island of that face.
MoveVMoves the selected area. Arrow keys move 1 pixel, Shift 8; hold Alt to copy.

While selecting, Shift = add, Alt = subtract, Shift+Alt = intersect.

Fill has three modes.

ModeWhat it fills
Entire UV islandThe whole UV island you clicked
Contiguous same color (within island)Connected same color within the island
Same color across textureThe same color across the whole texture
  • In the Layers section, add, duplicate, delete, move up, move down, merge down and flatten all, and set visibility and opacity per layer.
  • In the Texture section, choose the texture to paint and change its size. Stretch scales the image up or down to keep the 3D look. Canvas only extends or crops from the top-left.
  • Save layers saves a new version to assets/<id>/layers/. Export PNG writes the flattened image to a new _vN file.

When a texture is changed in several places, the priority is paint layers > registry texture replacement > original.

PNGs are 16, 32 or 64px wide. A square image is a single image; a tall strip is an animation.

  • Vanilla texture faces do not store an image; they only refer to it by id.
  • Custom textures and your own PNGs are saved in the project.

When you add a vertical strip PNG, the animation row appears. If there is a .png.mcmeta next to the PNG, the values are filled in automatically.

FieldDescription
Ticks per frameDuration of one frame. 20 ticks = 1 second.
InterpolateBlends smoothly between frames.
OrderPlayback order. If empty, frames play in sequence. Example: 0 1 2:5 3 — index:ticks gives only that frame a different duration.
Per-frame timeChange the duration of each frame directly in the cells below the order.

If the order contains an index beyond the frame count, Create is disabled and the reason appears in the status bar.

When Also create variants is on, the chosen shapes are registered together with the same texture.

ShapeidDefault
Slab<id>_slabOn
Stairs<id>_stairsOn
Wall<id>_wallOn
Fence<id>_fenceOff
Fence gate<id>_fence_gateOff
Door<id>_doorOff

Use the shape list below the preview to see how the variants will look first. This does not affect the registry. Clicking a variant shape cell also switches the preview to that shape.

Materials are extra values for people who use shaders (Iris · OptiFine). The base resource pack image stays the same; materials are saved separately as _n and _s images next to the texture. Playing without shaders is not affected.

  1. Press Material… in the custom block window. The Texture block material (LabPBR) window appears.
  2. In Texture slot, choose the face image to apply the material to.
  3. Choose a Preset (Stone · Wood · Metal (iron) · Metal (gold) · Metal (copper) · Glass · Cloth · Glowstone · Leaves · Plain (no material)).
  4. Adjust with the Values sliders.
  5. Press Auto-generate to estimate height, normals, emission candidates, smoothness and crevice AO from brightness.
  6. Touch up only where needed with Channel paint.
  7. Check in the sphere preview on the right by changing Sun direction and Sun height.
  8. Press Save material. It is saved as a new version and does not overwrite.

When Same material for variants is on (default on), the material is also saved to the same slot of the slab, stairs and wall variants.

ValueDescription
SmoothnessHow glossy the surface is.
F0 (non-metal reflectance)Base reflectance of non-metals.
Metal · Metal typeMetalness and type (iron · gold · aluminum · chrome · copper · lead · platinum · silver · base-color metal).
EmissionHow much it glows by itself.
PorosityHow much it gets wet in rain.
SSS (subsurface scattering)How much light seeps inside, as with leaves and cloth.
AOShading in crevices.
Height (uniform) · POM depthSurface relief height and parallax depth.
Normal strength · Normal blur · Flip normal YStrength and shape of the normal map.
Wrap edgesCalculates with the edges wrapped, like a block.
Dark = high · Emission thresholdHeight direction for Auto-generate and the brightness threshold treated as emission.
No shaderDraws the preview without materials for comparison.

In channel paint, only the brightness (gray) of the color is used as the value. Brighter means a larger value. The eraser returns to the uniform value.

Options of the Paint panel.

OptionRangeDescription
Size1 – 32pxBrush size.
Hardness0 – 100%Hardness of the brush edge.
Opacity1 – 100%Coverage per stroke.
Symmetry › Axis—Paints symmetrically relative to the model.
Clip to faceOn/OffKeeps paint from bleeding outside the face.
Sphere brush (O)On/OffPaints within a 3D distance around the hit point in 3D. Continues across UV boundaries and face edges.
Tolerance—Difference treated as the same color when filling.
Sample mergedOn/OffFill and eyedropper look at the merged image. When off, only the current layer.
Pixel artOn/OffDraws without filtering and shows a grid.

Properties of the custom block window.

OptionRangeDescription
NameTextName shown in the Content Browser.
idLowercase letters · digits · _The id after np:.
Light0 – 15Light emitted by the block. 0 = no light.
CollisionOn/OffWhen on, the whole cell is solid (doors: the bottom cell only).

While the Paint tab is visible, world tool keys are blocked and the keys below work.

KeyAction
Ctrl+TabPaint tab ↔ World tab
P · B · E · G · IPencil · Brush · Eraser · Fill · Eyedropper
M · L · VRectangle select · Lasso · Move
OToggle sphere brush
[ · ]Brush size −1 · +1
Ctrl+A · Ctrl+D · Ctrl+Shift+ISelect all · deselect · invert selection
DeleteClear inside the selection
EscDeselect
Ctrl+Z · Ctrl+YPaint undo · redo (separate from the world history)
Ctrl+SSave layers (and materials) + save the world
F · numpad 1 · 3 · 7Fit to model · front · side · top
3D view: left · Alt+left · right-drag · middle-drag · mouse wheelPaint · eyedropper · orbit · pan · zoom

Console commands.

CommandWhat it does
texblock listList of blocks made from textures
texblock new [texture id]Open a new custom block window
texblock edit <id>Open the window for editing that block
texblock material <id>Open the material window for that block
texblock preview <shape>Change the preview shape (cube · slab · stairs · wall · fence · fence_gate · door)
texfind <query>Find textures (by name or using block)
texuse <texture id> [pick]List of blocks using that texture. pick = set a representative block as the brush
  • Paint, materials and biome painting each have their own undo history, separate from the world.
  • When you change UVs in the UV editor, the painted image moves along with the faces.
  • Vanilla textures are read-only on screen. They are not copied to the project folder, and no materials are made for vanilla faces.
  • If even one variant id already exists, nothing is created and the error shows the name.
  • Variant shapes have a single form (the inventory shape). There are no stair corners, wall/fence neighbor connections or opening doors.
  • Doors are two-block-tall models. Leave the cell above empty when placing.
  • Custom block files are saved in <project>/assets/blocks/<id>/.
  • Double-click a texture in the Texture panel to choose a block that uses it as the brush.