Why are there and how can I fix this "Physics are like balloons without mass"?

For the longest time in modern gaming with physics, I’ve been wondering that almost all of them incorporate physics models that seem wrong for the immersion and reflection of real physics somehow.
Including the basic physics model in UDK 4.7

a) Objects seem to have no mass or they seem to have just a fraction of the mass they should have.
b) Collision and bouncing of objects act as they don’t have a mass and impact at all or just a fraction of what it should be.

Before anyone yells that mass does not affect acceleration in free fall in vacuum ofd space which is 9.81m/s2, yes I know that and I am not talking about acceleration but the behaviour of mass at impact.

Even the rough basic model should incorporate that 1000kg object won’t bounce back or it’s trajectory from free fall alter noticeably if it is dropped on the end part of a 2kg plank which is suspended in air by a string from the middle.

Not to talk about a solid chunk of metal fropped to ground.

Nowdays instead of THUNK it goes BOUNCING away <3

So how and where can I modify the physics calculations or variables or constants to get the physics to represent actual physics?

Anyone?

You should look into Physical Materials. Through them, you can set things like friction, restitution (bounciness), and so on. Also you can override the mass of any object to adjust its physics behaviour in ways that mass should :stuck_out_tongue:

I’ve tried fiddling around in the physics materials, creating new ones and linking the physics material to the existing ones but somehow I always come to the same conclusion that the mass and density won’t transfer to the object as it is supposed to.

I made a simple effect comparison on setting two default static mesh cubes sized 1 cubic meter at a height of 5 meters with rotation one axis at 25 degrees and let them free fall against a default cubic static mesh floor.

The numeric values seem to transfer to the object but the object won’t act accoridng to the transferred masses.

The results are identical even if the weight of an object is overridden and set to 100kg and the other is set to 500000kg

The only way I’ve managed to get any effect on the object considering the mass they are supposed to have, is by changing the mass scale way up.

I would like to have a material that has the set density g/cm3 as in the physics material settings that would also reflect to the object accordingly depending on the volume of the created object.

Basically 1g/cm3 European Pine wood has a density of 0,63g/cm3 which would make a 1m3 pine object weigh 630kg and act accordingly with the physics engine.

PS: It does however affect on the objects interaction to the default shooters bullet collisions, but not at all to objects behavior to the surrounding world (the floor) or to the objects adjancent object and basic physics.

Please help Obi wan Kenobi, you’re my only hope. :smiley:

Some of the inconsistencies you’re noticing might come from the way physics is calculated in a game engine. It’s calculated in discreet frames, instead of continuously. When an object falls on a surface, it actually penetrates the surface, and then is solved out of it, usually by applying force at the point of contact. The larger the time between physics frames, the more interpenetration needs to be fixed, and the less accurate it is. The result is that it usually overcompensates, and they bounce apart, even if the restitution should be 0.

You can mitigate this a bit by decreasing the time between physics frames, which should make the simulation more accurate (at the cost of performance, of course). You find options for the physics delta time in Project Settings -> Engine -> Physics -> Framerate. Enable substepping, and decrease “max substep delta time”. Framerate is 1/Delta time, so the default of 0.016667 is ~60fps.

Hope that’s what you’re looking for :slight_smile:

Nope that didn’t affect a thing :confused:
I must be doing something profoundly wrong and missing it every time since I tried to do this as simple as it gets from the scratch.

The mass (630kg/1m3 ) of the 1m3 block transfers correctly to the object from the physical material linkage but it acts just the same as a same size block with default material that weighs the default 177kg/1m3.

Are there any thorough video tutorials on how to create interactive materials with physics built in the material as well?
So I won’t have to enter the mass of every object by hand overriding the defaults.

Most of the tutorials that I’ve found consist only the making and editing of the surface materials, textures, lights etc visuals but I’d need the material to have the physical properties as accurate as possible (almost anything is more accurate than the defaults tbh).

PS: Yes, there are written tutorials by dev’s but I have a slight dyslexia type problem on concentrating of reading way too long descriptions and texts also since I am more of a Visual/Sensory/Kinetic learner the reading part tends to give me a huge problem unfortunately.

