RVO improvements for different agent sizes and speeds


We have quite a few different types of agents that all can be part of one single combat encounter.
Ontop of that we use root motion on all our agents.

When larger Agents try to move through a group of smaller agents they tend to get stuck, the smaller agents might not have enough speed to get out of the way of the larger agents. Since root motion has the final say on top speed.

I was wondering if there are some changes we could make to improve the movement in groups?
Currently using version 4.2.11

After doing testing around this was much easier to set up than I thought.
Inside the RVO Controller I’ve left all the settings on default.
But layer per agent group:
Small, Medium, Large, MiniBoss

Then for each agent in the game assign them their respected layer, and set the Collides with it’s own Layer and all agents smaller in size.
This yielded quite good results where large agents could push through a group of smaller agents.


Another thing you can do which yields quite good results is to reduce the agent’s priority when they are just idling. I do this in the RTS beta to make it much easier for units to move through groups of idle units.
There is also another property in that beta which I dynamically adjust called “flow following strength”. If that is set to 1 the agent will try to not push other agents around at all but will just follow along with whatever the crowd is doing.


I tested the beta and the latest stable release side by side ( 5 agents )
And I didn’t notice too many changes in the specific behavior I was looking for.
I did notice that indeed their Idle behaviour was much better, where in the new version they’d stay a lot more ‘structured’. I’ll look into the dynamic priority again :slight_smile:

The beta will out of the box not do anything specific. The code that changes the behaviour is on the AIPath script when the “Stop when destination is crowded” checkbox is enabled.

1 Like

I do want to add that in my case, most agents are not allowed to strafe left or right. That definitely doesn’t benefit the RVO calculations.