How can I understand "Strength" parameter?

Hi All,

Could someone provide me with a distinctive description about what is the meaning of the “strength” parameter in Kangaroo2.

How does the “Strength” affect RigidBody, Coincident Constraint, all the collision types, etc?

Is there a way to properly define what the magnitude of “strength” should be in order to make objects act realistically, because it’s a nightmare.

I am beginning to think that Kangaroo is like a RagDoll playground instead of a physics engine. Just leave all “Strength” parameters to 1.0, DO NOT apply any forces, and play with the “Drag” component.

@DanielPiker, is Kangaroo 2, far from a stable build? Do I need to switch to Kangaroo 1 if I want to use the engine for real life project?

Thank you in advance.

Let me clarify a little bit with a real example.

Take a look at the behavior [in the gif] and the parameters [in the png]. I’m no big-time physicist but if you apply two forces of the same magnitude and opposite directions, the result should be a stand still,after the balance of the moments due to the fact that the forces are applied on the centroids of the bodies and there are hinges involved.

Again on the animation, the collision is totally ignored. Same can be said about the point coincident constraints as well.

1 Like

Hi zooid,

A point in Kangaroo2 reaches equilibrium when the weighted average of the move vectors from all goals acting on it is zero. The strength is simply that weighting. The solver can also be seen as a minimisation of the (weighted) sum of the squares of the distances from the rest positions for each goal acting on each point.

What this means practically for how to set the strength parameter is different for different goals. For instance, if using the length goal to model the behaviour of a rod, this can be calculated using (Young’s modulus * cross section Area) / Length.
There are also many of the goals which do not model physical behaviour, but enforce geometric constraints, such as planarity, equal length and so on. In these cases the strengths are defined relative to each other. If the goals do not conflict, the system will move to a state where they are all satisfied. If they do conflict, it will reach equilibrium at the weighted average as described above, and the strengths can be used to prioritise one goal over another to a chosen degree.

However, I get the impression you are mainly focused on the rigid body components.
Since rigid bodies are by definition not intended to model deformation, the strength here should be chosen for stability and the correct geometric result rather than some physical parameter. I suspect any issues you are having are more to do with the setup and input points chosen than the strength values.
Rigid bodies are still relatively less developed than other parts of Kangaroo, especially when it comes to collision. It’s something I want to improve though, so if you have specific examples where it is not behaving as it should I’d like to see them.


Hi Daniel,

Thanks for the reply.

So what you’re saying is that ‘strengths’ are elastic connections until the solver converges? Do I understand this correctly?

Isn’t that too unstable? If you treat constraints, point on line, point coincidence, etc., like real constraints you’ll reduce the degrees of freedom the solver has to calculate, instead of calculating them until they find equilibrium. Same goes with the collisions, if a point is going inside an object return it to the surface of the object. When you put ‘strength’ parameter you actually make the point go through and act like a buoy dropped in water. This drives the solver nutts.

Is it difficult to create three different solvers for Static, Kinematic and Dynamic problems?
Each will ignore certain connections, forces, deformations, and at the end the solution will be physically accurate.

I haven’t looked too much into it, is Kangaroo OpenSource? Can I see the code and suggest improvements?

Kangaroo could use some clarification, starting with having only one version to worry about.
Then, indeed, some kind of help should be provided to choose the proper strengths value instead of having to fiddle endlessly with sliders.
A great addition would be a visual cue indicating unstable nodes in the sense that their coordinates diverge rather than converge from fixed values, thus guiding the user to add missing constraints.
Also, some of the constraints like “G2 continuity” or “Collide 2D” are more like hacks and it takes a lot of head scratching to figure out the cunning tricks that allow them to work.

Hi osuire,

I gave up on Kangaroo a little after I started this threat.

Kangaroo is nothing of all those things it is being promoted to be. Sure as hell not a physics engine.

More accurate description is - a dummy-physics playground. Non reliable collisions, accelerations, forces. And all

Perhaps that’s why you can’t see real physics or engineering problems solved in any of the videos, it’s all about external architectural design and some flexible cloth simulation. It’s all pretty but useless in pretty much any other field of engineering.

I really do not understand why mcneel allow people to be lied to like this. They should intervene and force @DanielPiker to make a proper description. This is not a physics engine, at least not yet, and pretty far from it at the moment.

Oof, well don’t hold back!

Seriously though, the criticism is useful.
I think perhaps some of what is happening here is that there are certain expectations around a physics engine based on experience in other software, and Kangaroo comes from a different approach, with a different emphasis.

Simulating physics is a vast topic, and any physics engine only really deals with some particular small subset of that, depending on the intended application.
I agree the description could do a better job to manage expectations. Also, if I understand more exactly what you want to do with it I may be able to improve those aspects.

The starting point for Kangaroo was dynamic relaxation, applied to form-finding. So taking some of the ideas used by engineers like Gaudi, Otto and Isler for using physical models to find shapes acting in pure compression or tension, and doing the same thing digitally. As time went by this expanded to also cover things like elastic bending for gridshells and other form-active structures.
Kangaroo has actually been used for this sort of form-finding on some very large real projects, including the new international airport for Mexico city by Foster+Partners. There have also been numerous examples of bent timber gridshells form-found with Kangaroo, and academic publications on these.

Another big part of the way Kangaroo is used is for geometry optimisation and panelisation. So things like finding grids on curved rooves or facades that allow the use of planar glazing or cladding panels. Again there are numerous built examples of large buildings and infrastructure projects where Kangaroo has actually been successfully applied for this. There are also other ways in which it has been applied in real industrial projects, from transforming between flat and 3d geometry for fabric in shoe and garment design, to sequencing installation of sub-sea mooring cables. It is also often used for solving simple geometric constraints as a step in other processes.

It’s worth noting here though that for these form-finding applications, the physics is essentially only being used as a way to minimise energy and find an accurate static equilibrium, and the fact that the behaviour on the way to this equilibrium matches the way elastic materials oscillate in the real world is in some ways just a happy coincidence. People responded well to these dynamics though, and wanted to use them for animations and other things, so I’ve ended up adding a few more features geared towards this over time, and many of my videos focus on this aspect as it is easy to understand visually.

However, I suspect most of this is of little interest to you, since your main focus appears to be on dynamics and collisions between rigid bodies. Rigid bodies were only a relatively recent addition, and collisions between them even more recent. Collisions between spheres and lines, and between points and static solids have been in there a while and I think work reasonably well, but the collisions between arbitrarily shaped rigid solids definitely still need work. Perhaps I should have refined them more before releasing, but I wasn’t even sure whether people would be interested in using them, or what for, so I thought I’d get an initial version out there and work from there depending on this.
I’m actively working right now on some more robust ways of handling collisions though.
Also with the new emphasis on constraint solving when I rewrote the solver, I think it is true that I haven’t given the use of Kangaroo for dynamic simulation so much attention recently, and agree that there could perhaps be a better way of setting it up to distinguish between static and dynamic applications.

Since you only added the images and additional details to your post some time after originally posting it I hadn’t seen them until now. I still don’t know what you are trying to do with it, and I can’t make out what is happening in the gif - can you post the actual file?


@DanielPiker This is it, you have to put this as a description of your tool. Just remove all “Physics engine” references.

And I meant it with no disrespect. Your tool is one of a kind, useful for outer design. (except for sea-bottom pipe laying application. Kudos for that outside-the-box thinking). It’s just not a physics engine.

Static equilibrium has nothing to do with simulation. So in fact you get a correct result when the system converges. Give me a for instance in nature where it’s all about static equilibrium. Gravity waves, surface tension, but again they are not static.

this is linked tight with: forces, time, hook’s law and material properties. Not a strength parameter and a number of meshes/points/CPU power/FPS.

It’s the only thing worth mentioning that is related to engineering. Although, Outer design of an engineering project is usually done by artists, not engineers. I bet they used your tool for the Mexico airport for its artistic looking roof.

It should be a different solver removing this kind of convergence related to strength parameter, unless you want to have springs for joints everywhere.

I cannot add more details, it’s a commercial project and this is a public forum. Plus the idea is obvious, Simulation of anchor having 3 parts and a chain, being lowered and hoisted with collision and the act of gravity force. As you stated above Kangaroo is not able to handle that properly yet. Even without the time parameter it’s just impossible to do it. All the joints either get dislocated or the anchor doesn’t move. If the forces are too strong the anchor flies into space.

Not to mention that you place two forces on an object in opposite directions, but the object nevertheless moves :slight_smile: some physics engine right.

Anyways, @DanielPiker your tool is not bad it has its purpose and I appreciate your hard work and time spent in creating it. It’s one of a kind, as I already said. The main reason of my criticism was that I wasted hundreds of hours trying to solve my task with your tool, because of a wrong description. Perhaps the smartest thing was that I asked this question here. After you explained what the “strength” parameter is, I understood that this is not a physics engine and I had wasted my time.

