I'm trying to simulate a steel ball rolling down an inclined plane. Using the defaults Godot comes with results in a ball that does not move very quickly at all (mass=1 , radius=1, friction=1, etc). I've played around with these settings quite a bit and the only thing I can find to get the ball to move at a decent rate is to change the gravity scale.

While this works for simulating one ball, it seems like a hack to have to set the Gravity Scale to 10. I'm worried that this will have bad effects when I add other physics objects to my scene. Is there another way to speed up my ball's rolling without changing gravity?

You can apply a small force (apply_force()) in the direction of the balls velocity. You shouldn't mess with gravity as that will corrupt all the other objects.

    cybereality I'm not using the ball as a character controller - I just need it to roll down a ramp in response to gravity. Or do you mean that I should add some sort of 'enhancer' to it that just gives it extra velocity based on the current floor normal?

    Yes, you can add forces to rigid bodies as well. Maybe detect if it is touching the ramp and then add a small force perpendicular to the floor normal (pointing down the ramp).

    Looks like the problem is I was assuming a physics simulation would play out the same regardless of scale, when gravity at the earth's surface in fact affects objects without regard to their mass (so a tiny ball and a large ball will roll down a ramp at the same speed, but the tiny ball appears to move faster because it is traveling many times more than its length each second).

    So I can get the correct speeds just by scaling down the size of everything and moving the camera closer. But this now produces a new problem - the physics integrator does not work very well for objects that have a radius of .01. Is there any way I can increase the resolution for tiny scenes?

      You don't have to scale anything. You can use that function _integrate_forces() to multiply the applied force/velocity by some float value that is inverse to the radius of the ball.

      "The scale is too large" was going to be my answer. A two-meter-wide steel ball makes for a very, very, very big pinball or pachinko ball. 🙂

      kitfox Is there any way I can increase the resolution for tiny scenes?

      Maybe you want the physics time step? More updates per second will improve physics accuracy (checking for collisions at smaller scales) at the expense of performance. I suggest merely doubling it to 120Hz at first. You won't want to exceed 240Hz if you can help it.

      Editor:
      Project Settings -> Physics -> Common -> Physics FPS

      In GDScript:
      Engine.set_iterations_per_second()

      You can use that function to change the gravity scale on just the ball. Or you could use an Area with a physics override. You don't have to change the scale of anything or adjust the physics step.

      So posted about this on the discussions board and the best reply I got there was that changing the gravity scale is the best move. One unit in Godot doesn't have to be 1m. You could decide that 1 unit represents 1 centimeter - but if you do then you need to change the force of gravity to be in centimeters per second squared rather than meters per second squared. I found that setting gravity to 980 was a bit too extreme, but I got good results for weaker gravitational forces.

      https://github.com/godotengine/godot-proposals/discussions/4714