ZBrush sculpting (core forms, scripted strokes)

SkillAI & models

Use when an agent sculpts organic forms in ZBrush 2026 (sculpt a head, bust or creature in ZBrush from a sphere, ZSpheres or primitives); when blocking primary and secondary forms, choosing DynaMesh, Sculptris Pro or subdivision levels, or setting ClayBuildup, Dam_Standard, Move or TrimDynamic; when using masks, polygroups, Morph Targets or layers; or when scripted strokes miss, do nothing, come out too strong or leave marks, or a re-DynaMesh does nothing or loses polygroups.

Available today. Use it from your connected AI after setup.

Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

Then ask your AI: use the ZBrush sculpting (core forms, scripted strokes) skill

What this skill tells your AI

The instructions your AI receives, as published by scenario-labs/skills in skills/dcc/zbrush/scenario-zbrush-sculpting/SKILL.md and read by ahel’s review.

Expert sculpting goes big to small with gates: light meshes raised in resolution only when the forms ask, clay built across the form in thin low-intensity layers, sharpness last and never on weak shapes. An agent has no pen: it uses exact operations first (primitives, ZSpheres, DynaMesh, masks plus Deformation sliders), then strokes planned from model-space forms, aimed through the view, measured in volume and reviewed after every pass (scripts/zb_sculpt.py). If a sibling skill named here is missing from your available skills, ask the user to install it (npx skills add scenario-labs/skills --skill <name>); unattended, proceed from tool schemas and flag the gap.

REQUIRED BACKGROUND: scenario-zbrush-expert (bridge, stroke engine, review loop, 2026 traps).

Stance (the expert delta)

  • Pressure is the hidden setting. Henning Sanden blocks at ClayBuildup Z 20 with "maybe 30%" of his pen pressure (0PaYUUvgwYM 00:04:58); a scripted stroke has constant pressure. Start clay at Z 6, refine at 2 to 1, calibrate once per session (zs.run_calibration), and dial a whole pass after review: a partial Morph value softens it, a negative one exaggerates it (Drust, B_wKwXwjcZs 00:05:20); layer intensity does the same on levels.
  • Clay across the form, lines along it. Henning: across puts a peak in the center that fades to the edges; along is "drawing the shape" (0PaYUUvgwYM 00:02:13, 00:30:39). Pablo Munoz Gomez builds long masses along first, then smaller strokes across, never a muscle in one stroke (tbQqC6tyDBQ 00:06:32). Each form is a center line plus a width.
  • Standard sets edges, clay builds, ClayBuildup erases. Standard pushes what is there, so it gives specificity (Henning 0PaYUUvgwYM 00:27:26); ClayBuildup replaces what is under it, never after detail (TpS0QdlfHWU 00:07:44). Pablo sets a hard edge with Standard at raised Z, then blends it with clay (tbQqC6tyDBQ 00:10:27).
  • Refine instead of smoothing, except on low-res blockouts. Henning removes marks with passes of falling intensity and smooths once at "good enough" (TpS0QdlfHWU 00:22:26, 00:22:58); Pablo smooths freely during blockout (tbQqC6tyDBQ 00:02:29). Low-res S1: a Polish slider; skin from S2 on: the descent.
  • DynaMesh while the forms move, levels once they settle. A high DynaMesh early is a "lumpy mess" (Pablo tbQqC6tyDBQ 00:04:38) and resolution is relative to object size (FrqUnna1jns 00:13:40). Never Divide a DynaMesh: its triangles and star poles become lumps no smoothing fixes (rArw79xEpvE 00:09:44). ZRemesher a copy, Divide, project.
  • Level discipline. Big moves at SDiv 1 (at the top a push "looks very wonky"); secondary forms blocked at SDiv 2 or 3, then refined upward level by level; never all the work at the top (Pablo rArw79xEpvE 00:12:28, 00:14:16; tbQqC6tyDBQ 00:12:26). Details never change the silhouette (tbQqC6tyDBQ 00:13:27).
  • Strokeless first. Pablo builds a whole blockout "without even actually using any of the brushes" (gitoJ7B8FmY 00:05:26). For an agent these are exact: primitives placed by number, ZSpheres by code, masks plus Deformation sliders, Mirror then Mirror And Weld.
  • Mid frequency is where a sculpt is won. FlippedNormals call it the backbone of detailing; pores added early put you "two levels behind" (G2o6fdoACIQ 00:05:46, 00:08:17). Details "won't fix a weak sculpt" (Pablo tbQqC6tyDBQ 00:12:50).

Establish first

InputWhat it changesDefault when the brief is silent
Subjectbase route and point ladder (STAGES[...]["points"]): head, creaturehead bust from a sphere
Purposeconcept: stop at S3 or S4, even quads suffice (tbQqC6tyDBQ 00:11:43); film or game: retopology before micro detail (Zp07GW3rND0 00:08:22); print: scenario-zbrush-pose-printconcept
Stylerealistic: scenario-zbrush-character-creature; stylized: scenario-zbrush-stylizedneutral forms
Forms listzs.Form center lines plus widths, from the brief and the domain skill's proportionsnone: ask the domain skill
Head width in model units (ref_width)every brush sizemodel width in the front view
Viewsfront is measured [obj]; others need the live_04 conventionfront

Workflow

Every pass: Scene.capture, plan (clay_pass, move_pass, crease_pass), preview_plan (look at it), run_plan, pass_report, zb_review.review, then name the ONE weakest item and fix it. Save a versioned ZTL at every gate.

  1. Session. zb_launch.start(), neutral state (P1), calibration (P2). Every pass turns perspective (Draw:Perspective) and LazyMouse off: its radius swallows the start of a synthesized path (Pavlovich AdkZe1yKFTU 00:03:31). GATE: document zoom 1, calibration present or the v02 prior noted.

  2. S0 base. One of: a sphere DynaMesh at 128 (about 43k points); a ZSphere armature (zsphere_code) with an Adaptive Skin at Density 1 or 2 and DynaMesh Resolution 0 (Pablo), then DynaMesh 64; primitives appended and placed with Geometry Position and Size (P3). GATE: the silhouette reads front and side; points within S0.

  3. S1 primary blockout.

    • Move then re-DynaMesh (move_pass, remesh_due, then remesh_code, P16: Draw mode, mask cleared, polypaint off so polygroups survive, proof that it remeshed).
    • Clay across the forms (clay_pass, preset clay_block); sockets as carve forms (sign=-1); TrimDynamic planes (preset="trim"). Symmetry on: plans cover the +X half.

    GATE: stage_gate("S1") passes; the sheet shows right proportions, every element present (G2o6fdoACIQ 00:02:50), big simple masses.

  4. S2 primary refinement.

    • Resolution up: head by the square law (next_dynamesh_resolution) toward 400k to 800k points; creature: MergeDown the pieces (in place; MergeVisible makes a new Tool; its confirmation may block the bridge [verify], so ZTL first), DynaMesh 256.
    • Descent passes Z 6, 3, 2, 1, zooming in on each region (descent, P7); TrimDynamic on junk bumps.
    • Eyes (P17): eyeball spheres placed by number, each turned 3 to 7 degrees outward (Costa j5XLtLMN0P8 00:29:10); lids cut with Dam_Standard, then moved out so they wrap the ball (Henning TpS0QdlfHWU 00:18:33). Henning shapes them with perspective on (00:17:28): strokes stay orthographic, the read is persp_snapshot_code.
    • Checkpoint risky passes and dial them (P8) before any re-DynaMesh, ZRemesher or Divide: a point-count change destroys the Morph Target, and dial_code(..., expect_points=) refuses.

    GATE: clean shapes under Red Wax, no stretched faces, stroke marks falling.

  5. Leave DynaMesh when the forms are settled and S3 needs levels, retopology is coming, or later big changes must survive detail. Henning's DynaMesh-only ladder to 648 suits a concept still: state which route and why. Levels (P11): versioned ZTL, Duplicate, ZRemesher the copy, Divide until projection_ready, then the toolkit's zb_ops.project_all(checkpoint=...), which carries the safe order (versioned save, StoreMT and a New Layer at the top level, PA Blur lowered, a gate, morph_repair); never re-implement it.

    GATE: target points at least the sketch's, volume within 1 % [added], the sheet unchanged, eyes and mouth checked level by level (repair: scenario-zbrush-retopology-export).

  6. S3 secondary.

    • On levels (P15): level_for("secondary") (SDiv 2 or 3), then "refine" one level up at a time; big fixes return to level_for("big") = SDiv 1; the top level only for tertiary and layers.
    • Symmetry off for the asymmetry pass; pattern="two_direction" on long masses; preset clay_secondary.

    GATE: mirror_asymmetry above zero, the mid band above S2, the sculpt reads at thumbnail size without detail.

  7. S4 contrast. Dam_Standard along the creases (crease_pass), deeper than feels right (0PaYUUvgwYM 00:19:49); Standard at raised Z on lids, lips and brow edges (preset="standard"), blended with clay; fill_between two cuts. GATE: shape IoU against S3 of at least 0.98 [added]; crease depth varies along the line.

  8. Hand off S5 and S6 to the domain skill with the P14 package.

