Angular Damping or Rotating Parts Slowing Down

To clarify for people posting feedback here:
We are specifically looking for places that have hit “rotational terminal velocity” where no matter how much torque you apply to a spinning object it doesn’t accelerate. Rotational motion is very difficult to solve in real-time discreet systems, and often introduces inaccuracies. These inaccuracies can lead to thin objects spinning infinitely. chefdeletat has figured out a way to resolve this problem and “loosen” this terminal rotational behavior (meaning it should be easier to keep objects you want to spin, spinning).

We are looking for users who have encountered these rotational limitations (when perhaps building high performance cars), to see how much turning down this “rotational dampening” will affect their game. So, have you ever had a game where you had to turn up rotational torque really high to keep your car or other spinning objects moving correctly? Please let us know, we want to know the effects of reducing damping.

It it update up on gametest1 now?

So, which means of rotating something would you expect this to impact? If I give a part an initial RotVelocity, I see the behavior from the first video. But I haven’t seen things stopping unexpectedly when rotating them by any of the usual methods. And it seems there are quite a number of ways to skin this particular cat. The ones I’ve found are (for constant rotation of a part):

Using physics/constraints without scripting:

  • Torque object acting on attachment
  • HingeConstraint with actuator type Motor
  • BodyAngularVelocity
  • Putting Part in contact with Motor surface of another part (Surface Input type “Constant”)
  • HingeConstraint* with no actuator (to provide axis) and VectorForce applied to an off-axis attachment
  • HingeConstraint* with no actuator (to provide axis) and BodyThrust applied off-axis
  • Rigid connection or rope constraint to another rotating or orbiting part.
  • AlignOrientation constraint connecting unanchored part (to be rotated) to an anchored part with attachments that are oriented exactly 180 degrees apart on an axis other than the rotation axis. This one is more of a reproducible quirk than a method.

Using scripts

  • Animating Part.CFrame via script
  • Animating CFrame of a part’s BodyGyro via script
  • Animating Part.Orientation through script
  • Setting Part.RotVelocity (seems only to work on stationary parts by doing anchor/set/unanchor? Because of sleeping?)
    *Motor6D angle animation? Haven’t tried this yet
1 Like

Essentially if you apply a torque to wheels of a car, once they get to a high enough RPM, the angular damping will essentially behave like a “friction” force, lowering the amount of RPM increase each unit of torque you add applies. It can potentially hit a terminal velocity (asymptotically I think).

So it won’t affect much stuff that you’re applying a force to, unless it is very high RPM. This change will cause Torque driven systems with high RPMs to experience even higher RPMs.

Fidget spinners in Roblox will spin forever? Call the press!

2 Likes

I have encountered this issue multiple times while trying to create vehicles, as documented on a thread from last year when we were first made aware of it. However I am no longer using anything that would be affected by this.

Edit, here’s some discussion on the issue for anyone who hasn’t come across it.

Hey guys, we’ve opened up GT3 for testing if any of you are interested:

https://www.gametest3.robloxlabs.com/

It has the angular damping reduction enabled.

3 Likes

Any feedback on this? We will be closing public access to GT3 and soon enabling this change, I’d like as much feedback as possible,

Just tested my game’s cars there and everything appeared to be working as intended. (They’re pretty modest cars, nothing with super high torque)

2 Likes

Thank you for doing so!

Angular damping has been reduced today. Please report any issues.

3 Likes

How do I control the rolling friction of a ball/sphere? After this update when I move a small ball in motion, nothing can stop it from rolling.
https://gyazo.com/2309b1a355e4fdc215707dcbbd7b2e8c.mp4
https://gyazo.com/6790e9ba23093dbaf030ca8f5986514f.mp4

This is the properties on the ball:
https://gyazo.com/4a1992a2e96409ada060a7f9864c2bfc.png

This is where the ball ended up after recording the gif and typing this post up:
https://gyazo.com/f1f59d350d5eddd7acb2d11cf42b4ee4.mp4

The ball is first moved via CFraming, and when close to the ground the ball’s velocity is set and becomes unanchored, no other forces are on the ball.

Here is the link to the place, however on current version of the game, the ball’s friction is at 1 instead of 0, but there is still no noticeable difference: [ Content Deleted ] - Roblox

1 Like

Try adding some friction to the ball, it’s currently at 0. Let me know if this helps. Changing frictionWeight doesn’t change friction, but only how the friction is averaged between the two parts. Review the docs:

If you still get too much rolling, you might need to add a script that will apply a torque opposite to the angular velocity of your object

Sorry I got my friction values mixed up, it was originally at 1 and the problem was present. Me trying to fix it just set friction to the opposite spectrum. However, friction seems to have no effect on the rolling of the sphere.

We will need to add rolling friction in the future. For now could you try a script that applies a torque opposite to angular velocity

2 Likes

Roblox is a rigid body physics engine, and in rigid body physics a rolling cylinder or sphere experiences no friction. You could try adding an angular velocity set to 0,0,0 target velocity and reduced torque to the ball and see if that works.

Well, currently I’m just going to use a BodyVelocity to control the motion of the ball, since I already had code written for it (for when the players hit the ball with the bat). So it was easy to copy and paste the code over to when players throw the ball.

Place this script as child of your ball:
local damping = 0.9
while(true) do
wait(0.1)
script.Parent.RotVelocity = damping*script.Parent.RotVelocity
end
damping could be anything between 0 and 1

4 Likes

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.