The main issue, I suspect, is that the typical rigid body simulation is just that : rigid. The huge amount of energy that would realistically be diverted to deformation and heat when a massive object hits the ground simply isn’t taken into account correctly. In an ideal world there would be enough processing power available to simulate all bodies as deformable softbodies, just with different elasticity/plasticity settings to match the material they are supposed to represent, based on real-world measurements… PBP if you will, physically based physics :slight_smile:

The reality is different. Game physics primarily have to be fast and entertaining, and absolute accuracy doesn’t necessarily gel with those requirements.

Rigid body simulation would suffice quite nicely tbh but even the most basic physics should calculate the mass of even simplest of objects if it would be present.

But the underlying problem for me is that the objects mass doesn’t seem to affect the objects basic properties unless overridden by hand which does the deal to affect the physics accordingly but it shouldn’t be done manually for every object if you have a material that has the properties there already.

Scenario to test it that I made from scratch

Identical object dimensions - 1m1m1m
Same starting angles - 25 degrees
Same drop height - 5m
Same landing surface - Default floor

I created a physical material with density of 0.63g/cm3 and linked it to object #2 which resulted in over all weight of 630kg/1m3

Object #1 density - default
Object #1 weight - 177.828kg
Object #2 density - 0.63g/1cm3
Object #2 weighs - 630kg
Object #3 density - 0.63g/1cm3
Object #3 weighs - 630kg

Made the objects Moveable and activated physics simulation for them.
For object #3 I also created a separate Cube Static Mesh and edited the collision complexity to Complex physics.

Conclusion:
All 3 objects acted identically like synchronized swimmers :confused:
Bounce was identical
Roll was identical
Time of movement until stop was identical
Path of movement was identical.

also having a bit of problems with this.
I have a character and some RigidBody boxes. I can change the mass of the box as much as I want, and it barely makes any difference and the character can always kick it around easily :confused:

Played around a bit more…

It seems that the energy transfer isn’t calculated at all considering deformations and heat generation.
So every impact is considered as a perfect impact (impact energy is lossless, ie. there is no energy transfer happening at all)

What affects the energy transfer though is the restitution which makes the object more or less bouncy.
But there isn’t any kinetic energy transfer nor diminishing at the impact calculations by default.

This gives us the problem that the same material object with same dimensions where the other is hollow so it weighs 1/10th of the others mass they will act identically at impact.

Additional notes:
Linear dampening seems to be Viscosity (not air friction) that affects falling acceleration & max fall velocity.
Angular Dampening seems to affect energy transfer loss from linear movement to angular movement.

But this does not correct the problem on in example a sphere which won’t get any angular momentum from the against surfaces normal vector.

Ah this topic explains a lot as well :confused:
Too bad the Physics are either way too simple or totally bugged…

Anyone else on this matter?
Solutions, workarounds, anything?

Since, as pointed out, rigid bodies are just that, rigid, the engine isn’t doing anything wrong (well, unless there are indeed bugs, but your example with the 10:1 mass ratio wouldn’t qualify as a bug/discrepancy here), you will probably have to tweak things yourself: basically, you would have to override an object’s response to take energy transfers into account, or simulate objects breaking due to excessive strain (in your example of a wood plank attached by a string, the string would snap, or the plank would break).
This, however, has to be an ad hoc implementation (and approximation), as you would otherwise need to use the Finite Elements Method to get proper responses, which I’m sure is what we will get in games when computers have enough processing power to get at least decent results without requiring hours or days of computation.

So the short answer is, if you manage to fake it, go for it. If you cannot, you will have to deal with the rigid body simulation.
Or you could get inspiration from what BeamNG does to simulate cars: the physical mesh is a collection of beams, which act as a network of spring-damper systems, and allow for actual deformation (this is one way to have a sort of FEM simulation, and it does require considerable CPU power to run in real time).

Having a few precomputed deformed meshes and lowering your object’s velocity would probably be one of the cheapest ways to fake energy transfers, but it would still require some work to get it to work decently.

1 Like

Then a follow up…
If the engine does support only rigid body mechanics, how can I implement a physics override to an object?

Any small bits of info and examples even (of course a proper implementable one that can be modified would be the best) :slight_smile:

1 Like