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

Jonathan deWerd jjoonathan at gmail.com
Sat Aug 2 08:34:50 CEST 2014


Progress:
* Finished trim curve tessellator [1]
* Finished code to read/write trim curves from a .blend
* Added loop-select modifier for NURBS control points (selects a U row or V column)
* Minor UI tweaks (control mesh is thinner and Z-tested, NURBS weight is disambiguated from softbody weight, etc)
* Wrote code to dump internal NURBS state from Blender into GLSL visualizer to track down a lingering bug (see below)

This weekend:
* Track down the trim bug that is causing an explosion of trim polygon edges whenever a straight line runs parallel to an edge of a tessellation poly

Next week:
* Rotation surfaces
* Fix a bunch of style issues and warnings that Sergey brought to my attention
* Prepare a squashed merge

[1] Two weeks ago I accidentally reported finishing trim curve tessellator when I meant to report that I had finished the surface tessellator. I later clarified the matter, but to resolve all doubt: this week both are finished. Well, except for the bug I mentioned, which is currently blocking the more complex demos.

On Jul 26, 2014, at 3:43 AM, Jonathan deWerd <jjoonathan at gmail.com> wrote:

> 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/20140802/0db5924d/attachment-0001.htm 


More information about the Soc-2014-dev mailing list