Boolean shatter not working on a complex model

   12181   7   3
User Avatar
Member
24 posts
Joined: 3月 2014
Offline
In this scene I have a scanned shell that I retopologized for lower poly count and I'm trying to use the boolean shatter to cut it up. I am using 3 grids going through mountain node into a merge node to act as the cutters. Finally, the results are run through an explode node.

When I have all three grids enabled I end up with pieces of both the shell and the grids rather than just the shell, even though I've specified Pieces of A under output geometry. If I change the input geometry to a box it works perfectly. Any ideas what's wrong? I'm including the shell obj as well as the houdini scene. Thanks.

Attachments:
shell-test.hipnc (113.2 KB)
shell_137k.zip (2.7 MB)

User Avatar
Member
8041 posts
Joined: 9月 2011
Offline
Sounds like a bug with the boolean. I think I have run into this before where the grids have intersecting faces that are non planar, and the boolean fails to resolve sidedness.

Send it this way:
https://www.sidefx.com/forum/topic/15603/ [sidefx.com]
User Avatar
Member
555 posts
Joined: 2月 2017
Offline
in Boolean, change both A and B to Surface…not Solid

(or at least B to surface because they're nothing but thin sheets..while A can be Solid, I guess)

Also I found that if I polyreduce your shell..keeping 99%…it works..even for both A and B as Solids…it's something with the orig shell geo that it doesn't like…
Edited by vusta - 2017年5月4日 02:55:52
User Avatar
Member
210 posts
Joined: 12月 2012
Offline
Your object A doesn't qualify as a proper solid. Boolean does warn about multiple non-manifold edges. In the list of offending issues of a geometry to pass as a solid, non-manifold edges are on the very top; they pretty much kill any chance of a proper solid interpretation.

Since you're shattering A by B, it doesn't matter whether B is solid or not (although you may get warned about B's solidity issues if you don't pass it as surface). If you were doing any other operation, your input B would also make up for a poor choice of a solid, even though it doesn't have non-manifold edges. That's because its boundary edges are being crossed (by self or opposite geometry). Even if this wasn't the case, describing a collection of open surfaces as a solid leaves it up to the sop to arbitrarily interpret the nesting of the solids. So, if you have 2 disjoint grids representing a solid, it's perfectly possible for one of them to be seen contained inside (the solid volume defined as a half-space by) the other. Under this interpretation the union of this solid with anything else would completely drop the grid seen as contained by the other.
User Avatar
Member
24 posts
Joined: 3月 2014
Offline
Thank you everyone. @Bardia, I'm seeing the non-manifold error on the boolean node but it doesn't look like they show up until the boolean tries to turn it into a solid. So, is there a way that I can get a view of which edges they are so I can adjust the input geometry?

As for the rest of your explanation, I'm assuming that I need to define B as a surface instead of a solid?
User Avatar
Member
7871 posts
Joined: 7月 2005
Online
I haven't tried with your file, but maybe a Solidify SOP might help. Be forewarned though, it is *SLOW*.
User Avatar
Member
210 posts
Joined: 12月 2012
Offline
gswartz
So, is there a way that I can get a view of which edges they are so I can adjust the input geometry?

Unfortunately, we don't have a very good way of visualizing bad topology. People tend to use “Divide” sop's “Remove Shared Edges” to inspect boundary edges that may look like interior ones (not applicable in this case). For non-manifold edges (those incident to 3 or more polygons), your best bet may be to use PolyDoctor's (disable everything in the first tab right away) “Visualize Maximal Manifolds” under the “Topology” tab. This will colour your polygons. The bad edges are where two different colours meet. You can also visualize inconsistently wound polygons by unchecking “Ignore Winding of Input Polygons” in the same tab. Your geometry doesn't have this issue would also be something quite detrimental to passing a geometry as a solid. If your input is a connected manifold you should get a single colour for the whole thing. The problem is of course that you may fail to see very small things, as is the case with your geometry. I spotted two problem areas (see the screenshots). If you enable “Create Manifold Number Attribute” and check the geometry spreadsheet you can see that your geometry has has 12 maximal manifolds, numbered 0 to 11. You need to have one, or generally, as many as the number of connected components of your geometry. If I wanted to guess, I'd say you have used the Fuse SOP somewhere higher in the chain?

gswartz
As for the rest of your explanation, I'm assuming that I need to define B as a surface instead of a solid?

Yes, if you are cutting A with B, generating only pieces of A, then you'd always be better off marking B as surface.
Edited by bardia - 2017年5月5日 03:14:27

Attachments:
Screen Shot 2017-05-05 at 7.50.16 AM.png (107.2 KB)
Screen Shot 2017-05-05 at 7.51.39 AM.png (53.4 KB)

User Avatar
Member
210 posts
Joined: 12月 2012
Offline
I noticed in fact that Boolean may report non-manifold edges, even when you can't find them in your input geometry, and it's not a mistake. I hadn't considered this before. If you look at the picture here, from the same geometry as above, you can hopefully see that the two highlighted points are both incident to two quads which happen to share yet a third point. Geometrically, this should only happen if the two quads are perfectly coplanar. In practice, however, there's nothing to force a quad to be a planar polygon. A nonplanar quad is in reality the merging of two triangles defined by one of the diagonals of the quad, without specifying which. It is therefore up to the Boolean sop to resolve the ambiguity as a preprocessing step and triangulate all input polygons pretty much the same way the Divide sop would do. In the example in the figure, the diagonal in questions connects the highlighted points and this creates an edge incident to three triangles, namely the one shared by both quads, and the two remaining ones, one from each quad. This would be a non-manifold edge created in preprocessing of the geometry!

Attachments:
Screen Shot 2017-05-05 at 9.40.42 AM.png (25.0 KB)

  • Quick Links