Curve Support in Geometry Nodes #86243
Labels
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
14 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#86243
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
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
Currently, "curve data" in Blender actually refers to two or three different kinds of data:
DispList
in Blender, but to the user it is basically mesh data.Because of this ambiguity, the most important thing to figure out is at which level to apply operations, similar to the existing "Apply on Spline" toggle on the curve modifier stack.
A conversion from curve to mesh changes what kind of operations are possible on the input data, so conversion from curve to mesh is an important step in the node tree.
Most settings in the curve object data panel in the property editor describe how to evaluate the curve. However, generally the curve is actually evaluated somewhere inside the modifier stack-- just before the first "Generate" modifier that needs a mesh input. Generalizing evaluation to nodes brings up some issues because of the increased flexibility. Shouldn't the settings for the "Curve to Mesh" operation be closer to the operation itself? There are a few options:
Conclusions
Node Mockups
While there are many opportunities to expand functionality when curves can be handled with nodes, these mockups focus on exposing existing functionality.
radius
attribute.Implementation Details
The current curve data structures are confusing and not very suited to be used in this context, and improving them is on the radar of the modeling module anyway. Improved C++ data structures could significantly ease the process of implementing these features.
With these data structures, a few operations would be necessary as a minimum:
Mesh
result.Some of the data stored below depends on decisions made in the previous sections.
Changed status from 'Needs Triage' to: 'Confirmed'
Added subscriber: @HooglyBoogly
Added subscriber: @KenzieMac130
Added subscriber: @MiroHorvath
Added subscriber: @GeorgiaPacific
Added subscriber: @RC12
Could it be possible to version all of the "Geometry" features of the curve over to the modifier stack so all that is left is explicitly related to defining the shape and base sampling of the curve? I remember when I changed some things about the curve to default to filled it had a knock-on-effect on text as well and I was a little surprised. The curve/surface/text object just feels kind of an odd duck since they can be mutated into each-other by changing the data-block and It kind of feels like the differences mainly come from how the curve data is edited or skinned.
Added subscriber: @xrogueleaderx
@KenzieMac130 I'm not sure I completely understand your point, but the input to the nodes modifier would be the curve data generated by the text object in this case.
Also, this proposal doesn't include surface objects, but I imagine that would be a natural addition later on. Best to take these things step by step for now.
It is a bit odd with the special cases for editing and skinning curves. 2D curves are also the same data, just with a toggle changed. Actually, I wonder if it makes sense to separate 2D curves further, I'm not sure.
Since I wasn't the clearest (probably even in my own mind) I was suggesting that since the different types of curve objects seem to share that functionality that there could be a way to break apart the curve types into how they are edited and how they are skinned. With how different (layers?) of edit types could be stacked in the curve data while how they generate geometry could be moved entirely into modifier space. This is since I have seen quite a few people in their workflows doing things like converting text objects into curves in order to achieve things like a neon tube effect when really what they are after is a different method of skinning but have to give up their preferred way of editing. But now that I think more about it that does introduce problems as well so this was probably just a false bit of connecting dots on my end.
However it does make sense that 2D curves should be their own "type" as well as they offer both changes in skinning as well as editing.
Added subscriber: @roman-13
@HooglyBoogly Will it be possible to copy objects along a curve? Now it is quite problematic to do this.
Suren! One simple solution would be a sample curve node and then a point instance node.
Added subscriber: @dfelinto
Some comments:
Thanks for the comments!
I think that would be misleading, because the result of this node is still a curve. The original idea for this came from #86090. Using "Curve" instead of "Geometry" for the socket names will help a lot, I forgot to do that in the mockups.
Right, clarifying their status a bit would make sense, and I agree they could be treated specially. I just wasn't sure exactly what that would mean in the context of this proposal. Any ideas?
Right, the initial use case is as an input to the bevel node. As a primitive node it might need those options though, I'm not sure. It's always possible to just use a transform node after anyway.
Added subscriber: @AmanKumar-2
Is the curve support available in any of the current experimental branches for testing?
No, this is just a design task for now. We would need to allocate time to actually implement this.
Added subscriber: @Erindale
Changed status from 'Confirmed' to: 'Resolved'
Since at least the basics of the design are agreed upon, I moved it to the wiki. https://wiki.blender.org/wiki/Modules/Physics_Nodes/Projects/EverythingNodes/CurveNodes
Added subscriber: @jmargaud
Added subscriber: @roo20
Removed subscriber: @roo20
Added subscriber: @DuarteRamos
Added subscriber: @Syscrusher