Plywood Strips twisting and bending simulation

Hi everyone,

I have been looking into bending and twisting plywood strips and trying to simulate their behaviour in Kangaroo. I have set up the script that uses ‘hand points’ that are supposed to represent the hand movement when twisting and bending the strips in real life.

At the moment I am struggling with getting a good approximation of the hierarchy of strengths of different goals to be the most true to real life. Has anyone done anything similar in the past and could help me find the most realistic values to help this simulation? The end result I would like to achieve would look something like the first diagram.

For now the script doesn’t take thickness of the material into account however I am aware that will be another parameter that will need to be added to the simulation at some point.

Currently I find that when I move the hand points down the corresponding corner of the strip moves upward which I struggle to understand why. Does anyone have any idea why this could be?

I would be very grateful for your help as it is a pressing issue that I need to resolve to progress my project.


Step 18.pdf (146.8 KB)
181028_Ply strip bending (31.2 KB)



did you find a solution to your problem? I am dealing with plywood bending, too and I am not sure how to get the simulation closer to the real anticipated results. I am talking about mesh resolution and the possibility of fixing points for moving along any of the xyz axes (using Hinges and AnchorXYZ).

Hi Sotiris,

Sorry @agakorz14 I missed this discussion the first time around.

For an initially flat strip like this where the thickness is very small in relation to the width, the deformed shape should closely approximate a developable strip. There is unlikely to be significant in-plane bending or stretching.

If we are just considering the shape it bends/twists into for a certain combination of end positions/orientations, and it is not significantly affected by self weight, then this shape does not depend on the material stiffness.

Although the beam goal does now support anisotropic bending resistance, I think it is not well suited to something like a strip where the aspect ratio of the cross section is this high.

Alternatively, you can treat the mesh as a shell, and use hinge goals to resist bending, with strong length goals on the edges to prevent in-plane deformation. This is probably the best bet for now, and has been used with reasonable success to model thin strips before, for example here:

Because the bending won’t generally happen exactly along the mesh edge directions, the stretch resistance will also slightly affect the bending resistance, but this effect can be mitigated somewhat by using a fairly dense unstructured triangular mesh, as can be generated with MeshMachine.
The downside of this method though is that because quite a dense mesh is required, it can get slow for long strips.

Another method I’ve been experimenting with is the discrete geodesic nets as described in this paper from IGL

Because it separates the bending direction from mesh direction it allows the use of a simple quad mesh.
Here’s a definition if you want to have a play with it. It probably needs more work though, particularly in the way the bending resistance is calculated. (30.4 KB)

Yet another technique I’ve looked at more recently is a quad mesh only 1 quad wide, letting the shape of the quads change as it deforms to follow the bending direction, but keeping them planar and preserving the overall unrolled shape using the angle and length sums. So far I’ve had only limited success with this, but will update if I get it working better.

Anyway, if you have a more specific question or example, perhaps I can help set something up.


hi Daniel,

thank you for your reply. My questions are specific but I am not sure if they are too many and should be split to separate posts. I have read the paper by Schleicher et al because it is indeed related to what I am doing. Except that this is more of a bottom up form-finding approach, and I follow a top down form conversion one. I want to design and fabricate a bending active structure of plywood strips, laminating them with a peg system to the ground. The intention is to make a saddle surface. Being more specific,

