Overview
Adds a curvature map to Surfaces created from 2D images, using the same meaning as Solid and Model renders. Existing normals are preferred; otherwise temporary normals are derived from height. Albedo, height, normal, material ID, and other maps remain unchanged.
Usage tips
- A common chain is
image_to_surface → surface_rebuild_normal → surface_curvature → surface_edge_highlight, which gives 2D assets convex highlights and concave dark lines. - Radius 1–2px suits narrow bevels and pixel outlines; 3–6px suits round stones or broad surfaces. Larger values respond to wider shape changes instead of fine detail.
- Start with Strength 1. If wide areas clip to white or black, lower it toward 0.5.
- Curvature uses mid-gray 0.5 for flat, lighter for convex, and darker for concave. It does
not color the asset directly; connect it to
surface_edge_highlightor another consumer. - On tile assets, wrap only the axes that genuinely tile. Cross-edge normal comparison then prevents a curvature seam visible only after repetition.
Common mistakes
- A warning appears and no curvature is added: the input Surface has neither normal nor
height. Create height with
height_from_imageor add/rebuild a map upstream. - The outline is too thick: return Radius and Strength to 1 for pixel art.
- Convex and concave appear reversed: this node follows the Surface view-space normal convention. Do not insert an external tangent normal as an untyped image; adapt it through relative height and rebuild the Surface normal.
Related nodes
surface_rebuild_normal— create a consistent normal from heightsurface_edge_highlight— turn curvature into a visible bevelsurface_unpack— inspect the curvature image and other Surface mapsnormal_to_relative_height— bring an external tangent normal into the 2D Surface route