-
Notifications
You must be signed in to change notification settings - Fork 115
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Better faces #1040
Better faces #1040
Conversation
This could be a way to attach an edge-length refiner with collapse or subdivide done per polygon. |
Vec<TriPriority> triPriority(numTri); | ||
for_each_n(autoPolicy(numTri), countAt(0), numTri, | ||
[&triPriority, this](int tri) { | ||
meshRelation_.triRef[tri].faceID = -1; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this causing the check in line 238 and 249 to always be false?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, because they get reassigned on lines 240 and 253.
can the random selection be more deterministic for like ai.. and import recreation / reproducibility |
Since this is based on sorting, it should be as deterministic as we can hope for. |
Can you see what happens when you try to merge https://github.com/user-attachments/files/17969298/node_3d.zip ? |
Okay, I got bogged down on this one because I tried to solve too many things at once. The actual point of this PR, which is to create faces better and faster is working just fine. Then I tried to make it into a general purpose decimator, but got stuck on some Boolean regressions. Now I've undone that to get back to basics here. I'll do further work on the decimator in separate PRs. |
@pca006132 This is odd - the CI is passing almost everywhere, but on three jobs it's failing, and not just a few tests, but a ton of them and even seg-faulting. On my mac everything is fine - even the address sanitizer isn't finding any undefined behavior. Do you have any idea what I did wrong? |
It seems that I can reproduce them locally with parallelization disabled. Will check. |
OK, for some reason Linux |
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #1040 +/- ##
==========================================
- Coverage 91.71% 91.65% -0.06%
==========================================
Files 30 30
Lines 5951 5922 -29
==========================================
- Hits 5458 5428 -30
- Misses 493 494 +1 ☔ View full report in Codecov by Sentry. |
Wow, thanks for the fix! I wonder what their |
I'm replacing our
CreateFaces
algorithm. Our previous was based on connected components, but in the case of e.g. a high-res sphere, it would connect everything into one big face. So then we added an algorithm to check global tolerance of each face after the fact, and if that failed, it would just throw out all the faces and say each triangle was individual.This new algorithm skips all that and instead finds faces by starting with the largest triangle and searching its neighbors until none are within tolerance. Then it gets the next largest unprocessed triangle and does it again, serially, until all triangles have been assigned to faces. It's a bit arbitrary, but works decently.
Ideally we can eventually follow this on with some improved edge collapsing code.