Snapping & precision modeling improvements

This thread aims to promote and encourage community interaction regarding the proposed ideas in the Snapping & precision modeling improvements task.

Some of the ideas listed in the task have already been implemented and are now part of the main codebase (indicated by a checkmark). Other ideas are currently being developed in a separate branch, which can be accessed at #105941 - WIP: Snapping & precision modeling improvements - blender - Blender Projects.

Feel free to download and use the build mentioned there.

If you have any specific requests related to updating the build or fixing issues, I will do my best to address them. However, please note that this thread is focused solely on the Snapping & precision modeling improvements task.


Here are things that come to mind:

  1. Snap to Edge divisions, instead of just the center. The user should be able to input any division number.

  2. Snap on the edge, a specific distance from the edge vertex. For example, one meter increments from one vertex (Last hovered over), on the edge.

  3. Direction increment snap. When translating, extruding, or similar, there is no way to snap to direction increments, such as 45, or 15, etc, degrees from the original location. The user can rotate object in 5 degrree increments when holding ctrl, but this should be more flexible, and among the snap options.

  4. Reference line transformation. Step on 1: Set a point to rotate or scale around, step 2 select rotation axis. step 3: Set second point, step 4: Transform the selection by moving the two points (These points may snap to things), Step 5: apply. Other versions of this tool could be just for rotation, or just for scale.

  5. Translate by inputing direction and distance. Currently, the user can input an axis of translate, but not something like “Move the selection 1 meter at 15 degrees on the z plane”.

  6. Inputing a distance when moving should not lock the direction to an axis. Currently if you move an object and write a distance it automatically snaps to the X axis.

  7. Reference point translation: Step 1: Select origin point, Step 2: Move the selection, by snapping the selected origin point somewhere. Step 3: Apply.

  8. Click and drag - Confirm on release. Quick click - Confirm on second click. Both are very important and both should be always possible, instead of it being a global setting to use either one or the other. “Release confirm” works better for organic modelling, “second click confirm” works better for precision modelling, because the user has to input numerical values on the Numpad. Especially important when an action takes multiple steps.

  9. Automerge improvements: An edge crossing a face should create a vertex at the intersection. Two intersecting faces should create an edge between them. Two overlapping faces should cleanly create a face where they overlap, or merge into a single face. User optional.

  10. Various multistep ways to create planes, boxes and other primitives using active tools, with numerical dimention or coordinate inputs for each step. Also, Various multistep ways to draw arcs, circles and ellipses: Specify two points, three points, specify center point then start and end, two points and degrees, etc. The last steps would be to set the divisions of the arc/circle by scrolling the mouse wheel (or numpad input) and apply.
    A quick operator method: Select two vertexes, generate a circle or an arc between them with one operator, then adjust the last operator settings.

  11. All “Snap to” options should be checkboxes. The user shouldn’t have to hold “Shift” to toggle multiple. Just click and drag.

  12. Edge parallel snapping.

  13. Fix the buggy desctructive extrude.

  14. Precision first! Operators such as extrude, or modifiers such as “Curve to mesh” or “Solidify” should always default to “Even thickness”.

  15. Curve/Edge offset tools (with even thickness, of course). Also Face Inset with negative values allowed.

  16. Replace the “Knife” tool with a “Draw line” and “Draw polyline” active tools. The cutting and merging should happen based on the automerge settings.

  17. Move the numerical input box from the 3D view header to gizmos on the 3D view.

  18. MOST IMPORTANT, yet most difficult: Allow unlimited holes on faces. This limitation creates extra edges that get in the way of precision modelling and boolean type workflows.


Interesting list, but I guess that this tread is about realization of an already proposed functionality formed as specific tasks mentioned in topic.


Thank you for working on this. I mostly played with absolute grid snapping and found some issues.

1 Like

