Selection / Tagging in Geometry Nodes #86907
Labels
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset System
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Viewport & EEVEE
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Asset Browser Project
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Module
Viewport & EEVEE
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Severity
High
Severity
Low
Severity
Normal
Severity
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
11 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#86907
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Background
As geometry nodes get more complicated, the need to limit operations to certain areas of the geometry is becoming more obvious.
You can't always split things apart into two pieces and work on them separately-- it's just not possible for some topology-changing operations.
Also, in a procedural context you want to be able to have multiple selections alive at the same time.
The most explicit way to refer to them is by name. These can be thought of the same way as selections in edit mode, with a different domain for each select mode.
We already have the idea of boolean attributes, which can exist on any domain. Then you can create a selection and use it just like any other attributes.
And other data types can be implicitly converted to boolean as well, making the whole system quite flexible.
The fact that a boolean attribute, or "selection," can be used like any other attribute is very powerful.
Naming
The point distribute node refers to its boolean attribute input as "Mask", but that is probably not the word to go with here. Another idea is "Tag".
I think that's a valid idea, but the word I would like to propose using is "Selection".
Explicit Selection
Every node to have one or more "selection" filter. We have this already for a few nodes (or a "factor" input that has the same purpose):
The Selection attribute input only needs to be exposed by default where it is actually useful (this decision is a bit arbitrary):
{F9909454 width=600}
{F9908331 size=full}
Pros
Cons
Implicit Selection
A part of the geometry is tagged/selected so that only this part is used by the following nodes until the selection is set again.
{F9909450 width=600}
Pros
Cons
Forking / Merging
Have a way to explicitly separate part of the geometry based on tagging and re-join them afterwards
Hans note: I don't know what this means
{F9909456 width=600}
Pros
Cons
Changed status from 'Needs Triage' to: 'Confirmed'
Added subscriber: @HooglyBoogly
#85369 was marked as duplicate of this issue
Added subscriber: @MiroHorvath
Added subscriber: @KenzieMac130
Added subscriber: @StephenSwaney
Added subscriber: @someuser
i should say, we need some way to select points/edges/faces/and_so_on by index and index range for example to be able to make selection from this string: '1,2,10-20,35'
For the records, I feel strongly that the best solution is clear: support explicit selection and real splitting, using the join and boolean nodes for combining. I think this gets you the best of both worlds:
Really this is just a continuation of what we are already doing anyway-- we already have the point separate node for splitting, and we already use boolean attributes as masks, etc.
Added subscriber: @Erindale
How does a selection differ from any other Boolean attribute?
I agree with the index suggestion by @someuser, it’s always good to be able to be really specific in selections.
Modifiers like solidify or Boolean and operations like inset, bevel, bridge loops etc should all generate masks, either as an attribute or, if you have a way to read a string of indices, they could just have a string socket output that sends out the face selection indices. For an operation like extrude/inset you’d want to be able to choose between the existing faces that were extruded, the new generated faces around the outside, or both together.
Another selection method that would be extremely useful would be by region. Similar to the box select tool we already have in 3D. I think it’s been nodded at with the
Select Inside Volume
in the first image. If you were able to output a boolean attribute for elements within the second object's volume, this could be used for making selections or doing Boolean operations on points. It also creates the possibility for your selection region object to exist and be controlled in 3D space. Having aselect by region
, as opposed toselect by index
, means that tools like subdiv or decimate will still work before without altering later extrusion regions. A kind of psudo-procedural workflow can really speed up a bunch of stuff. I'm all for nodes but sometimes you just want to grab something in 3D.A selection is just a name for a boolean attribute. It could potentially be stored differently, but it's used like a boolean attribute anyway, and that's what matters.
I would say it might be a good idea for selections to have or be automatically added to it's own namespace for creating selections. Maybe
selection:MY_SELECTION_NAME
or something? This way if the user was able to define selection sets while modeling they don't risk breaking anything that relies on other attributes while going about their own business.The point separate's
mask
makes sense to rename toselection
, while the point distributedensity
and point volumeradius
can be used to mask out points they are not really the same as a selection. The user could easily want to use a sample from a texture somewhere on the node-graph which is shared with many other operations but only select a few polygons to affect, if selection isn't available there would be some more attribute bookkeeping for the user. Even if it at first seems redundant based on the current workflow it would be nice to seeselection
everywhere it could apply just as a shared standard.Added subscriber: @dfelinto
Added subscriber: @randum
Was other alternatives considered to boolean selection? It seems to me that the approach does not cover all use cases. For example what if I want to find bounding boxes of all separate from each other mesh elements (islands). Now the node can only find bounding box of entire mesh. With boolean mask it will be able to find bounding box for only part of selected mesh. How should the solution look?
This is my understanding
On the picture the second node should create extra selection attribute where each element has unique value per separate mesh (island). For example all points of the triangle mesh can have 0 values, the points of the circle mesh have 1 values and the points of the quad mesh 2 values. It can be not only integers but any other hashable values like for example strings ('triangle', 'circle', 'quad'). Also it's similar to Blender face maps. Then the attribute can be used by the bounding box node.
This can be handled by a loop solution where each separate element by connectivity is looped over and processed. This way a solution designed to work on only a single mesh can be expanded to work on many without needing to refactor the node graph. Ex: a stone from blockout generator group being able to work in a loop over all bricks on a cobblestone wall.
The unique integer per-part seems like the best immediate solution. I don't think that should be part of the selection system but could be generated by a new node that creates it for connected geometry and overlaps/patterns in selections/face maps/attributes.
I agree assigning names to parts of a mesh might be needed in the future for more advanced loops, rigging and sims but I don't think that would be needed for a while or any reason not to have binary selection.
Added subscriber: @RiccardoBancone
Added subscriber: @JacquesLucke
Changed status from 'Confirmed' to: 'Archived'
Selections are just boolean fields now.