From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

NURBS Modernization

Name: Jonathan deWerd

IRC: jjoonathan


Synopsis

I propose to revive a longstanding effort to improve NURBS support in blender with two broad goals: one, attaining import/export compatibility for common NURBS-based CAD and modeling formats, and two, adding industry- standard NURBS manipulation tools so that blender can actively participate in workflows containing NURBS primitives.

Benefits to Blender

3D printers are all the rage. There are 107 results for “3D printing” on Kickstarter, a key patent surrounding laser sintering for metallic materials recently expired, and blender’s support for the standard modeling technique of the design and manufacturing industry is “laughable” (Ton’s words). Even before the 3D printer craze, people wanted better NURBS support in blender, but now the issue is coming to a head. Catmull-Clark limit surfaces suffice for the artist (witness Pixar’s OpenSubdiv), but designers, architects, and engineers have use for the additional control that comes from directly specifying+editing profile curves and conic parameters, not to mention tool compatibility.

  • “in recent years I've been working with Rhino, exactly because of the lack of NURBS in Blender” -Abel Groenwolt
  • “NURBS is the only option for products modeling when you talk about fast and precise modeling.” -ygs
  • “I ... really felt in love with nurbs for some models ... so my best hope was [the 2009 effort].” -SilenceBe
  • “nurbs improvement want” -agpig
  • “I am a bit sad Nurbs dont get the attention they should get” -piccobello
  • “Having a good NURBS meshing method in Blender would already open up a world of possibilities” -StompinTom
  • “NURBS are just a better choice for certain tasks!” -cekuhnen

Blender isn’t — and shouldn’t try to be — a CAD app. Open source CAD apps exist. Relatively cheap (ha), high quality industrial offerings exist. However, blender still fills a valuable niche: its integrated mesh editing tools and render/ animation capabilities are unparalleled in the OSS world and in some aspects even surpass many commercial offerings. People want to import their CAD models into blender, tweak them, animate them, and render them. Others would like to model using blender’s powerful polygon mesh tools and then bring the results into a NURBS-based CAD environment. Hobbyists and professionals alike have reason to use blender, but their interest is frustrated by a lack of support for these workflows.

  • “I too hope for better nurbs tools ... I often recieves files from Rhino. And no. in most cases triangulating it just makes a bloody triangle mess...” -ejnaren
  • “I'm looking for an easy way to transfer models between, for example, Rhino and Blender” -klaymen
  • “I know that it's possible to tesselate your nurbs model and then import an .OBJ but it seems impossible to get a good result.” -Zorken
  • “it'd be neat to have some more advanced functionality so we don't have to convert so prematurely” -ohsnapitsjoel

The good news is that a great deal of work has already been done to bring quality NURBS support to blender: NURBS-timeline.png

The bad news is that work on NURBS improvements stalled short of that goal in 2009, and the merge has become too complicated to achieve in spare time. Some users never give up hope, posting once every few weeks in the derilect NURBS thread.

  • “I'm always checking this thread for news.” -Alcides
  • “hope never ends.” -Carrozza
  • “Any fresh news on Nurbs integration, guys? Anybody?” -ygs

Others do give up hope. Bitterly.

  • “I feel like they killed nurbana for nothing” -swathi
  • “I am personally tired from half-assed features in Blender.” -motorsep
  • “no NURBS in sight ... Personally, I have stopped hoping for them.” -jpb06

Let’s help these people out.

Deliverables

  1. Import/export functionality for the openNURBS (Rhino) .3dm format
  2. Import/export functionality for NURBS from Maya's .obj format
  3. Standard NURBS tools:
    1. Loop Cut & Slide
    2. Knife
    3. Loft/Sweep generators
    4. NURBS Chamfer/Fillet
  4. UI tweaks
    1. edge selection
    2. surface should occlude mesh
    3. less-hideous weight indicators
    4. eliminate “red herring” duplicate options
    5. etc


Project Schedule

  • 1 week pre-GSoC: document math details of existing NURBS code, find/list places of interest from the nurbana branch
  • 3 weeks: Implement openNURBS (Rhino / .3dm) import and export
  • 2 weeks: Implement Maya (.obj) import/export of NURBS surfaces
  • 2 weeks: Simple UI features (porting from nurbana branch)
    • Enable edge selection in NURBS edit mode
    • Enable Ctrl-R = Loop Cut&Slide in NURBS mode
    • Loft / Sweep generators
    • Fix the display so that the surface occludes the control mesh for “Solid” viewport shading
    • Fix the labeling and documentation of “weight” property, add control for conic parameters
    • Fix the display of “weight” property to halt proliferation of bold x-ray magenta lines everywhere
  • 2 weeks: Snap-to-nearest, NURBS-Fillet, NURBS-Chamfer
  • 2 weeks: Intersection curves (will be part of eventual boolean support)
  • 2 weeks: NURBS subsurf (e.g. generate a Catmull-Clarck limit subsurface as a set of NURBS surfaces)

Reserve Tasks (to be worked on in the unlikely event that the schedule goes faster than planned):

  • Mesh-to-NURBS
  • Booleans
  • ACIS or PHIGS support

Bio

  • C++: In my misguided youth I wrote a sizable pet 3d engine. It gave me experience working with big C++ codebases.

  • Python: ~100kloc total. Some misc scientific code, along with big chunks of a DNA origami CAD app.

  • Blender: Used it to make 4 or 5 diagrams over the years. Did some tutorials. I'm no artist, but I know my way around.
  • Blender C++: I have a ~300 line C++ patch in the tracker. Most of it is trivial, but it proves I can compile blender.

  • Blender Python: I have a ~1000 line addition to the Source importer that teaches it how to import textures.
 Math: I have an extensive linear algebra / coordinate munging background from physics. I’ve taken differential geometry, variational calculus, and topology. Nothing I’ve seen in the NURBS or T-Spline literature has scared me, except the patents (don’t worry, NURBS is clear, but T-spline is still a minefield). I’ve spent the last semester pasting together 1,2, and 3D interpolating polynomial patches for a finite element class.

  • NURBS: I got to chapter 5 of Pigel&Tiller before realizing Prautzsch,Boehm&Paluszny was better. Coincidentally, I’m on chapter 5 of that book as well. I fully understand (in the mathematically rigorous sense) what NU, R, and BS mean and I can discuss their continuity and interpolative properties in the context of the menagerie of interpolation surfaces (the more common ones, at any rate — the subdivision literature is extensive).

  • School: AB Chemistry&Physics, Harvard. Working on a MS Biomedical Engineering from Carnegie Mellon University.

  • Other: CMU pays for access to most of the relevant primary literature and access to Linda tutorials for CAD apps (e.g. Rhino), so that I have been able to get off the ground quickly for the purposes of making test objects. I have also received emails from two NURBS modelers willing to help me test on production data.