[Soc-2014-dev] Weekly Report #10: NURBS Modernization

Jonathan deWerd jjoonathan at gmail.com
Sat Jul 26 09:43:52 CEST 2014


This week was largely eaten up by a task that I thought would be a quick copy/paste job but turned into a morass of debugging math code. Fortunately that part is done -- and the result is much prettier smooth curves:

http://wiki.blender.org/index.php/User:Jjoonathan/New_NURBS_Eval

Progress This Week:
* Finished the new evaluation code. Key features:
	* Computes any number of partial derivatives analytically
	* Immediate application 1: compute normals analytically = it looks smooth again :)
		* No nasty lighting artifacts near trim edges
		* No seams where curves touch/loop due to calculating normals at polygon corners
	* Immediate application 2: handle (literal) edge cases of eval points lying on knots correctly
	* Immediate application 3: uses 1/2 as many divisions, so possibly it's faster, although I didn't check
	* Future application: computing error bounds
* Performed extensive verification of the new eval code
	* Mesh points coincide with Rhino surfaces
	* All 1st, 2nd (partial) derivatives agree with Mathematica's NURBS implementation (direction, amplitude correct).
* Made progress on the trim curve tessellator.
	* NOTE: last week I mistakingly said that I had finished the trim curve tessellator when I actually meant to say that I had finished the surface tessellator.
	* Refactored the import code so that it can make detatched curves
	* Adjusted memory management & blenloader
	* The trim curve tessellator isn't a sticking point, I only got around to working on it again today. The eval code was the sticking point.

Things that were done that don't officially constitute progress:
* Spent Thursday finishing rotation surface & interpolation surface chapters in P&T

Things that must be done before I can import the sample .3dm files:
* Finish the trim curve tessellator
* Rotation surfaces

Things I could use help on:
* Does anyone know of good example code for making a BMesh out of n-gons? N-gons would make the meshes produced by Alt+C *much* cleaner.



On Jul 19, 2014, at 1:28 PM, claas kuhnen <info at ckbrd.de> wrote:
> So agree I am very excited about this
> 
> On Jul 19, 2014 1:27 PM, "Sergey Sharybin" <sergey.vfx at gmail.com> wrote:
> Seems to be rather nice progress. Would be cool if all the bits are committed and some .blend in shared which demonstrates the stuff.
> 
> 
> On Sat, Jul 19, 2014 at 4:31 PM, Jonathan deWerd <jjoonathan at gmail.com> wrote:
> Progress:
> * Finished code to tessellate trim curves!
>         see: http://wiki.blender.org/index.php/User:Jjoonathan/NURBS_In_Blender
> * Rewrote knot code to match the conventions in the math literature, tested for compatibility by comparing meshes
> * Worked on adapting a better NURBS evaluation algorithm that can produce first and second derivatives (for normals and error bounds, respectively).
>         it's still buggy.
> * Worked further on the NurbEdge interface to handle imported trim curves
>         still working on code to match endpoints that are separated in UV space but coincide in R3 due to either wrapping in UV space (cyclic NURBS) or coving
> 
> Todo:
> * Finish tracking down the NaN-producing bugs in the new surface evaluator
>         From there, should be easy to implement good normals
> * Finish NurbEdge so that it at least handles wrapping in UV space. This will allow importing of most .3dm files.
> * Implement revolution surfaces.
>         Demo Claas's hairdryer model!
> 
> On Jul 12, 2014, at 11:14 AM, Jonathan deWerd <jjoonathan at gmail.com> wrote:
> 
> > (Apologies if this is a duplicate email. I see a copy of this email in gmail's "sent" folder but I don't see one in my inbox, so I'm sending again.)
> >
> > Progress:
> > * Finished the code that traverses BReps from 3dm files and cuts them into surfaces
> > * 2D Trim curves import as Nurb objects that are appended to a NurbList in their parent surface
> >       Just curves currently, I still have to get multi-part loops working
> >       Also they don't seem to be preserved by DNA even after calling makesdna...
> > * Moved surf_gridmesh into bf_blenkernel, promoted curve.c to curve.cpp (for future OpenNurbs use), fixed a few small bugs that caused, moved the GLUT debug code into blender/tests, convinced CMake to build and link it
> > * Wrote, debugged the method that builds the displist from the gridmesh
> > * Timed it, see pretty graph a few emails back
> > * Started writing NurbEdge structure to handle in general the sewing of trim edges and cyclic edges (e.g. so that spheres don't have seams)
> >
> > Next up:
> > * I still need to finish the code that tessellates the trim curves. I didn't get much time to work on it today, so I'm planning to work on it tomorrow as well.
> > * Get trim curves to load/save from .blend files by figuring out what I'm doing wrong with makesdna
> > * Finish NurbEdge interface for defining edges to sew, get it in DNA as well
> > * Use NurbEdge to implement revolution surfaces
> >
> 
> _______________________________________________
> Soc-2014-dev mailing list
> Soc-2014-dev at blender.org
> http://lists.blender.org/mailman/listinfo/soc-2014-dev
> 
> 
> 
> -- 
> With best regards, Sergey Sharybin
> 
> _______________________________________________
> Soc-2014-dev mailing list
> Soc-2014-dev at blender.org
> http://lists.blender.org/mailman/listinfo/soc-2014-dev
> 
> _______________________________________________
> Soc-2014-dev mailing list
> Soc-2014-dev at blender.org
> http://lists.blender.org/mailman/listinfo/soc-2014-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.blender.org/pipermail/soc-2014-dev/attachments/20140726/e4f2eb48/attachment-0001.htm 


More information about the Soc-2014-dev mailing list