Curve Primitive Nodes #89220

Closed
opened 2021-06-16 23:08:42 +02:00 by Hans Goudey · 30 comments
Member

With curve support in geometry nodes we have an opportunity to add useful curve primitives.

Here is an initial list, more should be added:

image.png image.png Outputs a poly spline in a perfect circle portion that intersects the three points.
image.png image.png A second mode to the arc node that uses the center point. Which side is filled can depend on the order.
image.png image.png Outputs a poly spline with an evaluated quadratic bezier spline. Bezier splines in Blender are cubic.
image.png image.png Outputs a bezier segment. This is just a parametric version of the first item in the curve add menu. Handles should be aligned.

More types to be considered:

  • Spiral Many types of spirals exist. Which are most commonly useful?
    ** Reference: http://nortikin.github.io/sverchok/docs/nodes/generators_extended/spiral_mk2.html
  • Line We already have a mesh line node, but there is really no reason not to have a "Curve Line" node as well.
  • Circle We already have a mesh circle node also, but there could be a specific curve circle node as well.
  • Vectors to Curve Could have a multi-input socket of vectors, useful in some situations probably.
With curve support in geometry nodes we have an opportunity to add useful curve primitives. Here is an initial list, more should be added: | ![image.png](https://archive.blender.org/developer/F10176018/image.png) | ![image.png](https://archive.blender.org/developer/F10175964/image.png) | Outputs a poly spline in a perfect circle portion that intersects the three points. | -- | -- | -- | | ![image.png](https://archive.blender.org/developer/F10176010/image.png) | ![image.png](https://archive.blender.org/developer/F10176012/image.png) | A second mode to the arc node that uses the center point. Which side is filled can depend on the order. | ![image.png](https://archive.blender.org/developer/F10175977/image.png) | ![image.png](https://archive.blender.org/developer/F10175972/image.png) | Outputs a poly spline with an evaluated quadratic bezier spline. Bezier splines in Blender are cubic. | ![image.png](https://archive.blender.org/developer/F10175985/image.png) | ![image.png](https://archive.blender.org/developer/F10175982/image.png) | Outputs a bezier segment. This is just a parametric version of the first item in the curve add menu. Handles should be aligned. More types to be considered: * **Spiral** Many types of spirals exist. Which are most commonly useful? ** Reference: http://nortikin.github.io/sverchok/docs/nodes/generators_extended/spiral_mk2.html * **Line** We already have a mesh line node, but there is really no reason not to have a "Curve Line" node as well. * **Circle** We already have a mesh circle node also, but there could be a specific curve circle node as well. * **Vectors to Curve** Could have a multi-input socket of vectors, useful in some situations probably.
Author
Member

Changed status from 'Needs Triage' to: 'Confirmed'

Changed status from 'Needs Triage' to: 'Confirmed'
Author
Member

Added subscriber: @HooglyBoogly

Added subscriber: @HooglyBoogly

Added subscriber: @guitargeek

Added subscriber: @guitargeek

Do any of the "Profile" options in the Extra Curves menu make sense for primitive nodes?

Do any of the "Profile" options in the Extra Curves menu make sense for primitive nodes?
Author
Member

Yeah, I think some of them would. Feel free to add to this list @guitargeek. We can always remove them later if we deem them not important enough.

Yeah, I think some of them would. Feel free to add to this list @guitargeek. We can always remove them later if we deem them not important enough.

For the arc mode, wouldn't the center need to be always equidistant from the 2 points to work? Or am I missing your point? (no pun intended)

For the arc mode, wouldn't the center need to be always equidistant from the 2 points to work? Or am I missing your point? (no pun intended)
Author
Member

Hrmm, for the "Center" mode I think you're right. Maybe that doesn't work as a node.

Hrmm, for the "Center" mode I think you're right. Maybe that doesn't work as a node.
Author
Member

@guitargeek On second thought, I think it might still make sense if we specified the radius in that mode instead of the center point. And actually that sounds more useful anyway.

@guitargeek On second thought, I think it might still make sense if we specified the radius in that mode instead of the center point. And actually that sounds more useful anyway.

In #89220#1178947, @HooglyBoogly wrote:
@guitargeek On second thought, I think it might still make sense if we specified the radius in that mode instead of the center point. And actually that sounds more useful anyway.

Sounds good!

> In #89220#1178947, @HooglyBoogly wrote: > @guitargeek On second thought, I think it might still make sense if we specified the radius in that mode instead of the center point. And actually that sounds more useful anyway. Sounds good!
Author
Member

Mockups based on further conversations:
{F10191095 size=full}

This one is a bit further out since we don't support expressions yet, and the way they would work hasn't really been designed, but creating curves like this would be quite nice.
One could also imagine building a "field" node network and plugging it into expression sockets

{F10191112 size=full}

Mockups based on further conversations: {[F10191095](https://archive.blender.org/developer/F10191095/image.png) size=full} This one is a bit further out since we don't support expressions yet, and the way they would work hasn't really been designed, but creating curves like this would be quite nice. One could also imagine building a "field" node network and plugging it into expression sockets {[F10191112](https://archive.blender.org/developer/F10191112/image.png) size=full}
Johnny Matthews was assigned by Hans Goudey 2021-06-27 05:21:25 +02:00
Author
Member

Just "assigning" this to you Johnny for organization.

Just "assigning" this to you Johnny for organization.

Added subscriber: @MikhailRachinskiy

Added subscriber: @MikhailRachinskiy

Does squiggly shape of Quadratic and Bezier Segment primitives serve any purpose?

Does squiggly shape of Quadratic and Bezier Segment primitives serve any purpose?
Author
Member

What do you mean "squiggly"? Note that the defaults in the patches are slightly different than my mockups

What do you mean "squiggly"? Note that the defaults in the patches are slightly different than my mockups

Bezier Segment primitive is tilde like shape in the mockup, does it not shaped like that in the patch?

Bezier Segment primitive is tilde like shape in the mockup, does it not shaped like that in the patch?

This issue was referenced by 86c6769e20

This issue was referenced by 86c6769e203366d5f039869cb26e9f4d85ca205b

This issue was referenced by 21ebee2580

This issue was referenced by 21ebee258027f8c8bae0d51bb8d655013c5ee0a3
Author
Member

Just so this is somewhere besides the meeting notes, I'm adding the notes from our discussion of the primitives at our meeting today here:

* - [x] [D11648: Geometry Nodes: Curve Primitive Bezier Segment](https://archive.blender.org/developer/D11648)
    * Start/End -> Start/End Point
    * Another mode where the handles are relative to the start and end points
* - [x] [D11649: Geometry Nodes: Curve Primitive Quadratic Bezier Segment](https://archive.blender.org/developer/D11649)
    * Remove "Segment" from this and the previous
        * We were a bit divided on this point, but this name is quite long with that word...
* - [x] [D11650: Geometry Nodes: Curve Primitive Circle](https://archive.blender.org/developer/D11650)
    * "Start" "Middle" "End" -> "Point 1/2/3"
    * Default mode should be radius
    * It can output the center of the circle as well (for the Points mode)
    * Default radius of 1m
    * Make sure it "sorts" the inputs so they can work in any order
        * If that doesn't break the rotation order behavior
* - [x] [D11713: Geometry Nodes: Curve Primitive Arc](https://archive.blender.org/developer/D11713)
    * Default can be radius
    * Default radius of 1m
    * It can output the center of the circle as well (for the Points mode)
    * Make sure it works for the colinear case
* - [x] [D11609: Geometry Nodes: Curve Primitive Spiral](https://archive.blender.org/developer/D11609)
    * Curve reverse node makes the "reverse" input not necessary
        * *This input actually changes, the shape, so this comment doesn't apply*
    * Resolution can be at the top
* - [x] [D11665: Geometry Nodes: Curve Primitive Quadrilateral](https://archive.blender.org/developer/D11665)
    * Square should be the default
    * Different modes would make the options more obvious
        * Square: Only a size input
        * Rectangle: Width and height inputs
        * Parallelogram: Full controls of the current node
* - [x] [D11653: Geometry Nodes: Curve Primitive Star](https://archive.blender.org/developer/D11653)
* - [x] [D11639: Geometry Nodes: Curve Primitive Phyllotaxis Spiral](https://archive.blender.org/developer/D11639)
    * "Resolution" should be "Points" to differentiate it from the other spiral
    * The different uses-- the "crazy" output for instancing and the smooth "spiral-like" output seem to conflict a bit
        * Mostly this isn't really an actionable point
        * But make sure the "smooth" output with a lower angle is also useful
Just so this is somewhere besides the meeting notes, I'm adding the notes from our discussion of the primitives at our meeting today here: * - [x] [D11648: Geometry Nodes: Curve Primitive Bezier Segment](https://archive.blender.org/developer/D11648) * Start/End -> Start/End Point * Another mode where the handles are relative to the start and end points * - [x] [D11649: Geometry Nodes: Curve Primitive Quadratic Bezier Segment](https://archive.blender.org/developer/D11649) * Remove "Segment" from this and the previous * We were a bit divided on this point, but this name is quite long with that word... * - [x] [D11650: Geometry Nodes: Curve Primitive Circle](https://archive.blender.org/developer/D11650) * "Start" "Middle" "End" -> "Point 1/2/3" * Default mode should be radius * It can output the center of the circle as well (for the Points mode) * Default radius of 1m * Make sure it "sorts" the inputs so they can work in any order * If that doesn't break the rotation order behavior * - [x] [D11713: Geometry Nodes: Curve Primitive Arc](https://archive.blender.org/developer/D11713) * Default can be radius * Default radius of 1m * It can output the center of the circle as well (for the Points mode) * Make sure it works for the colinear case * - [x] [D11609: Geometry Nodes: Curve Primitive Spiral](https://archive.blender.org/developer/D11609) * Curve reverse node makes the "reverse" input not necessary * *This input actually changes, the shape, so this comment doesn't apply* * Resolution can be at the top * - [x] [D11665: Geometry Nodes: Curve Primitive Quadrilateral](https://archive.blender.org/developer/D11665) * Square should be the default * Different modes would make the options more obvious * Square: Only a size input * Rectangle: Width and height inputs * Parallelogram: Full controls of the current node * - [x] [D11653: Geometry Nodes: Curve Primitive Star](https://archive.blender.org/developer/D11653) * - [x] [D11639: Geometry Nodes: Curve Primitive Phyllotaxis Spiral](https://archive.blender.org/developer/D11639) * "Resolution" should be "Points" to differentiate it from the other spiral * The different uses-- the "crazy" output for instancing and the smooth "spiral-like" output seem to conflict a bit * Mostly this isn't really an actionable point * But make sure the "smooth" output with a lower angle is also useful

This issue was referenced by d3788207aa

This issue was referenced by d3788207aae6e7a3546850a5d6e71ed552030cc0

This issue was referenced by 8884d2d61b

This issue was referenced by 8884d2d61b3d60d44d4f8aecaba1d0fd121b0bf3

This issue was referenced by c1fc180861

This issue was referenced by c1fc18086118012637bdc5a32c5ced1742d69dac

So Bezier and Quadratic Bezier primitives do have squiggly/bent shape. Why? Does it have a purpose?

primitive_shape.png

So Bezier and Quadratic Bezier primitives do have squiggly/bent shape. Why? Does it have a purpose? ![primitive_shape.png](https://archive.blender.org/developer/F10208068/primitive_shape.png)
Author
Member

That's just the default, you can shape them however you want. In your opinion, what would be a better default and why?

That's just the default, you can shape them however you want. In your opinion, what would be a better default and why?

I would expect both primitives to be a straight line.

Though with current implementation it's not important as point handle is just a vector value, which is easy to reset. I was expecting to have control over individual bezier points and their handles later in the node tree, kinda what we have in Py API right now (and where resetting bezier primitive default shape get trickier).
I guess that'll come with curve nodes.

I would expect both primitives to be a straight line. Though with current implementation it's not important as point handle is just a vector value, which is easy to reset. I was expecting to have control over individual bezier points and their handles later in the node tree, kinda what we have in Py API right now (and where resetting bezier primitive default shape get trickier). I guess that'll come with curve nodes.
Author
Member

You will have control over handle positions in the node tree, but they should definitely have a non-straight shape by default, that helps so much to explain how the work visually.

You will have control over handle positions in the node tree, but they should definitely have a non-straight shape by default, that helps so much to explain how the work visually.

This issue was referenced by 29d6750134

This issue was referenced by 29d6750134c4e42a2c5ff12040aa78f98720cf5c

This issue was referenced by 2a41ab5e6c

This issue was referenced by 2a41ab5e6ca48c7ae2392c567c74162e34a74c9b
Member

Added subscriber: @JacquesLucke

Added subscriber: @JacquesLucke
Member

Changed status from 'Confirmed' to: 'Archived'

Changed status from 'Confirmed' to: 'Archived'
Member

We have a good set of curve primitive nodes now. Additional nodes can still be added but don't need to be tracked by this task.

We have a good set of curve primitive nodes now. Additional nodes can still be added but don't need to be tracked by this task.
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
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
EEVEE & Viewport
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
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
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
EEVEE & Viewport
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
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
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
5 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#89220
No description provided.