Kangaroo (both versions) has been very useful for me as a designer, I have achieved a planarization of a double curve reverse surface; and I have won awards with this. This would not have otherwise happened, in my lifetime anyway, so thankyou Daniel Piker!
So, Ivelin Peychev, since you have already spent 100’s of hours, maybe it would be worth a few more minutes of your time to do as Dan has suggested, and post your file for him to help with, or, since this is a public forum, maybe a simplified version of the issue that illustrates the problem you are having.

@markz glad to hear Kangaroo helped you:

First of all I already solved my problem using different tool and different approach. As I mentioned already, this is a public forum any proprietary models uploaded here will be a violation of my NDA.

Second: my post is not an attack on usefulness of Kangaroo for any purposes whatsoever. It is an attack on the public description distributed on internet. This is not a physics engine (period). It’s not an engineering tool but rather artistic tool to help some architects shape the exterior of their buildings.

You can even check the concepts Daniel mentioned as basis for Kangaroo. e.g. Dynamic Relaxation (Wikipedia) try searching for “Physics” in this page. You won’t find it. But you will however find a “pseudo-dynamics”. This is very accurately supporting what I said before. Pseudo or dummy physics, simulation not linked with time variable but rather FPS and CPU speed.

That said, no need for Kangaroo defenders attacking my statement.
Daniel already agreed his tool is not good yet for rigid-body dynamics and collisions.

Better not tell that to K2Engineering!

1 Like

:smiley: yes you’re probably right. Nowadays they put “Engineering” on everything. There’s even Sport Engineering, Agricultural Engineering, Food Engineering, etc.

K2Engineering is an extension of Kangaroo2 that literally makes it applicable to solving (certain) structural engineering modelling problems… was my point.

The description on the link you posted is very supportive of my statement though. I love how they distinguish between Architects (the artists) and Engineers (applied physists).

I am not familiar with the tool but if it uses Kangaroo solver I can imagine their structural analysis testing a beam on load bouncing as if it was placed on springs instead of stationary supports (form-finding equilibrium position <=> convergence of the solver).

K2Engineering was developed by a structural engineer as part of her master thesis. You can read about it here, more specifically the link to her thesis comparing the output to proven FEA solvers:

It is definitely not all smoke and mirrors and can provide accurate results. IMHO, it is basically essential to any form finding study done through Kangaroo. Otherwise you end up with a nice shape but have no idea how you’re balancing the form finding with the loads and stresses that shape would generate.

Hopefully, I have some time later on today to put in words my 0.02$ on how Kangaroo gets characterized and its usefulness as an engineering tool.

“Outer design of an engineering project is usually done by artists, not engineers”

Well on the Mexico airport it was used as an integral part of the design of the structure (for this multi-billion pound and very real project). The catenary form-finding process in Kangaroo was used to create a vaulted structure which acts more in compression with less bending (through a simulation of something similar to the type of physical hanging chain modelling process used by Gaudi).

You can also see some of the 40+ citations here for Kangaroo:
many of which are by real professional engineers using it in structural design and research, including numerous built projects, and not just for ‘artistic exteriors’. (There are many more, but these are just the ones that reference that specific publication).

As I described in my earlier post – the strength parameter can be related in a precise numerical way to the Young’s modulus in accordance with Hooke’s law and give quantitatively meaningful results.

“the idea is obvious”

In your gif I see a blue and orange blob moving off another blue and orange blob. I can’t debug that.

“Simulation of anchor having 3 parts and a chain, being lowered and hoisted with collision and the act of gravity force. As you stated above Kangaroo is not able to handle that properly yet.”

I didn’t say that – I don’t know whether what you want is possible in Kangaroo because I still don’t know what you want to do, because you haven’t explained it. It sounds fairly simple and quite doable, and if Kangaroo is failing I’d like to know how, so I can improve it. If it is confidential you can send me the file privately, or extract the relevant parts and post them.

You say placing two forces on a rigid object is not resulting in a balanced system. This is either an error in the way your definition is set up, or it is some bug I am not yet aware of (since in my tests this does behave correctly). Since you don’t provide any details I cannot tell you how to fix your definition or fix any possible bug in Kangaroo.

“Static equilibrium has nothing to do with simulation”

Maybe something is being lost in translation here – I think any engineer would agree that simulating deformations under load to find a static equilibrium(as well as intermediate steps towards this) is absolutely one type of simulation.

Again – any ‘physics engine’ simulates some subset of real world physics. Many game and animation physics engines only deal with the very limited case of rigid body dynamics and collisions – which is itself a big abstraction of real behaviour, since it does not make any attempt to take into account the deformation which always occurs in all physical systems.

