NURBS SoC and Beyond (Jonathan deWerd)

Hi! I’m the guy who has been working on the NURBS project. Good news: I am a few weeks into the semester and it is looking like I will have time to continue doing meaningful work on this, just not as quickly as in the last few months (from your perspective, things might even seem to happen quicker, since I am transitioning from behind-the-scenes work to easily visible work).

I wanted to make a new thread where I could post updates and reach everyone who was interested at once rather than one-at-a-time through email. I just got merge-ready builds working on {mac,windows,linux} using {cmake,scons}, so I have actual binaries for you. Temper your expectations – there are still enough bugs and missing features that I doubt these will actually be useful, not yet. However, for some workflows the NURBS enhancements are getting close to useful and for this reason perhaps some of you might want to play with the preliminary builds :slight_smile:

------ Warning for Artists -----

You should probably be using subdivision surfaces instead, especially in light of the OpenSubdiv support Sergey is working on, which will be feature-complete in Blender long before NURBS. NURBS surfaces are primarily useful for designers, engineers, and people who have to have to work with CAD/CAE programs (they are more mathematically friendly, which can be important for simulations & such). Invest your time and effort wisely.

------ Latest Build -----

Features as of 9/13/2014:

  • What you see here
  • Analytic Normals
  • N-Gon Tessellation in convert-to-mesh operator
  • Trim support (1 major bugfix until “1.0” – triangle artifacts in some trim curves)
  • UV Trim Editor
  • Rhino Import (1 minor feature, rotation surfaces, needed before “1.0”)

Downloads:
Git: testbuild branch, commit 48eac582c846bd75f6083740509ed75cfa8a3f19
Linux 32-bit: https://mega.co.nz/#!dpszDZxa!3y27friF8oh0hMjkQX8-o3Z6ZQ-pC59wEVdhLWi6HPE
Linux 64-bit: https://mega.co.nz/#!Y59CTLSD!EcG-AyNgyvLGgQx1bvGnLSSfYtj9WjHyFb_x2Mp99BI
Mac 64-bit: https://mega.co.nz/#!dpszDZxa!3y27friF8oh0hMjkQX8-o3Z6ZQ-pC59wEVdhLWi6HPE
Windows 64-bit: https://mega.co.nz/#!IglinAjC!HBtXQwPDvp-qOk0iJ6MyHWKrr4GkPAfzvblO2hafF1g

------ Short-term Todo List (hopefully ~1wk each) -----

  • Merge the stable work
  • Rotation Surfaces (the little task that keeps getting kicked down the road due to big tasks)
  • Fix the tessellation bug (I’ve figured out what to do, “just” have to code it)
  • .3dm export (especially for meshes)

------ Long-Term Plans -----

  • STEP support
  • Curve->NURBS construction (modifier stack, perhaps?)
  • Coving Support (ability to stitch edges together)
  • Bevel+Chamfer
  • Bezier Quilt support (edit with points ON surface, not points above surface)
  • Native ray-traced NURBS support in Cycles
  • Geometry Shader tessellation for NURBS surfaces in editor

Let me know what you think of these priorities, particularly if you might like things switched up. I can’t promise anything, but the order isn’t super important to me, so it’s worth asking.

Cheers,
Jon

Approved the thread (low post count woes!) and am personally really excited to see where this leads! NURBS in Blender has been a sore spot for quite a while, and it’s nice to see it getting some love.

Excited as hell for this. We’ll show Rhino a thing or two!

First of all thank you! After years of trying, this is the first progress. I’m happy

  • Rhino Import (1 minor feature, rotation surfaces, needed before “1.0”)

[B]

  • Native ray-traced NURBS support in Cycles

    =
    Awesome Rhino render / Composite workflow.

Whats this:

  • Geometry Shader tessellation for NURBS surfaces in editor

?
[/B]

Jonathan first of all, big thanks to working on this after the SOC!!
My Wishlist:
Boolean operation with Nurb objects with corresponding beveling and chamfering!

Jonathan first of all, many thanks for working on this after the SOC
been waiting for this for a long time

saw your summary doc not long ago
and now you are beginning to get some nice results

I think I would like to see this work in cycles as soon as possible
at least that is the renderer I use most of the time now

some questions

1-

just wondering here

can you explain a little what happen between the old and the new one
are the new Nurbs new data compatible at all with the old one
then we keep the old files still working
or total breakdown from backward compatibility ?

2 -
will it be possible to convert from mesh to nurbs or new nurbs or not part of you plan or may be possible?

3 -

and this does not have anything to do with curves only Nurbs things

4 - will there be a way to extract from nurbs the equations of the new nurbs for each segments
might be useful if someone wants to create his own special things math effect

So glad you were able to get it going
keep up the good work
and hope to see this added soon

thanks

lot of work and progress,congratulations.nice to see this.

If I’m not mistaken…
Newer versions of OpenGl(4.0+?) have dynamic tesselation. I think this is a shader to take advantage of that ability to render the nurbs surfaces with efficiency.

Any cool. I actually never really understood nurbs for the one assignment I had with them. Perhaps these tools will allow me to become better at them.

Thanks for letting me keep my links, too :slight_smile:

