REFERENCES: FLOCKING
WHAT IS IT? A way to simulate "herds": Flock of birds Flock of fish Herd of wildebeest A group of enemies First image: Second image: Third image: Fourth image:
BOID REPRESENTATION
BOID REPRESENTATION, CONT. Independent Steering? For most characters, the orientation should match the direction of the linear velocity Need a refresher on the math? Sometimes, you do want a separate facing direction… [optional] Max Speed (a scalar) Useful to keep speed under control Refresher (with vectors)? Image:
STEERING
STEERING, CONT.
FLOCKING OVERVIEW Every frame: Generate 0 or more steerings (force vectors) From a set of low-level behaviors Seek Flee Wander Avoid-another-boid Align Obstacle-avoid Each force vector is created considering only that behavior Combine these steerings into a single force vector Apply it using the position-/velocity-update formula.
LOW-LEVEL BEHAVIOR: SEEK max_accel
LOW-LEVEL BEHAVIOR: FLEE max_accel
LOW-LEVEL BEHAVIOR: WANDER Approach #1: Add random.uniform(-m, m) to heading. Generate a force vector in this direction Problem: tends to be "jittery" Approach #2: Every few seconds generate a new seek target. Problem: can be abrupt. Approach #3: Place a target n units in the heading direction Add random.uniform(-m,m) to it's rotation This is relative to the heading direction Seek towards this target Usually a little less "jittery" Even though the target itself is "jittery"
LOW-LEVEL BEHAVIOR: AVOID- ANOTHER-BOID Simple: If within n units, flee More advanced: Predict if we'll collide, and if so steer to avoid "Problem" cases: Moving parallel to each other -- no collision! Intersecting paths, but no hit. Calculating the correction force vector. Can also consider a "cone of vision"
LOW-LEVEL BEHAVIOR: ALIGN Given: a direction vector. Simple -- just accelerate in this direction!
LOW-LEVEL BEHAVIOR: OBSTACLE AVOID One approach: Usually you want to modulate the force based on distance.
BLENDING
BLENDING, CONT. Problems: Contradictory forces (Equlibria) Oscillating: If you gradually adjust weights, this shouldn't happen. Near-sightedness E.g. taking the wrong route in a maze. Combine this with A* to get around this. Behaviors that should take precedence: E.g. Wall-avoid if we're close; otherwise, 0.5 wander, 0.5 seek. Use a decision tree.
ADVANCED TOPICS Unit Coordination Formation (echelon, disc, etc.) Only using cone-of-vision Incorporation with A*