CSG V2 should better handle negating composites

As a developer, I find CSG V2’s way of handling coplanar faces to be extremely annoying.

Consider this hopper car I am making:

The hopper car is made of 2 Parts and 2 WedgeParts to make the shape. To hollow out the hopper car, I use the same parts shrunk a bit so the walls have thickness and union it. When I negate the union, I see that none of the faces have been combined.

Unioning the negative with the positive creates this result:

By moving the camera into the model, we can see that CSG V2 has created 0-width walls between each of the original parts.

This is the expected result of the entire series of operations:

With CSG V2, using negative operations is a frustrating process that is stumped by many simple operations such as the one highlighted in this thread.

7 Likes

This sort of thing has frustrated me a few times aswell, though not being a builder.

Could you work in blender until this feature becomes more stable?
At the very least you’ll learn a valuable tool with many more features aswell as better control over your builds.

2 Likes

Blender isn’t an end-all be-all. This is for a free model so it has to be CSG so players can edit.

2 Likes

This seems to be due to floating point errors, which I don’t believe is planned to be fixed in the future.

1 Like

This is an issue with positioning of the parts. It is the case that there’s actually a tiny gap between your negative parts in their final positions. The result you get is the technically correct one, because the faces were not really coplanar.

A couple of things are conspiring to make this more common than I’d like it to be. One is that the automatic positioning of parts based on collisions isn’t very accurate, and prefers to err on the wrong side from CSG point of view. We are also currently working on a bug in one of the draggers, which was found to introduce offsets between CSG objects.

On top of the above problems which we can improve on, it is unfortunately also the case that co-planarity of faces can not be preserved across moves or rotations in Roblox. This makes any attempt at producing or depending on exactly coplanar faces a recipe for problems. This is the floating point issue mentioned above. The solver itself handles the coplanar case just fine, but after any amount of moving, rotating, separating, etc. you’ll find there to be a crack in the result, like you have above. Unfortunately this is one of the problems we have no solutions to.

The behavior is the same for positive and negative parts, it is just harder notice when it’s just a union. Unfortunately the best I can offer at this time is a “recommendation” to make the parts really overlap when you union them, or negate them for that matter.

An automatic workaround could scale the parts by tiny amounts, to make the tiny cracks less likely to matter… but this isn’t a real solution, unfortunately it just moves the problem elsewhere. We could possibly give it a try and see if it would be less annoying than the current situation though.

Thanks

7 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.