Strange MultiPipe SubD result

Just trying the MultiPipe subD and it gives a weird result, presumably because the input curves meet at a sharp angle?

Any ideas whether MultiPipe can work on curves like this? (9.3 KB)

Hi @martynjhogg

Yes, curves which meet like this with zero angle or very close to it, and are also tightly curved or very short currently cause a problem for MultiPipe.
If you think of it as trying to make an intersection of cylinders, the smaller the angle, the further out from the node the intersection crease has to come. When you also have short segments (as needed to closely match the curving input), this can mean that where they intersect in the middle of the angle extends beyond the ends of the segments. Beyond some limit, the distinction between nodes and struts breaks down, and it would need a different topology.
The issue is filed here, where I also mention one possible fix I’m thinking of:

You might be able to work around it by instead of giving it curves and letting it discretize them, doing the discretization first in a way that makes the segments long enough to accommodate the joint at the sharp angle, and feeding MultiPipe the polylines as in the definition below. Using longer segments does mean that you can’t match small radius curves so well though. (10.0 KB)

You could also maybe generate it first with different curves with a bigger angle to get a good topology, then manually modify the result to get back to matching the original curves

1 Like

Thanks, I probably need to spend some time on subD tutorials to understand them better too!

I can’t see how to cap the multipipe in GH either. I assume this is easy, I just can’t see it?

No - cap options are currently missing from the GH component, but are coming for the next version.

Max posted a script here that gives some cap options now:


im having a similar issue. can someone take a look at these curves and tell me why they are twisting at the intersection. thank multipipe.3dm (23.8 KB) you

I see the input curves do not quite touch:
So I moved them so they do.

Also, depending on the radius you are using, having curves at a small angle like this, and curving close to the node can lead to overlapping parts in the resulting object.
One way to avoid this is by making sure the discretization of the curve uses long enough segments to give room for the node.
If you are using the Rhino command, you can control the discretization of the curve using Curve>Convert>Curve To Lines and setting a suitable MinLength. Here I used 5:

(if you are doing this in Grasshopper, you can change the KinkAngle setting to control how the curve is discretized)

im not familiar with the command Curve>Convert>Curve To Lines. where is that located?

Ah, sorry - the command is just called Convert if you type it, but it can also be found under the Curve Tab of the Rhino menu bar, on the pop-out menu from Convert, near the bottom.

cool thank you.