Numbers

ValueNumberRelative toSource
Scripted Z, clayblock 6, refine 2, finish 2; descent 6, 3, 2, 1expert Z times 0.3 pressureHenning 00:04:58; digest derivation
Brush diameterclay block 15 to 35 %, secondary 10 to 15 %, refine 3 to 8 %, Dam 3 to 7 %, Standard 1 to 2 %, Move design 60 to 90 %, Move local 10 to 15 %head width in view (Draw Size is canvas pixels: zb_sculpt converts through ppu); clay kept within 0.5 to 1.0 of the form widthFlippedNormals frames; digest T1
ClayBuildupFreeHand, Focal -56, Alpha 06 or Off; Imbed 20, Roll Dist about 6Henning; Morten; Pablo frame 00:05:55
Dam_StandardDots, Focal -14, Zsub, Z 15 (33 for big cuts)"ten below where it starts"0PaYUUvgwYM 00:18:42; TpS0QdlfHWU
Move / TrimDynamicFocal 0, Z 51 / Focal -56, Z 43 lowered, ZsubTpS0QdlfHWU frames
Head point ladder43k sphere, 96k to 99k S1, 400k to 826k S2, 1.6M to 2.46M S3 and S4pointsFlippedNormals frames
Creature ladderskin 6k, pieces 28k to 43k (DynaMesh 64 to 128), merged 256 = 367k, SDiv 5 = 3.8MpointsPablo tbQqC6tyDBQ frames
DynaMeshpoints grow with resolution squared; limits: details safe in a 1024 cube, cap 2048 (about 24M polys)bbox longest side; per SubToolTpS0QdlfHWU ladder; DynaMesh doc
Divide, ZRemesherx4 per level; target in thousands, 5 gave 4,963Pablo rArw79xEpvE 00:03:16
SDiv per operationbig moves 1; secondary 2 or 3; tertiary and layers toplevels of the stackPablo rArw79xEpvE 00:12:28, 00:14:16
Projectiontarget points at or above the sketch's (745k vs 400k); FlippedNormals about 3MVRisbJQAaZw 00:17:24; Zp07GW3rND0 00:01:02
Eye angle3 to 7 degrees outward each, about 5straight aheadCosta j5XLtLMN0P8 00:29:10
Pass gatesdead strokes up to 10 %; re-DynaMesh at 1.5 x edge cv; Polish drift 2 %[added]

Quality gates

  • Measured: pass_report after every pass (dead strokes, volume sign, view drift, pivot shift, settings not found); remesh_code(...)["ok"]; points against STAGES and the SDiv for the operation; stage_gate (budget, big Move above SDiv 1, shape IoU, asymmetry, bands); zb_audit.verdict(..., "sculpt"); remesh_due, Polish drift, projection_ready.
  • Seen: the review sheet in MatCap Gray (front, right, back, three-quarter, top); Flat Color silhouettes and the sheet at thumbnail size; a grazing view, Red Wax for marks, a Standard material under a moving light (MatCaps bake their light) or BPR for form reading; the perspective look render for eyes; the stage checklist in references/critique.md. Never call a stage done without looking at its sheet.

