GithubHelp home page GithubHelp logo

refine to length about manifold HOT 6 CLOSED

pca006132 avatar pca006132 commented on July 24, 2024
refine to length

from manifold.

Comments (6)

ramcdona avatar ramcdona commented on July 24, 2024 1

As someone who has written an unstructured surface mesh generator (with curvature based criteria), I would encourage you to limit yourself to OpenGL 4 style tessellation or other highly simplified means.

Ruppert's algorithm type approaches are able to converge to an angle-based criteria. Importantly, they add points, but don't ever move or remove them. I have not seen them applied to a length criteria.

Edge length based criteria (curvature criteria get converted into length criteria) require a 'background mesh' to inform the local mesh criteria. This background mesh is a giant pain in the rear.

Imagine you have a bar of soap that you want to mesh. There are flat sides connected with relatively tight radius curvature at the corners. You need tiny triangles in the corners, but can use huge triangles for the flats. In order to generate a quality mesh, you must gradually grow from tiny tris to huge tris. This is usually implemented as a growth rate limit -- say each edge can only be 1.2 times the length of any edge it is attached to.

The background mesh becomes the place where you solve for this smoothed length criteria. It later is the interpolation map that you use to look up the local criteria that should be applied. It is also the grid you search to find the smallest criteria to provide a place to start meshing.

Smoothing the background mesh is equivalent to an elliptical differential equation. A monster of a hidden problem in the mesh generation process.

Without the background mesh, you could easily generate edges that skip over the local curvature region and span from one flat region to another.

TLDR; Curvature based quality unstructured meshing is an iceberg problem -- it isn't the challenges you see that get you.

from manifold.

elalish avatar elalish commented on July 24, 2024

Agreed! We could potentially use an OpenGL 4 style algorithm for tessellation, though I think we can do better (in terms of triangle quality).

from manifold.

hrgdavor avatar hrgdavor commented on July 24, 2024

that would be awesome :)

from manifold.

elalish avatar elalish commented on July 24, 2024

Yeah, agreed this is a hard problem in general, especially when coming from NURBS. I was going to take a very basic approach, since all of our edges just become cubic Beziers - just break them into some number of equal parts in terms of the bezier parameter (which automatically spaces them reasonably well regarding curvature). Then all I want to do is calculate the number of pieces to split each edge into - easy for length, a bit trickier for curvature error.

Then the only problem left is to subdivide a triangle for a arbitrary number of segments on each edge - this is a 2D problem and doesn't need to know anything about curvature. OpenGL 4 would work, but it makes for some very poor quality triangles. Still, it's probably a good place to start.

from manifold.

ramcdona avatar ramcdona commented on July 24, 2024

Uniform spacing in Bezier parameter doesn't actually guarantee anything in terms of clustering for curvature. You can readily construct a Bezier straight line with highly non-uniform parameter spacing.

NonUniformLine

I would have to think a bit more about coming up with a counter example. You may be right that the variation diminishing property of Beziers prevents things from getting too bad the other way.

If you're just intending these meshes to be used for graphics, I wouldn't worry about quality -- just generate something correct and be satisfied with that.

If someone wants a quality mesh, they're probably going to have a bunch of other requirements that they want to impose on it. You'll never be able to anticipate all of those requirements.

from manifold.

elalish avatar elalish commented on July 24, 2024

Fixed by #741.

from manifold.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.