计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
scenario-zbrush-pose-print【效率与协作】Use when posing a sculpt or preparing it for 3D printing in ZBrush: "pose this character", Transpose Master, TPoseMesh, Gizmo posing with masks, ZSphere rig, Proxy Pose, weapon in the hand, stretching after posing, "3D print this", 1/6 scale statue, miniature, resin or FDM, hollowing, wall thickness, drain holes, keys and pins, cutting into parts, 3D…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Expert level means a pose that stands and reads, transferred onto every SubTool without losing a level, and print parts whose size, walls, fits and cavities were measured in millimeters on the exported files. The stance: turn every decision into a number the agent can check (scale, point order, joint angles, walls, gaps), keep the pose reversible, use strokes only for cleanup. 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).
brief_box, zb_print.envelope, set_export_scale(target_mm).| Input | Why it changes the plan | Default when the brief is silent |
|---|---|---|
| Process: resin (SLA, MSLA), FDM, molded or cast | walls, clearance, hollowing, shrink (Hasbro sculpts PVC at 104 %); molds add Hasbro's rules: touching fingers lock the mold, Group Front shows the parting line, Draw Draft Analysis shows draft | resin, direct print |
| Size: ratio and real height, envelope W x H x D, base included or not | export scale, brief box, feature floor | 1/6 = standing height / 6 (1,800 mm gives 300 mm), measured on the rest pose |
| Printer volume, slicer caps | splits (Gaboury split a car for the Form 2 bed); polycount or file caps (his example: 50 MB) | ask; report each part's size |
| Parts: one piece or kit, glued or pegged | cuts and keys (Carratala plans cuts while sculpting) | natural breaks (collar, belt, cuffs, weapon at the hand), two keys per glued joint [added] |
| Pose source; alternate poses | route and layers | one layer per pose |
| Deliverable | STL has no units; 3MF declares them | STL and 3MF per part in mm, JSON report |
The artists' default (Ctrl+click a polygroup, drag a Gizmo ring) is a canvas gesture. The SDK cannot read mask data, and press_key is documented but marked "Does not work, hidden for now" in the installed 2026 stub (with canvas_click it is reported unreliable, Maxon forum). Routes by determinism:
| Route | When | How | Status |
|---|---|---|---|
| A. Numeric external rig (Munoz Gomez's Blender route, made exact) | humanoids, extreme or many poses | TPoseMesh, export_tpose, loose_pieces weighted rigidly to one bone each, scenario-blender-rigging poses by angle and returns the same order, import_pose, TPose>SubT | deterministic; guards tested offline |
| B. ZSphere rig by code | in ZBrush, organic, or DynaMesh via Proxy Pose | joints from polygroup borders, zs_build, forward kinematics zs_pose | FK tested; bound mesh following API edits [verify live_p02] |
| C. Whole-SubTool rigid moves | a base, a stand, a prop added after posing | rotate_subtool_matrix (X, Y, Z) plus translate_subtool, the carrier's whole transform, corrected from exports | math tested; signs [verify live_p03, p08] |
| D. Mask plus Gizmo or action line | cleanup by a computer-use agent or a human | Ctrl+click group, Alt pivot, drag | weak for this agent |
Weak without a human: gesture design, Plouffe's hand-painted gradient masks, large fold redesign. Seam smoothing and Move Topological have agent forms in procedures.md P6, still [verify].
zb_pose.call("name", ...) runs inside ZBrush; zb_print runs on exported OBJs; full code in references/procedures.md.
inventory(), target and envelope in mm. GATE: every SubTool named, unique, with points and levels.set_export_scale, export_parts, check_scale, then brief_box (hidden while exporting). GATE: height within 0.5 % [added], one export scale on every part (a part appended from another ZTool arrives at another scale), envelope ok, named dimensions checked with caliper.clean_project (ZTL saved, default project, Load Tool); polygroup every segment, plates and props left as loose pieces; preflight_tpose. GATE: preflight ok, density spread under 2x [added]. No levels: scenario-zbrush-retopology-export or Proxy Pose.tpose_mesh(layer=True, groups=True) with props and plates visible, export_tpose (the order reference), save_project; route A or B, center first, parents before children, rotations only; no Gizmo deformers. GATE: rigid_pieces ok, follows puts each carried prop where its carrier took it (0.5 mm [added]), piece_interference empty or listed for P6, tpose_to_subtools(expected, rest_obj) passes its order guard and point counts, rigid_delta within 2 degrees of the plan [added], balance stands or a base is planned; review sheet: silhouette and weight read (Plouffe: an unstable pose "destroys the entire work").stretch_report near the rest pose, piece_interference ok, Polyframe tiles.hollow_copy (insert inside, DynaMesh about 128, Create Shell), keep_inner_shell, Live Boolean: detailed part start, inner shell, drain and vents subtract; thin ends stay solid. Too thin: move the cutter inward, never the outside. GATE: thickness p01 at the wall target, no sealed cavity for resin, outer_drift ok, vents at cups.plan_keys; socket = peg grown by 2 x clearance. GATE: clearance median at target, no interference; one key pair test-printed before the kit (Gaboury).mask="cavity" [added]), pre-process after any edit. GATE: faces within budget, deviation p99 under the printer's XY resolution [added], close-ups before and after.print_report(..., envelope_mm=...), a review tile at real size (detail under the process floor is backfilled, fused or left to paint: Hasbro). GATE: print_report["ok"], every "to look at" item looked at, unit stated.| Item | Value | Source |
|---|---|---|
| Minimum wall | 1 mm; 0.85 flagged | Hasbro, PVC and Formlabs copies |
| Edges after trimming | 0.5 mm; about 0.2 mm floats away | Hasbro |
| Fit offset | 0.12 mm (Formlabs); Inflate 2 gave it in his ZTool | Hasbro, calibrate per ZTool |
| Shell copy | DynaMesh 64 too low, 128 enough (9 in car); Thickness 4 then 6 | Gaboury |
| From Thickness | Min 1, Max 5 once scaled to mm | Maxon doc |
| Decimation | about 1M per mesh; 2.7M to 545k at 20 % unchanged; 8k faceted | Gaboury |
| Decimation quality | 40 to 100 % near identical, 2 to 40 % visible | Maxon doc |
| Scale with shrink | height / 12 + 4 % for a 6 in PVC figure | Hasbro |
| Proxy Pose skin | Adaptive Skin Density 1, DynaMesh Resolution 0 | Pavlovich |
zb_print on OBJs in mm): watertight, volume, thin-wall share (0.2 % of samples [added]), sealed cavities, floating shells, height, envelope, one export scale, build volume, clearance, balance, faces, outer drift. Pose: point order, rigid_pieces, follows, piece_interference, rigid_delta, stretch_report.zb_review.review, MatCap Gray, five views): gesture and balance; joints with Polyframe; primitives round; the grip closed around the handle; the brief box shown once; From Thickness on a copy; every listed spot; decimated close-ups. Judge with references/critique.md.| Mistake | What it looks like | Fix |
|---|---|---|
| Top-level pose, rough mask, mask cleared too early | stretched, overlapping polygons | lowest level, blurred mask, Smooth and Move the seam before clearing (Munoz Gomez) |
| Carried prop pulled out of the TPose mesh, turned by one angle afterwards | a sword beside a raised, bent hand; interference 0 still passes | keep it in the TPose mesh as a rigid piece; else the carrier's whole transform, gate follows |
| Partly hidden SubTool at TPoseMesh | Vertex Mismatch | preflight_tpose (ShowPt on all) |
| Gizmo deformer on the TPose mesh | destroyed SubTools; a point count check misses a reorder | rotations or rigs; the order guard refuses the transfer |
| Session closed with a TPose mesh, no ZPR | no way back to the SubTools | save_project right after TPoseMesh |
| Neutral-pose detail shown on the pose | soft, stretched detail at bends | refine on a pose-only layer (linear blend) |
| Create Shell numbers read as mm; insert touching the surface | wrong walls; one joined piece | measure thickness; insert inside, drain as a cutter |
| Wall thickened from outside | the sculpt drifts | move the cutter inward, check outer_drift |
| Mask or edit after Pre-process | decimation ignores it | pre-process again (the wrapper always does) |
| No clearance on keys | "20 discs to sand before noon" (Hasbro) | 0.12 mm offset, measured, test print |
| STL without a unit | 150 mm printed as 150 in | say mm, or ship 3MF |
Lightbox/Projects/DefaultProject.ZPR is used [verify].from_thickness refuses first.references/procedures.md: bridge procedures with full code (scale and brief box, clean project, Transpose Master, three rig routes, fixes, hollow chain, keys, masked decimation, delivery). Load before driving ZBrush.references/expert-notes.md: principles by expert with timestamps and deciding conditions. Load when planning a pose or a kit.references/critique.md: the rubric for pose, deformation and print parts. Load at every gate.references/gui-paths.md: palettes, buttons, hotkeys for a computer-use agent or a human.references/sources.md: sources, credentials, timestamps, revisions.scripts/zb_pose.py (inside ZBrush) and scripts/zb_print.py (agent side, numpy): offline tests in tests/code/zbrush-pose-print/; live tests live_p01 to live_p08 not yet run in ZBrush.