Adding a procedural curve editing pipeline in 3.0 has been a large focus for the geometry nodes team and community for the past few months. One of the last larger changes for 3.0, supporting the geometry nodes modifier on curve objects, was committed this week. So I thought it would be a good idea to give an update on the project. Where are we, and what does the future hold?
Just like curve objects, geometry nodes support three types of curves:
One of the fundamental ideas of the changes is that it should be clearer when data is a curve and when it is a mesh. Currently Blender doesn't distinguish very well between the two, because it implicitly changes a curve into a mesh. But we can take advantage of the flexibility of nodes to make the process much more visible.
This is the counterpart of the existing "Curve Bevel", except that the node can accept multiple input profiles, and automatically marks sharp edges.
The fill node creates a 2D mesh from curves, filling the inside with faces. It was contributed by Erik Abrahamsson, building on the triangulation library built by Howard Trickey for exact boolean. It's the counterpart to the existing 2D curve fill in 2.93, but it should give better, more predictable results.
The trim node makes curve splines shorter, with a length or factor input. The node was contributed by Angus Stanton.
This node generates a point cloud with evenly spaced points on the curve, generating the data needed for instancing like rotation.
Also contributed by Angus Stanton, this node is a simpler counterpart to the "Curve to Points" node that only outputs the start and end of each spline.
Drawing Clouds
This node outputs a new curve, sampling consistent lengths from the input. This is just like the "Curve to Points" node, except the output is still a curve.
Like the resample curve node, this node makes a higher resolution curve, but it keeps the original spline type, and doesn't change the shape at all for Bezier curves. Each segment can have its own number of cuts.
Blender hasn't had the ability to create a curve from mesh edges procedurally before. Now it does! With a selection input, any of a mesh's edges can be turned into curve splines, and any extra attributes will be automatically transferred.
This node procedurally change the left or right handle types of Bezier control points.
Contributed by developer Johnny Matthews, this node changes each spline's type between the Bezier, poly, and NURBS types mentioned above, just like the edit mode operator.
Suddenly the star primitive gets much more interesting!
Also created by Johnny, this is a simple node that switches the direction of a curve, just like in edit mode.
Another simple node to output a curve's total length. Created by Johnny as well, who shared it on his YouTube channel.
The defaults for each primitive node
Just like the existing mesh primitive nodes, there are now curve primitive nodes, again by developer Johnny. These provide a surprisingly useful and flexible base for both 2D and 3D contexts. Many of the nodes have options for different input methods, like finding the circle that passes through three points in space.
Curve support in geometry nodes has also provided an opportunity to significantly improve the internals of the curve code. A large portion of the existing curve code in Blender dated back to the Blender's initial open source commit, 19 years ago! While that's not a problem in itself, standard good practices of software development have changed a lot in that time. Existing curve data in Blender also did not support storing generic attributes, which is essential for geometry nodes.
With the aim of replacing most of the existing code, we created a new implementation of the basics of curves, designed to be more efficient, much easier work with, and properly documented. Already this has been worth it. With an improved foundation we could make progress much more quickly than I expected!
Personally I've been interested in curves since I started working on Blender two years ago, so I've been happy to take on such a specific area and push it forward for a while. Five months actually– I've been very invested in the project, so time has really flown by!
What we have now should already be a solid base of features for 3.0, but more is planned for the near future:
Further in the future, these changes can be applied to curve edit mode as well. Editing and painting custom attributes will be particularly important.
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing