Apps Part of Renderloom

Procedural Material Graph (PBR)

Evaluate a seamless procedural material graph and preview it on a sphere.

Format renderloom-material-graph version 1 (schema at /static/apps/renderloom/material-graph.schema.json). Copy it from Renderloom → Material Nodes.

More options

Try an example: · ·

More about this tool

How it works

Run a Renderloom Material Nodes graph — noise, Voronoi, bricks, gradients, blends, domain warp, levels, curves and surface-from-height nodes — and get base color, normal, roughness, metallic, ambient occlusion and height maps, a lit sphere and a tiled plane preview, a per-node report and the editable graph. Start from brick, wood, stone, metal or fabric.

  • Every generator is periodic over the tile: Perlin and value noise wrap their integer lattice indices, simplex noise is sampled on a 4-D torus, Voronoi cells wrap their cell indices, and bricks, waves, ramps and checkers repeat a whole number of times. Warp, blur, normal, occlusion and curvature sample with wrap-around, so every map tiles seamlessly.
  • Perlin noise uses Ken Perlin’s 2002 Improved Noise with his reference permutation for seed 0 (noise(3.14, 42, 7) = 0.13691995878400012). Other seeds shuffle the permutation deterministically. Octaves double the frequency, so periods stay whole numbers.
  • Blend modes are the W3C separable formulas shared with the Lumina compositor, on display (sRGB-encoded) values. Curves are monotone Fritsch–Carlson splines. Gray inputs feed color ports as equal RGB; color feeds gray ports through Rec. 709 luma weights.
  • Normals use wrapped central differences with the height range expressed as a fraction of the tile width (resolution independent, +Y up). Ambient occlusion is horizon based: 1 − strength × mean over 8 directions of the sine of the highest horizon within the radius. Curvature is 0.5 − strength × (ring mean − centre) × depth / radius.
  • Previews use the glTF 2.0 metallic-roughness BRDF (GGX, separable Smith-GGX visibility, Schlick Fresnel) with one directional light and a dim ambient term. The continuity check compares the steps across the wrap edges with the steps inside the tile.

Procedural approximations for games, previews and look development. Height, occlusion and curvature are derived from the generated height field, not measured from real materials. The preview is a single-light illustration.

Sources

Part of Renderloom

How to use the Procedural Material Graph (PBR)

Evaluate a seamless procedural material graph, read the per-node values and download base color, normal, roughness, occlusion and height maps.

What it is for

A procedural material is a recipe: noise, cells and patterns are shaped, combined and colored until they look like brick, wood or stone, and the same recipe produces every PBR map at any size. This tool runs such a recipe — a Renderloom Material Nodes graph — on the server and gives you the maps, a lit sphere, a tiled plane and a table with the value range of every node.

Use it to preview a graph someone shared as JSON, to batch-render variations with different seeds through the API, or simply to get brick, wood, stone, metal or fabric maps without opening the app. It does not edit the graph; for that, follow the link into Renderloom Material Nodes.

Worked example

We chose the Oak planks preset, graph seed 5 and 256 px. The summary read Oak planks: 15 nodes evaluated at 256 × 256 px, and the callout confirmed that no step across the tile edges is larger than the largest step inside the tile.

The node table explains the look. Growth rings (a horizontal wave) spans the full 0.0002–0.9998 with a mean of 0.5. The two wobble noises that warp the rings only span 0.31–0.65 and 0.25–0.75, which keeps the distortion gentle. Fine grain covers 0 to 1. Plank seams has a mean of 0.97: the seams are thin lines, the rest is plank face. Roughness ends between 0.4 and 0.62 with a mean of 0.51, and the occlusion map between 0.36 and 1 with a mean of 0.90 — dark only in the seams and the deepest rings.

How to read the result

  • Sphere preview and Tiled plane preview, 2 × 2 use the glTF metallic-roughness model with one light. They are a quick visual check, not a production render.
  • Graph diagram shows how nodes feed each other; the port name is written on each link.
  • Node values (0–1): minimum, mean and maximum per node. A generator that never reaches 0 or 1 limits everything downstream; a mask with a mean near 1 covers almost the whole tile.
  • Maps: base color (sRGB), normal (+Y, OpenGL style), roughness, metallic, ambient occlusion and height as PNG, all in one ZIP with the graph.

Tips and common mistakes

  • The map size changes resolution, not the look: node parameters are fractions of the tile. Render small while experimenting.
  • Set Graph seed to get a new variation of the same material; −1 keeps the seed stored in the graph.
  • A custom graph needs exactly one Material output node. Unconnected outputs fall back to 50 % gray base color, flat height, roughness 0.5, metallic 0 and white occlusion.
  • Errors name the node and the parameter, for example a brick node with an odd number of rows and a row offset, which could not tile.
  • Copy the graph JSON from Renderloom → Material Nodes → Save graph to reproduce a material exactly.

FAQ

Are the maps seamless?

Yes. Every generator repeats a whole number of times per tile and every filter samples with wrap-around. The callout reports the check on the base color and height maps.

Why are the PNG files so large?

The maps are written as uncompressed PNG data for exact, reproducible bytes. Recompress them with any image tool if file size matters.

Is ambient occlusion physically correct?

It is a horizon-based estimate from the generated height field in eight directions. It darkens cavities convincingly but is not a ray-traced bake of a real surface.

Which engines can use the maps?

Any engine with a metallic-roughness workflow. For engine-specific names, packed ORM or mask maps and a DirectX normal, use the PBR Texture Set Export tool.

Guide last updated:

For scripts and AI agents

  • JSON API: POST https://renderloommaterialgraph.usefulweb.app/api/v1/calculate (same calculation as this page)
  • Interface description: OpenAPI 3.1 · AI guide: llms.txt
  • MCP server (Streamable HTTP): https://renderloommaterialgraph.usefulweb.app/mcp · tool name renderloom_material_graph
Example request
curl -s -X POST https://renderloommaterialgraph.usefulweb.app/api/v1/calculate \
  -H 'content-type: application/json' \
  -d '{"preset":"brick"}'
Feedback · ideas & bug reports welcome