How can I prevent boid particles from intersecting? I'm currently doing some proof-of-concept work for a Lego-style music video with a rock band on a stage in front of an audience. My idea was to use boid particles to simulate the crowd but I'm already facing several fundamental problems:


What do I have to do to actually prevent my boid meshes from intersecting? Even when I set the "personal space" to the maximum, my minifigs are still moving through each other... (and I've got both "Separate" and "Avoid collision" in the boid brain) - I already tried adding a force field to each particle but, while this indeed causes the particles to repel each other, repelled boids will then still be pushed through other boids.
I want the crowd to generally "gravitate" towards the stage side of the arena, but not towards a specific point (though the attraction should probably still be a little stronger near the center). I already tried using a stretched cube mesh (with applied Scale) with a boid force field with the shape set to "Surface" but the boids still only move towards the origin of the goal object. How would I accomplish a more general tendency to keep moving in a global "direction" rather than toward a point?
How do I get the boids to (mostly) keep facing the stage and not turn away from it so much when moving around? So far, I tried a Locked Track Constraint on the particle meshes but, while this does make a difference compared to not having that constraint, the audience is still nowhere near as "focused" on the stage as I would like them to be.


I'm starting to wonder whether boids really are the way to go for this.

Update: Looks like I've kind of solved two out of those three (I will post the solutions as an answer later in case anyone else stumbles across this). What remains is the issue with particle/mesh intersection.
You can use CrowdMaster to simulate the stadium correctly. You can view a nice example of this kind of scene in this video: https://www.youtube.com/watch?v=kmjfbEGzX6M