Procedural Fields
Do not start by stacking noise. Start by defining the fields the object physically or stylistically needs.
Field contract
Before shader code, write a field bundle:
coordinates
→ macro form
→ meso structure
→ derived causes
→ material channels
Example:
sphereDirection
→ warpedDirection
→ elevation + ridges + craterDepth
→ slope + cavity + latitude + moisture
→ biome + color + roughness + bump
Required workflow
- Choose coordinates that remain stable under camera and object motion.
- Lock real or perceptual scale for each frequency band.
- Create named primary fields. Never hide the whole look in one expression.
- Derive secondary fields from causes: slope from normals, shore from sea-level distance, wear from exposure, dirt from cavity.
- Reuse the same fields across color, roughness, normal, displacement, emission, and scattering.
- Add debug output for every named field.
- Filter high-frequency fields by derivatives, tessellation density, or camera distance.
Read references/field-stack-recipes.md
before implementation. It records sphere, terrain, water, and
structured-placement field contracts plus common parity defects.
Read the
procedural planet surface
for a shared CPU/GLSL field bundle whose height, continents, climate, biomes,
roughness, and normals remain independently inspectable.
Non-negotiable rules
- Independent noise per channel produces visual soup. Share structure.
- Domain warp the coordinates, not every result.
- Warp spherical coordinates tangentially, then renormalize.
- Use different frequency bands for silhouette, regions, surface breakup, and micro-normal.
- Do not displace geometry with frequencies the mesh cannot represent.
- Keep categorical masks broad enough to avoid isolated “bubble” regions.
- Parameter names must describe perception:
ridgeWidth, coastBlend, cavityDarkening, not noise3Amount.
Routing boundary
Use this skill when the shared field model is the task. Use
$threejs-procedural-materials when the task is channel assembly and material
response, and $threejs-procedural-planets when the deliverable is a complete
planetary body.