1
$\begingroup$

I've created and resampled a curve and want to smoothly taper it to the center.

I'm able to do exactly what I need using the spline parameter node and a float curve, but the problem is that I'm unable to expose these settings to a group input.

I'm seeking an alternative method that provides similar control via group input. For my purposes, I believe this would be 8 input values (listed towards bottom).

enter image description here

The ideal solution (see image below), if it's possible, would allow independent radius settings for the start and endpoints of the curve as well as the three "taper control points" and also provide independent <-------> positioning controls along the curve for the 3 "taper points".

I think the following group input example reflects the 8 necessary input settings from the float curve example above:

  • Startpoint radius: (value)
  • Taper A (nearest startpoint) radius: (value)
  • Taper A (nearest startpoint) location along curve: [factor slider]
  • Taper B (near center of curve) radius: (value)
  • Taper B (near center of curve) location along curve: [factor slider]
  • Taper C (nearest endpoint) radius: (value)
  • Taper C (nearest endpoint) location along curve: [factor slider]
  • Endpoint radius: (value)

![enter image description here

Please note, the float curve applies its settings to all curve geometry and I am seeking a solution that does the same. My original post only included an image showing one curve and not multiple curves. I mistakenly cropped them out thinking they were not necessary for my example.

enter image description here

$\endgroup$
1
  • $\begingroup$ Instead, could you not build a curve in 3DViewport of 5 points align along X between 0 and 1, encoding factor of points A/B/C and radius ? Then just add this curve to the group input list ? You can edit it as you are doing with the float curve, but in 3DViewport instead of inside GN editor. You can extract factors and radii from this curve. $\endgroup$ Mar 31 at 21:25

3 Answers 3

2
$\begingroup$

Taper curve from Curve object

This solution works for any curve. It could generate artifacts in some cases (for example A location greater than B location).

1. Starting object

We'll start with a Curve object, here a Bézier Curve :

enter image description here

2. Create control points

First I'm setting this curve resolution to 64. It should be high enough so that further operations looks totally smooth. The control points positions being computed from here, a low resolution would create discontinuity in the control points positions.

Then we can resample our curve to 5 points.

enter image description here

enter image description here

3. Control points location

Now we'll change the location of our 3 points A, B and C. We can sample the initial curve to let these points slide smoothly on the curve.

enter image description here

  • Index Selection : I've put the index selection in a group just for readability. It lets us select the control points by index.

  • Sample Curve : is only composed of one Sample Curve node. I've added the geometry as input and output just to clear the node tree a bit.

4. Control points radius

Then we can Set Curve Radius on each control points. I'm reusing the Index Selection group.

enter image description here

At this point if we Curve to Mesh, we obtain :

enter image description here

5. Curve to Mesh and Subdivision

Now let's Curve to Mesh and add a Subdivision Surface. I've added a boolean input to display the center of the curve, and the control points of the curve. Could be useful for debugging or tweaking the values.

enter image description here

enter image description here

6. Blend file and conclusion

This solution won't let you choose the exact radius of each point because it uses a Subdivision Surface.

Also, this solution expects from you to keep in order Start < A < B < C < End.

$\endgroup$
1
  • $\begingroup$ This is very close to working exactly as I need, thank you. However, where the float curve works on all curves in my scene, the setup you provided only works on one of them. I cropped out the additional curves in my original image thinking they were not necessary and it would save space (sorry). Is there a way to get this to work on multiple curves? Also, for my purposes, exactness (such as with the radius) isn't necessary as tweaks are done according to visual taste. $\endgroup$
    – Zero Dean
    Apr 2 at 0:40
1
$\begingroup$

Taper curve for straight objects

This Geometry Nodes setup only works for objects obtained by spinning a profile around an axis. So quite limited and doesn't use your Set Radius > Curve To Mesh workflow, but I hope it's useful to someone.

1. Spawn profile with 5 control points

First, let's spawn a curve line with 5 control points. Then we can change X and Z position according to your suggested position and radius. I've shown the axis of rotation to help visualize. We'll use it at the 3rd step.

enter image description here

enter image description here

I've grouped a few nodes in Relocate point. By explicitly giving index, X position and Z position, the process of changing the point position is straight forward.

2. Change curve type

Then we can change the curve type, creating the interpolation automatically for us. I went a bit overboard and added a nice menu for 3 curve types.

  • Poly : only display control points and straigth lines. Can be useful for tweaking the geometry node inputs
  • Catmull Rom : the surface will exactly go through the positions we set. The bad side is that your curve profile could go into negative values between points.
  • NURBS : the surface will be more smooth, no strange behavior. But the surface won't exactly go through the positions.

enter image description here

enter image description here

3. Spin profile around X-axis

We can use a Repeat Zone to extrude the profile and rotate it at each iteration. The value To Extrude highlights the geometry to extrude. At each iteration, only the last extrusion result is set to True. It allows us to rotate the current extrusion around the axis.

enter image description here

enter image description here

4. Blend file

I didn't go into much detail. Feel free to ask for precision in comments and I'll update my answer.

$\endgroup$
1
$\begingroup$

Thank you to everyone for your help! I've received an answer on Blender Artists that currently solves my problem 100% which I will include here.

enter image description here

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .