pbr-texture-gen
PBR Texture Generation
Role
High-level asset workflow for producing physically-based texture sets that hold up under real-time lighting. This skill owns the material spec, prompting, map derivation, tiling verification, packing, and QA. It is generation-agnostic: use whatever image generation model, tool, or skill is available and best suited — if a tool with a dedicated PBR/material mode is available it will produce more coherent map sets than deriving maps locally, so prefer it; otherwise generate the base color and derive the rest with the bundled script.
Python 3 with Pillow and NumPy is required when running scripts/pbr_maps.py commands (derivation, packing, seam checks, previews). The helper reports a direct dependency error if either module is unavailable.
Map Set and Color Spaces
Getting color spaces wrong is the most common cause of washed-out or plastic-looking assets. The set, with required color space and naming:
| Map | Suffix | Color space | Rules |
|---|---|---|---|
| Base color | _basecolor |
sRGB | No baked lighting, shadows, or AO. Non-metal luminance stays roughly within 30-240 sRGB; metal areas carry the metal's reflectance color. |
| Normal | _normal |
linear | Tangent-space, OpenGL Y+ convention (green channel = up), which glTF and three.js use. Mostly-blue image. |
| ORM | _orm |
linear | Packed: R = ambient occlusion, G = roughness, B = metallic (glTF convention). |
| Height | _height |
linear | Optional; for parallax or displacement. |
| Emissive | _emissive |
sRGB | Optional; black where not emitting. |