Common mistakes

MistakeWhat it looks likeFix
Expert Z as a script Z (ClayBuildup 20)harsh ridges, one-stroke musclesZ 6, calibrate, dial the pass
Clay dragged along the formdrawn grooves, no volumeclay_pass hatches across
Stroke starting off the modelstrokes change nothing, the view may turnplans clip to the canvas mask; re-capture
LazyMouse left onstroke starts missing, short strokes deadpass_spec default lazymouse=False
Smoothing marks away on skin"semi smooth with details", volume lossdescent passes; Polish only low-res or at a lower SDiv
ClayBuildup over finished detaillines and pores erasedStandard for edges; clay before detail
Dividing a DynaMeshlumps, star polesZRemesher, Divide, project_all
Big Move at the top levelwonky lumpslevel_for("big"), then back up
Re-DynaMesh with a mask on or in Move modenothing remeshes (the gesture only clears the mask)remesh_code
DynaMesh with polypaint onpolygroups gone after the remeshkeep="groups" (Colorize off), or "polypaint": never both
Morph dial after a remesh or Dividethe target is gonedial first; expect_points
Symmetry assumed after a SubTool changethe stroke lands on one sideit is per SubTool (Pablo RABWfzWNw0c 00:27:02): every pass sets it
Brush:Smooth picked as the brushnothing smooths (it only becomes the Shift brush)Deformation Polish, lower SDiv
Mirror And Weld with LSym on, or the bad side as sourcemirrors locally or copies the bad sideLSym off; Deformation Mirror first (9a9S1OcYHx4 00:09:35)

Handoffs

  • Receives: from scenario-zbrush-expert a session, brief and versioned ZTL; from scenario-zbrush-retopology-export a cleaned AI or scan mesh (scenario-3d meshes arrive this way); from domain skills proportions and the forms list.
  • Delivers the P14 package (versioned ZTL, stats(), last sheet, forms as JSON, calibration, gate): realistic S3 or S4 forms on levels to scenario-zbrush-character-creature; shape-language work and hair to scenario-zbrush-stylized; organic bases to scenario-zbrush-hard-surface; a finished sculpt to scenario-zbrush-retopology-export.

ZBrush 2026 notes

  • Perspective is Draw:Perspective (installed commands.xml); Transform:Persp does not exist (zs.PERSP_PATHS). PolyFrame is Transform: Pf.
  • Brush:Dam_Standard does not resolve [v03]; zb_ops.select_brush("Dam_Standard") finds DamStandard.
  • Smooth brushes only bind to Shift and press_key does not work: Zsub replaces Alt, Deformation Polish replaces Shift, Masking buttons and Mask Changed Points [verify] replace Ctrl gestures.
  • No undo control (merge_undo is a stub): Morph Target or layer per pass, versioned ZTLs per stage.
  • Gizmo deformers and Transpose drags are GUI-only; the Gizmo deforms softly unless Focal Shift is -100. Local Symmetry follows the Gizmo: off before Mirror And Weld.
  • Sculptris Pro: no levels; Dots, FreeHand and Spray only. Chisel's default stroke changed in 2025.1: every pass sets its stroke type.

References

  • references/procedures.md: bridge code per step (P0 to P17) with its live test. Load before writing bridge code.
  • references/expert-notes.md: the experts in depth and the disagreement table. Load when choosing between approaches.
  • references/critique.md: per-stage rubric, AI-mesh judgment, stroke-plan review. Load at every gate.
  • references/gui-paths.md: hotkeys, palette paths and brush settings (computer-use agent).
  • references/sources.md: sources, credentials, URLs, timestamps.
  • scripts/zb_sculpt.py: stages, presets, Scene, generators, calibration, pass execution, remesh, levels, review metrics. Tests: tests/code/zbrush-sculpting/ (offline passed; live not yet run in ZBrush).

Signals

GitHub stars
681
Forks
82
Last commit
Sep 2026
Advanced
Item type
skill
Key
scenario-zbrush-sculpting
Source
github.com/scenario-labs/skills