Alright, thanks for the explanation. No worries at all. It sounds a bit like “Blender Apps” : Blender Apps — Developer Blog
I have tested again on latest build and I’ll leave some minor feedbacks:
Pin Gizmo Icon is clickable only in node tree itself, on the first value in gizmo-chain(?). But if that first value is group input node and icon appears in modifier, I expect that icon to be clickable in modifier too, but its not. Probably something you haven’t implemented yet, but still.
Icon is displayed on every node before Gizmo node, but not after it. I know its tricky and I dont even know if its a good idea. But maybe icons should be displayed on every node that is recieveing value that is recieving a gizmo?
In here since Combine XYZ is controlled by value that is controlled by gizmo, I’m expecting two things: A) icon (not clickable), and when I select the node gizmo to appear if its not pinned. It feels weird that you select actual node that changes translation and gizmo doesnt appear because its technically somewhere on the left of the chain.
Dial Gizmo resetting after 360 rotation is still there.
Dial Gizmo shouldn’t be visible here, its not connected to anything and isnt selected, but cant get rid of it
I suggest moving “Active Modifier” above “Active Object” in the Gizmos popover panel, because directly below there are options “Object Gizmos”, which are enabled if Active Object is enabled, so its important that link between them is obvious and there isnt anything in between that is unrelated.
Gizmo icon greying out should happen when value has a driver on it. And cherry on the top would be if hovering over the icon gave you reason why gizmo isnt working.
Once again, please move Gizmos category in Utilities :') Add menu is getting too tall, we now have Normals and Gizmos on top of what it was in last version, Its getting unmanagable.
This is triggering something in me
Correct way to draw this is:
But to go back to the overall design and something I proposed earlier. When you make node group with just a gizmo on it, and pass input value unchanged as output, you can have a gizmo that on user level doesnt go backwards and you can simply drop on the line you want to affect. Its perfect.
So I’m thinking why not add that functionality to the gizmo node itself? When you plug in value, Output socket Value appears that just outputs value without changing it, dummy value kinda. That way you can drop that gizmo on the line and it will save you trouble of connecting same thing to gizmo and input you want to change, and more importantly having to understand design behind this.
Problem with this is that since gizmos are multi input sockets, which value is it outputting? How about having some sort of dynamic outputs, meaning it creates as many value outputs as you have inputs. If you have 3 values inputted, it creates 3 outputs, Value 1, Value 2, Value 3. Order is determined by order in which they’re inputted. To better control the order I think in node properties panel tree-view can be added, which lists all inputs in multi input socket (this is something I’ve wanted for join geometry too). So that you can drag and create your order. If you have 3 inputs and unplug one of them, one of the outputs just disappears. If you input it again, it appears again.
I know this is a lot of work I’m asking for, but I think it can make gizmos as user-friendly and easy to understand as they can get.
@nickberckley Thanks for the feedback. I implemented some of it, some was already implemented because the build was not updated, and some things are too tricky for now or I don’t agree. More details below.
Indeed something that’s just not implemented yet, and we also haven’t defined the exact behavior this should have yet. I’m sure that’s something we’ll add at some point in some way.
That doesn’t seem to scale well, because it wouldn’t be clear where to stop propagating the gizmo. Like, should everything that comes after the Vector output also have the gizmo icon? It looses its usability if it’s shown in too many places. Currently the icon also indicates that when you connect something to it, the gizmo will be propagated to the left, which wouldn’t be the case anymore.
That was fixed in 808e8dbfe7.
As described, a gizmo is visible if the “raw” built-in gizmo node is in the open node tree. When I wrote the explanation for how the system works, I found this behavior to be much more useful because it’s less frustrating when the gizmo doesn’t disappear all the time.
It’s still possible to get rid of the gizmo in two ways: either you mute the gizmo node, or you put it into a node group.
Would be nice, but that’s a bit more complex for me right now unfortunately, because the animation system is taken into account at a separate stage of drawing the ui, that I didn’t touch yet. Sounds like something we’ll do eventually.
I already moved it to the Input submenu. That seemed reasonable.
Done. At least I improved it in a couple of situations. I’m sure more improvements are possible in the future.
Ah forgot to respond to that earlier. This was actually part of an earlier design iteration but we removed the output, because it confuses the core design and makes it more look like the gizmo node actually contains the value. I do think it’s a great idea to build node groups that actually act as input values though (like your “Z Location Gizmo” group), but that’s a special case of the design. We are considering to put some of those into the essentials asset bundle.
Icons in modifiers I think should act like “Show Gizmo even if this modifier isn’t active”. Basically dont make it disappear if I change active modifier. Thats annoying.
Besides that, I don’t have any issues with this as the initial version. Its working fine. In “second version” fixed scaling and vector gizmos and we’re good to go.
After playing around with this for abit, was wondering about a few things
The gizmo nodes have a geometry output but they appear regardless of being plugged in
Here i went to have the gizmos set to a switch so i could turn them on and off but dosnt work this way
Any way this could be done or even have a switch added to the gizmo nodes themselves, this way we can toggle certain gizmos on and off freely
On the note of having switches a new ‘switch’ gizmo that can be a simple dot visual and when clicked sets to true, click it again it sets to false. Unlike current gizmo nodes this one stayes in a ‘selected’ state untill clicked again
On the ‘switch’ gizmo node we could do with a ‘auto false’ check box if enabled it will turn the switch to false if another switch gizmo is clicked or we click on empty space in the viewport. So if i click on one switch to enable some gizmos do some transforms with those gizmos then click on another switch it will turn the first switch to false disabling the previous set of gizmos wile enabling another set of gizmos that the second switch is connected to
To be clear what i mean is a switch gizmo remains in a selected state when after being clicked once and remains in a selected state when using other transform gizmos, but if another switch gizmo is clicked or the user clicks any empty space the switch gizmo with the ‘auto false’ enabled goes to an unselected state outputting as false.
Sor for an example i have a GN setup with 3 cubes and 3 switch gizmos, each switch is for each cube. clicking one one switch enables move gizmos for that cube allowing the user to move the cube around. Clicking another cubes switch gizmo with enable the move gizmos for that cube wile disabling the move gizmos for the other cube. In this scenario we have 3 movable objects and only have the move gizmos enables for each cube at a time, emulating how it works with standard objects in the viewport
Some other examples a ‘Switch’ gizmo could be used for
- Togglable geometry parts say showing and hiding a roof to a building to see inside the building, by clicking the switch gizmo centred over the roof that toggles a switch with a delete geometry node
- Quickly toggle functions of say a GN generator where the ‘Switch’ gizmo can be placed in relevant location of the function
One idea for all the gizmo nodes
Add ‘Geometry’ as a drawing style which when set adds a geometry input
Allowing us to use any part of our desired geometry as the actual gizmo
So in this example i would set the cone to be a gizmo and have it set it to the z axis so now if i want to move the cone away from the cube i literally just click and drag the cone
Or i could have the for mentioned ‘Switch’ gizmo set as the cone mesh so i can click on the cone and have it toggle on arrow gizmos which i can then use to move the cone around
With these two features it allows us to set up a GN graph where by we can have a bunch of objects placed by GN but then we can still click on each object and move and transform them as if they was individual objects in the outliner
Click on the left cube and you get the arrow gizmos
Click on the right cube and it toggles the arrows for that cube
(cube switches set to ‘auto false’ so only one set of arrows visible at a time)
Now you have the same type of interaction with these cubes as if they were 3 separate objects in the outliner.
Using a delete geometry and a vertex group as a selection we could even make a rudimentary version of this where part of a mesh can be used as a gizmo and be used to drive a shapekey or bones.
The only other suggestion is a proper vector Gizmo, we click the gizmo once and it remains ‘selected’ and press the standard transform hotkeys G,R and S to move, rotate and scale along with the lock to axis xyz keys. So this one gizmo can relay full vector transformations
The drawing style for this node could be a simple dot or the full transform gizmo
This gizmo would basically be like blenders default transform gizmo
an all in one transform gizmo we can set to certain parts/objects in a GN setup
Another thing that would be really nice is a ‘is selected’ output for all gizmo nodes
When a gizmo is selected(being used or in a selected state) the ‘is selected’ outputs a value of 1 otherwise it outputs a value or 0. with this we can have things happen when a gizmo is being used
Lets say we have a gizmo that moves something but some other part of the geometry is in the way like a wall or something. I could setup a delete geometry node to delete the wall and have a switch set, i hook the ‘is selected’ output of the gizmo node to the switch node so when i use the gizmo it outputs 1 to the switch with deletes the wall thats in the way, when i stop using the gizmo it outputs 0 and toggles the switch again to not delete the wall
Theres alot of things we could do here with an output like this, the switch gizmo i mentioned really would just be this. the gizmo would have no transform abity only outputs this ‘is selected’ value that is used to plug into switches or other things, if all gizmos had a Boolean input that toggles the gizmo visibility on and off you would simply have a switch node and take its ‘is selected’ value and plug it into all the gizmo nodes you want it to control, the one switch gizmo can turn on or off any other gizmos you plug it into
Great to see all the work you have done on this! I’ve been waiting for this ever since geometry nodes first came out. And have been thinking about how to do this this for years. I dig the linking system as it currently is. It takes a bit of getting used to, just like attributes. But when you get it it’s very simple and powerful. I have a couple of cents to add:
The most important thing currently see missing is a point gizmo. Like the center of the normal movement gizmo. A point that outputs a vector that, by default is dragged parallel to the view, but can be directionalized by pressing x/y/z keys (or middle mouse button) during dragging, which would make it move according to the active transform setting of the 3d view. As well as being affected by the snapping setting.
The visualization options could be:
- a filled in cube shape orientated to whatever the transform is set to in the viewport
- a plain triple axis (like one of the Empty visualizations) similarly oriented.
- a square dot aligned to the viewport
- a filled in round dot/ball
The most important use-case of this would be as reference and origin points for created geometry. Let’s say a hanging rope. Currently you would need to either reference two separate empties as dynamic origin points, or if using the arrow gizmos you’d need to manipulate all three axes separately to move the point.
Another clear use-case would be to use it to drive attributes for 3d texture coordinates, providing a really intuitive and quick way to position 3d textures like noise without having to rely on a separate driving object.
A smaller suggestion that I unconsciously already tried to preform, is to make this icon clickable to hide or show a gizmo manually. Just like how the keyframe icon in the properties window next to it is clickable. Clicking it would make it grey out (like it already does when nothing is connected), and this could propagate to all the connected gizmo icons in the node editor to let you know it’s hidden. Possibly these icons are clickable too, so the toggle can be done from anywhere.
a few notes on what is already in:
- I don’t know if this is planned, but the current arrow gizmo does not have an discreet mode yet when holding Ctrl, like the dial control does. Based on whole (or tenth with shift) values of the property.
- And the gizmo transform does not respond to the Set Position node yet, which I feel it should as other geometry does.
- Why don’t gizmo’s not appear for all selected objects? Don’t all objects have their own active modifier? It save a lot of clicks not to have to make an object active to have their gizmo shown.
- I think a more descriptive name for “Up” in the dial gizmo is “Up axis”
- Lastly as for the gizmo size, that others have already suggested, I would really hope we can get something like that in.
I think that this would go beyond the scope of geometry nodes in general. With that method you’re just turning geometry nodes mesh data back into objects, but in a roundabout way. At that point, if you want that amount of manual control over individual geometry, you should just make them separate objects. Geometry Nodes is meant to modify the data of an object, not create new ones.
That’s what drivers are for.
Are gizmos still happening?
drivers cant make a gizmo, this was about having a gizmo use a piece of geometry as its visual representation
How is a drive meant to do this
Like in zbrush ? would be nice
Why GN-gizmos don’t enter to Blender 4.1 version? I think, it will be most important change …
I’m going to guess it’s because it’s a new feature, still in development, and 4.1 hit beta - thus, the 4.1 feature set has been locked, and dev time focused on the upcoming 4.1 release.