@FreeMind, please don’t flood this thread with requests. I could hardly get anything out of that.
For each item:

  1. Usefulness needs to be better discussed between artists
  2. Already mentioned in the main task (Change the current behavior of the incremental snap: Snapping according to the distance to the snapping point and not to the grid)
  3. Already mentioned in the main task (Change the current behavior of the incremental snap: Make the incremental value adjustable)
  4. Usefulness needs to be evaluated as it changes the existing behavior too much and takes away part of the usability of the 3D cursor
  5. Usefulness needs to be discussed, Blender already allows typing equations in location fields (eg. cos(45))
  6. Partially incorrect statement - Press TAB to enter values for other axis.
  7. Already mentioned in the main task (Transform Tools: Perform on a base point)
  8. I agree but it’s not really related to “Snapping & precision modeling”
  9. Already partially implemented with Edit Mesh: Improve 'AutoMerge'. The usability of face intersection needs to be better discussed between artists
  10. OK! Added item: “Tool for creating Arcs” in the main task
  11. This is a UI task that already exists (#104451 - WIP: UI: Change Behavior for Multi-Select Enums - blender - Blender Projects)
  12. Looks like another approach to the item: New tool for "drawing" edges on a specific offset
  13. See New tool to add and subtract prismatic volumes
  14. This is confusing :\
  15. See New tool for "drawing" edges on a specific offset
  16. Auto-Merge already has features for “cutting” and “merging”
  17. This is a request for a UI task
  18. There is already an old task about this (could not find).

I feel like I can no longer accept requests on this thread, otherwise it can get messy.


@sunkper, thanks for testing!
I was able to fix all the mentioned (and other related) issues.
The build has been updated :slight_smile:


Found strange behavior.

Master: Activate rotate tool → Hold Ctrl → Rotate any axis → Rotation “snapping” works

PR105941: Activate rotate tool → Hold Ctrl → Rotate any axis → Rotations “snapping” doesn’t work. To make it work, you have to reverse the order and first start rotating and only then pressing and holding Ctrl.

PS. Are there any plans for adding adjustable parameters for the rotating snapping? People have been asking for this for years. As of right now it is either free rotation or only by mere 5° increment.

1 Like

@JohnDow, nice find!
This is a recent regression fixed by Fix (unreported): Snap not enabled if Ctrl is pressed before operation · 45379d9b59 - blender - Blender Projects

Build-bot was triggered to update builds.

  1. Holes for mesh surfaces - #67 by JosephEagar

The main problem is that Ngon holes doesnot belong to mesh paradigm. Different software use Solid/NURBS engines or meta-mesh engines for that purposes, at the cost of an incompatibility with mesh file formats.
(Maya and Sketchup already faced that)

I can agree that there are lots of ideas that is possible to propose at this topic, but without proper testing of those ideas this topic will get messy.
Our studio already faced that when tried to design our local CAD toolsets, it just grow exponentially all the time.

However, we find 1point, 2point and 3point aligning transformations (from 3 base points to 3 target points - full matrix transformations) quite critical for precise modeling.
It can be used for new Align tool and for enhancing Bisect tool to make it more precise, making it following the desired edge with 2points, or desired face with 3points.
2pt and 3pt precise alignment of a 3dcursor and object origins is also mentionable.

I think it could be a nice goal after implementing 1pt basepoint snapping and current set of tasks.

1 Like
  1. To be fair, i can’t think of a use for this right now. Anyone?

  2. Not only must it be adjustable, it should also work for the move tool, not just for rotation.

  3. This does not affect current functionality, as It would be a unique active tool, similar to “Scale cage”. And it is indeed very useful. Here’s are some use examples:
    A cube is rotated in edit mode. All sides of it are not perpendicular to the objects local axis. This tool would let the use align the cube to the local axis easily, or align the local axis to the cube, or align the cube to another non perpentidular face of another object, either in edit mode, or object mode, without adjusting the local axis etc. There are plenty of uses. Primarily, alignment, or alignement and scaling an object to perfectly fit between two points in space.

  4. The user should not be doing math. Writing two numbers is easier. Input distance, Tab, input direction, apply.

  5. It should not lock to an axis at all, unless the user asks it to. What should happen, by default, is that the movement distance gets locked, but the direction of movement continues to follow the mouse, Only when the user specifically inputs a direction it would lock to that direction. Pressin “X/Y/Z” would lock to an axis, typing the orientation in degrees would lock to that direction, clicking or inputting coordinates on a point in space would orient the movement towards it (Snapable).

  6. It is related to UX for precision modeling.

  7. Automerge is basically boolean, that happens when the model interacts with self after every action. Therefore, uses for Lines on face intersection, or face merging when faces overlap, are the same as when the user needs to use boolean operations in another way. It’s just a different, fast, workflow to get the same result as constantly using a boolean modifier. Maybe I could mock up a video of some use cases to show how fast and powerful this can be.

  8. Snapping functionality and drawing tools are not the same. Use case: Move an object paralell to an edge of another object. Current workaround: You have to create a custom transform orientation…

  9. It’s just a very simple papercut for me… Turning off “Even thickness” results in a crooked models with unprecise measurements.

    Results that give precise, straight results, should have a priority. The same logic should apply everywhere. For example, the “Draw cube” tool is alright for organic modeling, but completely useless for precision modelling, as it does not let the user input precise coordinates and dimension while addint those cubes…

  10. But there are no draw line/polyline active tools. That’s the main point.

  11. Better presentation of number input boxes is Related to UX for precision modeling.

  12. Here’s another thing i noticed: Snapping doesn’t work for The scale cage tool, It can only do increments, but not what is set in the snapping options.

3D Cursor was in center of old precision paradigm.

Not just one point mentioned by Freemind were relative to 3D Cursor use, but several.
3D Cursor was used as a reference point.
Since 2.8, it has rotation and became a reference orientation.
But it is not well exploited.
All Shift S menu operators are ignoring it.

There should be a task to improve 3D cursor rotation use and 3D Cursor use in general.
If you want to pertinently compare new tasks to 3D Cursor use, you have to release full potential of 3D cursor, first.

For instance, point 1 or 2 can currently be solved, using 3D Cursor.
Snap 3D Cursor to an edge with Align Rotation to Target option to orient 3D cursor like edge.
Then disable Align Rotation to Target option and snap 3D Cursor to vertex.
Then, move 3D cursor to specified distance using its own orientation.
Then snap to 3D Cursor.
But to be able to snap and create a modal keymap to trigger 3D Cursor movement like an object, user has to use Cursor active tool.
If this active tool had G,R,S as modal keymaps to trigger transform of 3D Cursor instead of tool, it would be more used.

Cursor active tool should be seen just as click and drag tool to place 3D Cursor, but as a mode to transform it.
Many to tools that we want to create about a reference point or or a reference orientation could be exposed as submodes of this tool.

Absolutely ! It is so frustrating to see the cursor upgraded with rotation values but nothing in Blender taking advantage of it.


Agree that it could be exploited much more, but the ability to click on a surface and get the rotation into the cursor and then set the cursor as the transform orientation is already quite useful

There are two main poles of a possible workflows - ARTwork and CADwork.

  • From the point of ARTwork any CADwork-related conditions and solutions (separate click, aliased wireframes, precision, exactness, linear but complex shapes and assemblies) will look cumbersome, superfluous, obsolete, boring and so one.

  • From the point of CADwork any ARTwork-related conditions and solutions (release confirms, antialiased wireframes with fresnel or other effects, vignettes, sketching and brushing unprecise actions, organic shapes and so one) will look superficial, cursory, insufficient and distracting.

For example, from the point of a CADwork and its requirements the ability to click on a surface and get the rotation into the 3d cursor is an insufficiently accurate/precise functionality because the result is exact only for a single axis (a normal, or Z-axis), even if it can be considered as useful in ARTwork.

To satisfy any CADwork case, it require satisfying minimal precision requirements - as the result of an action at least two axis should be aligned precisely.

1 Like

Indeed, many options in Blender are focused only on normal and Z axis.

But the simple fact that 3D cursor is an orientation corresponding to 3 axis, now, should help for CAD work.
If alignment on Z axis can be already possible, just locking Z axis and adding a step to align X or Y axis of cursor to a target can radically improve its potential.

A major problem to define cursor rotation is that cursor wire is not coloured following color code for axis.
So, an overlay showing its orientation would be required for possible new tools to rotate it or align its orientation.
Currently the only way to know, what cursor orientation is while transforming it, is to enable a transform gizmo showing it.


Sure, but it is a separate design task.
For example, it is reasonable to set up center, then snap X and Y axis because it will set Z axis automatically.

Will this officially be part of Blender?

1 Like


Development is underway, and I am pleased to announce that yesterday, one of the long-proposed features was finally integrated into Blender. It is the ability to navigate while transforming (navigating during Move, Rotate, and Scale).

This feature can be enabled through an option located in the Keymap settings. This option had to be created because some modal modifier keys (such as using the mouse wheel to edit the influence of proportional editing) needed to be modified to avoid conflicts with the navigation shortcuts. Now, you have to press Alt in these cases.

The relevant commit can be found at 33c13ae6e38ff95393eea4e467dcb092e17ea0cd

In the description, you can find other links for more details.

Now it’s time to focus on another feature of Snapping & precision modeling improvements, with improvements in “Perform on a base point” and “Snap to Grid” being the most promising :slight_smile:


One of the most awaited improvements… thank you very much @mano-wii

Now… waiting for snap base point. :crossed_fingers:

Good job.

ps… Please consider working in snap bisect/knife on scene objects, not just in what is being edited… like 3ds ‘quick slice’ tool.
… and/or expose internal snap system to python api.


Hi, @mano-wii
Thank you for a new build. I’ve finally got some time to test it and I got a question about the way edge basepoint snap is performed.
Here is a video (sorry for the quality, my recorder is lagging for some reason, there are no visual lags during testing).
The problem is that (unlike unrestricted) axis-restricted basepoint snap doesnot follow the target when axis restriction is used during edge snapping. Can you please check/clarify it?

A test file with tilted edge.