generative modeling for Rhino
I am involved in a project aiming at studying fabric structures with Rhino and Grasshopper. A lot of people are trying to do this over here, but nobody seems to have found a magical way to do it.
Here is my issue : for my tent I first created a cable network, and computed a basic spring model with Kangaroo. But as you can see, the shape of the surface depends on the meshing and of the springs localization (which is logical). More springs means more stiffness...
I was thinking of a small trick to avoid that. I wanted to assume that the stiffness of my springs are proportional to the sum of the neighbors' areas.
1) What do you think of it!? Do you think it would be relevant??
2) How would you do it? First I tried to modify the "neighbors" def I found there : http://www.grasshopper3d.com/forum/topics/neighbors but as my mesh is in complete disorder, I think I cant. I am currently trying to do something with the Kangaroo "VertexNeighbours" tool, but I don't know how to do it easily.
Thank you for your comments!
Accurate form-finding of fabric structures is based on real world physic/engineering rules such as those used by the Dynamic Relaxation Alogirthim. The surface stress and stiffness of any boundary conditions are the only factors which should control the form. You can artifically create fabric like froms using other techniques but they are unlikely to be able to be fabrictaed in real life and you will get an as built structure which is a totally different form and is slack/wrinkled. You need the strcuure to be in a state of full tension for it to be stiff to resist impsed loads and for it to be stable.
Sure, this is why the rest length of my springs is 0. With the "stiffness" and "rest length" parameters, I can play around and try to imitate some fabric behavior.
If the cable network is well-set, its behavior will imitate pre-stressed fabric. This is what I am trying to do here!
Good question, and something I have been meaning to address for a while.
Networks of zero rest-length springs only give an approximation of minimal surfaces. If the mesh is fairly uniform it is a pretty close approximation, but as you show, if the mesh density varies a lot, then it becomes less so.
Your approach with adjusting spring strengths based on areas sounds reasonable, and may work. In the shell/plate bending example on the Kangaroo group page there is a small C# script at the start which extracts for every edge the 4 points of the 2 triangles adjacent to that edge, and you could use this to get the areas (using a vector cross product). However, these areas will change as the membrane relaxes, and without some looping the spring strengths won't get updated correspondingly.
But what I think might be better is a proper triangle membrane element as a new Kangaroo force, so the force will always be related to the changing area of the element. I think this shouldn't be too hard to add - as I say, I've been meaning to do this for a while - thanks for reminding me.
Thank you for your answer. As usual your help is valuable. I don't have time right now but I am definitely going to look at it and post my definition when I get something correct.
The C# script works fine, thanks a lot. But in fact I need to use it for each iteration, which is to say, I need to create a loop to change the stiffness each time...
I made some research about gHowl and Hoopsnake. What is best in this case?