I figured out a workaround. It wasn't easy, because Blender 3.3 is terribly unstable and I would get various errors in the console while playing with settings - restarting Blender would fix them, but keep that in mind, as you may think some technique doesn't work, while it's the corrupted state that causes issues and requires a restart...
So here's the exact steps for everyone to easily reproduce without the need to jump through hoops:
- ⭾ Tab Edit default cube, X, V delete all geometry.
- Create a Vertex Group
- Add an empty
- Add the following stack of modifiers to the 'Cube', non-default settings in red rectangles:
- Add the Geometry Nodes tree of your choice to the first modifier. You need to change it by adding the contents of the blue frame to it:
It saves the calculated vertex positions and then moves vertices away from the empty so the Vertex Weight Proximity modifier can do its work.
- Add a new node tree to the last modifier (2nd geonodes modifier) which simply restores the saved positions:
- Finally, add the Cloth modifier and set the
An additional tip: whenever you change the geometry nodes setup, you may need to fiddle with a vertex weight modifier to update the whole setup...
Another remark: you absolutely can use the default geometry, as in, you don't have to apply the step 1. in this answer. However, in such case, you have to either add "Delete Geometry" node inside your setup (so e.g. you spawn instances on original vertices, but when you apply the boolean, you don't boolean with the original cube, as you delete it before the boolean node), or just make sure the boolean doesn't screw your geometry, by e.g. offsetting before boolean and reverting the position after the boolean...
PIN during simulation
Vertex group for pinned vertices can be changed during the cloth simulation. Unfortunately, when you change the PIN, new pinned vertices aren't pulled to their last position before being pinned - they are pulled to their original position calculated in the geonodes:
Something less erratic:
Using Pressure = 1: