_InsertEdge greatly distorts the original shape

_InsertEdge greatly distorts the original shape

That’s kind of the point, isn’t it?

You’ve got a radially symmetrical 8-sided sub-D cylinder, which should get you very, very close to perfectly circular. Add an edge, and things will definitely change, a lot, because you’re a very asymmetrical element.

The only part of this video that seems like a usability issue is that insert edge is not able to split the triangular faces. It looks like it’s inserting along the radial edge of the triangular faces, which is the ideal default result, but I also understand how this could end up happening: SubD thinking tends to see anything that isn’t a quad as “special”, and that can yield weird results. In Clayoo, often non-quads just don’t split or insert at all when you use their _ClayDivide command. That might be better than the choice here, to split the triangular faces in an intuitively “wrong” place.

Clayoo won’t do that either, so in a circumstance like this, depending on the shape I’m going for, I’d either:

a. delete all the edges between the triangles and create an octagonal end, then split the edge and slide it around or enter a numeric value.

b. split the edge using the “relative” or “proportional” option, enter a value of .5, and delete and redraw the triangular faces on both ends of the new split edge, to create a continuous line, and then manipulate the whole line using rotate 3d. with the centers of the top and bottom marking my axis.

All of that is tedious. Rhino should have a “split face” command for subD, and it should work on triangular faces. It should be possible to select all six faces on a pie wedge like this, call _SplitSubDFace, and have the output be, in flat mode, viewed from above, 7 equal pie wedges and 2 half-wedges, or viewed in smooth mode, roughly the same but with a gentle point at the narrow wedges.

We should also be able to split a face by clicking on any two points along it’s edges, using vertex, end, mid, and near snaps.


Here’s some illustration of the above:

Left to right:

  1. Ngon ends with insert edge on one side.
  2. Triangulated ends with one pie wedge split using manual triangular face redrawing described above.
  3. Taking 2, rotating the split edge and scaling it 1D from the center to keep exterior edge straight in flat mode.

Smooth Mode:

Flat mode:

Notice that there’s not a lot of difference between the first two. Mostly I think triangulated ends are for when you want to mess with the end, while Ngons are good for freezing the end and working on the rest.

I do not work in Clayoo, but I worked in t-splines.
It happens that the model is almost ready, but suddenly you realize that there is not enough edge for better detail and if you add an edge, then the shape is greatly distorted.
The same problem seems to be present in the subd.
If you add a face in flat mode, then there is no problem. the flat mode remains undistorted.
I’m not a programmer, I don’t know how to implement it, but I think it’s better to ignore the geometry of the flat mode even if it is distorted, than large deformations in a smooth mode

I use the geometry of flat mode as a way of seeing the curvature of the surfaces.

Lining up vertices in flat mode into a straight line, or lining them up so they’re on a simple guide curve, for example, can get you better zebras in the smooth mode version.

What’s hard to get a mathematical understanding of, for me, is how the closer you move edges together in flatmode, the slower they will affect smooth mode. There’s a fall-off effect. I don’t understand it mathematically, as a ratio, but I do have an intuitive sense of how it works.

SubD in general can feel like a puzzle at times. More tools will make it quicker to solve.

My opinion, when adding new edges the original shape should be frozen. It is in smooth mode, otherwise it looks like an intuitive modeling with unpredictable results

Do you mean you want new edges to not deform the object at all? Or do you mean you want the deformation to take effect only after exiting the command?

Tsplines has/had the option of adding edges ‘exact’ in that it would add extra control while trying to maintain the input shape as best it could. This sounds like what you are looking for.

Yes of course
The cylinder should be cylinder, no matter how many edges was added.

Thanks for the question/suggestion… I’ve filed it for the devs to see if it would be possible with Rhino SubD… https://mcneel.myjetbrains.com/youtrack/issue/RH-55446

1 Like

This conflicts with the fundamental nature of subD and Catmull-Clark.

Check this file out: SubD Face Deviation from Circular.3dm (120.9 KB)

As you’ll see, SubD faces constructed from equilateral polygons get increasingly close to becoming a perfect circle the more vertices they have. And it’s a very rapid fall off.

The attached file shows faces drawn using the “interpolated” option set to “yes” on top, and to “no” below. For the interpolated faces, you get deviations from round as listed below. This is normal and it is how subD and Catmull-Clark are supposed to work.

3 vertices: 6.25% deviation from round.
4 vertices: 1.39%
5 vertices: 0.47%
6 vertices: 0.2%
7 vertices: 0.1%
8 vertices: 0.06%

Rhino SubD wouldn’t be compatible with any other SubD program if this didn’t happen. It wouldn’t be SubD, as it’s commonly understood. Vertices in SubD have a fixed weight. McNeel has already rejected the idea to allow users to change the weights of subD vertices because that would mean Rhino SubD objects would not work correctly when exported to other programs that have SubD.

So the fault in the insert edge command that you are experiencing is not deviation from round. It’s that it’s not splitting the triangular face at the vertex in the center of the cylinder, or it’s that it doesn’t at least give you the option to fix the endpoints of the inset edge you’re creating at the center of the cylinder.

cc: @pascal @jussi_aaltonen … am I explaining this adequately?

All right.
You talk about line segments and points (flat mode)
I’m talking about a smoothed mode. There are tangents degrees and radius
Two points can be interconnected by a spline of different curvature

The meaning of my proposal, figuratively speaking, is to remember/freeze the existing curvature in a smoothed mode, to create a new edge point on this curvature. And let this new point between two neighboring ones in the flat mode now not lie on the same line but be offset relative to the curvature of the original smoothed surface

This wouldn’t make sense, mathematically or in terms of usability.

The issue with the _InsertEdge command here is that there’s no option to choose and fix the endpoint. For users working with a SubD object that has triangulated end caps, like this cylinder or any more complicated object such as a SubD of a fingertip on a hand, it will be useful to have this option within the command. In this simple example, I could see it working as follows:

  1. Call _InsertEdge
  2. Select an option called “fixed endpoints”
  3. Click to select an endpoint.
  4. Now when the user moves the cursor to place the inserted edge, the endpoints act as pivot points and don’t move.

I expect this will mostly make sense if the endpoints are on vertices, but maybe there are other applications.

In SubD, the points are connected by surfaces created using the Catmull-Clark smoothing algorithm. If you use different smoothing options, it isn’t SubD anymore, or at least not as anyone commonly understands it.

This is why there’s a “look” to SubD. It’s all bound to the same algorithm.

Catmull-Clark literally can’t make a perfect cylinder. That’s not what it does.

If strictly follow this algorithm, then can forget about the Insert Point and any others commands allowing to create arbitrary polyhedrons… Quadrangles only
We cannot will detail using only quadrangles. And in this case, our highly detailed models will consist of hundreds of thousands or millions of quadrangular polygons. Example DynaMesh in a Zebra.

I think that at the SubD inside Rhino release we get a mixed way

I’m not a mathematician so I can’t get deeper into the weeds here to explain this with numbers.

What I do know is that there is a way in which SubD is implemented in other common programs that means that implementing what you’re asking for in Rhino would make Rhino’s subD no longer reliably exportable to other programs and that several of McNeels developers have explained on this forum that various feature requests are impossible because of this.

I just voiced my guesses.
By the way TS also SubD?

T-Splines are not SubD.

T-splines are sometimes SubDs, but the functionality @leex is looking for is not in the SubD part.

With SubDs, the way you can add edges without changing the surface is that you need to subdivide every face at the same time, which usually means that you’re getting 4x the number of faces.

There are other ways to get closer with pure SubDs though - for example, there was a tool in the T-splines plugin called tsInterpolate that would swap positions of the CVs and surface locations. If you interpolate the positions, run insert edge, and then interpolate back, you’ll have the same topology operation with less surface change.

The main downside of this approach is that it’s a bit like an EP curve - it can introduce wiggles into your surface.