My Wishlist:
Boolean operation with Nurb objects with corresponding beveling and chamfering!

Booleans are super useful and they’re really the feature that would elevate blender from an editing+tweaking role to a creating role for NURBS surfaces. However, they’re also quite challenging to code. They don’t make a good “nights and weekends” feature. If I get lured into a PhD (I will be finishing up a MS this spring) booleans could be the subject of a future SoC. Otherwise, realistically speaking, I will only be able to include them if I can scavenge them from some other open source project.

Beveling and Chamfering, on the other hand, are a feature I stand a chance of completing. I’ve added them to the todo list :slight_smile:

can you explain a little what happen between the old and the new one
are the new Nurbs new data compatible at all with the old one
then we keep the old files still working
or total breakdown from backward compatibility ?

There is complete backwards compatibility. There is partial forwards compatibility, too: if you open a fancy trimmed NURBS surface in earlier versions of blender, you get the same surface just without the trims.

will it be possible to convert from mesh to nurbs or new nurbs or not part of you plan or may be possible?

I am not planning to implement a feature to convert topologically complex meshes to NURBS. I might be able to implement interpolation surfaces or point-fitting surfaces, but these would be topologically restricted (i.e. it only works on square patches). If this would be useful let me know; right now I think the other things I have on the priority list would be more useful, but that is all just a guess.

and this does not have anything to do with curves only Nurbs things

I have gotten into the bad habit of referring to NURBS surfaces as curves because this is what blender does internally. Is that what you mean?

will there be a way to extract from nurbs the equations of the new nurbs for each segments
might be useful if someone wants to create his own special things math effect

I can implement NURBS slicing. Along U,V isoparms this turns one NURBS surface into two. Along more general paths, it turns a NURBS surface into to NURBS surfaces with trims.

Whats this: Geometry Shader tessellation for NURBS surfaces in editor

As Therahedwig guessed, it’s a shader that would let blender offload parts of the NURBS display code to the GPU. Right now, the editor uses a polygon tessellation of the underlying surface. If this were offloaded to the GPU, much higher resolutions would be possible (with trims, even) and we could have per-pixel normals.

Hi, for those who like me is anxious to try the import, here there some free files, http://www.tsplines.com/forum/viewtopic.php?f=2&t=34163 Blender crashes with some files in edit mode…

Hello Jonathan.
I am the developer of Blender CAM and I have been following your progress with high attention.

I want to thank you for all the awesome work. I am myself an artist working mainly with meshes, but there have been so many requests for a nurbs import from so many users of BlenderCAM. These people often don’t come to this forum, since their interest is more in designing and manufacturing, but I can assure you - there is this big group of people who will appreciate your work and will be really happy about that.

Going to test Rhino import as soon as possible.

Blender crashes with some files in edit mode…

I am able to replicate this. Actually, it seems to crash on most files aside fromthe 3 I have been using for testing. Sigh. I’ll see what I can do :slight_smile:

Hello Jonathan. I am the developer of Blender CAM

Great to hear from you! I have been a “wannabe maker” for some time so I am very interested in manufacturing applications (my day-to-day work is related but theoretical). I haven’t looked into projection curves yet but perhaps I should add them to the priority list (after STEP import, perhaps). My understanding is that the continuity properties for NURBS curves and surfaces are helpful for CNC milling and such.

by curve I meant the infamous skinning curve to model hull’s shape
this is a sort of nurbs but with new tools might be possible to improve work flow if possible
not certain if already on your to do list of things
but would be cool to improve this too

thanks

NURBS support is very important for me and I thank you for your contribution. If also someone else improves metaballs I will have the modeling tools I want :slight_smile:

Hello, I found this site to test .3dm files, i tried 3 of them and all crashed on windows: http://www.flyingarchitecture.com/
they are all marked as version 5 nurbs…
then I tested these files:
http://download.rhino3d.com/download.asp?id=on4_samples
some of them opended, but most crashed…
when it worked, it looked quite good to me :wink:

As a long time Rhino user, I am excited to see this come through. I have my own version of Rhino 4 and a demo copy of Rhino 5. So far all the files I tried to import, either version 4 or 5 crashed Blender on my Windows machine. One of the demo files did open fine however. The idea of importing Rhino files and rendering them in Cycles would be huge. Your efforts are appreciated.

For jewlelry design , product design and cad in general we need the booleans :> You have lifted an very huge project and with the advent of 3D Printing and future manufacturing day by day nurbs shines. Take it small steps …don`t break yourself in pieces! We need you! :smiley:

Until then … back to hack SUB-D , Manual Retopo …

Hi, great to see a Windows build! I’m trying it out later today.
If it is worth asking, I’d love to see STEP import (or IGES or similar) earlier than long term. As some others have also said, I believe there is a large number of people in industrial design, visualisation, who could make great use of Blender with a direct CAD-format import. The way it currently works with importing a large mess of triangles is very hard to work with.

Thanks for the time and work that you are putting into this! It is certainly not a small undertaking. I am hoping that when (and not if!) it makes it to trunk, more people will use it, attracting more developers as well.

IMO booleans and STEP import are big.

Could you get similar code from FreeCAD? Or at least… inspiration?