In searching for methods of creating a pseudo elastic/rubber band around objects (taut around outermost edges) I came across some using a convex hull geometry nodes setup[1].
This led me to @Zebrahead’s more robust (and complex) implementation of this[2] which they shared as a blend file. Essentially it results in an elastic band like mesh based on the convex hull of a collection of objects, that is always taut.
What I’ve been struggling with is how to add deformation to the resulting mesh, based on a collection of influencing objects. The goal is to keep any existing tautness on non-influenced parts of the band while for some parts having objects that intersect with the mesh deform it based on their shape.
The image below illustrates the existing behavior and goal (the face-only deforming circles are just to make displaying the rear of the band easier).
This seems like there must be some relatively straightforward way to achieve this, though with my limited familiarity with geo nodes the experimentation I tried with Zebrahead’s blend file was unfruitful.
Any advice on the type of node setup required for this?
[1] Since afaik new users can’t post links the first setup can be seen on Blender Stack Exchange #278923.
[2] Blender Artists topic #1509445.
instead of the setup i postet in the other thread i now would probably calculate the Plane-Line-Intersection to get the intersection points instead of raycasting:
If you only use cylinders that are ordered and have a specific “direction” (belt/band going over or under the cylinder) then yes - that should be “relatively easy” to solve without simulations (basically all modern CAD programs have tools to design belts).
But if you want to use arbitrary geometry then it’s going to be more complicated …
In this case case yeah, it will only be cylinders that either expand the band outward or deform existing parts inward.
What made me think this would be easier is I’ve seen examples with geo nodes where users have used setups to deform curves, or arrays of objects, using an object as the influence. Though I couldn’t manage to figure out how to successfully integrate this with the band.
Would somehow deforming the curve part of the chain rather than after its conversion to mesh make this concept more feasible?
Here’s one setup based on Zebrahead’s newer method above, that gets closer to the goal but shows an issue I’ve seen all through which is unexpected coordinate offsets.
Sidenode: in past tests I’d only experienced the effect seen from the smaller influenced circle than the large one which made me think I was looking in the wrong direction, setup-wise.
When changing the Vector Math node to Subtract the collection of intended influence objects has some effect but it offsets the entire original band and with strange effects. It also acts more like a boolean here (when it vaguely works) than a smoother influence fall off as hoped for in the OP mock-up.
Any tips on improving the node chain would be appreciated, if it’s the right direction.
If it’s something like a belt generator then i would do it by calculating the tangent angles of every cylinder to the next in the “belt chain”. It’s basic trigonometry with right angle triangles:
It takes some Points as input. The Point Radius is used as the “cylinder radius”. You can also define if the belt should go in a clockwise or counter clockwise direction on each point individually. The order of the points is important here!
In the setup i calculated the start of the tangent to the next point and to the previous point (like mentioned before) to create the start and end of an arc:
In between these two angels i evenly distributed additional points to form the shape of the arc. And then finally with a Points to Curve node i created the final curve.
The setup will assume that all points are ingaged in the mechanism at any time. If one of the points needs to be able to “get out of the mechanism” on the fly then this will get way more complicated…
But i think this should be enough for you to get started with something.
This is a rather astonishingly in-depth node config, wow. Thanks a ton!
It’s actually for an animated sequence, with objects changing scale and position so setting up the dozens of objects in the node chain took a bit of figuring out (as they’re order sensitive, like you mentioned) but it ended up being a feasible method
Edit: marking it as the solution since it essentially addresses the concept as shown in the OP.