I could use some much needed suggestions to improve my modeling workflow. What I’d like to do better, is to create clean geometry in NURBS, the first time, rather than constantly rebuild or clean it up later after conversion to mesh. I think I’ve picked most of the low hanging fruit when it comes good modeling practices, but there are a set of recurring problems I keep coming across for which time, patience, and dedication seem to be of limited effectiveness. I’d like to better understand better what’s going wrong.
I don’t want to spend my days ‘milking mice’ tracking down minute errors, but that’s most of what I’ve been doing lately. The models are for jewelry designs, smallest features at ~0.01 mm, my precision is set at 0.001. I’m working on fairly small objects at tight tolerances.
Probably the biggest roadblock I’m running into is the types of forms I am trying to make at the scale I’m making them. The designs often have small, sharp tapering forms, often running in parallel, or fanning out/ converging to/ from a single point/ pole (long, narrow, ending at points):
I know, I know, avoid poles. However that’s not the issue (I think) I’m really having. It seems to be the precision of the surfaces is breaking down a lot beyond a certain scale any time I have a sharp edge. The curve/ surface resolution just doesn’t seem to hold up at the smallest scales.
Sharp edges require thin surfaces. At the thin edges they’re breaking down and they’re not playing nice with their neighbours.
I consistently run into the same kinds of issues: poorly aligned isocurves that twist at the ends of surfaces causing naked micro edges that won’t join and/ or cause bad surfaces especially when the angles are very acute. The source curves seem fine. For example the following geometry was generated from a two rail sweep:
Note the isocurve crossing over the edge at the end. The problem was only at the end (<0.05 mm across), but the little twist kept the geometry from correctly joining with the surrounding geometry/ naked edge. In this case it was relatively easy to fix, but it wasn’t easy to spot until after all the surfaces were joined. I could be completely off base here but anecdotally it seems as if Rhino’s geometry generation perhaps gets wonky at the smallest scales. I keep seeing things like the example above. I’m not sure how to avoid it.
It seems to be a bit of a nail biter something if fillets are going to work. This little corner piece turned out ok after a number of tries, but with long narrow edges I seem to get consistently hung up on step three:
tolerance.3dm (1.1 MB)
I find often, even though the fillets are generated from the source geometry, the don’t align correctly. Manually extracting curves (_Intersect), extending, exploding surfaces, trimming, and re-joining gets very time consuming (only to find out it creates micoloops/ small naked edges when trimmed and joined with its neighbours (next example).
In the case below, the naked edges could not be fixed with the join edge command or testRemoveAllNakedMicroLoops - I prefer only to use either solution as a last resort (fyi, the naked edge loops are 0.0019 mm across):
Visually I couldn’t see anything wrong with the source curves so I wonder if the error was an rounding error accumulated from the type of operations with approximate solutions(?).
Sometimes I find surfaces generated from things like trim generated from projected curves can be slightly misaligned, case dependent. I try to avoid operations like trims, curve projections or fillets when I can, but sometimes I need to a few of these and my geometry won’t join or generates naked edges that are so small I can’t work on them to manually fix them because of camera clipping - I can’t get any closer or the camera controls are too sensitive for practical purposes at that scale (for example, a microloop or surface intersection 0.005 mm in diameter - my precision is set at .001 mm). In any case if I’m that close I’ve done something wrong and I don’t want to be that close anyway. I actually wondered today if I should set my units to microns so I can get closer
Sometimes these errors cause bad objects when joining two closed intermediate complexity polysurfaces (I’ll test join smaller surfaces to see if they’re watertight first, explode them, remove a common surface that each of the objects have been created from, and finally join the two smaller polysurfaces into one big one). It’s strange that two valid, closed polysurfaces objects won’t join when the identical common piece between then is deleted (relative tolerance? - the concept, not the setting, i.e why it’s good to shrink trimmed surfaces).
I’ve been working with reasonable precision settings given the scale (I’ve tried a couple of different settings, FYI, in different files, so I’m not switching precision back and forth in the same file). I want the correct amount of precision without creating too many control points/ heavy files.
I often use sweep 2 rails to generate the base surfaces, trimming surfaces against each other, surfaces blends, lofts. Pretty standard stuff. I’ve only been using Rhino since the new year, but I am a fairly experienced modeler in other packages with some previous NURBS experience. I’m always learning, but I think I’m almost unreasonably careful about good modeling habits: snapping, using surfaces rather than extracted curves as rails from trimmed surfaces; using un-joined clean surfaces as much as possible for source information, alignment of cross sections & rails; I work with CheckNewObjects on and show edges; etc., etc.
But as when I create designs with these sharp tapering forms the issues reoccur frequently (I know, I know, the obvious answer is don’t make sharp, tapering forms or at the very least be even more careful). I’m trying to find the right balance between the design and the fundamental limitations of the software (trying to make triangular forms in software that prefers rectangles).
As far as I can see I’m working to the highest level of precision the modeling process will let me (i.e. everything is snapped and as precise as I can make it, at the limits of what the camera will let me see), but it still doesn’t seem to be enough to make consistently good geometry. Even though the objects I’m working on are only a few centimeters across, the errors are miniscule (but unfixable without pulling the model apart and doing a rebuild).
It feels odd that the error recognition/ calculation appears to be precise than the geometry creation process (i.e. I get naked edges half the size of my minimum precision, perhaps the calculation is based on a radial tolerance?). Maddeningly it feels like the software is precise enough to recognize the errors but doesn’t allow me the control to make clean geometry or to fix errors directly afterwards. The models I’m making are only a few centimeters across, but the ‘unfixable’ errors are one screen pixel across if at full screen model width (*unfixable through direct manipulation, rip it apart and start over). They’re not that easy to spot until after geometry is joined.
Any tidbits would be appreciated:
ex. When CheckNewObjects indicates you’ve created bad geometry, besides merely extractly bad geometry (ExtractBadSrf), is there a way of highlighting on the model the bad edges the tool gives you in the feedback?
ex. How does angle tolerance affect object snapping on small objects with acute angles?
ex. Anectdotally, it seems to work better to generate fillets on un-joined surfaces regardless of tangency.
ex. In a two rail sweep, making your cross sections consistently perpendicular to the rails creates better end geometry
ex. Trim works better on un-joined surfaces. Explode surfaces, trim, re-join.
ex. template file: Large Objects - Microns? ;p