algorithmic modeling for Rhino

The new version (0.095) of Kangaroo is now available for download:  

Additions include:  

  • Remote timer controller - can replace the use of the reset toggle and grasshopper timer to simplify simulation control. Double click the main Kangaroo component to open this remote. There are buttons for Stop(reset), Play, Pause, and Step (moves the simulation forward one iteration).
  • Line-line force - allows interaction between line segments - they are treated as rigid cylinders. As with springs, there are settings for offset and rest distance, so this can be used to simulate colliding rods, and also for keeping cylinders tangent to one another (can be used for reciprocal structures).
  • Gear simulator - collision between curves in a plane, can be used for various mechanical simulations - cams, gears, rack and pinions etc.
  • Developablize force - adjusts vertices of a mesh locally, to make angles around each interior vertex sum to 2*Pi, so the mesh can be unfolded to a flat sheet without stretching.
  • Volume dependent pressure force - allows you to set a rest volume for a mesh instead of just a fixed pressure. When combined with Laplacian smoothing for area minimization, this can be used to optimize for CMC (constant-mean-curvature) surfaces. It will also work on open meshes.
  • Translation lock - maintains a fixed relationship between a pair of points. This can be used to enforce periodic boundary conditions for TPMS.
  • Equalize angles force - given a set of angles (defined by 3 points each), this tries to adjust them all to become equal.
  • Mirror symmetry force - can be used to minimize curvature variation, and optimize for higher order curve continuity. It can also be used for simulating torsional resistance in curved rods.
  • True minimal surface relaxation - Laplacian smoothing force now includes an option for cotangent weighting, which optimizes for zero mean curvature, unlike spring based methods, or uniform weighted Laplacian smoothing which only roughly approximate this.
  • Fast sphere collide - allows much faster collision detection between large numbers of spheres. By placing these spheres at the vertices, this can also be used for collision between meshes.
  • Force-density element - an experimental one, more on this later
  • Projected-force  - adjusts its strength so the component of the force in a given direction stays constant.

New mesh tools:

  •  WarpWeft - sorts the edges of a quad mesh into warp and weft directions. This can be used to assign them different stiffness in fabric form-finding.
  • Checkerboard - sort the faces of a mesh into 2 lists so that 2 faces of the same colour are never adjacent.
  • MeshDirection - sorts the vertices of a quad mesh to give it a sort of u-v directionality
  • Refine Strips - subdivision in one direction only - can be used to generate developable strips
  • Stripper - separates out the strips of quads from a larger mesh
  • Unroller - unfolds a quad strip to flat without stretching
  • MeshMap - maps points from one mesh to another (can be used together with circle-packing to generate conformal mappings)
  • Reciprocal structure - generates starting geometry for a reciprocal structure from any input mesh (using the Plankton mesh library *Note* If you already have the Plankton components installed, you will need to update to version 0.3.0, which is available from here)
  • ReMesher - adjusts the connectivity of a mesh by flipping, splitting and collapsing edges to make all edge lengths closer to a target value
  • Diagonalize - creates a new face for every edge of the original mesh. Can be used on quad meshes to easily convert to a diagrid.
  • Refine - simple non-smoothing subdivision, splitting quads into 4 quads, and triangles into 4 triangles
  • QuadDivide - subdivide quads by any number squared, not just powers of 4
  • Corners - finds the corner vertices of a quad mesh
  • ByParent - simple quad subdivision, keeping the output grouped by parent face.

User objects:

The download comes with an increased collection of user objects to simplify setting up common simulation types - Including a simple to use origami simulator, a reciprocal structure generator, and a tool to generate compact circle packings from a CP mesh.


Geometry input now accepts polylines and straight curves.

Hinges can now be fold completely flat in both directions.

Various other minor bug fixes and speed improvements (including much faster removeDuplicatePoints/Lines components)


I've not yet updated all the documentation and example files to reflect this new version, but over time I will keep posting here with new demos and explanation of all these new features. I'll try and add a few new examples each week. Vote in the comments below if there is a feature mentioned above that you're particularly keen to hear more about soon.

No doubt there are still some bugs to be discovered. If something isn't working the way you expect or want it to, please post in this forum (ideally with a description or sketch of what you think should be happening, and a clear description of what happens instead and any error messages).

There are also some more new features that weren't quite ready to make it into this release, but are on the way shortly...

Kangaroo remains completely free, for personal, academic, and commercial use. I'm always interested to hear about projects done using it, and suggestions for improvements or additions.


Views: 10358

Replies to This Discussion


Thank you, now I found your answer.

I have been away from the forum for a few months and missed this somehow.

What a nice christmas gift! Thanks you Daniel! I am really looking forward to this ReMesher...

Here's a simple demo of the remeshing. M1 is the starting mesh, and M2 is the target mesh. You can use the same input for both, or you can change the shape of M2 during the remeshing.

Also, I should mention that this remeshing component actually uses the standard rhino mesh class, whereas the more recent remeshing videos I've posted use the Plankton mesh library, and are a bit faster and more stable. I'll post some of examples of these soon too.


Daniel, the ReMesher is great, I absolutely love it!

I get a few faces that are double, do you think this comes from my input mesh or from the ReMesher?

Thanks Wieland, glad you like it. These duplicate faces or other non-manifold mesh problems do sometimes occur with this remesher, and this was one of my main motivations for developing Plankton.

I just need to polish it up a bit, but I'll post the Plankton version of the remeshing soon, which seems to be much less susceptible to these issues.

Hello Daniel,

Congratulation (for bringing kangaroo to this amazing point) & Thank you (for sharing so generously)

I was wondering how the Tolerance (T) input works. I noticed that for higher values I get this nice effect of gradient increase/decrease of the face sizes like in the picture below.

How could this be done more controlled? Or would it be possible to input different values for edge variation?

Another related issue that comes into my mind is if it possible (with the plankton lib) to include points as vertices into the topology of a mesh by their position? 

Hi Christian, thanks.

The tolerance setting controls the length thresholds for splitting or collapsing edges. When set to zero it keeps trying to get all edges the same length, and as you increase it, it makes more of an allowance. I think the gradient you see is related to the initial vertex ordering.

I do actually have a script that allows you to set different target edge lengths at different points in space and interpolate between them, so you can directly control this gradient effect, and I'll include this when I post the Plankton remesher (see my reply to Wieland above).

I'm not sure I fully understand your last question  - do you mean to set some internal vertices of the mesh to keep fixed during remeshing?

thank you and the team for making and sharing such a great suite of tools.

Hello! this is great news!! 

i am getting this message when using components that need plankton. 

1. Solution exception:Could not load type 'PlanktonGh.RhinoSupport' from assembly 'PlanktonGh, Version=, Culture=neutral, PublicKeyToken=null'.

both dll and gha files are unblocked. also when i use the plankton.dll file (the one that comes with new kangaroo) the plankton components also dont work.

have i messed up something during install?

Hi ng5,

Thanks for letting me know. I don't think it is any mistake of yours, but a conflict with the version of Plankton. Can you please try installing version 0.3.0 from here :

(replacing all the old Plankton files)

and let me know if the problem persists?

Ok that was the problem. I thought the latest plankton is 0.2.0.

So problem solved!

Thank you for your answer and also for the new release and development of kangaroo.

Lots of new stuff to experiment with!!

Glad that fixes it!

Yes, we hadn't really publicized this new release of Plankton yet. I'll update the notes above to mention it, thanks.






  • Add Photos
  • View All

© 2021   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service