These engines also typically do not make any attempt to give quantitatively accurate elastic behaviour, which Kangaroo does(for specific applications).

I’d also point out that this is possible with just standard Kangaroo by setting input parameters correctly, while the K2Engineering add on Anders mentioned makes setting the interface for setting these parameters more engineer friendly and adds further output display options, you can also get quantitatively meaningful results using Kangaroo without it.

As for the ‘pseudo dynamics’ mention in the page about dynamic relaxation – this is a relevant point. In fact the key difference here is just the type of damping used. For DR, where we are only after the equilibrium, typically either kinetic damping is used(which does not mimic any real world damping), or viscous damping(which does loosely approximate the type of damping which happens in the real world due to friction). With viscous damping though, usually the parameter is chosen to be as close as possible to critical damping, to reduce oscillations.

However, if you set this value differently(ie the Damping parameter in the ‘BouncySolver’ component of Kangaroo), then you can choose it to mimic real world behaviour more closely. In fact, when setting the damping in this way, the standard form of DR and what is often referred to as ‘Verlet physics’ (after Verlet’s integration method), which has been used in many popular physics engines, turn out to be essentially identical. It was seeing this connection that was one of initial inspirations for Kangaroo.

Now you’ll notice that I’ve always been careful to avoid calling Kangaroo ‘real-time physics’, instead referring to it from the very first demo as ‘live physics’, since the rate of iteration is dependent on CPU speed and the size of the system being simulated. The aim was to have something that is responsive and interactive in a way where the user can get rapid feedback and make use of physical intuition, not necessarily matching real world rates of movement in a precise second-to-second scale.

Making iterations correspond to precise time intervals in Kangaroo would probably be possible without any huge changes(so you could generate animations with an accurate time scale), since it is based on physical laws, and even adjusting this for CPU speed for real time display might be possible for moderately sized simulations. It’s not something I’ve spent a lot of time working on recently though, because it’s not something many people have asked for, since most people have been using it for other applications where this isn’t an issue.

You say you ‘wasted hundreds of hours’ trying to solve your task – that’s a real shame, and I’m sorry about your frustration, but I think you might have asked a specific question on here sooner?

This discussion, while interesting, has become rather broad, whereas with a bit more clarity we might have narrowed down to what it sounds like was maybe one specific issue with rigid body collision, and I could have either fixed the issue in your definition, or some relevant bug in Kangaroo, or indeed directed you towards some other software if that turned out to be more suitable.


Well, cocos2d is also a physical engine.

Alright @DanielPiker, shut me up with bragging how many multi billion projects have used kangaroo for 0.01% in their project life cycle.

I would like to see the statistics of the multi-billion dollar projects and companies which invested time in kangaroo and abandoned it. Mislead by the descriptions. Never even reporting they’ve tested it.

Honestly, I can continue arguing and prove you wrong with examples exactly where the limits are. I understand your rant defending your product but I’m not a troll to defend yourself with such rage. I’m not trying to make you mad. I’m after the truth. I want the description to be accurate so that other people will not end up wasting their time.

I hope you can see these “blobs”.

Some Physics simulation huh :smiley:
And one would assume “strength” when put inside a constraint means this constraint’s resistance to being dislocated. And what appears the strength is simply slowing the animation. :smiley:. Not gonna even try to comment on the force that I had to reduce 1000 times.

Oh, yes, and how the middle part of the anchor is staying still at the start even though gravity acts on it as well. (26.5 KB)
pseudo_anchor_behavior.3dm (183.6 KB)

Cool, thanks for finally posting an actual file. I’ll take a look later this week.

I didn’t post any other files for reasons posted above. NDA, and task was solved in another tool.

Hi Ivelin,

From the beginning, based on the examples, I understood that Kangaroo mimics physical behaviors but is not calibrated so as to serve as an accurate physical simulation tool, but it can still perform useful tasks.
I have used Kangaroo to make a membrane relaxation tool that is used everyday by our engineering offices, and it saves us countless hours of boring work.
I also use it as a mesh pre-processor for FEM analysis on membranes, thanks to the great “MeshMachine” component.

I agree that it takes a lot of head scratching : the lack of proper documentation (a general grasshopper trend) is quite annoying, and the two co-existing versions adds to the confusion.

On the bright side, Daniel is quite responsive whenever I’m stuck in achieving a specifig goal.

Long live Kangaroo ! :slight_smile: