I have two three-dimensional meshes that intersect. I would like to find the surface area of the larger mesh that intersects the smaller one:

enter image description here

I can do this by joining the objects together, selecting the smaller mesh, and using the intersect (knife) operator to cut a new edge. I can then remove the rest of the mesh and calculate a surface area:

enter image description here

The goal is to automate this process, but selecting vertices/edges between object/edit modes is cumbersome and difficult to do when multiple meshes are involved. I've tried using boolean modifiers, but this leads to a three-dimensional object, when I would like to get a surface without volume:

enter image description here

I've used bmesh in the past to cut meshes with planes, but I'm unaware if a similar operation exists involving two meshes. So, my question:

Is it possible to use bmesh (or some other module) to produce the surface area of an object that intersects with another mesh?

Some previously posted questions (here and here) were promising, but ultimately fell back on bpy.ops to get the job done.

Thanks for the help!


1 Answer 1


Since you're only suggesting bmesh, how about using geometry nodes?

You can read this data from geonodes in many ways, for example by using a driver:

Passing GeoNodes attribute to Shader frame offset

And if you don't know much about Geometry Nodes, you can use "Object Info" node to replace the "Cube" and "UV Sphere" primitives used here with any object of choice.

  • $\begingroup$ This is a fantastic answer! If you are able to pass the info of this intersection area to the Shader editor, then I believe that you are fully able to answer the following question: blender.stackexchange.com/questions/296292/… $\endgroup$ Commented Jul 25, 2023 at 8:59
  • $\begingroup$ @BlenderLake there is a number of problems there, for one, droplets are intersecting, which will make the mesh boolean problematic + eventual cycles rendering might be problematic too. After the boolean, you can separate geometry based on the face being green/purple (really based on the "intersecting edges" attribute), this ensures that each separate intersection "stain" is a separate mesh island, and then you can use accumulate field with "island index" as "group" to sum up "face area". Then you can combine two mesh booleans to have original plane with holes and intersections separately… $\endgroup$ Commented Jul 25, 2023 at 10:11
  • $\begingroup$ … With the intersections having a captured attribute of that accumulated face area. This attribute you can read in the shader to base the coloring on. $\endgroup$ Commented Jul 25, 2023 at 10:11
  • $\begingroup$ Hey! Thanks so much for help. You're right in thinking I don't have much experience with geometry nodes (just a little). I've put together the nodes as above, but the boolean modifier node is still giving me an object that is 3-dimensional (possibly cause I'm doing something wrong). In your gif, what I'm interested in is the purple surface and none of the green. Is there a way to get just that surface? Or would you happen to know of a simple geometry node set up that mimics intersect knife in edit mode? Thanks again! $\endgroup$ Commented Jul 26, 2023 at 9:54
  • $\begingroup$ @kozina-adjacent you can use "Separate Geometry" node, and the "intersecting edges" field to separate the two and take only one. Or just use "Delete Geometry", but since you want to have the purple, not delete it, use "Boolean math" node in "NOT" mode to reverse the selection. $\endgroup$ Commented Jul 26, 2023 at 11:03

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .