I just noticed the new Soft & Hard solver component, and while the idea seems very applicable to my use case, I’m not able to get good results because I also need the damping ability provided by the Bouncy solver to keep the system stable. Is there a way to combine both of these features?
Hi @corytrev,
I’ve actually been looking recently at ways of improving the Soft/Hard solver.
I think in theory it could be very useful, but am not yet completely happy with how it works.
Currently it does one step with the soft goals, then a fixed number of iterations for the hard constraints, but I was thinking it could be useful to make it iterate the hard constraints until they are satisfied to some user defined threshold each time before output and another round of applying the soft goals.
I’m not sure what you mean about the damping though. I’d be interested to see what you are applying it to.
Also - I’ve sometimes found it can be helpful to connect the goals you want as hard constraints to both the soft and hard inputs - so that even for the soft step it prevents the hard constraints being too heavily violated, making it easier for it to converge when enforcing them strictly.
Thanks, that helps me understand how it works. Perhaps a flexible solution would be to allow each goal to have its own threshold, so hardness/softness becomes more of a scale.
Regarding damping:
I’m trying to create some geometry with very artificial constraints, not at all like a real physical system. Some of my custom goals suggest movement vectors that wouldn’t necessarily result in zero-energy, but at least try to reduce it with the hope that it will eventually converge to zero. If I use the regular solver the whole system often builds energy and explodes. I’m using BouncySolver instead, not to animate it with bounciness, but because its damping parameter allows me to quell some of the excess resonant energy in the system and maintain stability.
Another strategy I sometimes use if I have a goal like that (that doesn’t necessarily minimise energy at each step), is to add other goals to slow things down.
If things are all happening on a plane, adding an OnPlane goal (even if they would already stay on that plane without it) with a very high weighting will have the effect of slowing all the other goals down.
Alternatively, applying anchors or plastic Anchors to all the points, and slowly reducing their strength down to zero can be a way of guiding the system down to a gentle landing where it might otherwise start bouncing around too much.
@DanielPiker Great information in this thread. Building on that, I have a question regarding the H&S solver. I’ve searched for this information on the forums and have been unable to find it:
Is the Hard & Soft solver also multithreaded like the standard solver in K2? I’ve noticed a significant solve time difference between the two and also a general lower CPU usage for the Hard & Soft solver vs the standard solver. I don’t have a specific script to upload, this is just an observation across the last ~12 or so GH definitions in which I was using the K2 solvers.
Hi @Sean_McCluskey
The Hard&Soft solver is parallelised similarly to the standard solver.
My guess is that the time difference is likely from it taking more total iterations to converge (maintaining hard constraints at each step along the way takes more work than only enforcing them at the end).