A number of custom ICE nodes and various compounds that allow for strand-to-strand collisions.
This is an old project I had originally dropped, largely because I didn't feel like starting over to fix all the issues with it. As such, everything is held together by duct tape.
What it can do: https://vimeo.com/groups/ice/videos/76018502
Download (Addon and example scenes): http://www.mayulive.com/StrandCollisionFramework.zip
Will likely require the VC++2012 redistributable: http://www.microsoft.com/en-us/download/details.aspx?id=30679The most glaring issues are: 1.
No shared data set, meaning that, internally, self-colliding strands are not aware of how other strands in the cloud are reacting. They are only updated with full iterations (repeat node in ICE), which gets very expensive. It's a hackjob that really shouldn't be working, but does. sort of.2.
Doubled-ended "Hooked" strands were never meant to be stretched, it just happens that they somewhat tolerate it. Do not expect stretching to work. Hell, don't expect hooked strands to work at all.3.
Stiffness has no weights, meaning colliding segments are moved just the same as other segments. This means that you will end up with a bump in your strand unless you increase the number of full iterations (repeat in ice). 4.
Violent collisions require that we keep tight control over how strand length is corrected. However, very stiff strands require that we continuously correct the strand length in a manner that breaks this system. If you are going to have reasonably stiff strands colliding with geometry, "Use Current Length" /HAS/ to be disabled.
Verlet integration is terrible and should have been replaced. If you have a look into the Verlet integration compound (stolen from the original dynamics framework, along with a few other compounds), you will see a number of hacks implemented to counteract Perpetual Wobble Syndrome (PBS). Alas, there is no cure.6.
Friction simply pushes the strand back to where it was at the previous frame, hence it does not work when the target is moving. You generally always want some amount of friction though.7.
Weighing down strands (strandmass) was a last-minute feature that just happened to be implementable without doing anything fancy. Don't expect a lot from it.
This entire setup was made with SI2011 in mind. It does appear to be working in 2013/2014, though they both spit out an error claiming that one of the nodes is using an invalid constraint map. There is no such error in 2011, and the error remains even if all ports are given separate constraint maps. Everything works fine despite this error, so it can be ignored. Likewise, as 2011 does not have fun features like subframes, it is not set up to work with them.
Softimage will also complain that the 3Delight plugin is not installed on scene load. I just can't seem to remove it from the scene.
Usage should be largely self-explanatory, with the zip containing a number of example scenes.
The length Correction factor before collision takes place corresponds to the bidirectional length correction in the original strand dynamics framework. Think of it was a wobbliness factor.
A lot of the compounds have a Range input. These compounds are driven by various values, usually the collision force. We divide the input by the range value and clamp it between 0 and 1, so a range of 10 and an input value of 1 would give you 0.1, or a 10% effect. The lower the range the stronger the effect, with 0 disabling it completely.
While I'm reasonably sure there should be no more crash-inducing bugs, I might be inclined to fix any that occur. All other issues are features. Except maybe the addon file being broken.