QuadMesh prototype command available in latest WIP


I’ve been working on a quad mesher, and a prototype version is now available in the latest WIP. Please try it out!

The command name is QuadMesh

Note: The quad mesher still needs a lot of work. Expect to get models that are partially broken in some places, and expect to have to fiddle with the options in order to get most out of the command for now.

What you can expect:

  • Turn breps, extrusions and meshes into pure quad meshes
  • Quads can be oriented along the principal curvature directions of the surface.
  • Creating a quad mesh from a general surface is computationally very demanding. Expect run times ranging from a second to tens of seconds to several minutes depending on the complexity and size of the model.
  • Using a mesh as input has been tested much less than brep/extrusion input, so expect less robustness here.


  • Try small and simple object first, and if successful move on to more challenging objects.
  • Make sure the target quad edge length is small enough to fit between nearby singularity points.
  • If the quad mesher fails and the resulting quad mesh has holes in it, try reducing the quad edge length.

Things to avoid for now:

  • Models with cone-shaped features where the tip of the cone is sharp and is a single point/vertex. These are tricky for a number of reasons, and are not supported very well at the moment.

Below you can find more in-depth documentation and an explanation of what the QuadMesh command options do.

QuadMesh is a command that creates a quad mesh from a brep, extrusion or mesh. The result is a pure quad mesh, which means it contains only quads. The size and alignment of a specific quad is determined by the local curvature of the surface at the quad’s location.

In order to be able to compute the quad layout, a direction field needs to be defined over the surface. This direction field can be aligned along the principal curvature directions of the surface in order to best approximate the shape of the original surface.

When the QuadMesh command is executed, the user is presented with the direction field on the surface of the input object. The user can adjust parameters to change the way the direction field flows on the surface. In addition to the direction field, singularity points of the field are also shown. Singularity points are locations on the mesh which will become valence 3 or valence 5 vertices in the resulting quad mesh. By adjusting parameters the locations of the singularity points may change and possibly end up in more appropriate locations.

QuadMesh command options

QuadEdgeLength - This parameter controls the preferred quad edge length. The final length of quad edges can still be smaller or larger than this value.

CurvatureAlignmentThreshold - This parameter controls which parts of the direction field point along the principal curvatures. The value is a percentage of the range of curvature values to use as alignment. For example, a value of 50 would take 50% of the largest curvature values on the surface and force the direction field to align to it. The rest of the field is determined by interpolation.

FieldInterpolation ( SmoothAndSlow | UnevenAndFast ) - This option controls the method for how to interpolate direction field values. SmoothAndSlow uses a more sophisticated algorithm to interpolate directions smoothly, while UnevenAndFast interpolates the directions very coarsely.

FieldAlignToSeams ( Yes | No ) - Controls whether the direction field is forced to be aligned along seams.

QuadAlign ( Crease | CreaseAndSeam ) - Controls whether quad edges will be aligned to creases and seams.

Cancel - Cancels the command.

Update - Updates the visual feedback based on new parameter values.

Create - Creates the quad mesh.

Some examples of successful results:

It can require a lot of fiddling with the options to get quad meshes like the ones above. There’s still a lot of work to be done in making the command more robust, so for now, expect things to fail quite often.

Please go ahead and try it! (Command name QuadMesh)



That’s impressive for a first prototype! Seems that results are better with relatively dense initial subdivision. Also the mesher seems not to like imported non V6 geometry. Freezes Rhino here.
Speed is pretty decent already and your mesher seems not prone to create spiral-loops, which is great.

If you have a model that freezes it, we need it.

You have them already. None of the V5 create samples I sent David works here – the command doesn’t even properly initialize but freezes right away. If I reconstruct the model from scratch in V6 the mesher works.


I actually made a fix to the issue you are having the day you sent me the files, but I seem to have forgotten to merge the changes to the main development branch. This will be fixed in the next WIP release, which should be next Tuesday.

I can’t wait to try it out. This is fantastic news as I am always sharing my files with Visual effects companies and I’m forced to give them crappy triangulated meshes (which they hate). I will post results when I have them.

