Simple Surface - or so I thought

I’ve got to create a surface for the top of a button. Easy I thought but try as I might I can’t get it quite right - I suspect I’m missing something obvious.

It’s a square with rounded corners, and it needs to dish inwards towards the centre. I faked it for some renders but now I really need it to be right, and follow the perimeter curves.

Could any of you experts tell me how to do this one? I think I’m going to have egg on my face when I see the solution! Thanks in advance.

Button Button.3dm (107.0 KB)

“Rail revolve” using the vertical white line as an axis is the easiest and most accurate way to do it. However, the 4 rounded corners are at G1 (tangency) due to the border shape of the button, hence a highly reflective surface finish will not look particularly good. If you make the rounded edges G2 with blend curve, the reflections will be more beautiful.

Rail revolve.3dm (135.2 KB)

Another option for you is to just show the control points of your existing surface, then drag some of them closer to the corner, and that should give you relatively close result. But the advantage of it is the smoother transition that will look much better in the real life.

Thanks very much for your suggestion, B Design Bg2.

As you say, the reflections in the corners aren’t ideal using the rail revolve. I hadn’t thought of changing them to G2 though so I’ll give that a try. Failing that I can play around with the CPs a bit more, see if I can get closer to the curves.

Thanks again for your help.

Here’s one way out - these pillowy shapes sometimes, often, even, lend themselves to a ‘loose loft’ solution.

If the profile curve is degree 3 then placing shape, or ‘around’ curves at the control point locations and lofting with the Loose style, will make a nice surface that matches the profile curve exactly. The key in getting something 'hard edged’and geometric like a filleted square to dissipate those corners nicely is to make sure the second curve in the loft is pretty close to the edge curve and is smooth - I used circles here - you can get away with that if you rebuild the loft with enough points - but that requires an extra control point in the profile curve to know where to place that circle, so add a knot to your profile curve to give it 5 points instead if four.

Starting curve, degree 2, arc:

Rebuild to degree 3, 4 pt

Notice that the second point inward is a little far from the outer curve - InsertKnot>Automatic or go back to the arc and rebuild to 5 points. (Degree 3)

Place curves, circles in this case, on each curve control point:

Loft (to the center point) all the closed curves.Line up the seams. Style = Loose.
Because we’re lofting curves with very disparate structures, use the Rebuild setting in Loft to make them compatible. This is a quick cheat, you could spend time making the curves compatible and much simpler…

In this file I added yet another knot and circle near the edge.


Pillowy.3dm (200.3 KB)



I think one of the takeaways from pascals model is that in the middle the curvature is spherical in nature. If you use rail revolve you will always force some curvature down in the middle since the profile is stretched according to the distance to the rail.

better than a simple rail-revolve would be something like this:

a true revolve in the middle then blended to the edges;
rectange_pillowy.3dm (64.0 KB)

You’ll see on mine that, because I used all circles, the surface has some negative curvature near the corners where the first circle is far from the edge curve. You could take the time to finesse the outer circle or two to be some shape between the outer rectangle and a circle .

PillowyByQuadrants.3dm (116.6 KB)


As B Design Bg2 noted the edge curves have G1 continuity between the straight sections and the corner arcs. That level of continuity means that a non-planar surface which exactly matches the edge curves will have a region with G1 continuity near the ends of each straight section (or possibly a singularity). That is how the geometry works and does not depend on how it is modeled.

Adding and moving control points can get you closer but without introducing the G1 continuity into the surface it will not be possible to exactly match the line and arc edges.

1 Like

A different approach using a trimmed “square” surface. Button DC1.3dm (200.7 KB)

The control points can be moved to change the shape.

1 Like

Thanks all for the suggestions. I’m away from my PC now but will go through them all properly in the morning - it looks like there are some excellent results there.

I appreciate your help.

This is exactly how I used to build similar shapes for a soap about 9 years ago (two of these mirrored plus a “Blend surface” in between). :smiley:

kerry kingston did an extensive tutorial about this a while ago:
its done in alias but the principles apply to rhino aswell:

There are many ways to achieve the shape of the button, but if G1 corners are not mandatory, I suggest to either use the split surface that David Cockey showed above or use 8 profile curves for “Loft” with the “Loose” option. Here is a quick video tutorial how to do the latter (12,5 MB):

Many thanks again to all of you sharing your expertise, its much appreciated. I’ve downloaded all of the files and will try the techniques suggested.

Thanks, Pascal. I always forget the loose loft option - I shall give it a try.

Many thanks Konrad. I really like this solution. It seems to give excellent reflections and the surfaces are simple. I can keep to the intended perimeter shape too. I think this is probably the way I’ll go.

Thanks for the link to the Alias tutorial too - looks very helpful.

Thank-you, David, for the explanation on the theory and for your solution.

Compromising on the exact corner geometry is an option if needs be. I shall try adjusting the CPs on your single trimmed surface to see how close I can get.

Many thanks B Design Bg2 for taking the time to do the video tutorial. Unfortunately I can’t get it to load. I’ll try again later - perhaps there is a glitch somewhere. Much appreciated all the same.

Note @MisterB - you can “quote”* people or @ them on Discourse, so that all your “thanks” above for example could be in one post… (just easier to read the thread)

*just highlight the appropriate text in their message and punch the “Quote” button that appears

1 Like

Thanks Helvetosaur. Duly noted :smiley:.

Not sure why you can’t access the video that I uploaded yesterday. I just downloaded and it works fine.
Anyway, here is the file where I used “Loft” with the “Loose” option. You will notice that I reset the CPlane back to 0, because it was raised by 2 mm. Also, I hide the layers consisting your curves and surface and created a new one where I put my geometry. For some reason your button was tiny bit smaller than 30 mm. I made mine 30 mm exactly.
I turned on the “History” recording, so if you modify the white curves, the loft surface will change accordingly. The black curves are history enabled copies of the white ones. I used “Pollar array” to make them. The light grey line was used from top view to snap the control points of the diagonal white curve (which is a copy of the smaller white curve) to be straight along the diagonal direction.

If this shape is too round for you, you can also play with the control point weight of the 4 most outside control points along the corners.

I also made an alternative version whose outer shape I matched to the rounded square curve (close to your original intent), and then I made it slightly more beautiful by decreasing the number of control points to just 32.

Button - Loft.3dm (411.4 KB)