A normal map generator turns a flat color photo into the purple-tinted RGB texture that fools a real-time light into seeing grooves, brick mortar, and wood grain—without adding a single triangle. For browser games built with Three.js MeshStandardMaterial, that means a tangent-space normal PNG, a matching albedo, and usually roughness and AO siblings so the surface reads as PBR instead of plastic. Sorceress stitches that path across AI Image Gen for base color and Material Forge for free client-side derive. If you already use Etch for full PBR packs or Tile for seamless ground loops, treat this bump workflow as the depth pass that makes those albedos believable under a moving sun. New to the stack? Start from the tools guide, or open Wizard Genie when you want surface briefs assembled for you. For sky lighting that matches your floors, see Dome’s skybox pipeline; for credit packs and Lifetime Pro, check plans.
What a normal map generator actually outputs for games
Ask ten artists what a “normal map” is and half will show you a purple PNG, half will confuse it with a grayscale bump. In production terms, a normal map generator should deliver a tangent-space RGB texture whose channels encode X, Y, and Z components of the surface normal relative to the tangent frame of each triangle. The classic look is blue-to-purple because the Z channel stays bright while X and Y encode left-right and up-down slopes. Wikipedia’s normal mapping article (verified July 8, 2026) and LearnOpenGL’s tangent-space walkthrough remain the clearest primers: the map does not change the mesh silhouette—only the lighting response.
Those maps are not arbitrary art. Engines expect consistent handedness, power-of-two resolution when you care about mipchains, and usually a sibling set: albedo (base color), roughness (or glossy), ambient occlusion, and metallic when the material needs it. A competent normal map generator documents whether it outputs OpenGL-style or DirectX-style green-channel polarity, because flipping Y after export is a weekly support ticket otherwise. Three.js defaults to tangent-space normals on MeshStandardMaterial and treats the map as non-color data—see the official MeshStandardMaterial.normalMap docs verified July 8, 2026.
Sorceress targets the full PBR pack, not a solitary purple filter. You generate or upload a base-color image, then Material Forge runs deriveMapsFromBaseColor in the browser—zero API cost—as documented in src/lib/material-forge/derive-maps.ts. Default derive settings enable normal at strength 0.8, roughness with bias 0.5, and AO at strength 1.0; metallic and emissive stay off until you ask. Export lands in a textures ZIP with files named baseColor, normal, roughness, metallic, emissive, and ao via exportTexturesZip—the same slots artists already expect from library sites like Poly Haven.
Resolution is a project-level decision. Mobile WebGL often ships 512 or 1024 normals; desktop demos can afford 2048. Derive from an albedo that already matches your target size so you are not upscaling noise into fake microdetail. Keep the normal as a lossless PNG; JPEG compression invents chromatic ripples that read as sparkling dirt under specular light.
Object-space normals exist—they store world-ish directions and look more rainbow than purple—but they do not travel well with skinned or rotated props. For almost every indie game in 2026, tangent-space is the correct default. If a tool dumps object-space without saying so, reject the pack and regenerate.
Why bump and height maps are not the same as normals
A bump map is usually a single-channel height field: bright pixels are “up,” dark pixels are “down.” Historically, engines converted bump to temporary normals in the shader. A modern normal map generator skips the middleman and stores the converted vectors directly so the fragment shader only unpacks RGB. Height maps still matter for parallax and displacement—Material Forge’s luminance buffer is conceptually related—but shipping height alone into a PBR slot labeled normal will light wrong.
Photoshop’s “Generate Normal Map” filter trained a generation of artists to treat purple as a magic filter they run once and forget. That is fine for a mockup. It fails when you need tunable strength, a live lit preview, and matching roughness so wet stone is not specular soup. Online one-click converters often bake openGL polarity you cannot see until the green channel flips under a moving light. Treat them as toys; treat a normal map generator with preview as the shipping path.
Another trap: painting detail into albedo that should live in normals. Dark mortar lines drawn into diffuse look like dirty paint under a key light, while the same information in a normal map generator output preserves color purity and still catches grazing specular. When in doubt, keep albedo flat-ish and push crevices into normals + AO—exactly what Material Forge’s AO derive is for.
Displacement and tessellation are a third family. They move vertices. Normals fake lighting. Do not expect a normal map generator to fix silhouette roundness on a cylinder; bump the mesh or accept the flat profile. Indie budgets almost always prefer normals + cheap geometry over tessellation on mid-range phones.
The Sorceress normal map generator pipeline in four steps
Think of the Sorceress normal map generator as four locked stations—no secret fifth step buried in a menu. You lock surface intent, produce albedo in AI Image Gen (or upload your own), derive the normal and sibling maps in Material Forge, then export and wire into Three.js. Each station has a clear artifact you can drop into version control.
Step 1 is creative control: material class (stone, wood, metal, fabric, water), target scale (is this a 1m tile or a 0.1m badge?), and polarity notes. Step 2 is albedo work—generation costs credits; upload is free. Step 3 is derive—always free, always local, always re-runnable when you tweak strength. Step 4 is export + engine wiring with NoColorSpace and normalScale.
Optional accelerators exist. Wizard Genie drafts surface briefs when you would rather describe “damp cellar brick, worn edges” than memorize negative prompts for “text watermark, UI chrome.” Seamless Tile Gen helps when the albedo must tile without a seam before you derive. The tools guide links every station if you forget which URL you bookmarked.
Repeat the same four steps for every surface family: dungeon stone, scrap metal, painted wood, wet asphalt. Consistency beats heroics; your players notice when every material shares a believable light response, not when brick 47 has unique noise.