Analog Precision Mode - use the Y dimension of the mouse for the order of magnitude
Problem:
Quite frequently the rate of the value change with sliders (officially Number Fields) isn't the one you want: too fast or too slow. You can use the
Shift
modifier (Precision Mode/Input), but it is a very binary helper. Thus, tweaking a value with mouse/pen can easily make the UX disturbing, annoying. Additionally it can result runaway situations, like:
- After I scrub a position value: Where is my geometry?
- Processor intensive & memory consuming tools/modifiers: a scrub can hang/crash Blender, ie. subdiv
- With
ShiftI still need to move the pointer pixel by pixel: not enough, not enough, too much...
Solution:
Even with mouse we have two input dimensions. Only one is used for the value change. The other could be the order of magnitude, a multiplier/exponent for the X coordinate change of the pointer. If you're Houdini user, you might say the value ladder is the solution. Actually this proposal is a better one in practice, more simple, fully analog, without popup ladder, without accidental jump between the magnitudes. If you used Fabric Engine(RIP), you could try a very similar feature. It worked well, I miss that. It makes the work more intuitive/organic, you can easily forget the example situations above.
We could call this feature "ANAlog fields/sliders": Adjust Number And log10 (order of magnitude of the value change rate)
Actually
you can try a similar feature with any 1 + hour long Youtube video
, like this:
Blender Today One Hundred (Youtube)
Grab the playhead on the timeline, but instead of the left-right scrub, drag it upwards and the magic happens, it zooms in and you can adjust the time more and more precisely, at maximum every pixel means one second. Now as an exercise try to scrub exactly to 49:45 ;)
However we we need a bespoke behavior for the value sliders: ie. it shouldn't go back to the original value if you drag it back straight in Y dimension and up is for higher, down is for lower order of magnitudes, etc...
Implementation:
It should be easy to implement, basically a multiplier by the Y axis, like this:
- Event: mouse click on the field/slider -> Define/set Y(click-relative) variable: \
Capture the Y mouse coordinate at click -> normalize to 0
- Event: mouse movement (or just Y coord change) -> Set the multiplier/exponent variable: \
ANAlog = Y(click-relative) / UserSensitivity
->
this goes to the field/slider algorithm as a multiplier/exponent for every change cycle.
UserSensitivity: user could set this in the Prefs, with the default around 20
Additional ideas:
- If somebody doesn't want this feature, in the Prefs they could fully opt-out. Indeed, the first implementation would be better as an experimental feature, in that tab in the Prefs. We need some feedbacks from users to enhance the behavior, make it really joy/useful.
- Some might find more intuitive with swapped dimensions: up/down is the value change and left/right is the magnitude. Especially for new users, who don't have the deep neural wiring in their brains for left/right value tweaks, they could choose this in the Preferences.
- In the Prefs, some other behavior option might be also useful: ie the exponent change by the magnitude dimension: default is 10 but might be 2 as well (ie for light intensity it's the exposure), even the Shift precision mode could be this switch...
- Additionally a dropdown menu for the Shift modifier: \
1: Use it as logarithmic scale change
2: Use it for this two dimensional precision mode, so without pressing the Shift everything is the same as before
2 Comments
Interesting idea. I run into problems with sliders very often, especially with lights. But such feature most likely needs a visual feedback, otherwise it would be pretty tricky to control the rate of change.
Also there could be a bit of a conflict with grouped input fields (like xyz coordinates), because dragging up or down is used to select multiple fields to edit them all at once. So this rate adjustment should only be triggered after mouse is dragged horizontally for a bit.
Yes, with the multiple input field editing it's a bit problematic. Honestly sometimes if I don't keep the cursor within the vertical boundaries of the field, I accidentally tweak the other fields, which is annoying. I think it would be better if you could select any field combinations in a different way, not just adjacent ones. How you tweak X and Z without Y simultaneously?
It worked well in Fabric Engine without any visual feedback, it's quite intuitive, easy to adopt to. However if users could switch on such thing in preferences, that would be great, just it would need much more coding, than adding a simple math and mouse Y coordinate readout in the existing code.