The Alpha pill
Every brush except Displace shows an Alpha pill in the viewport toolbar (Displace has its own texture picker in its panel instead). The pill's label is Alpha when nothing is chosen, or Alpha: {name} once you have picked one.
| Setting | What it does | Default |
|---|---|---|
| Alpha Texture | "Brush alpha (stamp texture) by session texture-registry name; the grayscale alpha modulates the falloff across the brush footprint (ZBrush-style stamps). None = plain falloff." Shown as a texture picker with 32x32 thumbnails; the first entry is always None, and float-format textures carry a " (VDM)" badge. An empty registry shows "(no textures loaded - add a Load Texture node)". | None |
| Alpha Rotation | "Alpha rotation: follow the stroke (Rake), randomize per stamp, or a fixed angle." Values: Rake (follow stroke), Random, Fixed angle. Shown only once an alpha is chosen. | Rake (follow stroke) |
| Alpha Angle | "Fixed alpha angle in degrees." Shown only when Alpha Rotation is Fixed angle. | 0.0 (-360 to 360) |
Once an alpha is active, the on-surface brush indicator swaps from a plain sphere to a flat quad showing the texture, oriented exactly as the stamp will be laid down.
The brush library on disk
Alphas and VDMs are read from two folders:
- Shipped - inside the plugin, under
Resources/Alphas. - User -
%LOCALAPPDATA%/MeshMorpher/Alphas. This is deliberately outside the install directory, which is read-only for a normal user when the app is installed under Program Files - drop your own files here and they show up alongside the shipped ones.
Both folders are published into the graph's texture registry automatically, so anything in them appears in the Alpha and Selected Texture dropdowns without needing a Load Texture node. The shipped library itself is listed right there in the dropdown - open it to see exactly what your build includes, rather than relying on a fixed count here.
Which format goes in which folder is decided by file extension, not by sub-folder, so your own sub-folders work the same way:
- Alphas - 8-bit grayscale PNG (BMP, TGA and JPG also work; 16-bit grayscale and colour sources are accepted and reduced to Rec.709 luma). White is full brush strength, black is no effect.
- VDMs - OpenEXR, 16-bit half float, 4-channel RGBA, ZIP-compressed. A 1-channel grayscale EXR is rejected as a VDM.
Every shipped alpha except Alpha_HardCircle fades to black before the image border, because the brush maps the stamp footprint onto the whole 0-1 UV square - an alpha that is still bright at its border would stamp a hard square edge into the mesh. Keep the same margin in anything you author yourself.
The VDM convention
A vector displacement map replaces the brush's height dome with real, directional offsets. The convention (Native source space):
- Space - tangent/stamp space. Red is the offset along the stamp's U axis, green along V, and blue along the outward surface normal (positive blue = outward). Alpha is unused and written as 1.0.
- Values - signed and zero-centred: 0.0 means no displacement.
- Units - fractions of the stamp footprint's diameter. The shader multiplies by
2 x Radius, so a blue value of 0.25 lifts by half the brush radius - which is why authored VDM values look small. - Midpoint - derived, never a setting you configure: a float pixel format uses 0.0 as the midpoint, anything else uses 0.5. If an 8-bit VDM has sRGB enabled on its Load Texture node, you will see the toast: "VDM stamp '{0}' has sRGB enabled on its Load Texture node - disable sRGB there, or the gamma-decoded gain will warp the displacement."
The Displace Tool panel
| Setting | What it does | Default |
|---|---|---|
| Selected Texture | "Name of the registered texture to displace with - picked from the dropdown of textures the graph has loaded." Thumbnail picker, with a (VDM) badge on float textures. | None |
| Magnitude | "Overall amount applied per vertex. For the VDM brush this is the displacement intensity: 1 = the map's authored proportions (true scale) at any drag size, for Native source-space maps. Blender/Custom source-space maps get VDMAmplitudeScale auto-fitted on texture selection, so their effective scale at Magnitude 1 depends on that fit." | 1.0 |
| UV Scale | "Tiling applied to texture coordinates." Whole-mesh action only. | (1, 1) |
| UV Offset | "Constant offset added to texture coordinates." Whole-mesh action only. | (0, 0) |
| Center | "Pivot value the effect is balanced around." Whole-mesh action only. | 0.5 |
| Image Channel | "R = 0 / G = 1 / B = 2 / A = 3 - clamped to 0..3 at apply time." | 0 (0-3) |
| Vector Displacement | "BRUSH mode: treat the selected texture as a tangent-space VECTOR displacement map (VDM) - RGB = offsets along the stamp's U / V / normal axes, so one stamp can produce overhangs (ears, scales, lips) a grayscale height texture cannot. Scalar textures displace along the brush normal as usual. VDM stamping lives ONLY on this tool." | off |
| VDM Source Space | "How the selected VDM's channels are laid out. Leave on Native for anything made with Bake VDM Brush or from the shipped library; switch when importing a map authored by another tool's convention." Values: Native (baked or shipped here), Blender VDM Brush Baker, Custom. Shown only when Vector Displacement is on. | Native (baked or shipped here) |
| Custom Swap UV | "Custom convention: swap the U/V channels (R<->G) before applying the negations below." Custom only. | off |
| Custom Negate U | "Custom convention: negate the U (post-swap R) channel." Custom only. | off |
| Custom Negate V | "Custom convention: negate the V (post-swap G) channel." Custom only. | off |
| Custom Negate N | "Custom convention: negate the normal (B) channel." Custom only. | off |
| VDM Amplitude Scale | "Multiplier for maps authored in absolute units rather than fractions of the stamp footprint. [...] an imported ZBP bake auto-fits (its authored units are unknown ahead of time), while a Bake VDM Brush output or a shipped library map never does (already true-scale). A texture of unknown provenance (e.g. Load Texture From File) falls back to the old rule: auto-fit unless VDMSourceSpace is Native. Can always be overridden afterwards; Blender's default 2 m grid needs roughly 0.5." VDM only. | 1.0 (0.01-100) |
| Mirror Stamp | "Flips the stamp left-right so one authored file (e.g. VDM_Form_Ear) serves both sides instead of shipping a mirrored second file." VDM only. | off |
Displace's settings persist between sessions, the same as every other tool's stored settings.
Two buttons sit below the panel:
- Displace - runs the whole-mesh, UV-based height displace. It stays disabled unless mask-paint mode is off, the mesh is loaded, GPU sculpt data is ready, and Selected Texture resolves to something real.
- Fit Amplitude - visible only when Vector Displacement is on, and enabled once a VDM texture resolves. It reads the map on the CPU and sets VDM Amplitude Scale so the peak displacement lands at a sane fraction of the stamp footprint.
The VDM stroke is not a normal stroke
With Vector Displacement on and a texture resolved, the Displace brush switches to a drag-to-scale gesture (the ZBrush "DragRect" pattern) instead of a normal spaced stroke:
- The press anchors a single stamp on the surface.
- Dragging out grows it, dragging back in shrinks it, and the drag direction rotates it.
- The radius has a floor of 0.02x and a cap of 20x the brush size at the moment you pressed.
- A press-and-release inside 0.05x - effectively a plain click - reverts the whole stroke and commits nothing.
In this mode, Strength, pressure and brush size are deliberately ignored: the drag is the size, and the map is the shape. Only Magnitude scales the result. Ctrl inverts it.
A normal brush stroke, by contrast, re-stamps repeatedly as you drag, spaced and scaled by Strength, Spacing and brush size the same as every other brush. A grayscale texture (or Vector Displacement left off) always uses the normal stroke engine.
If the mesh under the stamp is too coarse to carry its detail, you will see the toast: "The target mesh is too coarse for this VDM stamp's detail - subdivide under the stamp."