Page MenuHome

Bisect Mesh node
Needs ReviewPublic

Authored by Falk David (filedescriptor) on Nov 21 2021, 3:40 PM.
Tokens
"Love" token, awarded by emilisb."Like" token, awarded by sampotter."Love" token, awarded by cmermoud."Love" token, awarded by Bit."Love" token, awarded by angelbpineda."Love" token, awarded by silex."Love" token, awarded by mindinsomnia."Like" token, awarded by Fracture128."Love" token, awarded by Chf."Love" token, awarded by zNight."Love" token, awarded by mfbaranow."Like" token, awarded by FeralMan."Love" token, awarded by baswein2."Love" token, awarded by lopoIsaac."Love" token, awarded by dreamak."Burninate" token, awarded by slowburn."Love" token, awarded by kursadk.
This revision needs review, but there are no reviewers specified.

Details

Reviewers
None
Summary

This node takes in a mesh and bisects it along a defined plane (using an offset and a normal).
The bisected mesh is not split but has new edge loops along the plane intersection.
The node also outputs selection fields for the positive side (in the direction of the normal of the plane),
the negative side, and the cut edges.


Diff Detail

Repository
rB Blender
Branch
temp-node-geo-mesh-bisect (branched from master)
Build Status
Buildable 18842
Build 18842: arc lint + arc unit

Event Timeline

Falk David (filedescriptor) requested review of this revision.Nov 21 2021, 3:40 PM
Falk David (filedescriptor) created this revision.
  • Use face domain and fix memory leak

Hey, started on a similar WIP 2-3 weeks ago also based on the bisect operator (but I just supported the existing functionality as is, see below). The idea was to implement the operator for pointclouds and curve geometry as well, as you posted this WIP I just wanted to check your plans regarding features for the node and if you intend to support other geometry types. If you have no intention to support other forms of geometry I'll continue looking into solving those problems and integrate them once/if this WIP is done, otherwise I'll drop the project.

My only other concern is if the fill (or clip) options is not important? Wouldn't such features make it more user friendly since this approach require multiple nodes to achieve desired outcomes?

There is also P2338, but that project is currently on ice as I understand it.

Best regards

Hi, I've had a quick look and found an issue when bisecting a mesh(mountain) and trying to separate only Cut Edges(contour). I'm getting discontinued edges instead of one continual line



I'm using this version.

Example:

Also I'd like to know if you plan to extend the functionality of Bisect node so Offset and Normal inputs would be Fields?

@Mattias Fredriksson (Osares) For now, I only plan on supporting meshes. And I do want to add a fill option, but there is not a good and efficient way of doing it at the moment. I have a test that I am still working on. We will see.

@Miro Horváth (dreamak) This is most likely a problem with the bisect_distance. You can see in the patch that it's hardcoded to 0.001f and that I plan to add it as a parameter.
As for the input field question: How would you imagine this would work? I could see this being interesting for different instances of a mesh maybe, but otherwise I am not sure how field inputs would work (to define the bisect plane).

@Miro Horváth (dreamak) This is most likely a problem with the bisect_distance. You can see in the patch that it's hardcoded to 0.001f and that I plan to add it as a parameter.

@Falk David (filedescriptor) I'm not a programmer(don't understand the code below), but it does sound weird that bisect_distance should be causing this issue. I mean if I use Positive/Negative Side as Selection on Separate Geometry node, in both cases I can't see the edge anyhow broken(discontinued), see below.


Therefore I'd expect the same(continuous line) from Cut Edges without playing around with bisect_distance parameter, but again I'm not familiar with the underlying code.

As for the input field question: How would you imagine this would work? I could see this being interesting for different instances of a mesh maybe, but otherwise I am not sure how field inputs would work (to define the bisect plane).

There are two distinct examples I have in my mind. Please note that I don't know if either "Offset and Normal inputs as Fields" or performing Bisect Mesh functionality in a loop(future Loops functionality that is being discussed at devtalk) would support these examples better.

