algorithmic modeling for Rhino

Hello Kangaroo users,

I'm currently working on some fairly major changes to Kangaroo, and as part of this am looking again at ways of letting users add/remove forces and particles during simulation, (and alter which particles forces act on) without having to always reset all the particle positions.

This is something that has been requested a few times, but implementing it means changing quite a bit about how Kangaroo internally keeps track of what connects to what. I'm trying now to figure out the best way to do this, and it would help to have a few examples in mind of how such functionality could be used.

So what I'd like to ask you the users is : how exactly you would want to use this capability?

If you can describe clearly some specific examples, and particularly how you imagine the interaction sequence, it would be helpful. No promises, but I'll try and make these things possible.

Views: 2265

Replies to This Discussion

Hi Daniel,

usually if I don't need a force during simulation I just setting that value to zero. As for me you shouldn't change the way how kangaroo works. I would glad to test new features or tools...



Hi Dimitry,

Thanks for the response. This is indeed one option - just switch forces on and off as needed.

Actually if there isn't a really good reason for allowing adding/removing forces during simulation it will certainly keep things much simpler. So that's one reason for this discussion - to see if there is enough justification for it.

The kind of thing I was imagining was situations where you might have many particles, and only after running the simulation for a bit do you decide you want to make a new force connection between 2 of them. Initializing all the possible connections between particles as forces could be prohibitively slow, even if they are kept switched off when not needed.

I couldn't think of many really specific instances of this sort of situation though...

The other thing this ties into is having an API for Kangaroo so users could script their own custom iteration rules, while still making use of the Kangaroo forces and integration.

Then people might want to have the option of adding/removing forces in response to some evaluation in their script. If you know the index of the particle you want to apply the force to then this will be relatively easy, but if you just have the coordinates, then it takes a bit more work to check what it connects to.

Then maybe you could add an additional icon that allow to 'stop' the data flow. Smth like this:


I would try to control particulates when they clashed or came close to the other to simulate pedestrian behavior. Some modelers use particle flow to simulate human behaviors, etc. and people counting.

The application does something with the software Legion (, it is capable to modeling metro stations and trains stations.


Arthur Lara


Hi Daniel, I would like to try to use this as a way of optimizing collisions. I have seen that some physics simulations change resolution so that an object which is far from another object will see it as an in distinct blob, but will see something close up with greater topological resolution. If kangaroo could turn off forces that are too far away, it could potentially calculate a greater population of colliding objects or agents. I understand that this is quite a trick, I will try to find the reference to the technique after work.
-Daniel kautz
Another example that I had considered previously is a very rough simulation of erosion where a collection of static particles (ie soil) would be bombarded with particles (ie a flow of water) after a certain threshhold of number or intensity of collisions is reached the soil particles become detached and are borne into the flow as sediment. So the use of threshholds to activate state changes more broadly would be quite useful.

Hi Daniel-

This would be an exciting development indeed!

In general, when working with agents, flocking or many other "floating" object simulations, I would find it very useful to be able to add or subtract elements during the simulation.  I doubt it would work, but it could be amazing if this could somehow be integrated with a geometry pipeline...or perhaps if there was some sort of means of utilizing rhino object attributes for referenced geometry?  So if, for example, I either locked or unlocked an object during simulation, kangaroo would register it (of course, this would mean keeping track of those objects that had "moved" during simulation) and activate/deactivate it accordingly.

More specifically, I am currently starting up an installation project where we are looking to develop a branching and bending structure.  A significant portion of our research and development phase entails simulating the bending behavior of the partially-completed assembly during fact we are looking to not only understand and analyze these physical behaviors during assembly, but are hoping to utilize the bending properties of different material thicknesses to "guide" the geometry into place after which we would thicken it in order to create stiffness in certain areas.  So the in-process/additive aspect of the simulation will play a major role in whole of the project.

Basically, I've been trying to think of how I would develop my own custom bending simulation tool that would allow for looping and the adding new components iteratively, which, even if you do develop and disseminate this major advance, may be necessary for me one way or the other, because I've been working on projecting from 2D to 3D many aspects of the closed leaf-venation algorithms described in this paper from the University of Calgary (, so the process is pretty heavy in code and data structure.  I'm hoping to have the accretion of new elements and their in-process simulation affect the growth of new elements, which seems would be a very specific integration for such an open and variable platform as kangaroo.  But anyway, I would definitely be interested to see how it might work, and would regardless be delighted to offer further feedback and support in any way.

Just a few months ago I was working on a project where this could have helped. (pics on my page)

The project involved both bending a series of connected tubes by rotating and moving their connection points. There was also fabric stretched between the tubes.

I ended up using Kangaroo in two steps, one for the bending and another for the stretching. This wasn't a terrible approximation as the tubes could be stiffened prior to applying the fabric, but combining them into one system would have been nice.

Hi Daniel,

It would be great to manipulate the number of particles during the solution as well as the networks of spring forces acting between the particles.

Change 1 - Feed the kangaroo components with indexes in order to redefine networks of forces and number of particles seems a good idea.

Change 2 -Being able to rewire output from the solution component to input (in a similar fashion to hoop snake) would complete the picture.
This because is essential that the dynamic network of the forces (change 1) is influenced by the position of the particles on the space (kangaroos outcome).

particles spring and particles black holes.

Keep up the good work and thanks for making kangaroo available as a free tool!





I would like to generate curves from particles twirling/dancing around each other.

The simplest example being that two particles are generated and attracted by an external point, so they start moving towards it. Now the distance between the two particles will determine how much they attract one another, the further away they are the stronger the force should be, so it has to dynamically update.

Is something like this possible already? I am just getting started with Kangaroo.








  • Add Photos
  • View All

© 2020   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service