We are pleased to announce that the si-community board has been upgraded to phpBB version 3.2.1! Let us know what you think , report bugs , and find out what has been improved in this thread
Click the "X" in the upper right corner to close this announcement

Strand Collision Framework

New plugins, tools etc.
User avatar
Posts: 9
Joined: 10 Jul 2009, 20:52

Strand Collision Framework

Post by Roughy » 24 Oct 2013, 02:04

Was crashing in SI2015, and there's apparently at least one person who is crazy enough to rely on this mess.
Here is a fix for that. Also takes care of the unsupported type and constraint map errors perPointArray has been spitting out.
http://www.mayulive.com/StrandCollision ... 042014.zip
Replace the DLLs with the ones in the above zip and everything may work.

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 ... x?id=30679

The 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.
Last edited by Roughy on 26 Apr 2014, 04:13, edited 5 times in total.

User avatar
Posts: 586
Joined: 21 Jul 2010, 00:33
Skype: gustavoboehs

Re: Strand Collision Framework

Post by gustavoeb » 24 Oct 2013, 04:48

Hey Roughy it has been a long time since your first Vimeo post on this. I am very glad you eventually got to share it. Even though you warn us about the downsides, the videos show a lot of good stuff. Hopefully I'll have time to play with this sooner then later.

Best regards, and again thanks!

Posts: 483
Joined: 27 Aug 2010, 22:25

Re: Strand Collision Framework

Post by Pooby » 24 Oct 2013, 10:34

hi Roughy,

You have made something wonderful, and the fact it works at all, is incredible, so 'duct tape job'' or not. It's a marvelous achievement.

Thanks so much for sharing it, and I also appreciate your expectation-managing, although I wouldn't put you in charge of your own marketing!

Posts: 69
Joined: 28 Jan 2010, 14:13

Re: Strand Collision Framework

Post by fabilabo » 25 Oct 2013, 08:40

I've just tested scenes and i feel it's totally awsome !
Do you think its possible tu use it to simulate hairs ?

great job, and thanks

Posts: 697
Joined: 24 Sep 2010, 18:28

Re: Strand Collision Framework

Post by iamVFX » 25 Oct 2013, 14:10

Roughy, you're a man! I remember used your per point array ice node before si 2012 came out, it was super usefull, I'll test this framework since the project I'm working on have to have such kind of interaction between the strands. Thank you for sharing it!

User avatar
Posts: 713
Joined: 09 Jun 2009, 11:02
Location: Montreal Canada

Re: Strand Collision Framework

Post by xsisupport » 25 Oct 2013, 15:39

Roughy wrote: 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.
I think you have to merge into a new scene to get rid of that.
// Steve Blair
// "You're not a runner, you're just a guy who runs" -- my wife
// My Blogs: Arnold | Softimage

User avatar
Posts: 581
Joined: 06 Aug 2009, 17:26

Re: Strand Collision Framework

Post by McNistor » 25 Oct 2013, 18:20

This looks really good! Is it free and for commercial work?
The society that separates its scholars from its warriors will have its thinking done by cowards and its fighting done by fools.

Posts: 239
Joined: 05 Sep 2011, 22:57
Location: Agua de Madeiros

Re: Strand Collision Framework

Post by sant0s » 26 Oct 2013, 11:27

very nice work! thank you.

User avatar
eternal art
Posts: 93
Joined: 08 Jun 2009, 22:48
Location: UAE - Abu Dhabi

Re: Strand Collision Framework

Post by eternal art » 26 Oct 2013, 12:10

Thank you very much for sharing this .
3D Supervisor - Production House .

User avatar
Posts: 178
Joined: 08 Jun 2009, 22:45
Location: tehran-iran

Re: Strand Collision Framework

Post by farhaad_yousefi » 28 Oct 2013, 15:18


Posts: 252
Joined: 17 Feb 2010, 16:13

Re: Strand Collision Framework

Post by caledonian_tartan » 30 Oct 2013, 10:57

this is fantastic, thank you!!

unfortunately i get an error with a custom ice node. Per_Point_Array.dll
although it still works.

Code: Select all

# WARNING : 3000 - Invalid port type specified for Custom ICE Nodes.
# Port Name: Attribute
# ID: 0
# Invalid port type: 276480
# WARNING : 3000 - Invalid port type specified for Custom ICE Nodes.
# Port Name: Array
# ID: 201
# Invalid port type: 277504
# ERROR : 2384 - This port type(s) is incompatible with other ports of the same constraint map:
# <Node: Per_Point_Array>
# <Port ID: 201>
# <Group ID: 201>
may it have something to do with this?
"...the output port was using the same same context
ID as a "singleton" input. So using two context IDs solved it..."
SI 2015 @ WIN7-64

User avatar
Posts: 9
Joined: 10 Jul 2009, 20:52

Re: Strand Collision Framework

Post by Roughy » 30 Oct 2013, 13:20

Yeah, it's an error that only pops up in 2013/2014 (and possibly 2012). Loads fine in 2011
Back when trying to fix it SI would complain even if all ports were given separate constraint maps. Any and all combinations short of cutting the extra ports would result in the same error, so I'm just going to leave it as long as it doesn't cause any actual problems.

Granted, chances are I'm overlooking something painfully obvious. Would expect it to throw the same error in 2011 though.

Posts: 31
Joined: 16 Sep 2013, 21:29
Skype: jm_quintela

Re: Strand Collision Framework

Post by jmquintela » 01 Nov 2013, 00:14

Thanks!, just in time to test some dinamic Muscle System ideas I was having... great timing men , thaks a lot, you probably save a lot of us HOURS of work :)

Posts: 186
Joined: 05 May 2012, 00:50

Re: Strand Collision Framework

Post by adrencg » 02 Nov 2013, 01:23

Can the strands collide with things other than strands?

User avatar
Posts: 9
Joined: 10 Jul 2009, 20:52

Re: Strand Collision Framework

Post by Roughy » 02 Nov 2013, 11:03

The framework includes a node that turns the edges of a mesh into strands, which you can collide with.
It also includes the stock strand collision setup, which lets them collide with mesh faces as usual.

Have a look at the Dynamic-Mesh-Collisions sample scene

Posts: 95
Joined: 20 Apr 2012, 23:08

Re: Strand Collision Framework

Post by nikaragua86 » 03 Nov 2013, 08:53

thanks !!!

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest