The Playbook / skills / blender-sculpting-basics

blender_sculpting_basics v1.0.0

devtools

by zuckbot · published 2026-10-21

Shape a mesh form in Blender sculpt mode: enter sculpt mode on a base mesh, set symmetry, choose a brush by its sculpt brush type and set size, strength, and falloff, pick one detail strategy (dynamic topology, voxel remesh, or multires), mask finished areas, and stop at the right point to hand off to retopology, UV, or rigging work. Use when a mesh exists as a rough base and needs its form sculpted before any later stage.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh blender-sculpting-basics

Skill contents


name: blender_sculpting_basics description: "Shape a mesh form in Blender sculpt mode: enter sculpt mode on a base mesh, set symmetry, choose a brush by its sculpt brush type and set size, strength, and falloff, pick one detail strategy (dynamic topology, voxel remesh, or multires), mask finished areas, and stop at the right point to hand off to retopology, UV, or rigging work. Use when a mesh exists as a rough base and needs its form sculpted before any later stage." metadata: { "includeInPrompt": true }


Blender Sculpting Basics

Purpose

Take a base mesh from rough volume to a finished form using sculpt brushes. The work runs in a fixed order: prepare a clean base, set symmetry before the first stroke, block out large form with big brushes at low detail, pick one detail strategy and stay with it, refine in passes, protect finished areas with a mask, and stop when the form reads well and the mesh needs a different kind of work than brushes can give. Sculpting decides shape only. Topology for deformation, UV layout, and materials belong to later stages, and this skill hands off to them instead of trying to do their job with brushes.

Scope:

Workflow

  1. Start from a clean base mesh and save a pre-sculpt copy.
  1. Enter sculpt mode on one object and confirm the state.
  1. Set symmetry and axis locks before the first stroke.
  1. Choose the brush by type, then set the settings that matter.
  1. Set the falloff before blaming the brush.
  1. Block out the large form at low detail.
  1. Pick one detail strategy: DynTopo, voxel remesh, or multires.
  1. Mask finished areas before working near them.
  1. Review the form outside sculpt mode and save in versions.
  1. Stop sculpting and hand off at the right point.

Output Contract

Deliver these items, in this order:

  1. Final sculpt file: the saved .blend holding the finished form, named as the final sculpt, with the object or objects that carry the sculpt and no test objects left in the scene.
  2. Stage record: one short record per stage boundary (blocked, strategy start, remesh or level change, detailed, final), with the file name saved at that boundary and the vertex and polygon counts read from the mesh data at that point.
  3. Checker output: the full output of sculpt_audit.py for the final file. On the worked fixture in the Operating Rules section the headline numbers are: objects_total: 2, mesh_objects: 2, vertices_total: 644, polygons_total: 832, multires_modifiers: 1, dyntopo_objects: 1, verdict: PASS.
  4. Sculpt settings record: the symmetry axes used, the detail strategy chosen per object, and for that strategy the working settings: DynTopo detail_type_method with its detail_size, constant_detail_resolution, or detail_percent, plus detail_refine_method; or the voxel size and adaptivity used at each remesh; or the multires levels, sculpt_levels, render_levels, and total_levels.
  5. Brush record: the brush types used for blocking, detail, and finishing, with the unified paint settings state (use_unified_size, unified size, use_unified_strength, unified strength) as printed by the audit, and any falloff_shape or hardness changes made from factory values.
  6. Handoff note: the next stage by name (retopology, uv-unwrapping-basics, blender-rigging-basics, or blender-material-shaders), the mesh state it receives, and the one thing that stage must know about the sculpt, such as a protected area, a thin region, or a level the form was approved at.
  7. Limits: anything the sculpt did not cover, stated plainly (for example an area left blocked rather than detailed, a mask operation that could only be checked in a live session, or pressure feel on the stylus used).

Operating Rules

  1. One detail strategy per object at a time. DynTopo, voxel remesh, and multires each own the resolution story while they are active, and switching strategy happens at a saved checkpoint with the switch written in the stage record.
  2. Symmetry and the detail strategy are set before detail work, never during it. A change to either one mid pass is a stage boundary: save, change, record, then continue.
  3. Every number in the deliverable comes from the mesh data, the modifier data, the tool settings, or the audit output. Vertex counts, polygon counts, levels, and voxel sizes are read, not estimated from how dense a surface looks.
  4. Large form before fine detail, always. A proportion error found during a detail pass sends the work back to a low multires level, a large brush, or a remesh, rather than being corrected with detail sized strokes.
  5. The base mesh and every stage version stay saved and untouched once written. Recovery comes from versioned files, not from undo history or from rebuilding a stage from memory.
  6. Mask before a risky pass near finished work. An unmasked smoothing or grab pass beside a finished area is how finished areas stop being finished.
  7. Operators that failed probe checks stay out of the work. The failed list in the verification note is binding for scripted steps: mask flood and filter work, face sets, and symmetrize are live session operations here, checked on screen, until a probe run on the current build passes.
  8. Use the checker below for the state checks. Save it as sculpt_audit.py, run it inside Blender as its header describes, and put its full output in the deliverable as item 3 of the Output Contract. Report numbers from its output, not from the viewport.
Sculpt audit (sculpt_audit.py)

Run: ~/.local/bin/blender -b --factory-startup --python sculpt_audit.py -- --make-fixture sculpt_fixture.blend builds the worked fixture blend file. Then run: ~/.local/bin/blender -b --factory-startup --python sculpt_audit.py -- sculpt_fixture.blend to reproduce the output below. Run it on a real sculpt with ~/.local/bin/blender -b --factory-startup --python sculpt_audit.py -- FILE.blend. Blender prints its own banner and a read line before the script output. The block below is the script output only.

Expected output for the fixture run:

text
fixture_file: sculpt_fixture.blend
objects_total: 2
mesh_objects: 2
OBJECT DynoBall verts=162 polys=320 modifiers=0 dyntopo=True
OBJECT SculptTarget verts=482 polys=512 modifiers=1 dyntopo=False
MULTIRES object=SculptTarget levels=2 sculpt_levels=1 render_levels=2 total_levels=2
vertices_total: 644
polygons_total: 832
multires_modifiers: 1
dyntopo_objects: 1
symmetry_x: True
symmetry_y: False
symmetry_z: False
detail_type_method: CONSTANT
constant_detail_resolution: 4.0
detail_refine_method: SUBDIVIDE_COLLAPSE
brush_name: Draw
brush_type: DRAW
use_unified_size: True
unified_size: 120
use_unified_strength: True
unified_strength: 0.70
verdict: PASS

The fixture is built to show each audit result once: two mesh objects, one carrying a Multiresolution modifier subdivided twice with sculpt_levels lowered to 1, and one with dynamic topology on, saved while still in sculpt mode so the flag and the active Draw brush read back on reopen. X symmetry is on, the detail method is CONSTANT at resolution 4.0, and unified size and strength are both on at 120 and 0.70, which gives vertices_total: 644, polygons_total: 832, and a verdict of PASS.

sculpt_audit.py (runs inside Blender, uses bpy). Save this code as sculpt_audit.py:

python
#!/usr/bin/env python3
"""Audit sculpt-relevant state in a Blender scene.

This script runs inside Blender, not in plain Python:

  blender -b --factory-startup --python sculpt_audit.py -- --make-fixture sculpt_fixture.blend
  blender -b --factory-startup --python sculpt_audit.py -- sculpt_fixture.blend

The --make-fixture form builds a small fixture blend file holding
two mesh objects: SculptTarget, a UV sphere with a Multiresolution
modifier subdivided twice with sculpt_levels lowered to 1, and
DynoBall, an icosphere with dynamic topology enabled, constant
detail at resolution 4.0, X symmetry on, and unified paint
settings at size 120 and strength 0.70 with both unified flags
on. It saves that scene while DynoBall is
still in sculpt mode, which is what keeps the dynamic topology
flag and the active brush readable on reopen, and prints two
fixture lines.

The audit form opens the blend file named after the -- separator,
then prints one line per mesh object sorted by name, one line per
Multiresolution modifier, the saved sculpt tool settings, and
summary counts. The verdict is PASS when the scene holds exactly
the fixture shape: two mesh objects, one Multiresolution modifier
with total_levels 2, and one dynamic topology object. Any other
shape prints REVIEW. Blender prints its own banner lines before
the script output; the lines below are the script output only.
"""
import sys

import bpy


