Creating Curvature and Thickness Maps
Curvature and Thickness are not the most obvious textures in a PBR pipeline, but they are exactly what gives material that "living" quality that sets AAA art apart from technically correct but flat assets. The problem doesn't arise during baking—Baker in Marmoset Toolbag or Substance Painter handles it in seconds. The problem is that baked maps end up as garbage: noise on flat surfaces, artifacts at corners, incorrect bias in contact zones between meshes.
Why Curvature Map Gets Artifacts
The most common scenario: an artist bakes Curvature in Marmoset Toolbag 4 with default settings and gets a map where all sharp angles look correct, but flat faces have white noise. The reason is the Ray Distance parameter is set too high—rays hit neighboring UV islands and produce false protrusions.
Fixed by lowering Ray Distance to values where the ray barely reaches the high-poly. For character mesh subdivided into Baker Groups—separate cage for each group. In Substance Painter the same problem is solved through bake per material with explicitly set Max Frontal Distance.
The second source of pain is seam bleeding. If UV unwrapping is done without a 2–4 pixel margin along the edges of each island, curvature from neighboring islands bleeds into the seam. On a 2K texture for a mobile asset this is immediately visible; on 4K for PC—at certain camera angles.
Thickness Map is a different story. It's baked as AO with inverted normals: rays go inside the mesh and register the distance to the opposite wall. For thin details—character ears, petals, cape edges—this map provides correct input to Subsurface Scattering. Without it, SSS works uniformly and fabric looks like plastic.
Tools and Baking Approach
For production pipeline we use three options depending on the task:
Marmoset Toolbag 4—preferred tool when cage and Baker Groups control is needed. Allows adjusting Curvature through Curvature Intensity, Curvature Bias, and Curvature Smooth Angle. Smooth Angle is critical: at 180° the map captures all normals as curves, at 0°—only geometric edges.
Substance Painter 9—convenient when baking goes directly in the working layer. Curvature here is generated from the normal map rather than geometry, which is faster but less accurate on low-poly with sharp angles without smoothing.
Blender + BakeMaster addon—for indie projects without Marmoset licenses. Configured through Cycles with custom node graph: Geometry Node → Pointiness → Color Ramp → Image Texture. Thickness is baked as AO with Local Space and inverted normal.
Regardless of tool, before baking the mesh must pass several checks:
- High-poly normals averaged correctly—no flipped faces
- Smooth Groups on low-poly match UV seams
- Cage doesn't intersect itself in concave zones
- UV islands have uniform texel density across the asset
How Curvature is Used in Material
Baked Curvature Map in pure form is an intermediate result. In Substance Painter it's fed into the Metal Edge Wear Generator as a mask for edge highlighting. In Unity ShaderGraph it's used as input for lerp between two materials: at protrusions metal is worn to shine, in recesses—dirt accumulates.
Correct workflow: Curvature → Color Ramp (adjust specific ranges) → layer mask. Without Color Ramp the map gives too broad a mask and the effect looks blurry.
For Thickness—connection to the Thickness parameter in Lit Shader with Subsurface Scattering enabled. In URP/HDRP this is Subsurface Mask Map in channel A. In custom shader—separate texture sampled in fragment shader for scattering depth calculation.
Typical Errors That Cost Money
Baking without Baker Groups. If character's arm overlaps torso in A-Pose, Marmoset will bake torso curvature accounting for arm shadow. Subdividing into groups solves this—each body part bakes in isolation.
Curvature with wrong Smooth Angle. Value 90° suits hard-surface. For organics—160–180°, otherwise all muscle transitions look like graffiti of white spots.
Thickness on open geometry. If mesh isn't closed (open cylinder, for example), rays go to infinity and return 0. Either close geometry with temporary plugs or limit Ray Distance to estimated maximum object thickness.
Using 8-bit for Curvature. Curvature map is gradient data. On 8-bit, banding appears on smooth transitions. For final material Curvature is stored in 16-bit, converting to 8-bit only when necessary for mobile memory savings.
Working Process
In practice, baking Curvature and Thickness takes a small part of total time, but error here drags along redoing several material layers. So we start with mesh audit: check UV islands, Baker Groups, Smooth Groups correctness.
| Task Scale | Estimated Duration |
|---|---|
| One hero asset, up to 5 UV sets | 4 to 8 hours |
| Character with full LOD set | 1 to 2 days |
| Environment (props + modular tiles) | 3 to 7 days |
| Baking for existing pipeline (team integration) | by agreement |
After baking—test on sphere with standard material where Curvature is fed directly as Albedo. Quick way to see all artifacts before they're hidden under dirt and scratches layers.
Cost determined after mesh review and technical specification—number of UV sets, target texture resolution, and engine requirements affect labor directly.





