So I read Reynold's 1999 paper, [Steering Behaviors For Autonomous Characters][1], and I presume something went over my head, because it doesn't seem to make any sense to me.

steering_force = truncate (steering_direction, max_force)
acceleration = steering_force / mass
velocity = truncate (velocity + acceleration, max_speed)
position = position + velocity

Not sure how this makes any sense. Unless there's a constant time step of 1s, this integration (a forward Euler, which is bad in it's own right), doesn't make much sense to me.

The behaviors themselves don't seem to make much sense either:


desired_velocity = normalize (position - target) * max_speed
steering = desired_velocity - velocity

The desired_velocity is in the wrong direction? Should be (target - position)? It also doesn't return a force - it returns a difference of velocities. It doesn't scale at all with mass.


target_offset = target - position
distance = length (target_offset)
ramped_speed = max_speed * (distance / slowing_distance)
clipped_speed = minimum (ramped_speed, max_speed)
desired_velocity = (clipped_speed / distance) * target_offset
steering = desired_velocity - velocity

This just doesn't make any sense to me. This will flat out not work. Sure, you'll eventually get a vector pointing away from the target, but depending on the vehicle's mass, may not be able to stop it in time. It's also dependent on an arbitrary slowing radius not tied to the objects max thrust, max speed, or mass. Like Seek, it also doesn't actually return a force.

I stopped reading after that. Clearly there is something I am missing here..

  • \$\begingroup\$ Did you have an issue you were trying to resolve? How about a specific question? Sounds like you're trying to start a discussion over a 17 year old paper. There are other resources out there if you're looking to implement steering. \$\endgroup\$ – MichaelHouse May 7 '16 at 3:10
  • \$\begingroup\$ @Byte56 Clearly I'm missing something big and obvious in the paper. There are tons of tutorials and books that reference this paper - so they can't all be wrong. I just don't understand what I'm missing here. Like every steering reference I've come across has been based on this paper. \$\endgroup\$ – user78331 May 7 '16 at 15:13

The paper is a simplified model that can be taken, modified and implemented into your specific situation. It's not intended to be an implementation you copy/paste into your game.

There are a few instances where the simplification is brought up, like when speaking about the simplified vehicle model:

This vehicle model is based on a point mass approximation. On the one hand that allows a very simple and computationally cheap physically-based model (for example, a point mass has velocity (linear momentum) but no moment of inertia (rotational momentum)). On the other hand, it cannot be a very compelling physical model because point masses do not exist in the real world. Any physical object with mass must have a non-zero radius and hence a moment of inertia. This use of an oversimplified non-physical vehicle model is merely for convenience and intended to be “without loss of generality” — it should always be possible to substitute a more plausible, more realistic physically based vehicle model.

Emphasis mine. Basically, don't assume the algorithm presented will fit directly into your model. If you need a algorithm that's been adapted to fit something closer to the model your expecting, search for implementations of the steering algorithms in the engine of your choice.

| improve this answer | |
  • \$\begingroup\$ "This vehicle model is based on a point mass approximation." - but it doesn't work for a point mass approximation. \$\endgroup\$ – user78331 May 7 '16 at 15:50
  • \$\begingroup\$ Looks like the mass is factored into the maximum speed \$\endgroup\$ – MichaelHouse May 7 '16 at 17:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy