I then used this CUSTOM option for finer control via a global script would call x amount of the behaviorTrees each frame. This helped immensely with performance for 50+ nav_agents with skeleton3D animations/sounds/hitboxes. You could have that value be a curve that reacts to FPS or possibly another behavior tree that manages the update rate based on distance.
enum ProcessThread { IDLE, PHYSICS, CUSTOM }
I then used this CUSTOM option for finer control via a global script would call x amount of the behaviorTrees each frame. This helped immensely with performance for 50+ nav_agents with skeleton3D animations/sounds/hitboxes. You could have that value be a curve that reacts to FPS or possibly another behavior tree that manages the update rate based on distance.