Added
- Packs and macros (#20):
.sfpackfiles bring brushes, alphas, Lit Spheres, Material Recipes, VDMs, keymaps, pie menus and macros in one file (format:docs/pack-format.md). File > Install Pack..., a dropped file or Library > Packs shows a review first (counts by type, every item, the license text, the author; a Supporter Pack is marked by its"channel": "insider", display only). Installed packs live in their own folders in the app data folder, can be switched off or removed, never replace built-in or user items (a clash gets the pack's name), and their items appear in the brush, alpha, Lit Sphere, Material Recipe, keymap, pie menu and macro lists tagged with the pack. New Pack exports your own items;pack_install,pack_list,pack_remove,pack_enable,pack_disableandpack_creatework insculptforge-cliand Python;--no-packsis a safe mode. Packs are data only and every one is treated as hostile: a strict zip reader refuses absolute paths,.., symbolic links, devices, encryption, ZIP64, overlapping entries and duplicate or Windows-reserved names, caps sizes, file counts and the unpacking ratio, accepts only the listed file types and parses every file (JSON strictly). Macros (.sfmacro): Record Macro keeps the commands you run, the Macro Editor checks the text as you type, and every macro is an action for F3, keys and pie menus; edits on one Part undo as one step. A macro shows its whole command list and asks before it first runs, only runs SculptForge's own commands (nothing that reaches the network or another program), and uses files only inside the project folder or picked when it runs (macro_run,macro_list,macro_check). - PBR viewport: Material > Viewport Shading switches between Lit Sphere (the default) and PBR, which
shows the texture's material channels as a game engine or renderer does: GGX reflections from a prefiltered
environment, diffuse light from its spherical harmonics, multiple-scattering energy for rough metals, exposure
and an ACES, AgX or Reinhard tone map. Painted Normal and Height channels bend the shading through MikkTSpace
tangents. Four environments: Studio (generated) and three CC0 HDRIs from Poly Haven (Photo Studio,
Small Studio, Outdoor Sky), plus
.hdr/.exrfiles fromSCULPTFORGE_HDRI_PATH; rotation, the environment behind the model and a cavity term that keeps sculpted detail readable. Parts without a material texture use a roughness and metallic set there. A new environment is prepared on a worker thread, and a 20.9-million-triangle mesh draws in about 8 ms in PBR next to about 6 ms with Lit Sphere (Apple M1 Pro). Saved with the project (viewport_shading mode=pbr environment=outdoor_sky exposure=0.5 tone_map=agx). - Mesh Maps bake: Tool > Bake adds Curvature (convex edges bright, creases dark, from the surface's mean
curvature at a set radius), Thickness (how far rays travel inside), Position (16-bit) and ID (a colour
per face group or per Part) to the normal, world normal, displacement, AO, cavity and colour maps. The source can
be the Part's own top subdivision level (baked onto its lowest level) or its micro level (onto its base),
besides other Parts. UVs outside 0..1 bake as UDIM tiles (
name_normal.1001.png,1002, ...). The bake runs on a worker thread with progress and Cancel (bake source=subdivision maps=normal,ao,curvature,thickness,position,id). - Mesh Maps in the texture (
mesh_maps): AO, curvature, thickness, position, world normal and ID baked on the texture's own UVs and size, tile by tile on every core, for Fill layers to read. After sculpting, only the tiles near the change are baked again, from a compact copy of the nearby triangles, and the result matches a full bake texel for texel (2K maps of an 82k-triangle Part: about 10 s in full, about 0.5 s for a local change). - Fill layers: Tool > Paint Layers > + Fill Layer lays a material (colour, roughness, metallic, height) over the
whole Part through a mask built from effects: Edge Wear, Dirt, Gradient, Thickness and Light
Direction generators reading the Mesh Maps, Noise in 3D (no UV seams), a Paint mask painted with the
Paint brush, Levels, Blur, Invert and Fill, each with its own settings and blend. Fill layers sit
in the layer stack with paint layers, re-evaluate tile by tile when their settings, painted mask or the Mesh Maps
change, undo like any edit and are saved with the project (format 7). With Live on, sculpting re-bakes only
the Mesh Maps tiles near the stroke on a worker thread and the Fill layers follow the new form
(
fill_layer generator=edge_wear color=#e0e0e8 metallic=1,mesh_maps action=live live=true). - Material Recipes: Worn Metal, Painted Edges, Dirt and Dust and Rusted Iron, stacks of Fill layers
kept as small
.sfmaterialtext files, laid on a Part in one undoable step from Tool > Paint Layers > Material Recipe. Save your own from a Part's Fill layers (material_recipe name=worn_metal,material_recipe action=save path=mine.sfmaterial). - Forge Spheres with the pointer only (#8): Drag places child (or Ctrl+drag) moves a new sphere away
from its parent in one Draw drag; the sphere last clicked or added is selected (outlined in orange) for Delete
Selected, Insert Between and Set as Root, and a right click on a sphere opens a menu with the same.
Set as Root keeps the armature's shape and links (
zsphere_set_root index=3). - Maya input style (#32): Alt+right drag zooms with a sideways drag (right zooms in), as Maya's own dolly; Preferences > Input > Zoom drag switches it back to up and down, and Invert zoom turns zoom drags around in every style.
- Along the normal (from the discussions): Move, Tendril, Elastic Tendril and KelvinGrab started with the invert key held (Alt; Ctrl in the Blender and Maya styles) move the surface along the average normal under the brush instead of the view plane. These brushes had no use for the key; Preferences > Input > Along the normal makes it Always or Never.
- Whole-Part deformations (from the discussions): Tool > Deformation > Polish (bilateral normal filtering:
noise goes, planes and edges stay), Relax (even spacing along the surface), Smooth (Laplacian, or Taubin
with Smooth keeps volume) and Balloon (fills the form out; negative lets the air out), each with an amount,
mask-aware, open borders and hidden faces kept, one undo step, and as commands (
deform_polish,deform_relax,deform_smooth,deform_balloon). 10.5M vertices at amount 50: Smooth 0.5 s, Balloon 0.7 s, Relax 0.9 s, Polish 2 s (Apple M1 Pro). - Dynamic topology's Smooth remesh (from the discussions): how much Shift-smoothing remeshes while Dynamic is
on, from Smooth only (the topology stays) to Simplify (the default, as before); a preference, saved with
the project,
dyntopo smooth_remesh=0. - Brush falloff options (from the discussions): Connected only keeps a dab to the surface joined to the point under the cursor, View falloff measures the falloff on screen (a cylinder through the model along the view), as Blender's proportional editing. For every sculpt brush, recipes, VDM stamps, masking and vertex paint; saved with the preferences, the project and custom brushes. A dab moving 470k of 10.5M vertices: 9.6 ms, 16 ms with Connected only.
- The official community Discord (https://discord.gg/gWrYkEmQhH): Help > Join the Discord..., a button on the support card at launch (it opens the invite and leaves the card open), a link in the first-run welcome, the top bar and footer of every website page, the membership page (members get private channels), the README and CONTRIBUTING.md (questions on Discord; bugs still go to GitHub issues).
Changed
- The website's membership page is now
support.html(titled Membership; the old address redirects there) and lists what each membership includes. Help > Support SculptForge, the welcome, the reminder and the launch card open it and describe the membership benefits; the one-time option is now the One-time Supporter (pay what you want). - Backface culling (#68): Tool > Display > Backface culling skips the back faces of every Part, closed or open, from any view: you see through the openings of open meshes, and brushes and picking work only on the faces drawn. Off by default; Store Config keeps it, projects keep their own. An 8M-triangle open mesh seen from behind: 3.1 ms -> 0.7 ms a frame; a closed 20M sculpt is unchanged (its hidden back faces were already skipped).
- Viewport cursor (#73): a crosshair over the 3D view where brushes act; the arrow (or the resize, text and link cursors) over panels, menus, popups and gizmo handles. Preferences > Interface > Viewport cursor: Crosshair (default) or Arrow.
- A radial menu on the right mouse button (#74): Preferences > Input > Radial Menus offers Right mouse button; a plain right-drag then opens the pie (as Maya's marking menus) and the view turns with Shift+right-drag or the style's other ways (the panel says which). Off by default.
Fixed
- Maya input style (#32): Ctrl+Alt+Shift+drag erases the mask instead of starting the Ctrl+Shift visibility selection.
- Smooth on Quad Remesh results (#69): smoothing averaged every neighbour along a triangle edge, quad diagonals included, so a vertex at one end of a diagonal was pulled along it and the quads sheared into zigzags. Smooth (the brush, Shift, recipes' smoothing and Tool > Deformation > Smooth) now averages the polygon's own edges. 30 smooth strokes on a remeshed sphere: corner angle error 3.9 -> 3.3 degrees (it was 8.8); on the lion head 8.7 -> 9.7 (was 19.5). Triangle meshes are unchanged.
- Keep Masked remeshing (#67): Voxel Remesh with Keep Masked failed on real models ("Couldn't cut the remeshed surface cleanly") at every resolution, because the voxel surface touches itself where parts of a model meet (a lion's mane) and the join refused any such surface. Those spots are now fine; a mask edge that touches itself is tidied at those corners, masked spots smaller than the new polygons are remeshed, narrow gaps between masked areas are kept, and the strip is widened where the join folds (the status line says when the mask was tidied). When it still can't be joined, the message says what to change (blur or grow the mask, by how much, or unmask where parts overlap). Lion head and marble bust, four masks, two resolutions: 0 of 16 joined before, 16 of 16 now.
- Tablet mouse mode (#72): after lifting the pen and putting it down elsewhere, the brush and the system arrow moved together but apart, and clicks landed at the brush. In mouse mode the system cursor is now the one cursor for the brush and the panels (read with every pen position; the pen adds pressure and tilt).
- Radial menus on mouse buttons open only on a plain press (#74): Alt+middle pans, Alt+right zooms (Maya style) and Shift+right turns the view, whatever menu is on the button.
- glTF import rejects malformed accessor and buffer sizes instead of crashing or reading out of bounds (reported by @Agapenordev in [#70]).
- Paint Layers: picking a Material Recipe, or changing a Fill layer, from the panel could crash: the panel kept reading the texture the command had just replaced. Its commands now run once the panel is drawn.
Downloads
New here? install/ explains
which file to pick, or install with one command:
curl -fsSL https://raw.githubusercontent.com/islandmed/SculptForge/main/install/install.sh | sh (macOS / Linux),
irm https://raw.githubusercontent.com/islandmed/SculptForge/main/install/install.ps1 | iex (Windows PowerShell).
Each file is also attached without its version number (e.g. SculptForge-macos.dmg) so links to
releases/latest/download/... always get the newest build.
| Platform | File |
|---|---|
| Windows 10/11 (x64) | SculptForge-…-windows-x86_64.exe (installer) or .zip (portable) |
| macOS 11+ (Apple Silicon and Intel) | SculptForge-…-darwin-universal.dmg |
| Ubuntu / Debian / Mint / Pop!_OS | sculptforge_…_amd64.deb or …_arm64.deb |
| Fedora / RHEL / Rocky / Alma 8+ | sculptforge-…x86_64.rpm or …aarch64.rpm |
| Studio pipelines (VFX Reference Platform) | SculptForge-…-linux-…-vfx2026.tar.gz (GCC 14.2, glibc 2.28) or …-vfx2027.tar.gz (glibc 2.34), with the Python 3.13 module |
| Any Linux | SculptForge-…-x86_64.AppImage or …-aarch64.AppImage (they update themselves with AppImageUpdate) |
| Arch Linux | yay -S sculptforge (AUR) |
The builds are not code-signed yet. macOS: right-click the app → Open the first time.
Windows: if SmartScreen appears, choose More info → Run anyway. Checksums are in SHA256SUMS.txt.