pmneila/PyMCubes

If lower bound higher then SDF range then there are duplicate vertices

asyniakov opened this issue · 5 comments

let's say you want to create a sphere R = 1 in (0,0,0) and set lower to (0,0,0) and upper to (4,4,4), numxyz = 100, 100, 100.
then result is
image

you can see duplicate vertices on the boundaries.

Hi @asyniakov,

Just in case, could you give me a minimal piece of code that reproduces the problem?

Also, what are the duplicate vertices in your image? The yellow dots? Did you explicitly find and draw the duplicate vertices?

Hello @pmneila,

Sure! Here is a minimal piece of code that reproduces the problem:

The sphere is located in C = {4,4,4} with diameter 8. bbox is {2,2,2} and {8,8,8}

auto sdf = [](auto p){
    return length(p - { 4,4,4 }) - 4;
};

mc::marching_cubes({2, 2, 2}, { 9, 9, 9 }, 20, 20, 20, sdf, 0, vertices, polygons);

Please ignore my previous image, here is the better visualization of the problem;
image
red vertices - are duplicate vertices (which I believe is incorrect), yellow ones are boundary vertices (they are OK).

The main question - how did I find duplicate vertices (red ones)?
I passed vertices and polygons to OpenMesh library (that uses halfedge data structure inside for the topology) and then simply highlighted all boundary vertices. As a result, I got the image as in my previous post. I expected to see yellow dots only on boundaries. I double-checked array before passing to OpenMesh and there are duplicates indeed.

This problem is repro on any sdfs that are "clipped" by lower value (like 2,2,2 in this example)

Please let me know what else I can help with.

Hi @asyniakov

It took longer than expected, but it is finally fixed. You can install the last version with

$ pip install PyMCubes --upgrade

or downloading and compiling the code from GitHub.

Thank you for letting me know!

@pmneila thank you! I'll try check it next week and let you know if find some other issues.

fixed. confirmed