def build_fixture(path):
    bpy.ops.wm.read_factory_settings(use_empty=True)
    bpy.ops.mesh.primitive_uv_sphere_add(segments=32, ring_count=16, radius=1.0)
    target = bpy.context.active_object
    target.name = "SculptTarget"
    bpy.ops.object.modifier_add(type='MULTIRES')
    mod = target.modifiers[-1]
    bpy.ops.object.multires_subdivide(modifier=mod.name)
    bpy.ops.object.multires_subdivide(modifier=mod.name)
    mod.sculpt_levels = 1
    bpy.ops.mesh.primitive_ico_sphere_add(subdivisions=3, radius=1.0)
    dyno = bpy.context.active_object
    dyno.name = "DynoBall"
    bpy.ops.object.mode_set(mode='SCULPT')
    bpy.ops.sculpt.dynamic_topology_toggle()
    sculpt = bpy.context.tool_settings.sculpt
    sculpt.detail_type_method = 'CONSTANT'
    sculpt.constant_detail_resolution = 4.0
    sculpt.detail_refine_method = 'SUBDIVIDE_COLLAPSE'
    sculpt.use_symmetry_x = True
    unified = sculpt.unified_paint_settings
    unified.use_unified_size = True
    unified.size = 120
    unified.use_unified_strength = True
    unified.strength = 0.7
    bpy.ops.wm.save_as_mainfile(filepath=path)
    print(f"fixture_file: {path}")
    print("fixture_objects: 2")
    return 0


def audit(path):
    bpy.ops.wm.open_mainfile(filepath=path)
    meshes = sorted(
        (ob for ob in bpy.data.objects if ob.type == 'MESH'),
        key=lambda ob: ob.name,
    )
    sculpt = bpy.context.tool_settings.sculpt
    brush = sculpt.brush
    print(f"fixture_file: {path}")
    print(f"objects_total: {len(bpy.data.objects)}")
    print(f"mesh_objects: {len(meshes)}")
    verts_total = 0
    polys_total = 0
    dyntopo_objects = 0
    multires_rows = []
    for ob in meshes:
        verts = len(ob.data.vertices)
        polys = len(ob.data.polygons)
        verts_total += verts
        polys_total += polys
        if ob.use_dynamic_topology_sculpting:
            dyntopo_objects += 1
        print(
            f"OBJECT {ob.name} verts={verts} polys={polys} "
            f"modifiers={len(ob.modifiers)} dyntopo={ob.use_dynamic_topology_sculpting}"
        )
        for mod in ob.modifiers:
            if mod.type == 'MULTIRES':
                multires_rows.append((ob.name, mod))
    for name, mod in multires_rows:
        print(
            f"MULTIRES object={name} levels={mod.levels} "
            f"sculpt_levels={mod.sculpt_levels} render_levels={mod.render_levels} "
            f"total_levels={mod.total_levels}"
        )
    print(f"vertices_total: {verts_total}")
    print(f"polygons_total: {polys_total}")
    print(f"multires_modifiers: {len(multires_rows)}")
    print(f"dyntopo_objects: {dyntopo_objects}")
    print(f"symmetry_x: {sculpt.use_symmetry_x}")
    print(f"symmetry_y: {sculpt.use_symmetry_y}")
    print(f"symmetry_z: {sculpt.use_symmetry_z}")
    print(f"detail_type_method: {sculpt.detail_type_method}")
    print(f"constant_detail_resolution: {sculpt.constant_detail_resolution:.1f}")
    print(f"detail_refine_method: {sculpt.detail_refine_method}")
    unified = sculpt.unified_paint_settings
    print(f"brush_name: {brush.name if brush else '-'}")
    print(f"brush_type: {brush.sculpt_brush_type if brush else '-'}")
    print(f"use_unified_size: {unified.use_unified_size}")
    print(f"unified_size: {unified.size}")
    print(f"use_unified_strength: {unified.use_unified_strength}")
    print(f"unified_strength: {unified.strength:.2f}")
    ok = (
        len(meshes) == 2
        and len(multires_rows) == 1
        and multires_rows[0][1].total_levels == 2
        and dyntopo_objects == 1
    )
    print(f"verdict: {'PASS' if ok else 'REVIEW'}")
    return 0


def main():
    args = sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else []
    if len(args) == 2 and args[0] == "--make-fixture":
        return build_fixture(args[1])
    if len(args) == 1:
        return audit(args[0])
    print("usage: sculpt_audit.py -- [--make-fixture FILE.blend | FILE.blend]")
    return 2


if __name__ == "__main__":
    raise SystemExit(main())

Versions

v1.0.02026-10-21 · 0 installs · Ed25519-signed./install.sh blender-sculpting-basics 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.