Generated tileable PBR materials
Read blender-scene for the local session contract.
Tool names below use its capability mapping when the named interface is absent;
read only the relevant rows in blender-volatile.
Requires: blender-generation (credit workflow),
blender-lookdev (material integration),
blender-audit-finalize (PBR audit), and
blender-volatile (live capability and parameter contract).
The prompt contract is below.
Scope: a generated material, seamless texture, or PBR map set.
Core method
Generate one seamless flat albedo swatch, then derive every
geometry/shading map from that same tile using the local processing route below.
Never generate Base Color, Normal, Displacement, AO, and Specular as separate
image jobs — independent generations do not align at the pixel level and
cannot form a coherent set.
The derived maps are coherent but inferred, not scan data:
- Base Color — the generated tile, treated as sRGB.
- Displacement/Height — normalized luminance; bright means high unless
invert_height:true.
- Normal — tile-aware central gradients of that height map.
- Ambient Occlusion — tile-aware local cavity estimate from height.
- Specular — a constant dielectric level by default, because albedo does
not reliably encode IOR/specular response; optional luminance/height
modulation is an artistic mode, not a measurement.
When pigment and physical relief are unrelated, or the deliverable demands
scan-grade maps, do not pretend luminance-derived height is accurate — use
authored or scanned height/specular data instead.
Inspect and specify
- Inspect the live object: material slots, UV maps, dimensions, render
engine, subdivision, displacement support, intended camera scale.
- One clear suitable existing texture set gets reused automatically; ask
only when several candidates are plausible.
- The Scene Passport records:
- object and semantic material role;
- real-world tile width/height in metres;
- surface description, age, wear, grain/fiber direction, palette;
- relief polarity — whether bright or dark features are raised;
- dielectric/metallic behavior, roughness, specular intent;
- UV or Generated coordinate route;
- bump-only versus true Cycles displacement.
Prompt, model, and parameters
Before generation, establish a local file-transfer, processing and application
route that can satisfy the checks below. The local server does not expose
bl_apply_pbr_maps. Use supported bpy work through bl_execute and available
host processing tools; verify dependencies before spending. If the complete
required route is unavailable, report that gap and continue independent work.
Choose a compatible live image model through blender-generation. Compose
the source prompt from the Passport:
- one square, orthographic, front-facing albedo/base-color tile of the named
material, with the specified palette, wear and grain/fiber direction;
- flat, even illumination; no baked directional shadows, highlights, AO,
perspective, depth of field, border, text, labels, or map atlas;
- seamless repetition on both axes and restrained landmark features so the
required real-world tile size can repeat naturally;
- color/pigment variation kept conceptually separate from intended relief.
Request square output only through supported aspect/resolution fields. Run
the estimate-and-submit flow through the connected provider and state that the
derived maps are inferred. Verify the delivered tile; a seamless-texture
prompt does not establish seamlessness or physically accurate height.
Local derivation and application
- Transfer the completed albedo to a path readable by Blender; preserve the
original. Use a square tile with smooth periodic boundaries on both axes.
If correction is needed, use available host image processing or bpy image
pixels, then inspect a 3x3 repetition before deriving maps.
- Derive maps from the same corrected tile: normalize luminance for height
with explicit polarity; compute wrapped central gradients for a normalized
tangent-space normal; estimate local cavity AO with periodic neighborhoods;
use a constant dielectric specular level unless another artistic rule was
explicitly chosen. Keep dimensions and pixel alignment identical. These
are inferred maps, not recovered physical measurements.
- Write and verify the requested Base Color, Normal, Height, AO and Specular
images. Use sRGB for base color and Non-Color for data maps. Read back
dimensions, finite ranges, edge continuity and the chosen normal convention.
If available processing cannot produce the requested set, report the gap;
an albedo-only material does not complete this workflow.
- Through bl_execute, create/reuse a named material on exact target objects.
Use UV/Mapping with the declared real-world tile size, Image Texture nodes,
Principled BSDF and Material Output. Decode the normal through a Normal Map
node; use Height for controlled bump/displacement only where needed.
Avoid doubling the same relief through both strong normal and bump.
Do not bake AO into the source albedo; if used as artistic shading, avoid
double-darkening with engine occlusion. Connect specular using the runtime's
supported IOR/specular inputs and respect dielectric/metallic intent.
- Preserve the previous material, return and read back map paths, assigned
objects and node links, and retain provider/job provenance. Audit under the
intended camera/light motion before accepting the replacement.
Use version-matched Blender APIs, not an assumed bl_apply_pbr_maps payload.
No destructive subdivision is automatic. True displacement requires a
supporting engine and sufficient non-destructive subdivision; otherwise use
bump/normal and report that distinction. Prefer valid UVs on hero assets.
Material-specific decisions
- Stone, plaster, bark, concrete: luminance-derived relief is a workable
start; verify polarity and lower displacement before ever raising it.
- Wood: align grain with UV orientation; a unique knot must not expose the
repeat at hero scale.
- Fabric: small displacement, stronger micro-normal; large
luminance-derived height reads inflated.
- Painted/printed surfaces: pigment is not height. Low height contrast,
constant dielectric specular.
- Metal:
metallic:1 — a grayscale Specular map is not a metallic
workflow. Base Color then represents conductor reflectance.
- Wet/varnished: brightness does not imply coating; tune
roughness/coating explicitly in lookdev.
Audit gate
Approved only when viewed evidence confirms:
- measured edge differences on both axes negligible at the working color
scale; record the measurement method;
- a plane with at least 3x3 repetitions shows no cross-shaped seams,
mirrored edge bands, brightness drift, or an obvious repeated landmark;
- Base Color carries no baked directional shadows, highlights, AO, text,
border, or perspective;
- Normal direction is correct under a grazing moving light, with no
inverted-green-channel look;
- displacement polarity is right, the silhouette stays plausible, and scale
is measured against the object's metre dimensions;
- AO darkens cavities without dirtying all color or double-shadowing;
- Specular matches the dielectric/metal intent instead of merely copying
albedo brightness;
- UV/Generated coordinates and
tile_scale match the declared real-world
texel scale;
- opening, midpoint, and final turntable frames expose no seams or texture
swimming.
Use local bl_render and viewed sampled-frame PNGs for dynamic scenes.
Numeric seam equality does not prove the tile looks natural. If the rendered
material cannot be viewed, the PBR audit is blocked, never passed.
1---2name: blender-pbr3description: Generate a seamless albedo through a connected provider, derive aligned PBR maps locally, apply an editable Blender material and audit its scale, shading and repetition.4---56# Generated tileable PBR materials78Read [blender-scene](../blender-scene/SKILL.md) for the local session contract.9Tool names below use its capability mapping when the named interface is absent;10read only the relevant rows in [blender-volatile](../blender-volatile/SKILL.md).1112Requires: `blender-generation` (credit workflow),13`blender-lookdev` (material integration),14`blender-audit-finalize` (PBR audit), and15`blender-volatile` (live capability and parameter contract).16The prompt contract is below.1718Scope: a generated material, seamless texture, or PBR map set.1920## Core method2122Generate **one** seamless flat albedo swatch, then derive every23geometry/shading map from that same tile using the local processing route below.24Never generate Base Color, Normal, Displacement, AO, and Specular as separate25image jobs — independent generations do not align at the pixel level and26cannot form a coherent set.2728The derived maps are coherent but **inferred**, not scan data:2930- **Base Color** — the generated tile, treated as sRGB.31- **Displacement/Height** — normalized luminance; bright means high unless32 `invert_height:true`.33- **Normal** — tile-aware central gradients of that height map.34- **Ambient Occlusion** — tile-aware local cavity estimate from height.35- **Specular** — a constant dielectric level by default, because albedo does36 not reliably encode IOR/specular response; optional luminance/height37 modulation is an artistic mode, not a measurement.3839When pigment and physical relief are unrelated, or the deliverable demands40scan-grade maps, do not pretend luminance-derived height is accurate — use41authored or scanned height/specular data instead.4243## Inspect and specify44451. Inspect the live object: material slots, UV maps, dimensions, render46 engine, subdivision, displacement support, intended camera scale.472. One clear suitable existing texture set gets reused automatically; ask48 only when several candidates are plausible.493. The Scene Passport records:50 - object and semantic material role;51 - real-world tile width/height in metres;52 - surface description, age, wear, grain/fiber direction, palette;53 - relief polarity — whether bright or dark features are raised;54 - dielectric/metallic behavior, roughness, specular intent;55 - UV or Generated coordinate route;56 - bump-only versus true Cycles displacement.5758## Prompt, model, and parameters5960Before generation, establish a local file-transfer, processing and application61route that can satisfy the checks below. The local server does not expose62bl_apply_pbr_maps. Use supported bpy work through bl_execute and available63host processing tools; verify dependencies before spending. If the complete64required route is unavailable, report that gap and continue independent work.6566Choose a compatible live image model through `blender-generation`. Compose67the source prompt from the Passport:6869- one square, orthographic, front-facing albedo/base-color tile of the named70 material, with the specified palette, wear and grain/fiber direction;71- flat, even illumination; no baked directional shadows, highlights, AO,72 perspective, depth of field, border, text, labels, or map atlas;73- seamless repetition on both axes and restrained landmark features so the74 required real-world tile size can repeat naturally;75- color/pigment variation kept conceptually separate from intended relief.7677Request square output only through supported aspect/resolution fields. Run78the estimate-and-submit flow through the connected provider and state that the79derived maps are inferred. Verify the delivered tile; a seamless-texture80prompt does not establish seamlessness or physically accurate height.8182## Local derivation and application83841. Transfer the completed albedo to a path readable by Blender; preserve the85 original. Use a square tile with smooth periodic boundaries on both axes.86 If correction is needed, use available host image processing or bpy image87 pixels, then inspect a 3x3 repetition before deriving maps.882. Derive maps from the same corrected tile: normalize luminance for height89 with explicit polarity; compute wrapped central gradients for a normalized90 tangent-space normal; estimate local cavity AO with periodic neighborhoods;91 use a constant dielectric specular level unless another artistic rule was92 explicitly chosen. Keep dimensions and pixel alignment identical. These93 are inferred maps, not recovered physical measurements.943. Write and verify the requested Base Color, Normal, Height, AO and Specular95 images. Use sRGB for base color and Non-Color for data maps. Read back96 dimensions, finite ranges, edge continuity and the chosen normal convention.97 If available processing cannot produce the requested set, report the gap;98 an albedo-only material does not complete this workflow.994. Through bl_execute, create/reuse a named material on exact target objects.100 Use UV/Mapping with the declared real-world tile size, Image Texture nodes,101 Principled BSDF and Material Output. Decode the normal through a Normal Map102 node; use Height for controlled bump/displacement only where needed.103 Avoid doubling the same relief through both strong normal and bump.104 Do not bake AO into the source albedo; if used as artistic shading, avoid105 double-darkening with engine occlusion. Connect specular using the runtime's106 supported IOR/specular inputs and respect dielectric/metallic intent.1075. Preserve the previous material, return and read back map paths, assigned108 objects and node links, and retain provider/job provenance. Audit under the109 intended camera/light motion before accepting the replacement.110111Use version-matched Blender APIs, not an assumed bl_apply_pbr_maps payload.112No destructive subdivision is automatic. True displacement requires a113supporting engine and sufficient non-destructive subdivision; otherwise use114bump/normal and report that distinction. Prefer valid UVs on hero assets.115116## Material-specific decisions117118- **Stone, plaster, bark, concrete:** luminance-derived relief is a workable119 start; verify polarity and lower displacement before ever raising it.120- **Wood:** align grain with UV orientation; a unique knot must not expose the121 repeat at hero scale.122- **Fabric:** small displacement, stronger micro-normal; large123 luminance-derived height reads inflated.124- **Painted/printed surfaces:** pigment is not height. Low height contrast,125 constant dielectric specular.126- **Metal:** `metallic:1` — a grayscale Specular map is not a metallic127 workflow. Base Color then represents conductor reflectance.128- **Wet/varnished:** brightness does not imply coating; tune129 roughness/coating explicitly in lookdev.130131## Audit gate132133Approved only when viewed evidence confirms:1341351. measured edge differences on both axes negligible at the working color136 scale; record the measurement method;1372. a plane with at least 3x3 repetitions shows no cross-shaped seams,138 mirrored edge bands, brightness drift, or an obvious repeated landmark;1393. Base Color carries no baked directional shadows, highlights, AO, text,140 border, or perspective;1414. Normal direction is correct under a grazing moving light, with no142 inverted-green-channel look;1435. displacement polarity is right, the silhouette stays plausible, and scale144 is measured against the object's metre dimensions;1456. AO darkens cavities without dirtying all color or double-shadowing;1467. Specular matches the dielectric/metal intent instead of merely copying147 albedo brightness;1488. UV/Generated coordinates and `tile_scale` match the declared real-world149 texel scale;1509. opening, midpoint, and final turntable frames expose no seams or texture151 swimming.152153Use local `bl_render` and viewed sampled-frame PNGs for dynamic scenes.154Numeric seam equality does not prove the tile looks natural. If the rendered155material cannot be viewed, the PBR audit is `blocked`, never `passed`.