Groups¶
Groups let you select and operate on subsets of geometry. They're essential for targeted operations like "delete only the top faces" or "extrude just the windows."
What are Groups?¶
A group is a named selection of geometry components (points, edges, or faces).
Think of groups as filters that let operations affect only specific parts.
Why Use Groups?¶
Targeted Operations¶
Without groups:
With groups:
Named Selections¶
Save selections for reuse:
Complex Workflows¶
Build sophisticated procedural models:
1. Select every other face → Group "pattern_a"
2. Select remaining faces → Group "pattern_b"
3. Color pattern_a red, pattern_b blue
Group Types¶
Point Groups¶
Select vertices:
Use for: - Vertex-based deformations - Color assignments - Position-based selections
Edge Groups¶
Select edges:
Use for: - Beveling specific edges - Edge-based selections
Primitive (Face) Groups¶
Select triangles:
Use for: - Material assignments - Face deletion - Per-face operations
Creating Groups¶
Use the Group node to create selections.
Method 1: Pattern-Based¶
Select by index patterns:
Example: Every Other Vertex
Group Node:
- Mode: Pattern
- Pattern: "0-100:2" (0, 2, 4, 6, ... every 2nd)
- Group Name: "alternating"
Pattern Syntax:
0-10 → Indices 0 through 10
0,5,10 → Specific indices 0, 5, 10
0-100:2 → Every 2nd index (step of 2)
0-50,75-100 → Ranges 0-50 and 75-100
Method 2: Expression-Based¶
Select by attribute values:
Example: Upper Half
Common Expressions:
@P.y > 0.5 → Top vertices
@P.x < 0 and @P.z < 0 → Quadrant selection
@Cd.r > 0.8 → Red vertices
@id % 2 == 0 → Even IDs
length(@P) < 2.0 → Within radius
Method 3: Manual¶
Future feature: Click to select in viewport
Using Groups¶
Deletion¶
Group Delete node removes selected geometry:
Sphere
↓
Group (Expression: @P.y < 0) → Select bottom half
↓
Group Delete → Remove bottom
↓
Result: Hemisphere
Material Assignment¶
Assign materials to grouped faces:
Box
↓
Group (Expression: @P.y > 0.99) → Top face
↓
Attribute Create:
Name: materialid
Value: 2 → Material ID 2 for top
Conditional Extrusion¶
Extrude only selected faces:
Grid
↓
Group (Pattern: "0-100:3") → Every 3rd face
↓
Extrude (if group exists, only affects grouped faces)
Group Operations¶
Combining Groups¶
Group Combine node merges or intersects groups:
Union (A or B):
Group A: "top_faces"
Group B: "side_faces"
↓
Group Combine: Union
↓
Result: "top_or_side" (all faces in either group)
Intersection (A and B):
Group A: "red_vertices" (@Cd.r > 0.8)
Group B: "top_vertices" (@P.y > 0.5)
↓
Group Combine: Intersection
↓
Result: "red_and_top" (only vertices in both groups)
Subtraction (A not B):
Group A: "all_faces"
Group B: "bottom_faces"
↓
Group Combine: Subtract
↓
Result: "not_bottom" (A minus B)
Inverting Groups¶
Select everything not in group:
Common Patterns¶
Checkerboard Selection¶
Grid (10×10 cells)
↓
Group:
Mode: Expression
Expression: (floor(@P.x) + floor(@P.z)) % 2 == 0
Group: "checkers"
↓
Group Delete → Removes every other cell
Ring Selection¶
Cylinder
↓
Group:
Mode: Expression
Expression: abs(@P.y - 0.5) < 0.1
Group: "ring"
↓
Extrude → Only middle ring extrudes
Border Selection¶
Random Selection¶
Height Gradient¶
(Change $threshold to select different heights)
Expression-Based Selection¶
Comparison Operators¶
@P.y > 0.5 → Greater than
@P.y < 0.5 → Less than
@P.y >= 0.5 → Greater or equal
@P.y <= 0.5 → Less or equal
@P.y == 0.5 → Equal (exactly)
@P.y != 0.5 → Not equal
Logical Operators¶
@P.y > 0 and @P.x > 0 → AND (both true)
@P.y > 0 or @P.x > 0 → OR (either true)
not (@P.y > 0) → NOT (invert)
Complex Conditions¶
Math Functions¶
length(@P) < 2.0 → Within radius 2
abs(@P.x - @P.z) < 0.1 → Near diagonal
sin(@P.x * 10) > 0 → Wavy pattern
floor(@P.x) % 2 == 0 → Stripe pattern
Workflows¶
Delete Bottom Half¶
Color Stripes¶
1. Grid
2. Group:
Expression: floor(@P.x * 5) % 2 == 0
Group: "stripes"
3. Attribute Create:
Name: Cd
Value: @stripes ? [1,0,0] : [0,0,1]
(Red and blue stripes)
Extrude Windows¶
1. Box
2. Group:
Expression: @P.z > 0.99 (front face)
Group: "front"
3. Subdivide (to create face grid)
4. Group:
Pattern: "0-100:3" (every 3rd face)
Group: "windows"
5. Extrude (inward for window recesses)
Scatter on Selection¶
1. Grid
2. Group:
Expression: rand(@id) > 0.7
Group: "scatter_points"
3. Scatter (uses group as distribution)
Group Attributes¶
Groups are stored as point/face attributes:
Access in expressions:
Best Practices¶
1. Name Groups Clearly¶
2. Document Complex Expressions¶
Expression: (@P.y > $base_height) and (rand(@id) > $density)
Comment: "Select random points above base height"
3. Test on Simple Geometry¶
✅ Test expression on Sphere → Apply to complex model
❌ Write complex expression on 10k poly mesh (hard to debug)
4. Use Graph Parameters¶
5. Visualize Groups¶
Use colors to verify selections:
Group (create selection)
↓
Attribute Create:
Name: Cd
Value: @groupname ? [1,0,0] : [0,1,0]
Red = in group, Green = not in group
Troubleshooting¶
Group Not Selecting Anything¶
Check: 1. Expression syntax correct? 2. Attribute exists? (e.g., @P always exists) 3. Value ranges? (is @P.y ever > 0.5?) 4. Group type matches (point vs face)?
Debug:
Wrong Geometry Selected¶
Fix: 1. Simplify expression 2. Test components: @P.y > 0 first, add more conditions later 3. Visualize with colors
Group Not Affecting Operation¶
Check: 1. Does node support groups? 2. Group name matches? 3. Group was created upstream?
Advanced Techniques¶
Multi-Level Selection¶
1. Group A: "upper_half" (@P.y > 0)
2. Within A, Group B: "upper_corners" (@P.x > 0.5)
3. Result: Corners of upper half
Animated Selection¶
With graph parameters:
Geometric Patterns¶
Radial: length([@P.x, @P.z]) < $radius
Grid: (floor(@P.x) + floor(@P.z)) % 2 == 0
Spiral: atan2(@P.z, @P.x) + length([@P.x,@P.z]) < $param
Neighbor-Based¶
Future: Select based on neighboring vertices
Performance Tips¶
Optimize Expressions¶
Cache Groups¶
If using same selection multiple times:
Pattern vs Expression¶
Examples¶
Delete Every Other Face¶
Color by Distance¶
Sphere
↓
Group:
Expression: length(@P) < 0.8
Group: "inner"
↓
Attribute Create:
Cd: @inner ? [1,0,0] : [0,0,1]
Mask with Noise¶
Grid
↓
Attribute Create:
Name: noise_val
Value: rand(@id)
↓
Group:
Expression: @noise_val > $threshold
Next Steps¶
- Use Groups in Workflows - Procedural Patterns
- See Group Node - Group Node Reference
- Learn Attributes - Attributes
- Advanced Selection - Expression Syntax
Key Takeaways¶
✅ Groups = Named selections of geometry subsets ✅ Types = Point, Edge, Face (primitive) groups ✅ Creation = Pattern (indices) or Expression (attributes) ✅ Operations = Combine, Intersect, Subtract, Invert ✅ Uses = Targeted deletion, coloring, extrusion, etc. ✅ Stored as = Attributes (@groupname)
Remember: Groups are the key to selective operations - enabling complex procedural control!