will the surface geometries still be developable if I don’t start from flat (as you suggest), but instead loft between two curves and let the simulation run for a good amount of iterations? I was thinking of doing a developable loft (evolute before running the Kangaroo solver if it is needed to ensure it will be a developable surface.

my workpieces are 6mm thick birch plywood, 3m long and 25cm wide. I am not sure about the mesh density that I should use so that the simulation is more accurate. I noticed that if the mesh is too dense, the hinges will approximate the initial profiles in a better way, but this doesn’t necessarily follow the material constraints of bending. I am now using a triangulation of a 50mm side.

Since I want to obtain my profile curves as much as possible, is the accuracy decreased if I use AnchorXYZ for the points along the lofted curves? When I don’t use them, the strips have a natural tendency to expand in all directions, I wonder if restricting a movement only along Z axis would do the job.

What I haven’t done yet is to fix all the strips together so that they all act as one system. I think that I need to employ kangaroo line components for that to make sure that there is a specific spacing between them for the overlapping, so that I can do the connections.

File attached with two strips in a row, mesh density at 50mm triangles and no AnchorXYZ. Thank you,


active bending plywood (191.9 KB)

Hi Daniel,

@DanielPiker I find the developable strip script very useful. Thanks so much. The video you posted, the curve is much more precise to the mouse track. However, when I try it, the curve followed the mouse but then flex back to its original point too much… making edits less accurate. Something about bending resistance I suppose. My question is, which is the right toggle factor to adjust the plane stiffness?

Hi Yam,

Glad to hear it is useful.
Regarding the springing back - the things to adjust are the Strength and Limit(L) of the PlasticAnchor goal.

What the PlasticAnchor does is to make each point stick to a target location with a spring-like force, but if this spring is stretched far enough it drags the target location along with it.
This is necessary because without it elastic objects like the strip would always just return to their rest configuration.
It can’t be too strong relative to the EdgeLengths and EqualAngle goals that are keeping the mesh developable, or it would be able to stick the mesh in undevelopable configurations. Too weak though and the mesh will keep drifting back from where you drag it to.

Attached is a version with adjusted strengths. (35.1 KB)


Hi Daniel,
@DanielPiker Thanks so much for such a fast reply. It’s really helpful.
I’m trying to model a strip of paper that has a consistent joint distance, but the curve between each would varies. I thought geodesic net would be good but it’s hard to edit / move the point accurately. I’ve seen hinge tutorial but I’m not sure if multiple hinge is possible. Which method would you suggest? Please advise. :smiley:

Hello people,
i found this old topic while searching on the forum and I am havig a similar problem to solve.
I’ll try to ask here and hope that someone will see it.

  • I need to bend and twist a flat rectangular stripe (which in fabrication will a strip of thin plywood) it’s final position must remain developable.
  • The final position should be based on a target surface/mesh (or I need to have control over the final position in some other way).
  • Then I have to get the rulings from the curved and twisted surface and bring them on the planar surface.
  • The rulings will be get taking the tangent in certain points on one rail curve an looking for the closest vector on the opposite rail curve.

I attach a definition of what I did so far, but which is not really there yet.

Right now if I unroll the surface i don’t get a straight stripe so even the rulings are not right.


01_Test twist and (33.2 KB)

Here’s an approach which keeps the rulings explicitly by maintaining equality with an unrolled copy of the strip and planarity of quads. (22.8 KB)


Thanks a lot Daniel,
That’s amazing!
I’ll try that with my target surface a well!

This is a topic I’ve been interested in, as a while back, I did a project where I wanted to wrinkle a sheet of plywood, similar to this chair. But in order to not torture the plywood, I believe it must consistently only be bent in one direction (in the chair example, it looks like they were able to break this rule).

Is there a way to simulate this in Kangaroo beyond just strips? I guess it could be a wider strip to where it reads more as a plane (maybe like 4’x8’ like a sheet of plywood) and bends could be introduce across the longer dimension of the plane. The overall goal would be to achieve a wrinkled appearance, while maintaining a realistic manner of the bends in the plane.

1 Like

Hello @DanielPiker ,
I post some updates and ask for advices. See attached definition.
There are still some problems:

  • the unroll is not linear
  • the quads are nor planar despite the planarization applied
  • it’s hard to get a nice continuity with the target points and the surfaces they lie on without loosing a lot in the unrolling.

I don’t know if it’s a matter of wrongly balanced forces of kangaroo involved ( but i have really tried every possible configuration) or is something else I am missing here.

Thanks in advance for your time.

01_Test twist and (37.3 KB)

Hi @dam - it looks like your target anchor points are actually beyond where the strip can reach without stretching.
Once you force the strip to stretch elastically it will not remain developable.

You also need to take care with the ClampLength - this is preventing edges getting too close to zero length or crossing over themselves, but if it is too strong it could overcome the planarity/developability constraints. Sometimes you might find you need to start with it stronger to get the approximate shape without crossovers, and then reduce it to allow the developability to be enforced strongly.

I think I recall I once wrote a goal that might be helpful here for keeping points on a curve and preventing them crossing over each other and changing order in the curve parameter space, but allowing distances to go to zero. I’ll see if I can find it as it might be easier than clamping to a small value.

Thanks @DanielPiker ,
the hint about the anchor points distance is good, actually getting them closer helps, but it means that I still have to go by trials.
I attach an update with few changes, but it’s not smooth.

I wonder if a tri-mesh would be easier to make straight and planar.
The rulings might be found afterwards connecting points from the two edges with a similar tangent vector.

01_Test twist and (56.8 KB) 01_Test twist and bend.3dm (44.8 KB)

A triangular mesh can be a good way to simulate a wider shell, where the rulings can be complex and won’t always cross from one side of the surface to the other, but they have their own difficulties, and I don’t think will help for simulating strips.
Triangles are always planar, but that doesn’t automatically make a strip of triangles a good discretization of a smooth developable surface. For example:
This can be done with origami, where the triangles become facets with sharp angles between them, but making this from a single strip of plywood would require an impossible amount of stretching.

Strips/ribbons are tricky, because most of the usual plate/shell/rod/beam models don’t work.
There is a beam-like formulation I’ve been thinking of implementing though, where you just update the centreline and material frames (which aren’t always perpendicular to the centreline).