Better curve surface support

Hi every one!

Recently I was digging my foot in the Nurbs support in Blender. I would want to achieve such goals in Blender:

  • Support holes in surfaces. (In principle this could be based on soc-2014 nurbs works, see below)
  • Support IGES/STEP file IO.

Currently blender’s curve surface support is next to none, a lot of models especially those from parametric softwares can’t really be represented correctly with current implementation, not to mention it having adequate modelling abilities. Sverchok also has the same problem which eventually (I recall) turned to FreeCAD(OpenCascade) for data exchange.

There’s a lot of usages now in automotive and industrial design field which desperately needs blender to have such ability to have correct representation of those curve based models, as well as file io for those commonly used formats, otherwise it will need some other software to convert it to mesh and then that mesh isn’t gonna be as flexible/editable for rendering so and so…

This proposal sure would come with all the curve surface editing UI.

I talked with @HooglyBoogly on the chat earlier today and I was told try not to use very old code, because now blender changed a lot after all (I do have a copy of soc-2014 nurbs which Kidux from Blender CN has ported to 2.8 but I have yet to check the implementation details). I think I could still pull the workings of that code into a new implementation if we do need to have the curve thing re-write.

Hans suggested:

  • Add a new “Surface” geometry component
  • That geometry component should hold data like the control point locations, the knots vector, and control point weights
  • Add triangulation of the surface control points on demand.
  • Then look at supporting stuff like holes

I posted here so maybe developers can chime in and discuss what is the best way to do this. What do you guys think of it?



Indeed, Blender needs own full functions nurbs kernel nowadays. not to expose UI to user to modify industry model from other apps to Blender but to hold a currectly reperentation data in blender is OK.
I dig into the soc-2014-nurbs in early 2020,it’s kernel function can expand to will fit for above perpose.
and need more attention to find the corner case to fix all nurbs code.
beyond the kernel implement well, for GN node will be fast coded base the nurbs kernel.

I hope blender can take a small step on the road of industrial model visualization. can properly IO the iges/step/wire etc.

the soc-2014-nurbs update information can be fond : Branch soc-2014-nurbs update to master code base D6807

Hey, Yiming Wu!

I applaud you for looking into this, and I would hope that you proceed with it. Thank you for all your Line Art work that you’ve done. You’ve already made a huge impact on Blender’s functionality and capabilities. This would take even it farther! May you have success!


I never use Nurbs, just no need in my field, but I always hear a lot of talk about wishing it were better. I think it’s a good proposal that would make a LOT of people really happy. Kudos

Come on I can’t believe this can be recovered, the 2014 NUBRS code is discreet, the surface cutting has not been implemented but otherwise it works very well, this model below was made with IcemSurf, and imported via 3dm OpenNurbs, already present in the 2014 code, I think we need to start again from that point. In fact, Blender’s Nubrs are basic but usable. already implementing IGES support would still be a great achievement.

I keep an eye on you ChengduLittleA


I have just successfully compiled @xueke_pei 's updated code from last year based on soc-2014-nurbs. There are some obvious problems, but it’s alright considering the status of the project. Will investigate later.


Tried to merge this with latest master, got too many conflicts in curve.c. Looks like the original curve knot thing is written poorly, Potentially I need to start this over, maybe with cascade and other things that supports a robost hole cutting in curved surfaces. It’s not really necessary to make it work on current coe base :thinking:

The UI for manipulating holes needs to be redesigned as well, also display list generating and everything related.


I really like that this is being tackled :slight_smile: because it’s one of the areas that need a lot of attention.
Improvements to nurbs and its workflow would greatly benefit both blender and its users.
And I hope that this time it won’t end up like all the previous attempts…

Yesterday I talked with @ZedDB about this thing. And because it involves getting holes represented on some surfaces.

Sebastian suggested I look into some a new method here Keenan Crane - Monte Carlo Geometry Processing It’s not entirely targeted at making holes, nor is it directly related to curved surface discretization, but could be useful at mixed-type object boolean. Also could be a nice algorithm to replace quadriflow because this algo is stable in mesh boundaries.

Sebastian also suggested that if I were to make curve trimming/hole representations, I should work on top of @HooglyBoogly 's new C++ implementation., that way it’s up to date, And since OpenCascade does use native C++ API, so it should be quite easy to do necessary bridges between the two.


Today I made a stand alone program to test the code path regarding complex parametric surface discretization (with trimming on the inner surface, and hole on the outer surface/patches) using OpenCascade, proved that the discretization code path is working. Now I think it’s best to start designing the data structure for blender to:

  • be able to store such kind of curve boundary representation which is impossible at the moment.
  • have a usable modelling workflow to manipulate those surfaces including punching holes and trimming (which in the representation is just selecting different winding levels).

I think modelling workflow can take a while to concept out, I’m gonna go try out some other software that have better support for curve surface manipulations and see what they are doing, and get a general sense of how I should approach this problem.

At the moment, I imagine this modelling workflow not to be in the realm of cad-like constraint modelling, but rather free-form like we do in mesh and more or less in the ball park of blender’s current implementation of surface modelling.

A side note: In the mean time, me and @ZedDB have discussed the monte carlo method once again, I’m gonna need to familiarize the “quad remesh” method that is used to “fill a patch”. The main concern I have to use this method to do complex parametric surface remeshing is that it could lead to unnecessary face density in relatively flat areas, while traditional OpenCascade way is way more adaptive in such cases. Monte carlo method is supposed to perform very well for general remeshing like in sculpting.


Hi, this almost sounds too good to be true!
Im crossing all fingers and offering any help as a non-coder polygon and alias automotive modeller can provide. (Yes I know its way too early for tools and UI etc.).
Thank you for tackeling this

1 Like

This is very promising as a goal, but I believe that we must try to remain faithful to the purpose for which Nurbs surfaces are used, such as an applications such as Rhino ICEM or Alias, with the possibility of working with edges and profiles to generate surfaces, with the classic ways such as patch, revolution, loft extrusion, surfaces with 1 or 2 rails and sections, also known as skin, Gordon surfaces, and of course the possibility of creating bevels, but above all the trimmed surfaces.

1 Like

In saying that you imagine the modeling workflow not to be in the realm of cad-like constraint modeling, do you mean that such constraint modeling will not be feasible? That it will be feasible but just not very user friendly or practical?

Keep up the work on this!

Hi! It’s not that constraints are not feasible, but I would rather it to behave more like the existing mesh modelling experience, so it feels consistent, and also it’s gonna be pretty fast compared to all the sketch and extrude thing that most cad software have.

@HooglyBoogly suggested yesterday that we should be looking into nodes. I think that’s a pretty good alternative to the so called “constraint based modelling”.


It’s not too early. We need to have a solid ui manipulator design before we could actually use it to model and see the effect directly with blender

1 Like

Ok, here is my take on modifying controll points of NURBS surfaces from automotive modeller perspective.
I’m trying to make this post simple, so talking only about moving points around manually

  • Having precise controll over position of each point is crucial, but Blender kinda does that already with Subd modeling.

  • I think there is no reason to have separate UI / ways of moving controll points of Polygons / Surfaces. For smooth workflow this should really be same as much as possible, so any changes I’m mentioning here should be applied also for vertices.

  • Current Transformation Gizmos are fine, but I guess vast majority of experienced modellers are using keyboard shortcuts instead, so better keep them the same for Surfaces (?)

  • Current state of things from perspective of Surfaces:

    • moving along axes + switching axes with pie menu - GOOD
    • moving along normals (Alt+S) - GOOD
    • Slide tool (double G) + extend slide (alt) - GOOD
    • Shear tool (ctrl+alt+shift+S) OK for near future, maybe a less finger-breaking shortcut would be nice, given how much this tool is being used :slight_smile:
    • Creating/deleting custom orientations - is a workaround for what I write below, can be assign shortcut to, so slow, but usable
  • Important to have:

    • Way to quickly and interactively switch between Orientations base on geometry, while manipulating in global Orientation, after pressing Axis key (for example “X”) second time, it would switch to “Interactive Orientation mode”, and any Edge mouse is howering over would become new axis “X”. Super useful for moving, scaling, shearing.
    • Different “Proportional Editing Fallow” paradigm. Having a simple ball of influence is far from precise. We can now hide geometry that should not be influenced, but than you cannot see the whole picture. A Proportional editing based on Vertex Weight like this would be very helpful. (different falloff whape than ball)
    • More control over Precision mode (Shift key while manipulating) - I’d like a way to set a fraction, instead of given 1/10th, ideally from viewport (mouse wheel?)

…This should be IMHO enough for precise freeform modeling of primary surfaces (not mentioning analytic tools, but thats different chapter and a lot can be done with shaders)


Hi! Thanks for your insights!

I guess what you put down there do pretty much align with what I expect it to behave: Just like modelling with normal mesh objects.

Creating/deleting custom orientations

This is indeed far more used in mechanical modelling than stylized stuff. We probably need to design this so it becomes much more convenient to use. I think some kitpashing plugins like hardops implemented at least a version of this orientation aligning function. Yeah, having a more convenient access could mean much faster modelling with just internal tools.

after pressing Axis key (for example “X”) second time, it would switch to “Interactive Orientation mode”

I think this is not very likely to be achieved with current internal operators, because the second press is actually handled by the operator itself not the “global” stuff, so I believe even a plugin could not access this info. We could note this down and see if any core developers have any thoughts on this.

Different “Proportional Editing Fallow” paradigm

Yeah this is kinda crappy from waaaay back, sculpting already have some like wire weight display thing, so we probably can change this as well.

More control over Precision mode

Again… not sure it’s achievable if not changing those core operators. this involves manipulating ui sliders as well, so that part we also need to change to have consistent behaviour.

The majority of these are not “directly related to” curve editing, but rather a general thing. I think we could make some design tasks on the developer site so they can see them.


Yeah exactly, I should named those feature requests “Nice to have”, but in no means “Must have” for basic work with surfaces. Heck even just displaying surfaces properly would be awesome.
For this current set of tools is enough as is.
If you feel like any other opinion from guy like me would be helpful just poke me.
Im so exited over this, again thanks for doing that.


Glad to see NURBS developing!
Main feature for me is conversion subsurface closed mesh to solid and export it as step)