Guide

How to make a PBR texture pack for Vibrant Visuals and shaders

A PBR texture pack gives blocks more than colours: how shiny they are, which parts are metal, which parts glow and how bumpy they look in the light. Minecraft Bedrock’s Vibrant Visuals reads these maps from texture sets, and on Java, PBR shaders for Iris and OptiFine read them in the labPBR format. The Texture Pack Maker makes both in your browser from your textures, with quick materials such as metal, glass and glowing ore spots.

Updated

What the maps do

Each pixel of a texture gets a few extra numbers. The Material tab calls them by what you see; the table shows where each one goes in the files:

In the editorWhat it doesJava (labPBR)Bedrock (texture set)
ShineSmooth surfaces show sharp highlights and reflections, rough ones look matte._s red: smoothnessMER blue: roughness
MetalMetal reflects the sky in its own colour, like iron or gold._s green: 230–255MER red: metalness
GlowGives off light, even at night, like glowstone or ore gems._s alpha: 0–254MER green: emissive
Light throughLight shines through thin parts, like leaves._s blue: 65–255MERS alpha (Vibrant Visuals only)
BumpsLight and shadow show bumps and dents on a flat face._n red and green, height in alphaA normal map

Without a material a texture looks as it always does. On Java the colour texture stays where it is; the maps sit next to it.

Make one step by step

  1. Open the Texture Pack Maker and make a pack for Java or Bedrock, or open one you have.
  2. Pick a block or item texture, for example diamond ore, and open the Material tab next to Preview.
  3. Choose a quick material such as Metal, Glass or Glowing spots. The lit 3D block shows it under a moving sun.
  4. Fine-tune Shine, Metal, Glow and Light through for the whole texture, or add a part (colourful, bright or dark pixels, some colours or an area you select) with values of its own.
  5. Switch on Bumps from the colours and set the strength, then use Use on similar textures to give every ore, plank or log the same material.
  6. Press Export. Java gets _n.png and _s.png next to each texture, Bedrock gets texture sets and the pbr capability.

Glowing ore spots and other parts

A part gives some pixels their own values. Colourful pixels picks out the gems of an ore from the grey stone around them, Bright pixels the light of a lamp, Pixels of some colours exactly the colours you click, and An area you select a rectangle you drew with the select tool. A small picture shows which pixels a part covers.

Use on similar textures copies the material to the other sides of the same block and to every texture whose name ends or starts with the same word: all *_ore textures, all oak_* ones and so on. Each keeps its own colours, so the parts and bumps follow its pixels.

Java: labPBR maps for shaders

Java has no PBR of its own: a shader pack in Iris or OptiFine draws it. The editor writes the two labPBR maps next to each texture, for example assets/minecraft/textures/block/stone_n.png and stone_s.png (textures/blocks/ before 1.13), at the size of the texture as it is exported. Smoothness is perceptual (1 minus the roughness), non-metals get an F0 of about 4 %, and a pixel with no glow has alpha 255 so that images without alpha never glow.

Turn on a shader that reads labPBR maps; in its settings this is often called labPBR or resource pack support, and the shader decides how strong reflections and glow are. The shaders from this site’s shader maker don’t use these maps yet.

Bedrock: texture sets for Vibrant Visuals

Bedrock reads a texture set next to the colour texture. Glowing spots and bumps are images:

{
  "format_version": "1.16.100",
  "minecraft:texture_set": {
    "color": "diamond_ore",
    "metalness_emissive_roughness": "diamond_ore_mer",
    "normal": "diamond_ore_normal"
  }
}

One value for the whole texture needs no image:

{
  "format_version": "1.16.100",
  "minecraft:texture_set": {
    "color": "iron_block",
    "metalness_emissive_roughness": [255, 0, 70]
  }
}

Light through is the fourth channel of metalness_emissive_roughness_subsurface (format 1.21.30, Vibrant Visuals only), written as a TGA so its alpha stays as it is. A texture set may only name images in the same pack, so the editor adds the colour texture too, even when you did not repaint it. The pack declares the pbr capability, without which Vibrant Visuals stays off:

{
  "format_version": 2,
  "header": {
    "min_engine_version": [1, 21, 120],
    …
  },
  "modules": [ … ],
  "capabilities": ["pbr"]
}

The game has texture sets of its own for most blocks. With Vibrant Visuals on, a game set would show the game’s colour texture instead of yours, so every texture you change without a material gets a copy of the game’s set in your pack. Vibrant Visuals settings explained.

Open a pack that has PBR maps

Open a Java pack with labPBR maps or a Bedrock pack with texture sets, and its maps show in the Material tab of their textures. They are exported exactly as they were until you change that material.

Questions

Do I need an RTX graphics card?

No. Vibrant Visuals runs on many PCs, consoles and newer phones, and labPBR shaders run on most graphics cards that can run shaders. Bedrock’s older ray tracing mode reads the same texture sets, except materials that let light through: those use a layer only Vibrant Visuals reads.

Why does my pack look the same in game?

Bedrock: set the graphics mode to Vibrant Visuals and put the pack at the top of your global resources. Java: turn on a shader with labPBR support and check its material or resource pack setting. Without one of those, Minecraft shows only the colours.

Do materials work on items and mobs?

Yes, in Vibrant Visuals and in most labPBR shaders. The editor always writes normal maps, never height maps, because Vibrant Visuals can’t use height maps on items.

Why should metal be 0 or 100?

Real things are metal or not, and both labPBR and Vibrant Visuals treat a pixel as one or the other. Values in between look grey and dull. For a shiny stone, raise Shine and keep Metal at 0.