This is an ongoing design document for the design of tool Gizmos in Blender 2.8.
== About Gizmos
A 'gizmo' is a visual object on the screen which allows users to use tools in a visual, direct way. It both makes it easy to perform actions using tools along axes, but more importantly, it allows users to //interactively// adjust the //result// of using a tool.
Gizmos also help open up Blender to people who use it without a keyboard, and to people who haven't mastered all the shortcuts to use the many tools. This is not the only reason why we have gizmos though - we expect they will be used by experienced users too for added precision and control.
Here's a list of gizmos for Blender 2.8:
==== Move
{F3002059}
Drag anywhere to move perpendicular to the view. Use the handles for axis specific movement.
==== Distance clearly communicated differently from the axis of movement:
As demonstrated here, it has been very difficult to visually judge the delta of movement before. We should fix that:
{F3365898}
==== Rotate
{F3002065}
Drag anywhere to rotate perpendicular to the view. Use the handles for axis specific rotation.
Requirements:==== Degrees displayed in the pie-chart rotation widget:
- Visualise Snapping Better (Tick marks when holding down CtrlRotation degrees are very disconnected from the rotation widget. We should connect it more visually to the rotation delta, like so:
{F3365897}
==== Tick marks appear while holding down Ctrl for example)snapping:
{F3365926}
==== Scale
{F3002072}
Drag anywhere to scale uniformly. Use the handles for axis specific scaling.
==== Extrude
Drag on the plus icon always extrudes out, or drag anywhere to extrude freely. After the user has done this, an 'arrow' widget appears which lets the user adjust the current extrusion. The orientation depends on the scene Orientation setting in the top bar. A Normal arrow is always displayed since this is the most common operation, but you can also extrude along any of the axes in Global, Local... etc space. The top bar also has a setting called Steps to set extrusion steps.
Top Bar: XYZ, Steps, Orientation
- A way to make it clear when widgets are creating new extrusions vs tweaking the existing one
Extrude (Normal orientation):
{F3431467}
Extrude (Global orientation):
{F3431471}
Extrude (Global orientation, after extrusion):
{F3431473}
==== Curve Extrude
Curve Extrude is a separate tool, which is a good demonstration of the kinds of tools we can build with Blender 2.8. It presents the user with a manipulator for moving the extrusion. When the user does this, handles appear on either side of the extruded 'bridge'. These can be extended to change the curve of the extrusion. Cuts can be added in between to make the curve finer or more coarse.
{F3230924}
==== Spin
{F3005085}
The middle circle plane controls set the spin center point. The rotation controls adjust the plane of the spin operation. The Jupiter-style ring adjusts the angle of the spin from 0% to 360%.
Top Bar: Steps, Angle, Axis, Center
==== Inset Faces
{F3005094}
Drag anywhere to inset. Release to confirm.
This widget appears in the top left of the viewport. It lets you visualize the inset from 0% to 100%. Click the plus icon to create a new inset
Top Bar: %, Outset, Relative, Individual etc..
==== Bevel
{F3002090}
Pull the lever to inscrease bevel distance.
Top bar: Amount, Segments, Profile, Vertex Only, etc.
==== Bisect
{F3005228}
Click the blue, green or red plane to set the bisect plane to the X, Y or Z plane defined by the current Orientation setting. The bisect plane itself can be dragged to move it back and forth. The round handles can be used to rotate it freely.
==== Randomize
{F3002564}
The user clicks and drags anywhere to increase randomness, or uses the control to set a value.
==== Loop Cut
{F3002586}
The user clicks and drags on an edge loop to create a loop cut and slide it along the edge. The manipulator can be used to set the % from A to B.
==== Bend Tool
The user enables the Bend tool, which places a manipulator (Point 1) on the 3D Cursor, aligned according to the scene orientation control. The user can then click and drag on any of the axes to set a bend direction and distance. This creates a new point (point 2), which then represents the bend amount and direction.
{F3365752}
== Primitives
{F3003655}
==== Plane
The user can drag out to create the plane. From here, the user can drag the blue ring to increase the scale. The red and green handles can be used to scale the primitive in X and Y.
==== Cube
The user can drag out the cube to create it. From here, the user can scale it along X and Y.
==== UV Sphere & ICO Sphere
The user can drag out to create the sphere. From here, the user can drag the blue ring to increase the scale. The red and green handles can be used to scale the primitive in X and Y.
==== Cylinder
The user can drag out to create the cylinder. From here, the user can drag the blue ring to increase the base size. The blue handle can be used to set the height. The red and green handles can be used to scale the primitive in X and Y.
==== Cone
The user can drag out to create the cone. From here, the user can drag the blue ring to increase the base size. The blue handle can be used to set the height. The red and green handles can be used to scale the primitive in X and Y.
==== Torus
The user can drag out to create the torus. From here, the user can drag the blue ring to increase the major radius size. The white handle can be used to set the minor radius size.
== Widget Info:
When using manipulators, we can improve the visual feedback when they are engaged. Currently, we don't communicate things like distance and deltas very clearly. This would be good to improve, like so:
==== Degrees displayed in the pie-chart rotation widget:
Rotation degrees are very disconnected from the rotation widget. We should connect it more visually to the rotation delta, like so:
{F3365897}
==== Distance clearly communicated differently from the axis of movement:
As demonstrated here, it has been very difficult to visually judge the delta of movement before. We should fix that:
{F3365898}
==== Scale difference clearly shown while dragging:
{F3365899}
==== Tick marks appear while holding down Ctrl for snapping:
{F3365926}
== Camera manipulators== Camera Gizmo
When inside the camera view, users have no easy way of controlling the camera position, rotation and zoom. Camera operators need to distinctly control panning on each axis, as well as dollying in/out, left/right, and craning up/down. Users also need to be able to easily zoom their camera. We could place camera widget controls inside the camera view, like so:
{F3685397}
----
//These are the current designs for the manipulator widgets