算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
scenario-zbrush-stylized【设计与创意】Use when sculpting a stylized or cartoon character, bust, collectible or toy in ZBrush (Overwatch, Fortnite, Disney look), judging shape language (S and C curves, parallel lines, 70/30, silhouette read at a distance), exaggerating proportions on purpose, keeping stylized planes crisp through subdivision, sculpting stylized hair (chunky clumps, curve …
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Expert stylized work is anatomy simplified on purpose: real landmarks and proportions as the baseline, a few named exaggerations, and shape-language rules an agent can measure on a silhouette. Curves are the agent's best tool: strands, clumps, straps and scarf tails come from computed 3D paths, so a "tweak" regenerates a path instead of sculpting it. 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).
| Input | Changes | Default when the brief is silent |
|---|---|---|
| Purpose | game (loops, budget, rigged hair), collectible or toy (walls, parts, scale), concept or still | portfolio still |
| Reference | concept image, turnaround, style (Overwatch chunky, Disney round) | none: real baseline plus only the named exaggerations |
| Hair | strands (rigged or per-chunk retopology) or one sculpted mesh | sculpted mesh (Pablo) |
| Budget | triangles per hero and per hair version | none for stills; Blizzard's hero was 16k [unit ?] |
| Scale | print height or toy line (6 in, 3.75 in) | a 200 mm ruler SubTool anyway (Shane) |
| Symmetry | symmetric design or not | symmetric, then a deliberate asymmetry pass |
nose_third, brow to nose base over a third of the face, real 1.0; a heavy brow: brow depth; long shins: femur_tibia). Take each value from the concept; without one, push the named feature until it survives the 64 to 128 px thumbnail read, and record it. Write the three reads (Rakan): the silhouette idea, the secondary shapes that carry intent, the tertiary detail. Plan hair chunks and the part line.
GATE: every knob has a target and a reason.zb_review.review.
GATE: lineup() IoU under 0.85 between variants [added]; the chosen one reads at 64 to 128 px (squint()).head_checks and body_checks on subtool_boxes() pass, or each failure is a recorded deliberate break; head_taper() on a top render of the cranium alone; front and side ortho renders against the concept; a three-quarter perspective look render (zb_sculpt.persp_snapshot_code) for the eye sockets.remesh_code, scenario-zbrush-sculpting); cut planes with broad hPolish or TrimDynamic strokes (forgiving, so scripted strokes work); tuck forms into each other. ClayPolish works as a global planar filter [added for forms; Pablo uses it on hair].crease_planes (Groups By Normals, Crease PG, CreaseLvl), then Divide by level discipline (scenario-zbrush-sculpting P15). Creases are edge tags: any later DynaMesh or ZRemesher needs them again [added].
GATE: shape_language() on front, side and three-quarter silhouettes: no parallel pairs, straight fraction at most 0.25, noise at most 4 flips per 1000 px (defaults [added]); no band_breaks() break in the 45 to 55% band; no dips under MatCap Metal01 (Plouffe); after Divide the creased borders stay crisp in a grazing view.lay_strands with sides=0 (Curve Flat, Pavlovich) or 4 for a strap; paths from march_strand with gravity, bent into an S.classify_polyline); no parallel tails (strand_report).roots_along the part line and hairline, directions_away from the part, plan_strands with alternating C and S bends and vary() lengths; draw it with overlay_paths on front, right and top renders and look at it (Pablo polypaints chunks; Dan paints sections on the concept).scalp_shell; fat CurveTubes per chunk, DynaMesh a few hundred to fuse; one stroke_from_view ClayBuildup stroke per clump from its best_view (sculptris=True); Dam_Standard Zsub along each crevice_path; rebalance; finish_hair.strand_mesh_report; mirror a parted style after.
GATE: the plan shows no parallel neighbors and designed kinds read in the right and top views; hair reads at a squint; the five review views (top shows the parting) under two MatCaps show no gaps or clipping; rest areas stay calm.value_check): no pure black or white, strongest contrast at the face; before color, only darker lashes and pupils.toy_scale (height / 12 plus 4% for 6 in; / 18 for 3.75 in);feature_check of strands and thin forms at print scale (1 mm walls, 0.5 mm trimmed edges);| Value | Relative to | Source |
|---|---|---|
| knee at half the leg; hands at mid-thigh; jaw corner at 0.5 of head depth | real baseline for knobs | Shane |
| eye line 0.5 of head height; face thirds equal within about 5% of head height | real head | Anatomy For Sculptors (character digest) |
| outer canthus behind inner by at least 0.10 of head depth | starting threshold | stylized digest [added] |
| head sides from the top: taper (narrow / wide width) at most 0.95; side sag at least 0.01 of depth | head_taper defaults | Shane rule, thresholds [added] |
| 70/30, never 50/50; flag 0.45 to 0.55 | break position along a span | Rakan; band [added] |
| blockout = 90 to 95% of the low poly; 16k hero budget incl. two hairstyles | game character | Rakan |
| hair DynaMesh: 128 shell; 440 blocking; 1416 refined; 1032 to 1784 detailing; re-DynaMesh at 2.4M to 2.6M points | Pablo's head, his machine | Pablo frames |
| Deformation Polish 2; ClayPolish Max 25, Min 0, Sharp 0, Soft 0, RSharp and RSoft about 5 | finishing | Pablo frame |
| Curve Tube Brush Modifier 20 default, 4 square, 0 flat; Z Intensity 34 flattens | tube profile | IMM doc, Pavlovich |
| strand about 3 to 4 polygons across | game strand | Dan frame |
| 1 mm wall (0.85 flagged), 0.5 mm edge, 0.12 mm fit offset, elbow 115 degrees | toy production | Bennett |
head_checks and body_checks pass or are deliberate; head_taper on the top view; split_check on the brow line, scarf band and part; shape_language flags empty on three silhouettes; no 50/50 band_breaks; lineup IoU; strand_report without parallel pairs and with designed kinds per view; strand_mesh_report with one shell per strand and faces within budget; points after every DynaMesh; feature_check in mm for toys.zb_review.review under MatCap Gray plus Metal01 (dips) or another MatCap (hair gaps, Dan); squint at 64 and 128 px; annotate_shape; the plan overlay before hair is laid; the perspective look for appeal; top view for the parting and head sides; the back of the head finished too.| Mistake | Looks like | Fix |
|---|---|---|
| Uniform exaggeration | every feature big, nothing reads | one or two named knobs; the rest at baseline |
| Eye corners on one plane | flat mask face from the top | pull the outer canthus back (canthus_recess) |
| Parallel head sides, or a flat side plane | boxy or balloon cranium from the top | clip the sides, keep an arc (head_taper) |
| Planes lost after Divide | mushy, rounded stylized planes | crease_planes after ZRemesher, before Divide |
| Parallel limb or strap edges | tube legs, boring pants | flare the top, taper the bottom |
| 50/50 splits | scarf or belt exactly mid-span | move to 70/30 (split_check) |
| Detail everywhere | noisy contour, no rest | keep calm zones (Pablo, Rakan) |
| Hair as one lump or thousands of strands | no chunks at a squint | plan the big chunks first, then one strand or clump each |
| Strands pushed and smoothed by strokes | soft, kinked strands | regenerate the path and re-lay; Dan never smooths strands |
| ClayPolish mask left on | the next brush "does nothing" | finish_hair clears the mask |
| Toy with flyaways or touching fingers | breaks, won't release from the mold | fuse, separate, check at 1 mm |
stats(), review sheet); cloth drapes and realistic anatomy from scenario-zbrush-character-creature.LightBox/Brushes.curves_to_ui alone may not build the mesh (Maxon's example): live_01 measures the apply and the axis mapping.Draw:Perspective (installed commands.xml, no Transform:Persp); PATHS tries the installed ids first. The Gizmo is the default and Local Symmetry follows it. Cmd+W quits ZBrush on macOS.references/procedures.md: bridge code per stage. Load before running anything.references/expert-notes.md: principles by expert with timestamps; disagreements and deciding conditions.references/critique.md: the self-review rubric.references/gui-paths.md: palettes, brushes, settings, hotkeys (computer-use agent).references/sources.md: sources, credentials, URLs, timestamps.scripts/zb_stylized.py: the module; reach its ZBrush side with zb_stylized.call(), not zb_launch.call. Tests: tests/code/zbrush-stylized/.