Example 1.
Countour lines generation(like in the file I linked above), I'd like to stack cutting planes along vertical axis in 1m steps, so Normal input would be constant(0,0,1), but Offset would shift by 1 in Z axis. Currently I'd have to do it manually by chaining Bisect Mesh next to each other. The expect result is a set of countour lines.

Example 2.
Back then when GN was in diapers I did a quick experiment to Cell Fracture a cube. Similarly I'd like to Bisect a mesh n-times where each time I'd like to have Offset and Normal randomized. Again, I'm not sure if having Offset/Normal inputs as Fields or using future Loops implementation is a better solution here.

@Miro Horváth (dreamak) Ok so on the topic of field inputs it does seem like what you want is to repeatedly add cuts. This is solved with loops, field won't do what you want here (to be honest I don't even know what that would do). With fields you would specify an offset/normal for every element in a domain on the mesh. As you can imagine that would create cuts based on every vertex normal for example, which sounds nonsensical to me...

Regrading the bisect distance, I think you might be right and I might be doing something wrong here. Would you mind sharing your file for me to test?

With fields you would specify an offset/normal for every element in a domain on the mesh. As you can imagine that would create cuts based on every vertex normal for example, which sounds nonsensical to me...

@Falk David (filedescriptor) This is my train of thoughts for the Example 1. mentioned above. Basically using a Mesh line to provide cutting plane offsets.

Regrading the bisect distance, I think you might be right and I might be doing something wrong here. Would you mind sharing your file for me to test?

It's linked in my first post.

@Miro Horváth (dreamak)

It's linked in my first post.

Ah, sorry!

Yea I think that will be much better with the "geometry loop" instead of fields.

  • Fix cut edge output and add epsilon threshold

Hi @Falk David (filedescriptor), I tested the fix and there's much less(minimum) discontinued lines now, but playing with Epsilon value doesn't seem to help to remove gaps completely(see below).


I combined the result with the original terrain mesh and found out that contour line always gets discontinued exactly at two adjacent quad's edges.

So I added Triangulate node before Bisect node and that fixes the problem.

I hacked looping Bisect node in several altitudes and got procedural contour lines generator, great job @Falk David (filedescriptor), thank you!!!

How can I download and try your code? I have an idea with the radial mirror, that I want to recreate with Geometry nodes. Bisect functions will be very handy for that.

@Vasil (FeralMan) You can download the D13300 patch from here: https://builder.blender.org/download/patch/
(I think the build needs to be updated to the latest version though, I'll get on that)
Edit: New build is running. Should be ready around 14h00 CET (14.12.2021).

Falk David (filedescriptor) retitled this revision from [WIP] Bisect Mesh node to Bisect Mesh node.Dec 14 2021, 12:07 PM
Falk David (filedescriptor) edited the summary of this revision. (Show Details)
Falk David (filedescriptor) edited the summary of this revision. (Show Details)

Hi,
is there any chance to have this node available soon ? would be very handy in the scope of generating true 3d contour lines of topographic meshes.
Best,
V.

The main issue with this patch is that it's using the BMesh API which is not ideal.

Well, maybe the new functionality of mesh boolean node can do the job for my purpose.
https://docs.blender.org/manual/en/3.4/modeling/geometry_nodes/mesh/mesh_boolean.html#output

Is there a good alternate method to bmesh? Bisect is one of those nodes that is definitely needed. The more people are able to not touch booleans, the better.

Well, maybe the new functionality of mesh boolean node can do the job for my purpose.
https://docs.blender.org/manual/en/3.4/modeling/geometry_nodes/mesh/mesh_boolean.html#output

there is a bisect node group shared by Christophe Mermoud in here https://developer.blender.org/T95445, it works better than boolean, might help you.

there is a bisect node group shared by Christophe Mermoud in here https://developer.blender.org/T95445, it works better than boolean, might help you.

Thank you Caner for the hint! and thanks Christophe for that.
V.

can someone share the build?