1
$\begingroup$

In the example file below, we have a simple profile created with a bunch of vertices forming a continuous edge.

Using the help of geometry nodes, I want to apply a fillet to smooth out the shape, make an offset extrusion, and then extrude vertically.

All of this works correctly if I switch the "Resample Curve" node from "evaluated" to "count." Otherwise, the extrusion becomes distorted, as you can see in the model at the center. There are indentations and spikes protruding below. So, resampling is a quick fix.

However, resampling a curve and maintaining good details require creating many more polygons, which are not really needed. Ideally, the "Resample Curve" node should not be necessary.

How can we address this issue for the sake of elegance, beauty, and performance?

Screenshot

Example file

$\endgroup$

2 Answers 2

3
$\begingroup$

When filleting the curve you generate points on top of each other which causes the spiky effect. To resolve it you need to temporarily convert the Curve to Mesh and Merge by Distance the overlapping points with some minimal distance value, then convert back the Mesh to Curve and proceed with the next steps.

Note: You don't need the Resample Curve Node with Evaluated option as it is of type Poly (it is muted on the screenshot to show it is not required)

enter image description here

$\endgroup$
2
  • $\begingroup$ That worked perfectly, thanks $\endgroup$
    – crucchi
    Oct 24, 2023 at 7:15
  • 1
    $\begingroup$ You're welcome. $\endgroup$ Oct 24, 2023 at 7:36
2
$\begingroup$

Use this method if you, for some reason, do not want to convert the curve to mesh to merge by distance, and then convert back to curve

$\hspace{15pt}$These distortions arise from sequences of two or more points sharing the same position. In the file you provided, they are created by the Fillet Curve node when the rounding of two points touch:

$\hspace{15pt}$Or when a point has no curvature:

$\hspace{15pt}$To solve no curvature points, simply remove them from the base mesh.

$\hspace{15pt}$To solve rounding touch, after the Fillet Curve, you will need to delete at least one of the points that share a position. To do that, check if the next point is at the same position of the current to delete it:

node tree

Result:

$\endgroup$
4
  • $\begingroup$ Hi, your solution is ingenious, thanks for taking the time to provide such an elaborate answer. I have adopted the simpler one, but please can you explain me in what situations this is the way to go? What are the potential reasons to "not wanting to convert the curve to mesh to merge by distance, and then convert back to curve"? $\endgroup$
    – crucchi
    Oct 24, 2023 at 7:18
  • 1
    $\begingroup$ @crucchi in your case I see no necessity for preserving the curve, but preserving the curve would be prefered if, further in the node chain, one would use attributes like Radius, Handle Positions, Tilt or other spline attributes that would otherwise be lost in the conversion or need to be captured and re-set after converting back to curve. $\endgroup$
    – Hulifier
    Oct 24, 2023 at 17:10
  • 1
    $\begingroup$ @crucchi It is also faster to compute, but unless someone has splines with hundreds of thousands of points, there's no big difference in time. $\endgroup$
    – Hulifier
    Oct 24, 2023 at 17:41
  • $\begingroup$ I understand, thanks $\endgroup$
    – crucchi
    Oct 31, 2023 at 9:42

You must log in to answer this question.

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