Overview
A node where layer separation becomes the 3D decomposition. quick_shade
inflates the whole picture as one silhouette, so complex shapes break down;
this node inflates each layered image (arm, body, head, ...) independently
and then assembles them, so body parts never melt together. Stacking order
automatically produces contact occlusion — the darkening where a front layer
meets a back layer.
Usage tips
- The standard chain:
pixel_canvas (Layers output) → layers_to_surface → surface_light_preview. Just draw each body part on its own layer in Pixel Canvas and you get robust automatic shading input. - In Pixel Canvas, a folder counts as one image. If you keep line art and fill on separate layers, group them into one folder per body part.
- Double-click (or the inspector's "Edit with Preview" button) opens the builder editor: tune per-layer settings while watching the lit stepped preview and the 3D relief side by side. It edits the same values as the inspector (always in sync); the light knobs are a working light only.
- Per-layer sculpting inside the editor: click a row to pick the target
layer, then raise / carve / smooth / level brushes edit only that layer.
Strokes apply to the layer's own height field before composition, so
other layers are never affected and contact occlusion follows the
sculpted shape. Division of labor: sculpt here to shape a part
(per-layer); use the downstream
surface_sculptto fix the final composed surface (plus AO painting). - Per-layer settings have a row UI: the inspector edits one row per
layer (name / shape / height +). With the Pixel Canvas Layers output
connected directly, layer names show up automatically - no extra wire.
Only when other nodes sit in between, connect Layer Names to the
Layer Namesinput. The stored format stays CSV, so headless and AI-generated graphs keep working with plain text. - To raise a front layer above another (e.g. the near arm), enter a value in
that row's
Height +(e.g.0.5). 0 keeps the shared height range. - When mixing in a ground or backdrop layer, set just that layer's row to
Flatso it stops ballooning. - Use
Custom curve(Curve) to design the swell freely: a cross-section curve opens under the row (X: edge to center, Y: height). Drag its points to get gentle slopes, steep walls, wide flat tops, or terraces. Starting from the presets (Round / Sharp / Flat top / Bell) is fastest. - The
Tiltline under a row slants the whole mound: set a direction (degrees; 0 = rises to the right, 90 = rises upward) and a strength (0-1) and the layer's height gets a low-end-to-high-end gradient. No start/end points to place — the span is derived automatically from the layer's own extent along that direction. Combine with any shape:Flat+ tilt makes a ramp,Round+ tilt a leaning dome (not available for Color only / Relief / Engrave). - Barrels, posts and horizontal logs want
Cylinder (vertical/horizontal): flat along the axis, semicircular across it. Round would also dome along the axis and drift toward a sphere. - Lantern glass and lit windows want
Emission: the color rides on top and is also written into the emission map, so it stays lit regardless of the light direction. Tune with the downstream light'semission_strength(0.3-0.5 is a good range; 1.0 tends to blow out). - Set few-pixel detail layers (eyes, patterns) to
Color only(Decal): the underlying layer's curvature continues through and the detail rides on top as paint. - Mouths, grooves, and dents want
Engrave: it carves into the surface below and the cavity darkens naturally via AO (shadow inside the mouth). For raised details (buttons, a nose) useRelief. Both take their thickness or depth from the row'sHeight +(0 = auto from part size). - Contact occlusion is light-independent "gap darkness" written into the AO
map. Directional shadows are the job of
surface_light_preview(cast shadows) downstream. Contact shadows fade automatically for layers lifted byLayer Height Offsets— use cast shadows for floating objects. - The
surfaceoutput stores layer ids as face ids (layer:0,layer:1, ...); usesurface_id_maskto extract per-layer masks. - Not to be confused with
part_composer, which places reusable part images onto a screen — this node uses the split inside one drawing for volume estimation.
Common pitfalls
- Everything inflates like one balloon: the art is drawn on a single layer. Split body parts into layers (or folders) so they inflate independently.
- Height offsets misaligned after reordering layers:
Layer Height Offsetsfollows list order (back to front). Reorder the numbers when you reorder layers. - Mosaic-like noise around small details: few-pixel layers also inflate
into full-size domes, punching craters into the height below and piling
contact shadows and highlights along the boundary. Set that layer's shape
to
Color only(orRelief) to fix it.
Related nodes
pixel_canvas— itslayersoutput feeds this nodesurface_light_preview— lights the assembled surfacequick_shade— the single-image shortcut when there is no layer splitcontact_shadow_from_order— when you want the contact shadow as an imagesurface_id_mask— extract masks from layer face ids