Its got a lot of promise. There are still some missing polys here and there but over all its very promising.
What would be helpful is to see the results in a preview, currently what it shows is helpful but dosent tell the whole story. I realize this is VERY early in development but its VERY VERY encouraging. I cant stress enough how important this is to people like me who are constantly going back and forth between Rhino and Modo or exporting to Maya, Max or Lightwave for Visual Effects to use. This closes a long standing gap.
Currently, the Cad loader for modo does a fairly good job bringing nurbs surfaces into Modo and meshing them but its not perfect. It doesnt allow for loops around holes, thats the big difference.

I look forward to seeing more! Thanks!

In Rhino

In Modo

After cleaning up the missing polys I tried the bevel extrude tool in modo. Works as expected.


Face select works as expected

Multi Resolution Sculpting in Modo works as expected



Ha Ha Ha, too true.

Hi G,

I hate to be that guy but being not a native English speaker can you explain what you mean…


ha, no problem Willem. It’s a phase or idiom used when people (usually kids, but mostly spoiled adults) don’t take good care of the things they have, they abuse them and don’t really deserve them.

I use this phase a lot in work context when we get good funding for project, time to get the work done and somehow we do not do a great job (yup, it happens).

Here’s a good lik explaining the definition/origin:

1 Like

Hi David,
I see that your mesher creates support loops around holes, as nicely visible on your helmet example.
It however doesn’t do this (yet) on local detail, as seen here…

If this worked, one should be able to go a lot further down with the overall cage-polygon count and could leave it up to higher SubD-levels to match the Nurbs template closer. Here’s also quick overpaint of the recently posted geometry. Obviously such a cage would be more suitable input for interactive editing and uv-mapping. Probably I still left an Ngon in or two, but I guess you get the sense. :o)

Here, just for reference a similar sample, modelled by hand, with support loops around protrusion and just the required extraordinary points. Subdivided a few times it should smooth out nicely.

support-loops.zip (3.2 KB)

Hi David,
Could you list the command options you used for your 4 examples? I know the QuadEdgeLength is dependent on the units and size of the object.


First of all, thanks for testing it out. In regards to loops around holes: The quad mesher should be able to make loops around any hole, large or small. However, it is not guaranteed to always make loops. This process is decided by a global optimization which processes the whole model at once, and sometimes it is more optimal to make loops, and sometimes not. This could be influenced in a number of ways, though, so we could add an option to “force loops”.

In regards to your specific model, the exact reason for the lack of loops is hard to explain with just a screen shot. It does show that more work needs to be done on the quad mesher, though :slight_smile:


Sorry, I don’t remember. Some of the screenshots are not even that recent. Every model usually needs some fine-tuning on the options, and there is no one-size-fits-all.

What do you think of the available options in the command? Confusing? Too many? Too little?



Thanks for the comments and screenshots! They’re very helpful.


1 Like

Hi David,
I’m sure you understood what I meant – you only interpret the trim edge for the pin growing out of the surface as a second hole, right?

Just to clarify: I think it was desirable to always get loops created around local features (holes, recesses, protrusions), otherwise the smallest detail in the model will inevitably determine the resolution of the remeshed cage – likely ending up in meshes which are too high res – and topology wise not optimal for interactive SubD-editing.
If one wants to spit out a quad mesh which looks very decent and smooth already and close to the Nurbs source, one could construct a minimal cage first and then give it a few (reprojected) subdivision levels, which get stored in the model.

Hi David,
I will need to do more testing before I can make a useful assessment of the commands. I’ll keep playing around with it and post my observations.

Maybe this one illustrates how nicely one can introduce local detail to the cage with a few faces only. This cage is very loose but it already carries all information to get displayed in much greater detail. Don’t get me wrong, I imagine very difficult to accomplish procedurally what I have modelled by hand, but I thought one should give this sort of feedback early in the process.
<a class=“attachment” local-detail.zip (102.4 KB)