Ok, I think this is best what I was able to get. Finally it is in specific Houdini style to intersect volumes, it is VDB signed distance field. New booleans are great, but it wasn't easy to deal with them in stacked blending, over existing fillets - well this is expectable with any boolean operator. VDB sampling seems to be still the fastest method, compared to Booleans or Closest location on mesh (that's XYZ distance VOP in H). Especially with dealing with 'out of cut distance' positions, compared to spatial query by closest location or ray casting.
Get it
here.
How it is working, what it wants:
- it automatically creates NURBS style fillets around intersections of two polygon meshes.
- it wants two closed meshes as inputs, while second mesh has to be perfectly closed (no boundary edges) - will see is there a simple way to improve that.
- it is able to perform fillets over fillets - only in case of closed second input.
- it is able to deal with multiple intersections, or multiple (closed) volumes, let's say created by Merge SOP.
- it creates fillets from union, intersection or subtraction. Default is union.
- it creates UVs on fillets. If there are existing UVs on inputs, H will keep them.
- it aligns normals (or exactly, vertex order) of created fillet, to first input.
- each intersection has to be 'closed', that is, resulting in closed curve, in order to work properly.
- meshes has to be nicely subdivided before inputs. It's just cutting over supplied inputs, it won't create new, smaller polygons.
- it does not work well with sharp curvature - will see is there a way to improve that.
- fillets should not overlap.
- resulting meshes are just stacked, there is no any remeshing, at this point.
- DO NOT try to put the same mesh into both inputs. If this happens. ESC key is your friend.
More technical description:
First step is volume sample of VDB representation of another mesh. Sampled SDF is saved as float attribute, zero SDF is used by PolyCut SOP to create intersection curve. Intersection curve is re-sampled down and converted to NURBS, to get as much smooth fillet. From that curve, there's spatial query to cuts on meshes, to get closed points. In next step, curve is re-sampled again to final fillet resolution, also there's new spatial query to cuts, this time only to match the final position, while orientations are derived from low res curve. This is to avoid 'bulging', invoked by linear cuts over polygons. Last step is six point bezier curve, well known as G2 blend in NurbS world, used to loft the fillets, by Skin SOP.
Inputs:
1: closed, highly subdivided mesh, or result of Mesh blend.
2: closed, highly subdivided mesh
Parameters:
Reverse A, Reverse B: this is to get union, subtract or intersect functionality.
Reverse Poly A, Reverse Poly B: just an option for polygon/normal orientation of final result. Fillet's normals are automatically aligned to first operand.
Fillet Distance: Distance in world units, from intersection line to end of created fillet.
Shift: shifts the fillets between operands. Positive value shifts onto second operand.
Segments First: Initial re sample of intersection curve. Lower count is smoother, while too low can cause artifacts on highly curved intersections.
Segments Last: Final U resolution of fillets.
Cross Sections: Final V resolution of fillets.
Bulge Factor: 1 is maximum sharp.
Voxel Size: Size of VDB voxels, used to find intersection. Higher number is faster. In case of artifacts, try smaller value.
Search Distance Factor: Multiplier of fillet distance used as max searching distance, from intersection curve to cuts. In case of artifacts, try higher value.
Good luck!