Snapping is used in Blender for the most diverse use cases:
- Grid snapping (modelling, animation)
- Vertex snapping (CAD modelling)
- Volume snapping (retopology, assets placement)
The goal of this document is to make it more powerful for precision modelling, while still supporting the old use cases without extra complexity.
The main topic addressed here is the introduction of a "base point" concept (refactoring the current snap target setting), as well as a more clear "target points" system (the old snap elements setting).
- Base point: 3d coordinate * we want to snap from.
- Target point: 3d coordinate* we want to snap to.
- Filter: A snap filter is what we can snap to (end points, 3d cursors, grid, ...).
Note: These points don't need to be a vertex necessarily, nor the pivot of the operation, it can be the middle of an edge, ...
An example of a user trying to move objects from a reference point to another using the grab operator.
We only see the base point if snap is on and while the gizmo is manipulated. For tool-less operators (e.g., grab) we only see the base point while the operator is running.
Note that this is not the pivot. Although for translation the pivot can be used, for rotation most often they will differ.
Where the base point is initially, will depend on a "Default Base Point" setting:
- Active (vertex, object center).
- 3D Cursor.
- Vertex closest to mouse (this only works for gizmo-less operators).
Users can change the base point with a key (e.g., alt), which can fix the base point to a new location. Like the target point, the base point can "snap" to elements of the scene (vertex, mid-edge, 3d cursor, …).
Alternative: For tools and transformation gizmos, we could show the base point all times, even when the gizmo is not manipulated.
Snap filters allow users to select what we can snap to:
- Edge midpoint
- Edge perpendicular
- Face center
- Surface (volume)
- 3D cursor
- Grid (absolute grid)
- Increment (relative increment)