I browsed through the RVO library code while checking the differences that HRVO added to it and I noticed that they smooth out the velocity quite a lot. I have to comb through the literature again to see if someone has mentioned anything about it. I remember seeing a mention in some paper that they assume that the velocities are valid at least a certain amount of time.
HRVO velocity selection is pretty nice and simple. Looks a lot like the ST (strategy) from Fiorinis paper. Basically it generates potential sample points at:
Next all the points are validated, so that they lie out side the multiple velocity obstacle. And the sample point that is closest to the preferred velocity is chosen.
- all intersection points of the velocity obstacles
- all the intersection points of the velocity obstacle edges and the circle which has radius of max speed
- plus the desired velocity projected pass apex of a VO (if I understood that bit of the code correctly).
The above image shows a scenario of sample points. The valid sample points are blue and invalid red-ish.
A critical point is what happens after that. Instead of applying the whole velocity to steer the agent, they clamp the delta from current velocity to the new velocity by max acceleration. Sounds like the likely thing to do, but I did not expect it to be such dominating factor of making velocity obstacles to work. Games often fiddle with the velocity directly. It could be that I was making false assumptions.
I have to give the RVO library another spin and see how much the smoothing actually affects the results.