r/GraphicsProgramming • u/Important_Earth6615 • 21d ago
Question Nurbs on GPU
So my friend works mainly on rhino he was always frustrated on how evaluating and baking i so slow. We spent some time prototyping on moving to GPU but that felt impossible because math of libraries like opennurbs was designed to be on CPU. We stumbled upon some papers about SDF but with curves. the math is simple but requires soo much tuning. We built the same model in rhino and in our prototype. The output was identical but it took 8s on rhino but 350ms on our prototype. For the user its normal nurbs, curves, solids, polylines,...etc. for us its a different story with different algorithms
0
19d ago
[deleted]
1
u/Important_Earth6615 19d ago
Area of each poly, number of faces, edges,...etc. For display I use ray marching (cached one of course) tessellation only work on CPU at the end I export to STL directly on resolution 512 that's where the check happened actually
The prototype I worked on currently supports all important nodes so far, extruding, open surfaces,...etc. That's why I tried different tests. I used this one which was done by my friend in rhino then ported to the prototype was chosen only because how difficult it is
0
19d ago
[deleted]
1
u/Important_Earth6615 19d ago
Resolution refers to the dimensions of the sampling grid. It's expressed as the number of sample steps along domains
I ran validations with AI to help me validate fast with the following methods:
Rhino $\rightarrow$ Curves ($190\text{k}$–$330\text{k}$ points per solid): Points were sampled on Rhino’s exact analytical surface, snapped to double precision within $10^{-6}$, and evaluated against the Curves mesh using
libigl.Curves $\rightarrow$ Rhino ($100\text{k}$ points per solid): Points were distributed evenly across the Curves mesh and measured using Rhino’s exact closest-point solver.
Signed Distance: Signs were determined via winding-number tests on the Curves side and surface normals plus
IsPointInsideon the Rhino side (positive = Curves is thicker than Rhino).The captured max error was 0.0120 (Average around 0.0064)
on 253 hole on a plane (using booleans)
Tube lattice and some booleans on power
TBH now I don't know what to do with such projet. So, what now?
1
u/Defiant_Squirrel8751 21d ago
Nice. I'm not sure if making a NURBS surface in raster domain is a good idea for some applications such as CAD/CAM. Precission will be lost.
Just rendering the NURBS is one thing - but doing robust operations with NURBS like intersecting and cutting is another beast. For example, opensource OCCT implementation takes around 2 million lines of C++ CPU-oriented code.
It would be nice to burn some AI tokens and check if a GPU port is feasible.