1221 lines
		
	
	
		
			67 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			1221 lines
		
	
	
		
			67 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <html><head>
 | ||
| <meta http-equiv="content-type" content="text/html; charset=windows-1252">
 | ||
| <title>Craig Reynolds: Flocks, Herds, and Schools: A Distributed Behavioral Model</title>
 | ||
| </head>
 | ||
| <body><p>
 | ||
|  </p><hr> 
 | ||
| Published in <i>Computer Graphics</i>, <b>21</b>(4), July 1987, pp. 25-34.<br>(ACM SIGGRAPH '87 Conference Proceedings, Anaheim, California, July 1987.)
 | ||
| <hr> <p>
 | ||
| </p><p>
 | ||
| 
 | ||
| </p><center>
 | ||
| <h2>Flocks, Herds, and Schools:<br>
 | ||
| A Distributed Behavioral Model <a href="#foot1"><sup>1</sup></a></h2>
 | ||
| <p>
 | ||
| Craig W. Reynolds<br>
 | ||
| Symbolics Graphics Division
 | ||
| </p><p></p><p>
 | ||
| [obsolete addresses removed <a href="#foot2"><sup>2</sup></a>]
 | ||
| </p></center>
 | ||
| 
 | ||
| <h3>Abstract</h3>
 | ||
| 
 | ||
| <p> The aggregate motion of a flock of birds, a herd of land animals,
 | ||
| or a school of fish is a beautiful and familiar part of the natural
 | ||
| world. But this type of complex motion is rarely seen in computer
 | ||
| animation. This paper explores an approach based on simulation as an
 | ||
| alternative to scripting the paths of each bird individually. The
 | ||
| simulated flock is an elaboration of a particle system, with the
 | ||
| simulated birds being the particles. The aggregate motion of the
 | ||
| simulated flock is created by a distributed behavioral model much like
 | ||
| that at work in a natural flock; the birds choose their own
 | ||
| course. Each simulated bird is implemented as an independent actor
 | ||
| that navigates according to its local perception of the dynamic
 | ||
| environment, the laws of simulated physics that rule its motion, and a
 | ||
| set of behaviors programmed into it by the "animator." The aggregate
 | ||
| motion of the simulated flock is the result of the dense interaction
 | ||
| of the relatively simple behaviors of the individual simulated birds.
 | ||
| 
 | ||
| </p><p> <i>Categories and Subject Descriptors:</i> 1.2.10 [Artificial
 | ||
| Intelligence]: Vision and Scene Understanding; 1.3.5 [Computer
 | ||
| Graphics]: Computational Geometry and Object Modeling; 1.3.7 [Computer
 | ||
| Graphics]: Three Dimensional Graphics and Realism-Animation: 1.6.3
 | ||
| [Simulation and Modeling]: Applications.
 | ||
| 
 | ||
| </p><p> <i>General Terms:</i> Algorithms, design.b
 | ||
| 
 | ||
| </p><p> <i>Additional Key Words, and Phrases:</i> flock, herd, school,
 | ||
| bird, fish, aggregate motion, particle system, actor, flight,
 | ||
| behavioral animation, constraints, path planning.
 | ||
| 
 | ||
| </p><h3>Introduction</h3>
 | ||
| 
 | ||
| <p> The motion of a flock of birds is one of nature's delights. Flocks
 | ||
| and related synchronized group behaviors such as schools of fish or
 | ||
| herds of land animals are both beautiful to watch and intriguing to
 | ||
| contemplate. A flock<a href="#foot*"><sup>*</sup></a> exhibits many
 | ||
| contrasts. It is made up of discrete birds yet overall motion seems
 | ||
| fluid; it is simple in concept yet is so visually complex, it seems
 | ||
| randomly arrayed and yet is magnificently synchronized. Perhaps most
 | ||
| puzzling is the strong impression of intentional, centralized
 | ||
| control. Yet all evidence indicates that flock motion must be merely
 | ||
| the aggregate result of the actions of individual animals, each acting
 | ||
| solely on the basis of its own local perception of the world.
 | ||
| 
 | ||
| </p><p> One area of interest within computer animation is the description and
 | ||
| control of all types of motion. Computer animators seek both to invent
 | ||
| wholly new types of abstract motion and to duplicate (or make
 | ||
| variations on) the motions found in the real world. At first glance,
 | ||
| producing an animated, computer graphic portrayal of a flock of birds
 | ||
| presents significant difficulties. Scripting the path of a large
 | ||
| number of individual objects using traditional computer animation
 | ||
| techniques would be tedious. Given the complex paths that birds
 | ||
| follow, it is doubtful this specification could be made without
 | ||
| error. Even if a reasonable number of suitable paths could be
 | ||
| described, it is unlikely that the constraints of flock motion could
 | ||
| be maintained (for example, preventing collisions between all birds at
 | ||
| each frame). Finally, a flock scripted in this manner would be hard to
 | ||
| edit (for example, to alter the course of all birds for a portion of
 | ||
| the animation). It is not impossible to script flock motion, but a
 | ||
| better approach is needed for efficient, robust, and believable
 | ||
| animation of flocks and related group motions.  
 | ||
| 
 | ||
| </p><p> This paper describes one such approach. This approach assumes a
 | ||
| flock is simply the result of the interaction between the behaviors of
 | ||
| individual birds. To simulate a flock we simulate the behavior of an
 | ||
| individual bird (or at least that portion of the bird's behavior that
 | ||
| allows it to participate in a flock). To support this behavioral
 | ||
| "control structure," we must also simulate portions of the bird's
 | ||
| perceptual mechanisms and aspects of the physics of aerodynamic
 | ||
| flight. If this simulated bird model has the correct flock-member
 | ||
| behavior, all that should be required to create a simulated flock is
 | ||
| to create some instances of the simulated bird model and allow them to
 | ||
| interact.<a href="#foot**"><sup>**</sup></a>
 | ||
| 
 | ||
| </p><p> Some experiments with this sort of simulated flock are described
 | ||
| in more detail in the remainder of this paper.  The success and
 | ||
| validity of these simulations is difficult to measure
 | ||
| objectively. They do seem to agree well with certain criteria [<a href="#ref25">25</a>] and some statistical properties [<a href="#ref23">23</a>] of natural flocks and schools which have been
 | ||
| reported by the zoological and behavioral sciences. Perhaps more
 | ||
| significantly, many people who view these animated flocks immediately
 | ||
| recognize them as a representation of a natural flock, and find them
 | ||
| similarly delightful to watch.
 | ||
| 
 | ||
| </p><h3>Our Foreflocks</h3>
 | ||
| 
 | ||
| <p> The computer graphics community has seen simulated bird flocks
 | ||
| before. The Electronic Theater at SIGGRAPH `85 presented a piece
 | ||
| labeled "motion studies for a work in progress entitled `Eurythmy'"
 | ||
| [<a href="#ref4">4</a>] by Susan Amkraut, Michael Girard, and George
 | ||
| Karl from the Computer Graphics Research Group of Ohio State
 | ||
| University. In the film, a flock of birds flies up out of a minaret
 | ||
| and, passing between a series of columns, flies down into a lazy
 | ||
| spiral around a courtyard. All the while the birds slowly flap their
 | ||
| wings and avoid collision with their flockmates.
 | ||
| 
 | ||
| </p><p> That animation was produced using a technique completely unlike
 | ||
| the one described in this paper and apparently not specifically
 | ||
| intended for flock modeling. But the underlying concept is useful and
 | ||
| interesting in its own right.  The following overview is based on
 | ||
| unpublished communications [<a href="#ref3">3</a>]. The software is
 | ||
| informally called "the force field animation system."  Force fields
 | ||
| are defined by a 3 x 3 matrix operator that transform from a point in
 | ||
| space (where an object is located) to an acceleration vector: the
 | ||
| birds trace paths along the "phase portrait" of the force field.
 | ||
| There are "rejection forces" around each bird and around static
 | ||
| objects. The force field associated with each object has a bounding
 | ||
| box, so object interactions can be culled according to bounding box
 | ||
| tests. An incremental, linear time algorithm finds bounding box
 | ||
| intersections. The "animator" defines the space field(s) and sets the
 | ||
| initial positions, orientations, and velocities of objects. The rest
 | ||
| of the simulation is automatic.
 | ||
| 
 | ||
| </p><p> Karl Sims of MIT's Media Lab has constructed some behaviorally
 | ||
| controlled animation of groups of moving objects (spaceships,
 | ||
| inchworms, and quadrupeds), but they are not organized as flocks [<a href="#ref35">35</a>]. Another author kept suggesting [<a href="#ref28">28</a>, <a href="#ref29">29</a>, <a href="#ref30">30</a>] implementing a flock simulation based on a
 | ||
| distributed behavioral model.
 | ||
| 
 | ||
| </p><h3>Particle Systems</h3>
 | ||
| 
 | ||
| <p> The simulated flock described here is closely related to particle
 | ||
| systems [<a href="#ref27">27</a>], which are used to represent dynamic
 | ||
| "fuzzy objects" having irregular and complex shapes. Particle systems
 | ||
| have been used to model fire, smoke, clouds, and more recently, the
 | ||
| spray and foam of ocean waves [<a href="#ref27">27</a>]. Particle
 | ||
| systems are collections of large numbers of individual particles, each
 | ||
| having its own behavior. Particles are created, age, and die
 | ||
| off. During their life they have certain behaviors that can alter the
 | ||
| particle's own state, which consists of color, opacity, location, and
 | ||
| velocity.
 | ||
| 
 | ||
| </p><p> Underlying the boid flock model is a slight generalization of
 | ||
| particle systems. In what might be called a "subobject system,"
 | ||
| Reeves's dot-like particles are replaced by an entire geometrical
 | ||
| object consisting of a full local coordinate system and a reference to
 | ||
| a geometrical shape model. The use of shapes instead of dots is
 | ||
| visually significant, but the more fundamental difference is that
 | ||
| individual subobjects have a more complex geometrical state; they now
 | ||
| have orientation.
 | ||
| 
 | ||
| </p><p> Another difference between boid flocks and particle systems is not
 | ||
| as well defined. The behavior of boids is generally more complex than
 | ||
| the behaviors for particles as described in the literature. The
 | ||
| present boid behavior model might be about one or two orders of
 | ||
| magnitude more complex than typical particle behavior. However this is
 | ||
| a difference of degree, not of kind. And neither simulated behavior is
 | ||
| nearly as complex as that of a real bird.
 | ||
| 
 | ||
| </p><p> Also, as presented, particles in particle Systems do not interact
 | ||
| with one another, although this is not ruled out by definition. But
 | ||
| birds and hence boids must interact strongly in order to flock
 | ||
| correctly. Boid behavior is dependent not only on internal state but
 | ||
| also on external state.
 | ||
| 
 | ||
| </p><h3>Actors and Distributed Systems</h3>
 | ||
| 
 | ||
| <p> The behavioral model that controls the boid's flight and flocking
 | ||
| is complicated enough that rather than use an ad hoc approach, it is
 | ||
| worthwhile to pursue the most appropriate formal computational
 | ||
| model. The behaviors will be represented as rules or programs in some
 | ||
| sense, and the internal state of each boid must be held in some sort
 | ||
| of data structure. It is convenient to encapsulate these behaviors and
 | ||
| state as an object, in the sense of object-oriented programming
 | ||
| systems [<a href="#ref10">10</a>, <a href="#ref11">11</a>, <a href="#ref21">21</a>]. Each instance of these objects needs a
 | ||
| computational process to apply the behavioral programs to the internal
 | ||
| data. The computational abstraction that combines process, procedure,
 | ||
| and state is called an actor [<a href="#ref12">12</a>, <a href="#ref26">26</a>, <a href="#ref2">2</a>]. An actor is essentially
 | ||
| a virtual computer that communicates with other virtual computers by
 | ||
| passing messages. The actor model has been proposed as a natural
 | ||
| structure for animation control by several authors [<a href="#ref28">28</a>, <a href="#ref13">13</a>, <a href="#ref29">29</a>, <a href="#ref18">18</a>]. It seems particularly
 | ||
| apt for situations involving interacting characters and behavior
 | ||
| simulation. In the literature of parallel and distributed computer
 | ||
| systems, flocks and schools are given as examples of robust
 | ||
| self-organizing distributed systems [<a href="#ref15">15</a>].
 | ||
| 
 | ||
| </p><h3>Behavioral Animation</h3>
 | ||
| 
 | ||
| <p> Traditional hand-drawn cel animation was produced with a medium
 | ||
| that was completely inert. Traditional computer animation uses an
 | ||
| active medium (computers running graphics software), but most
 | ||
| animation systems do not make much use of the computer's ability to
 | ||
| automate motion design. Using different tools, contemporary computer
 | ||
| animators work at almost the same low level of abstraction as do cel
 | ||
| animators. They tell their story by directly describing the motion of
 | ||
| their characters. Shortcuts exist in both media: it is common for
 | ||
| computer animators and cel animators to use helpers to interpolate
 | ||
| between specified keyframes. But little progress has been made in
 | ||
| automating motion description; it is up to the animator to translate
 | ||
| the nuances of emotion and characterization into the motions that the
 | ||
| character performs. The animator cannot simply tell the character to
 | ||
| "act happy" but must tediously specify the motion that conveys
 | ||
| happiness.
 | ||
| 
 | ||
| </p><p> Typical computer animation models only the shape and physical
 | ||
| properties of the characters, whereas behavioral or character-based
 | ||
| animation seeks to model the behavior of the character. The goal is
 | ||
| for such simulated characters to handle many of the details of their
 | ||
| actions, and hence their motions. These behaviors include a whole
 | ||
| range of activities from simple path planning to complex "emotional"
 | ||
| interactions between characters. The construction of behavioral
 | ||
| animation characters has attracted many researchers [<a href="#ref19">19</a>, <a href="#ref21">21</a>, <a href="#ref13">13</a>, <a href="#ref14">14</a>, <a href="#ref29">29</a>, <a href="#ref30">30</a>, <a href="#ref41">41</a>, <a href="#ref40">40</a>], but it is still a
 | ||
| young field in which more work is needed.
 | ||
| 
 | ||
| </p><p> Because of the detached nature of the control, the person who
 | ||
| creates animation with character simulation might not strictly he an
 | ||
| animator. Traditionally, the animator is directly responsible for all
 | ||
| motion in animation production [<a href="#ref40">40</a>]. It might he
 | ||
| more proper to call the person who directs animation via simulated
 | ||
| characters a meta-animator, since the animator is less a designer of
 | ||
| motion and more a designer of behavior. These behaviors, when acted
 | ||
| out by the simulated characters, lead indirectly to the final
 | ||
| action. Thus the animator's job becomes somewhat like that of a
 | ||
| theatrical director: the character's performance is the indirect
 | ||
| result of the director's instructions to the actor. One of the
 | ||
| charming aspects of the work reported here is not knowing how a
 | ||
| simulation is going to proceed from the specified behaviors and
 | ||
| initial conditions; there are many unexpected, pleasant surprises. On
 | ||
| the other hand, this charm starts to wear thin as deadlines approach
 | ||
| and the unexpected annoyances pop up. This author has spent a lot of
 | ||
| time recently trying to get uncooperative flocks to move as intended
 | ||
| ("these darn boids seem to have a mind of their own!").
 | ||
| 
 | ||
| </p><h3>Geometric Flight</h3>
 | ||
| 
 | ||
| <p> A fundamental part of the boid model is the geometric ability to
 | ||
| fly. The motion of the members of a simulated school or herd can be
 | ||
| considered a type of "flying" by glossing over the considerable
 | ||
| intricacies of wing, fin, and leg motion (and in the case of herds, by
 | ||
| restricting freedom of motion in the third dimension). In this paper
 | ||
| the term geometric flight refers to a certain type of motion along a
 | ||
| path: a dynamic, incremental, rigid geometrical transformation of an
 | ||
| object, moving along and tangent to a 3D curve. While the motion is
 | ||
| rigid, the object's underlying geometric model is free to articulate
 | ||
| or change shape within this "flying coordinate system." Unlike more
 | ||
| typical animated motion along predefined spline curves, the shape of a
 | ||
| flight path is not specified in advance.
 | ||
| 
 | ||
| </p><p> Geometric flight is based on incremental translations along the
 | ||
| object's "forward direction," its local positive Z axis. These
 | ||
| translations are intermixed with steering-rotations about the local X
 | ||
| and Y axes (pitch and yaw), which realign the global orientation of
 | ||
| the local Z axis. In real flight, turning and moving happen
 | ||
| continuously and simultaneously. Incremental geometric flight is a
 | ||
| discrete approximation of this; small linear motions model a
 | ||
| continuous curved path. In animation the motion must increment at
 | ||
| least once per frame. Running the simulation at a higher rate can
 | ||
| reduce the discrete sampling error of the flight model and refine the
 | ||
| shape of motion blur patterns.
 | ||
| 
 | ||
| </p><p> Flight modeling makes extensive use of the object's own coordinate
 | ||
| system. Local space represents the "boid's eye view;" it implies
 | ||
| measuring things relative to the boid's own position and
 | ||
| orientation. In Cartesian terms, the left/right axis is X, up/down is
 | ||
| Y, and forward/pack is Z. The conversion of geometric data between the
 | ||
| local and global reference frames is handled by the geometric
 | ||
| operators localize and globalize. It is convenient to use a local
 | ||
| scale so that the unit of length of the coordinate system is one body
 | ||
| length. Biologists routinely specify' flock and school statistics in
 | ||
| terms of body lengths.
 | ||
| 
 | ||
| </p><p> Geometric flight models conservation of momentum. An object in
 | ||
| flight tends to stay in flight. There is a simple model of viscous
 | ||
| speed damping, so even if the boid continually accelerates in one
 | ||
| direction, it will not exceed a certain maximum speed. A minimum speed
 | ||
| can also be specified but defaults to zero. A maximum acceleration,
 | ||
| expressed as a fraction of the maximum speed, is used to truncate
 | ||
| over-anxious requests for acceleration, hence providing for smooth
 | ||
| changes of speed and heading. This is a simple model of a creature
 | ||
| with a finite amount of available energy.
 | ||
| 
 | ||
| </p><p> Many physical forces are not supported in the current boid
 | ||
| model. Gravity is modeled but used only to define banking behavior. It
 | ||
| is defined procedurally to allow the construction of arbitrarily
 | ||
| shaped fields. If each boid was accelerated by gravity each frame, it
 | ||
| would tend to fall unless gravity was countered by lift or
 | ||
| buoyancy. Buoyancy is aligned against gravity, but aerodynamic lift is
 | ||
| aligned with the boid's local "up" direction and related to velocity.
 | ||
| This level of modeling leads to effects like normally level flight,
 | ||
| going faster when flying down (or slower up), and the "stall"
 | ||
| maneuver. The speed limit parameter could be more realistically
 | ||
| modeled as a frictional drag, a backward pointing force related to
 | ||
| velocity. In the current model steering is done by directing the
 | ||
| available thrust in the appropriate direction. It would be more
 | ||
| realistic to separately model the tangential thrusting forces and the
 | ||
| lateral steering forces, since they normally have different
 | ||
| magnitudes.
 | ||
| 
 | ||
| </p><h3>Banking</h3>
 | ||
| 
 | ||
| <p> Geometric flight relates translation, pitch, and yaw, but does not
 | ||
| constrain roil, the rotation about the local Z axis.  This degree of
 | ||
| freedom is used for banking-rolling the object to align the local Y
 | ||
| axis with the (local XY component of the total) acceleration acting
 | ||
| upon it. Normally banking is based on the lateral component of the
 | ||
| acceleration, but the tangential component can be used for certain
 | ||
| applications. The lateral components are from steering and gravity.
 | ||
| In straight flight there is no radial force, so the gravitational term
 | ||
| dominates and banking aligns the object's -Y axis with "gravitational
 | ||
| down" direction. When turning, the radial component grows larger and
 | ||
| the "accelerational down" direction swings outward, like a pendulum
 | ||
| hanging from the flying object. The magnitude of the turning
 | ||
| acceleration varies directly with the object's velocity and with the
 | ||
| curvature of its path (so inversely with the radius of its turn).  The
 | ||
| limiting case of infinite velocity resembles banking behavior in the
 | ||
| absence of gravity. In these cases the local + Y (up) direction points
 | ||
| directly at the center of curvature defined by the current turn.
 | ||
| 
 | ||
| </p><p>
 | ||
| </p><center>
 | ||
| <a href="http://www.cs.toronto.edu/~dt/siggraph97-course/cwr87/cwr87f1.gif"><img src="Craig%20Reynolds%20Flocks,%20Herds,%20and%20Schools%20A%20Distributed%20Behavioral%20Model_files/cwr87f1.gif" width="60%"></a><p>
 | ||
| Figure 1.
 | ||
| </p></center>
 | ||
| 
 | ||
| <p> With correct banking (what pilots call a coordinated turn) the
 | ||
| object's local space remains aligned with the "perceptual" or
 | ||
| "accelerational" coordinate system. This has several advantages: it
 | ||
| simplifies the bird's (or pilot's) orientation task, it keeps the lift
 | ||
| from the airfoils of the wings pointed in the most efficient direction
 | ||
| ("accelerational up"), it keeps the passengers coffee in their cups,
 | ||
| and most importantly for animation, it makes the flying boid fit the
 | ||
| viewer's expectation of how flying objects should move and orient
 | ||
| themselves. On the other hand, realism is not always the goal in
 | ||
| animation. By simply reversing the angle of bank we obtain a cartoony
 | ||
| motion that looks like the object is being flung outward by the
 | ||
| centrifugal force of the turn.
 | ||
| 
 | ||
| </p><h3>Boids and Turtles</h3>
 | ||
| 
 | ||
| <p> The incremental mixing of forward translations and local rotations
 | ||
| that underlies geometric flight is the basis of "turtle graphics" in
 | ||
| the programming language Logo [<a href="#ref5">5</a>]. Logo was first
 | ||
| used as an educational tool to allow children to learn experimentally
 | ||
| about geometry, arithmetic, and programming [<a href="#ref22">22</a>]. The Logo turtle was originally a little
 | ||
| mechanical robot that crawled around on large sheets of paper laid on
 | ||
| the classroom floor, drawing graphic figures by dragging a felt tip
 | ||
| marker along the paper as it moved, Abstract turtle geometry is a
 | ||
| system based on the frame of reference of the turtle, an object that
 | ||
| unites position and heading. Under program control the Logo turtle
 | ||
| could move forward or back from its current position, turn left or
 | ||
| right from its current heading, or put the pen up or down on the
 | ||
| paper. The turtle geometry has been extended from the plane onto
 | ||
| arbitrary manifolds and into 3D space [<a href="#ref1">1</a>].  These
 | ||
| "3d turtles" and their paths are exactly equivalent to the boid
 | ||
| objects and their flight paths.
 | ||
| 
 | ||
| </p><h3>Natural Flocks, Herds, and Schools</h3>
 | ||
| 
 | ||
| <pre>"...and the thousands off fishes moved as a huge beast, piercing 
 | ||
| the water. They appeared united, inexorably  bound to a common 
 | ||
| fate. How comes this unity?"                                     
 | ||
|                            --Anonymous, 17th century (from Shaw)
 | ||
| </pre>
 | ||
| 
 | ||
| <p> For a bird to participate in a flock, it must have behaviors that
 | ||
| allow it to coordinate its movements with those of its
 | ||
| flockmates. These behaviors are not particularly unique; all creatures
 | ||
| have them to some degree. Natural flocks seem to consist of two
 | ||
| balanced, opposing behaviors: a desire to stay close to the flock and
 | ||
| a desire to avoid collisions within the flock [<a href="#ref34">34</a>]. It is clear why an individual bird wants to
 | ||
| avoid collisions with its flockmates. But why do birds seem to seek
 | ||
| out the airborne equivalent of a nasty traffic jam? The basic urge to
 | ||
| join a flock seems to be the result of evolutionary pressure from
 | ||
| several factors: protection from predators, statistically improving
 | ||
| survival of the (shared) gene pool from attacks from predators,
 | ||
| profiting from a larger effective search pattern in the quest for
 | ||
| food, and advantages for social and mating activities [<a href="#ref33">33</a>].
 | ||
| 
 | ||
| </p><p> There is no evidence that the complexity of natural flocks is
 | ||
| bounded in any way. Flocks do not become "full" or "overloaded" as new
 | ||
| birds join. When herring migrate toward their spawning grounds, they
 | ||
| run in schools extending as long as 17 miles and containing millions
 | ||
| of fish [<a href="#ref32">32</a>]. Natural flocks seem to operate in
 | ||
| exactly the same fashion over a huge range of flock populations. It
 | ||
| does not seem that an individual bird can be paying much attention to
 | ||
| each and every one of its flockmates. But in a huge flock spread over
 | ||
| vast distances, an individual bird must have a localized and filtered
 | ||
| perception of the rest of the flock. A bird might be aware of three
 | ||
| categories: itself, its two or three nearest neighbors, and the rest
 | ||
| of the flock [<a href="#ref23">23</a>].
 | ||
| 
 | ||
| </p><p> These speculations about the "computational complexity" of
 | ||
| flocking are meant to suggest that birds can flock with any number of
 | ||
| flockmates because they are using what would be called in formal
 | ||
| computer science a constant time algorithm. That is, the amount of
 | ||
| "thinking" that a bird has to do in order to flock must be largely
 | ||
| independent of the number of birds in the flock. Otherwise we would
 | ||
| expect to see a sharp upper bound on the size of natural flocks when
 | ||
| the individual birds became overloaded by the complexity of their
 | ||
| navigation task.  This has not be observed in nature.
 | ||
| 
 | ||
| </p><p> Contrast the insensitivity to complexity of real flocks with the
 | ||
| situation for the simulated flocks described below. The complexity of
 | ||
| the flocking algorithm described is basically O(N 2 ). That is, the
 | ||
| work required to run the algorithm grows as the square of the flock's
 | ||
| population. We definitely do see an upper bound on the size of
 | ||
| simulated flocks implemented as described here. Some techniques to
 | ||
| address this performance issue are discussed in the section
 | ||
| Algorithmic Considerations.
 | ||
| 
 | ||
| </p><h3>Simulated Flocks</h3>
 | ||
| 
 | ||
| <p> To build a simulated flock, we start with a boid model that
 | ||
| supports geometric flight. We add behaviors that correspond to the
 | ||
| opposing forces of collision avoidance and the urge to join the
 | ||
| flock. Stated briefly as rules, and in order of decreasing precedence,
 | ||
| the behaviors that lead to simulated flocking are:
 | ||
| 
 | ||
| </p><ol>
 | ||
| <li> Collision Avoidance: avoid collisions with nearby flockmates <p>
 | ||
| </p></li><li> Velocity Matching: attempt to match velocity with nearby flockmates <p>
 | ||
| </p></li><li> Flock Centering: attempt to stay close to nearby flockmates <p>
 | ||
| </p></li></ol>
 | ||
| 
 | ||
| <p> Velocity is a vector quantity, referring to the combination of
 | ||
| heading and speed. The manner in which the results from each of these
 | ||
| behaviors is reconciled and combined is significant and is discussed
 | ||
| in more detail later. Similarly, the meaning nearby in these rules is
 | ||
| key to the flocking process. This is also discussed in more detail
 | ||
| later, but generally one boid's awareness of another is based on the
 | ||
| distance and direction of the offset vector between them.
 | ||
| 
 | ||
| </p><p> Static collision avoidance and dynamic velocity matching are
 | ||
| complementary. Together they ensure that the members of a simulated
 | ||
| flock are free to fly within the crowded skies of the flock's interior
 | ||
| without running into one another. Collision avoidance is the urge to
 | ||
| steer a way from an imminent impact. Static collision avoidance is
 | ||
| based on the relative position of the flockmates and ignores their
 | ||
| velocity. Conversely, velocity matching is based only on velocity and
 | ||
| ignores position. It is a predictive version of collision avoidance:
 | ||
| if the boid does a good job of matching velocity with its neighbors,
 | ||
| it is unlikely that it will collide with any of them any time
 | ||
| soon. With velocity matching, separations between boids remains
 | ||
| approximately invariant with respect to ongoing geometric
 | ||
| flight. Static collision avoidance serves to establish the minimum
 | ||
| required separation distance; velocity matching tends to maintain it.
 | ||
| 
 | ||
| </p><p> Flock centering makes a boid want to be near the center of the
 | ||
| flock. Because each boid has a localized perception of the
 | ||
| world. "center of the flock" actually means the center of the nearby
 | ||
| flockmates. Flock centering causes the boid to fly in a direction that
 | ||
| moves it closer to the centroid of the nearby boids. if a boid is deep
 | ||
| inside a flock, the population density in its neighborhood is roughly
 | ||
| homogeneous; the boid density is approximately the same in all
 | ||
| directions. In this case, the centroid of the neighborhood boids is
 | ||
| approximately at the center of the neighborhood, so the flock
 | ||
| centering urge is small. But if a boid is on the boundary of the
 | ||
| flock, its neighboring boids are on one side. The centroid of the
 | ||
| neighborhood boids is displaced from the center of the neighborhood
 | ||
| toward the body of the flock. Here the flock centering urge is
 | ||
| stronger and the flight path will be deflected somewhat toward the
 | ||
| local flock center.
 | ||
| 
 | ||
| </p><p> Real flocks sometimes split apart to go around an obstacle. To be
 | ||
| realistic, the simulated flock model must also have this
 | ||
| ability. Flock centering correctly allows simulated flocks to
 | ||
| bifurcate. As long as an individual boid can stay close to its nearby
 | ||
| neighbors, it does not care if the rest of the flock turns away. More
 | ||
| simplistic models proposed for flock organization (such as a central
 | ||
| force model or a follow the designated leader model) do not allow
 | ||
| splits.
 | ||
| 
 | ||
| </p><p> The flock model presented here is actually a better model of a
 | ||
| school or a herd than a flock. Fish in murky water (and land animals
 | ||
| with their inability to see past their herdmates) have a limited,
 | ||
| short-range perception of their environment. Birds, especially those
 | ||
| on the outside of a flock, have excellent long-range "visual
 | ||
| perception."  Presumably this allows widely separated flocks to join
 | ||
| together. If the flock centering urge was completely localized, when
 | ||
| two flocks got a certain distance apart they would ignore each
 | ||
| other. Long-range vision seems to play a part in the incredibly rapid
 | ||
| propagation of a maneuver wave" through a flock of birds. It has been
 | ||
| shown that the speed of propagation of this wavefront reaches three
 | ||
| times the speed implied by the measured startle reaction time of the
 | ||
| individual birds. The explanation advanced by Wayne Potts is that the
 | ||
| birds perceive the motion of the oncoming "maneuver wave" and time
 | ||
| their own turn to match it [<a href="#ref25">25</a>]. Potts refers to
 | ||
| this as the "chorus line" hypothesis.
 | ||
| 
 | ||
| </p><h3>Arbitrating Independent Behaviors</h3>
 | ||
| 
 | ||
| <p> The three behavioral urges associated with flocking (and others to
 | ||
| be discussed below) each produce an isolated suggestion about which
 | ||
| way to steer the boid. These are expressed as acceleration
 | ||
| requests. Each behavior says: "if I were in charge, I would accelerate
 | ||
| in that direction." The acceleration request is in terms of a 3D
 | ||
| vector that, by system convention, is truncated to unit magnitude or
 | ||
| less. Each behavior has several parameters that control its function;
 | ||
| one is a "strength," a fractional value between zero and one that can
 | ||
| further attenuate the acceleration request. It is up to the navigation
 | ||
| module of the boid brain to collect all relevant acceleration requests
 | ||
| and then determine a single behaviorally desired acceleration. It must
 | ||
| combine, prioritize, and arbitrate between potentially conflicting
 | ||
| urges. The pilot module takes the acceleration desired by the
 | ||
| navigation module and passes it to the flight module, which attempts
 | ||
| to fly in that direction.
 | ||
| 
 | ||
| </p><p> The easiest way to combine acceleration requests is to average
 | ||
| them. Because of the included "strength" factors, this is actually a
 | ||
| weighted average. The relative strength of one behavior to another can
 | ||
| be defined this way, but it is a precarious interrelationship that is
 | ||
| difficult to adjust. An early version of the boid model showed that
 | ||
| navigation by simple weighted averaging of acceleration requests works
 | ||
| "pretty well." A boid that chooses its course this way will fly a
 | ||
| reasonable course under typical conditions. But in critical
 | ||
| situations, such as potential collision with obstacles, conflicts must
 | ||
| be resolved in a timely manner. During high-speed flight, hesitation
 | ||
| or indecision is the wrong response to a brick wall dead ahead.
 | ||
| 
 | ||
| </p><p> The main cause of indecision is that each behavior might be
 | ||
| shouting advice about which way to turn to avoid disaster, but if
 | ||
| those acceleration requests happen to lie in approximately opposite
 | ||
| directions, they will largely cancel out under a simple weighted
 | ||
| averaging scheme. The boid would make a very small turn and so
 | ||
| continue in the same direction, perhaps to crash into the
 | ||
| obstacle. Even when the urges do not cancel out, averaging leads to
 | ||
| other problems. Consider flying over a gridwork of city streets
 | ||
| between the skyscrapers; while "fly north" or "fly east" might be good
 | ||
| ideas, it would be a bad idea to combine them as "fly northeast."
 | ||
| 
 | ||
| </p><p> Techniques from artificial intelligence, such as expert systems,
 | ||
| can be used to arbitrate conflicting opinions.  However, a less
 | ||
| complex approach is taken in the current implementation. Prioritized
 | ||
| acceleration allocation is based on a strict priority ordering of all
 | ||
| component behaviors, hence of the consideration of their acceleration
 | ||
| requests.  (This ordering can change to suit dynamic conditions.) The
 | ||
| acceleration requests are considered in priority order and added into
 | ||
| an accumulator. The magnitude of each request is measured and added
 | ||
| into another accumulator. This process continues until the sum of the
 | ||
| accumulated magnitudes gets larger than the maximum acceleration
 | ||
| value, which is a parameter of each boid. The last acceleration
 | ||
| request is trimmed back to compensate for the excess of accumulated
 | ||
| magnitude. The point is that a fixed amount of acceleration is under
 | ||
| the control of the navigation module; this acceleration is parceled
 | ||
| out to satisfy the acceleration request of the various behaviors in
 | ||
| order of priority. In an emergency the acceleration would be allocated
 | ||
| to satisfy the most pressing needs first; if all available
 | ||
| acceleration is "used up," the less pressing behaviors might be
 | ||
| temporarily unsatisfied. For example. the flock centering urge could
 | ||
| be correctly ignored temporarily in favor of a maneuver to avoid a
 | ||
| static obstacle.
 | ||
| 
 | ||
| </p><h3>Simulated Perception</h3>
 | ||
| 
 | ||
| <p> The boid model does not directly simulate the senses used by real
 | ||
| animals during flocking (vision and hearing) or schooling (vision and
 | ||
| fishes' unique "lateral line" structure that provides a certain amount
 | ||
| of pressure imaging ability [<a href="#ref23">23</a>, <a href="#ref24">24</a>]). Rather the perception model tries to make
 | ||
| available to the behavior model approximately the same information
 | ||
| that is available to a real animal as the end result of its perceptual
 | ||
| and cognitive processes.
 | ||
| 
 | ||
| </p><p> This is primarily a matter of filtering out the surplus
 | ||
| information that is available to the software that implements the
 | ||
| boid's behavior. Simulated boids have direct access to the geometric
 | ||
| database that describes the exact position, orientation, and velocity
 | ||
| of all objects in the environment. The real bird's information about
 | ||
| the world is severely limited because it perceives through imperfect
 | ||
| senses and because its nearby flockmates hide those farther away. This
 | ||
| is even more pronounced in herding animals because they are all
 | ||
| constrained to be in the same plane. In fish schools. visual
 | ||
| perception of neighboring fish is further limited by the scattering
 | ||
| and absorption of light by the sometimes murky water between them
 | ||
| These factors combine to strongly localize the information available
 | ||
| to each animal.
 | ||
| 
 | ||
| </p><p> Not only is it unrealistic to give each simulated boid perfect and
 | ||
| complete information about the world, it is just plain wrong and leads
 | ||
| to obvious failures of the behavior model. Before the current
 | ||
| implementation of localized flock centering behavior was
 | ||
| implemented. the flocks used a central force model. This leads to
 | ||
| unusual effects such as causing all members of a widely scattered
 | ||
| flock to simultaneously converge toward the flock's centroid. An
 | ||
| interesting result of the experiments reported in this paper is that
 | ||
| the aggregate motion that we intuitively recognize as "flocking" (or
 | ||
| schooling or herding) depends upon a limited, localized view of the
 | ||
| world.
 | ||
| 
 | ||
| </p><p> The behaviors that make up the flocking model are stated in terms
 | ||
| of "nearby flockmates." In the current implementation, the
 | ||
| neighborhood is defined as a spherical zone of sensitivity centered at
 | ||
| the boid's local origin. The magnitude of the sensitivity is defined
 | ||
| as an inverse exponential of distance. Hence the neighborhood is
 | ||
| defined by two parameters: a radius and exponent. There is reason to
 | ||
| believe that this field of sensitivity should realistically be
 | ||
| exaggerated in the forward direction and probably by an amount
 | ||
| proportional to the boid's speed. Being in motion requires an
 | ||
| increased awareness of what lies ahead, and this requirement increases
 | ||
| with speed. A forward-weighted sensitivity zone would probably also
 | ||
| improve the behavior in the current implementation of boids at the
 | ||
| leading edge of a flock, who tend to get distracted by the flock
 | ||
| behind them. Because of the way their heads and eyes are arranged,
 | ||
| real birds have a wide field of view (about 300 degrees), but the zone
 | ||
| of overlap from both eyes is small (10 to 15 degrees). Hence the bird
 | ||
| has stereo depth perception only in a very small, forward-oriented
 | ||
| cone. Research is currently under way on models of forward-weighted
 | ||
| perception for boids.
 | ||
| 
 | ||
| </p><p> In an early version of the flock model, the metrics of attraction
 | ||
| and repulsion were weighted linearly by distance.  This spring-like
 | ||
| model produced a bouncy flock action, fine perhaps for a cartoony
 | ||
| characterization, but not very realistic. The model was changed to use
 | ||
| an inverse square of the distance. This more gravity-like model
 | ||
| produced what appeared to be a more natural, better damped flock
 | ||
| model. This correlated well with the carefully controlled quantitative
 | ||
| studies that Brian Partridge made of the spatial relationships of
 | ||
| schooling fish [<a href="#ref23">23</a>]; he found that "a fish is
 | ||
| much more strongly influenced by its near neighbors than it is by the
 | ||
| distant members of the school. The contribution of each fish to the
 | ||
| [influence] is inversely proportional to the square or the cube of the
 | ||
| distance." In previous work he and colleagues [<a href="#ref23">23</a>, <a href="#ref24">24</a>] demonstrated that
 | ||
| fishes school based on information from both their visual system and
 | ||
| from their "lateral line" organ which senses pressure waves. The area
 | ||
| of a perspective image of the silhouette of an object (its "visual
 | ||
| angle") varies inversely with the square of its distance, and that
 | ||
| pressure waves traveling through a 3D medium like water fall off
 | ||
| inversely with the cube of the distance.
 | ||
| 
 | ||
| </p><p> The boid perception model is quite ad hoc and avoids actually
 | ||
| simulating vision. Artificial vision is an extremely complex problem
 | ||
| [<a href="#ref38">38</a>] and is far beyond the scope of this
 | ||
| work. But if boids could "see" their environment, they would be better
 | ||
| at path planning than the current model. It is possible to construct
 | ||
| simple maze like shapes that would confuse the current boid model but
 | ||
| would be easily solved by a boid with vision.
 | ||
| 
 | ||
| </p><h3>Impromptu Flocking</h3>
 | ||
| 
 | ||
| <p> The flocking model described above gives boids an eagerness to
 | ||
| participate in an acceptable approximation of flock like motion. Boids
 | ||
| released near one another begin to flock together, cavorting and
 | ||
| jostling for position. The boids stay near one another (flock
 | ||
| centering) but always maintain prudent separation from their
 | ||
| neighbors' (collision avoidance), and the flock quickly becomes
 | ||
| "polarized"-its members heading in approximately the same direction at
 | ||
| approximately the same speed (velocity marching); when they change
 | ||
| direction they do it in synchronization.  Solitary boids and smaller
 | ||
| flocks join to become larger flocks, and in the presence of external
 | ||
| obstacles (discussed below), larger flocks can split into smaller
 | ||
| flocks.
 | ||
| 
 | ||
| </p><p> For each simulation run, the initial position (within a specified
 | ||
| ellipsoid), heading, velocity, and various other parameters of the
 | ||
| boid model are initialized to values randomized within specified
 | ||
| distributions. A restartable random number generator is used to allow
 | ||
| repeatability. This randomization is not required; the boids could
 | ||
| just as well start out arranged in a regular pattern, all other
 | ||
| aspects of the flock model are completely deterministic and
 | ||
| repeatable.
 | ||
| 
 | ||
| </p><p> When the simulation is run, the flock's first action is a reaction
 | ||
| to the initial conditions. If the boids started out too closely
 | ||
| crowded together, there is an initial "flash expansion" where the
 | ||
| mutual desire to avoid collision drives the boids radially away from
 | ||
| the site of the initial over-pressure. If released in a spherical
 | ||
| shell with a radius smaller than the "neighborhood" radius, the boids
 | ||
| contract toward the sphere's center; otherwise they begin to coalesce
 | ||
| into small flockettes that might themselves begin to join together. If
 | ||
| the boids are confined within a certain region, the smaller flocks
 | ||
| eventually conglomerate into a single flock if left to wander long
 | ||
| enough.
 | ||
| 
 | ||
| </p><h3>Scripted Flocking</h3>
 | ||
| 
 | ||
| <p> The behaviors discussed so far provide for the ability of
 | ||
| individual birds to fly and participate in happy aimless flocking. But
 | ||
| to combine flock simulations with other animated action, we need more
 | ||
| direct control over the flock.  We would like to direct specific
 | ||
| action at specific times (for example, "the flock enters from the left
 | ||
| at :02.3 seconds into the sequence, turns to fly directly upward at
 | ||
| :03.5, and is out of the frame at :04.0").
 | ||
| 
 | ||
| </p><p> The current implementation of the boid model has several
 | ||
| facilities to direct the motion and timing of the flock action. First,
 | ||
| the simulations are run under the control of a general-purpose
 | ||
| animation scripting system [<a href="#ref36">36</a>]. The details of
 | ||
| that scripting system are not relevant here except that, in addition
 | ||
| to the typical interactive motion control facilities, it provides the
 | ||
| ability to schedule the invocation of user-supplied software (such as
 | ||
| the flock model) on a frame-by-frame basis. This scripting facility is
 | ||
| the basic tool used to describe the timing of various flock
 | ||
| actions. It also allows flexible control over the time-varying values
 | ||
| of parameters, which can be passed down to the simulation
 | ||
| software. Finally the script is used to set up and animate all
 | ||
| nonbehavioral aspects of the scene, such as backgrounds, lighting,
 | ||
| camera motion, and other visible objects.
 | ||
| 
 | ||
| </p><p> The primary tool for scripting the flock's path is the migratory
 | ||
| urge built into the boid model. In the current model this urge is
 | ||
| specified in terms of a global target, either as a global direction
 | ||
| (as in "going Z for the winter") or as a global position-a target
 | ||
| point toward which all birds fly. The model computes a bounded
 | ||
| acceleration that incrementally turns the boid toward its migratory
 | ||
| target.
 | ||
| 
 | ||
| </p><p> With the scripting system. we can animate a dynamic parameter
 | ||
| whose value is. a global position vector or a global direction
 | ||
| vector. This parameter can be passed to the flock, which can in turn
 | ||
| pass it along to all boids, each of which sets its own "migratory goal
 | ||
| register."  Hence the global migratory behavior of all birds can be
 | ||
| directly controlled from the script. (Of course, it is not necessary
 | ||
| to alter all boids at the same time, for example, the delay could be a
 | ||
| function of their present position in space. Real flocks do not change
 | ||
| direction simultaneously [<a href="#ref25">25</a>], but rather the
 | ||
| turn starts with a single bird and spreads quickly across the flock
 | ||
| like a shock wave.)
 | ||
| 
 | ||
| </p><p> We can lead the flock around by animating the goal point along the
 | ||
| desired path, somewhat ahead of the flock.  Even if the migratory goal
 | ||
| point is changed abruptly the path of each boid still is relatively
 | ||
| smooth because of the flight model's simulated conservation of
 | ||
| momentum. This means that the boid's own flight dynamics implement a
 | ||
| form of smoothing interpolation between "control points."
 | ||
| 
 | ||
| </p><p>
 | ||
| </p><center>
 | ||
| <a href="http://www.cs.toronto.edu/~dt/siggraph97-course/cwr87/cwr87p1.gif"><img src="Craig%20Reynolds%20Flocks,%20Herds,%20and%20Schools%20A%20Distributed%20Behavioral%20Model_files/cwr87p1.gif" width="90%"></a><p>
 | ||
| </p></center>
 | ||
| 
 | ||
| <h3>Avoiding Environmental Obstacles</h3>
 | ||
| 
 | ||
| <p> The most interesting motion of a simulated flock comes from
 | ||
| interaction with other objects in the environment. The isolated
 | ||
| behavior of a flock tends to reach a steady state and becomes rather
 | ||
| sterile. The flock can be seen as a relaxation solution to the
 | ||
| constraints implied by its behaviors. For example, the conflicting
 | ||
| urges of flock centering and collision avoidance do not lead to
 | ||
| constant back and forth motion, but rather the boids eventually strike
 | ||
| a balance between the two urges (the degree of damping controls how
 | ||
| soon this balance is reached). Environmental obstacles and the boid's
 | ||
| attempts to navigate around them increase the apparent complexity of
 | ||
| the behavior of the flock. (In fact the complexity of real flocks
 | ||
| might be due largely to the complexity of the natural environment.)
 | ||
| 
 | ||
| </p><p> Environmental obstacles are also important from the standpoint of
 | ||
| modeling the scene in which we wish to place the flock. If the flock
 | ||
| is scripted to fly under a bridge and around a tree, we must be able
 | ||
| to represent the geometric shape and dimension of these obstacles. The
 | ||
| approach taken here is to independently model the "shape for
 | ||
| rendering" and the "shape for collision avoidance." The types of
 | ||
| shapes currently used for environmental obstacles are much less
 | ||
| complicated than the models used for rendering of computer graphic
 | ||
| models. The current work implements two types of shapes of
 | ||
| environmental collision avoidance. One is based on the force field
 | ||
| concept, which works in undemanding situations but has some
 | ||
| shortcomings. The other model called steer-to-avoid is more robust and
 | ||
| seems closer in spirit to the natural mechanism.
 | ||
| 
 | ||
| </p><p> The force field model postulates a field of repulsion force
 | ||
| emanating from the obstacle out into space; the boids are increasingly
 | ||
| repulsed as they get closer to the obstacle. This scheme is easy to
 | ||
| model; the geometry of the field is usually fairly simple and so an
 | ||
| avoidance acceleration can be directly calculated from the field
 | ||
| equation. These models can produce good results, such as in "Eurythmy"
 | ||
| [<a href="#ref4">4</a>], but they also have drawbacks that are
 | ||
| apparent on close examination. If a boid approaches an obstacle
 | ||
| surrounded by a force field at an angle such that it is exactly
 | ||
| opposite to the direction of the force field, the boid will not turn
 | ||
| away. In this case the force field serves only to slow the boid by
 | ||
| accelerating it backwards and provides no side thrust at all. The
 | ||
| worst reaction to an impending collision is to fail to turn. Force
 | ||
| fields also cause problems with "peripheral vision." The boid should
 | ||
| notice and turn away from a wall as it flies toward it, but the wall
 | ||
| should be ignored if the boid is flying alongside it. Finally, force
 | ||
| fields tend to be too strong close up and too weak far away; avoiding
 | ||
| an obstacle should involve long-range planning rather than panicky
 | ||
| corrections at the last minute.
 | ||
| 
 | ||
| </p><p> Steer-to-avoid is a better simulation of a natural bird guided by
 | ||
| vision. The boid considers only obstacles directly in front of it. (It
 | ||
| finds the intersection, if any, of its local Z axis with the
 | ||
| obstacle.) Working in local perspective space, it finds the silhouette
 | ||
| edge of the obstacle closest to the point of eventual impact. A radial
 | ||
| vector is computed which will aim the boid at a point one body length
 | ||
| beyond that silhouette edge (see figure 2). Currently steer-to avoid
 | ||
| has been implemented for several obstacle shapes: spheres, cylinders,
 | ||
| planes, and boxes. Collision avoidance for arbitrary convex polyhedral
 | ||
| obstacles is being developed.
 | ||
| 
 | ||
| </p><p>
 | ||
| </p><center>
 | ||
| <a href="http://www.cs.toronto.edu/~dt/siggraph97-course/cwr87/cwr87f2.gif"><img src="Craig%20Reynolds%20Flocks,%20Herds,%20and%20Schools%20A%20Distributed%20Behavioral%20Model_files/cwr87f2.gif" width="60%"></a><p>
 | ||
| Figure 2.
 | ||
| </p></center>
 | ||
| 
 | ||
| <p> Obstacles are not necessarily fixed in space; they can be animated
 | ||
| around by the script during the animation. Or more interestingly, the
 | ||
| obstacles can be behavioral characters. Sparrows might flock around a
 | ||
| group of obstacles that is in fact a herd of elephants. Similarly,
 | ||
| behavioral obstacles might not merely be in the way; they might be
 | ||
| objects of fear such as predators. It has been noted [<a href="#ref25">25</a>] that natural flocking instincts seem to be
 | ||
| sharpened by predators.
 | ||
| 
 | ||
| </p><h3>Other Applications of the Flock Model</h3>
 | ||
| 
 | ||
| <p> The model of polarized noncolliding aggregate motion has many
 | ||
| applications, visual simulation of bird flocks in computer animation
 | ||
| being one. Certain modifications yield a fish school model. Further
 | ||
| modifications, such as [imitation to a 2D surface and the ability to
 | ||
| follow the terrain, lead to a herd model. Imagine a herd of PODA-style
 | ||
| legged creatures [<a href="#ref9">9</a>], using Karl Sims' techniques
 | ||
| for locomotion over uneven, complex terrain [<a href="#ref35">35</a>]. Other applications are less obvious. Traffic
 | ||
| patterns, such as the flow of cars on a freeway, is a flock-like
 | ||
| motion. There are specialized behaviors, such as being constrained to
 | ||
| drive within the lanes, but the basic principles that keep boids from
 | ||
| colliding are just as applicable on the freeway. We could imagine
 | ||
| creating crowds of "extras" (human or otherwise) for feature
 | ||
| films. However the most fun are the offbeat combinations possible in
 | ||
| computer graphics by mixing and matching: a herd of pogo sticks, a
 | ||
| flock of Pegasus-like winged horses, or a traffic jam of spaceships on
 | ||
| a 3D interplanetary highway.
 | ||
| 
 | ||
| </p><p> One serious application would be to aid in the scientific
 | ||
| investigation of flocks, herds, and schools. These scientists must
 | ||
| work almost exclusively in the observational mode; experiments with
 | ||
| natural flocks and schools are difficult to perform and are likely to
 | ||
| disturb the behaviors under study. It might be possible, using a more
 | ||
| carefully crafted model of the realistic behavior of a certain species
 | ||
| of bird, to perform controlled and repeatable experiments with
 | ||
| "simulated natural flocks."  A theory of flock organization can be
 | ||
| unambiguously tested by implementing a distributed behavioral model
 | ||
| and simply comparing the aggregate motion of the simulated flock with
 | ||
| the natural one.
 | ||
| 
 | ||
| </p><h3>Algorithmic Considerations</h3>
 | ||
| 
 | ||
| <p> A naive implementation of the basic flocking algorithm would grow
 | ||
| in complexity as the order of the square of the flock's population
 | ||
| ("O(N<sup>2</sup>)"). Basically this is because each boid must reason about
 | ||
| each of the other boids, even if only to decide to ignore it. This
 | ||
| does not say the algorithm is slow or fast, merely that as the size of
 | ||
| the problem (total population of the flock) increases, the complexity
 | ||
| increases even faster. Doubling the number of boids quadruples the
 | ||
| amount of time taken.
 | ||
| 
 | ||
| </p><p> However, as stated before, real birds are probably not as
 | ||
| sensitive to the total flock population. This gives hope that the
 | ||
| simulated boid could be taught to navigate independently of the total
 | ||
| population. Certainly part of the problem is that we are trying to run
 | ||
| the simulation of the whole flock on a single computer. The natural
 | ||
| solution is to use distributed processing, as the real flock does. If
 | ||
| we used a separate processor for each boid, then even the naive
 | ||
| implementation of the flocking algorithm would be O(N), or linear with
 | ||
| respect to the population. But even that is not good enough. It still
 | ||
| means that as more boids are added to the flock, the complexity of the
 | ||
| problem increases.
 | ||
| 
 | ||
| </p><p> What we desire is a constant time algorithm, one that is
 | ||
| insensitive to the total population. Another way to say this is that
 | ||
| an N<sup>2</sup> algorithm would be OK if there was an efficient way
 | ||
| to keep N very small. Two approaches to this goal are currently under
 | ||
| investigation. One is dynamic spatial partitioning of the flock; the
 | ||
| boids are sorted into a lattice of "bins" based on their position in
 | ||
| space. A boid trying to navigate inside the flock could get quick
 | ||
| access to the flockmates that are physically nearby by examining the
 | ||
| "bins" near its current position. Another approach is to do
 | ||
| incremental collision detection (x`nearness testing"). General
 | ||
| collision detection is another N<sup>2</sup> algorithm, but if one
 | ||
| does collision detection incrementally, based on a partial solution
 | ||
| that described the situation just a moment before, then the algorithm
 | ||
| need worry only about the changes and so can run much faster, assuming
 | ||
| that the incremental changes are small. The incremental collision
 | ||
| detection algorithm used in Girard's PODA system [<a href="#ref9">9</a>] apparently achieves constant time performance in
 | ||
| the typical case.
 | ||
| 
 | ||
| </p><h3>Computing Environment</h3>
 | ||
| 
 | ||
| <p> The boids software was written in Symbolics Common Lisp. The code
 | ||
| and animation were produced on a Symbolics 3600 Lisp Machine, a
 | ||
| high-performance personal computer. The flock software is implemented
 | ||
| in Flavors, the object-oriented programming extensions to Symbolics
 | ||
| Common Lisp. The geometric aspects of the system are layered upon
 | ||
| S-Geometry, an interactive geometric modeler [<a href="#ref37">37</a>]. Boids are based on the flavor 3D:OBJECT, which
 | ||
| provides their geometric abilities. The flock simulations are invoked
 | ||
| from scripts created and animated with the S Dynamics [<a href="#ref36">36</a>] animation system, which also provided the
 | ||
| real-time playback facility used to view the motion tests.  The
 | ||
| availability of this graphical toolkit allowed the author to focus
 | ||
| immediately on the issues unique to this project. One example of the
 | ||
| value of this substrate is that the initial version of the flock
 | ||
| model, including implementation, testing, debugging, and the
 | ||
| production of seven short motion tests was accomplished in the ten
 | ||
| days before the SIGGRAPH `86 conference.
 | ||
| 
 | ||
| </p><p> The boid software has not been optimized for speed. But this
 | ||
| report would be incomplete without a rough estimate of the actual
 | ||
| performance of the system. With a flock of 80 boids, using the naive
 | ||
| O(N<sup>2</sup>) algorithm (and so 6400 individual boid-to-boid
 | ||
| comparisons), on a single Lisp Machine without any special hardware
 | ||
| accelerators, the simulation ran for about 95 seconds per frame. A
 | ||
| ten-second (300 frame) motion test took about eight hours of real time
 | ||
| to produce.
 | ||
| 
 | ||
| </p><h3>Future Work</h3>
 | ||
| 
 | ||
| <p> This paper has largely ignored the internal animation of the
 | ||
| geometrical model that provides the visual representation of the
 | ||
| boid. The original motion tests produced with these models all show
 | ||
| flocks of little abstract rigid shapes that might be paper
 | ||
| airplanes. There was no flapping of wings nor turning of heads. and
 | ||
| there was certainly no character animation. These topics are all
 | ||
| important and pertinent to believable animation of simulated
 | ||
| flocks. But the underlying abstract nature of flocking as
 | ||
| polarized. noncolliding aggregate motion is largely independent of
 | ||
| these issues of internal shape change and articulation. This notion is
 | ||
| supported by the fact that most viewers of these simulations identify
 | ||
| the motion of these abstract objects as "flocking" even in the absence
 | ||
| of any internal animation.
 | ||
| 
 | ||
| </p><p> But doing a believable job of melding these two aspects of the
 | ||
| motion is more than a matter of concatenating the action of an
 | ||
| internal animation cycle for the character with the motion defined by
 | ||
| geometrical flight. There are important issues of synchronization
 | ||
| between the current state of the flight dynamics model, and the
 | ||
| amplitude and frequency of the wing motion cycle. Topics of current
 | ||
| development include internal animation. synchronization, and
 | ||
| interfaces between the simulation-based flock model and other more
 | ||
| traditional. interactive animation scripting systems. We would like to
 | ||
| allow a skilled computer animator to design a bird character and
 | ||
| define its "wing flap cycle" using standard interactive modeling and
 | ||
| scripting techniques. and then be able to take this cyclic motion and
 | ||
| "plug it in" to the flock simulation model causing the boids in the
 | ||
| flock to fly according to the scripted cycle.
 | ||
| 
 | ||
| </p><p> The behaviors that have been discussed in this paper are all
 | ||
| simplistic, isolated behaviors of low complexity.  The boids have a
 | ||
| geometric and kinematic state. but they have no significant mental
 | ||
| state. Real animals have more elaborate, abstract behaviors than a
 | ||
| simple desire to avoid a painful collision: they have more complex
 | ||
| motivations than a simple desire to fly to a certain point in
 | ||
| space. More interesting behavior models would take into account
 | ||
| hunger, finding food, fear of predators, a periodic need to sleep, and
 | ||
| so on. Behavior models of this type have been created by other
 | ||
| investigators [<a href="#ref6">6</a>, <a href="#ref19">19</a>, <a href="#ref21">21</a>], but they have not yet been implemented for the
 | ||
| boid model described here.
 | ||
| 
 | ||
| </p><h3>Conclusion</h3>
 | ||
| 
 | ||
| <p> This paper has presented a model of polarized. noncolliding
 | ||
| aggregate motion. such as that of flocks. herds. and schools. The
 | ||
| model is based on simulating the behavior of each bird
 | ||
| independently. Working independently. the birds try both to stick
 | ||
| together and avoid collisions with one another and with other objects
 | ||
| in their environment. The animations showing simulated flocks built
 | ||
| from this model seem to correspond to the observer's intuitive notion
 | ||
| of what constitutes "flock-like motion." However it is difficult to
 | ||
| objectively measure how valid these simulations are.  By comparing
 | ||
| behavioral aspects of the simulated flock with those of natural
 | ||
| flocks. we are able improve and refine the model. But having
 | ||
| approached a certain level of realism in the model. the parameters of
 | ||
| the simulated flock can be altered at will by the animator to achieve
 | ||
| many variations on flock-like behavior.
 | ||
| 
 | ||
| </p><h3>Acknowledgements</h3>
 | ||
| 
 | ||
| <p> I would like to thank flocks. herds. and schools for existing;
 | ||
| nature is the ultimate source of inspiration for computer graphics and
 | ||
| animation. I would also like to acknowledge the contributions to this
 | ||
| research provided by workers in a wonderfully diverse collection of
 | ||
| pursuits:
 | ||
| 
 | ||
| </p><p> To the natural sciences of behavior, evolution, and zoology: for
 | ||
| doing the hard work, the Real Science, on which this computer graphics
 | ||
| approximation is based. To the Logo group who invented the appropriate
 | ||
| geometry, and so put us in the driver's seat. To the Actor semantics
 | ||
| people who invented the appropriate control structure, and so gave the
 | ||
| boid a brain. To the many developers of modern Lisp who invented the
 | ||
| appropriate programming language. To my past and present colleagues at
 | ||
| MIT, III, and Symbolics who have patiently listened to my speculations
 | ||
| about flocks for years and years before I made my first boid fly. To
 | ||
| the Graphics Division of Symbolics, Inc., who employ me, put up with
 | ||
| my nasty disposition, provide me with fantastic computing and graphics
 | ||
| facilities, and have generously supported the development of the work
 | ||
| described here. And to the field of computer graphics, for giving
 | ||
| professional respectability to advanced forms of play such as reported
 | ||
| in this paper.
 | ||
| 
 | ||
| </p><p>
 | ||
| </p><center>
 | ||
| <a href="http://www.cs.toronto.edu/~dt/siggraph97-course/cwr87/cwr87p2.gif"><img src="Craig%20Reynolds%20Flocks,%20Herds,%20and%20Schools%20A%20Distributed%20Behavioral%20Model_files/cwr87p2.gif" width="60%"></a><p>
 | ||
| </p></center>
 | ||
| 
 | ||
| <h3>References</h3>
 | ||
| 
 | ||
| <dl compact="compact">
 | ||
| 
 | ||
| <dt><a name="ref1">1.</a></dt><dd> Abelson, H., and diSessa, A.,
 | ||
| "Maneuvering a Three Dimensional Turtle" in Turtle Geometry: The
 | ||
| Computer as a Medium for Exploring Mathematics, The MIT Press,
 | ||
| Cambridge, Massachusetts, 1981, pp. 140-159.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref2">2.</a></dt><dd> Agha, G., Actors: A Model of Concurrent
 | ||
| Computation in Distributed Systems, The MIT Press, Cambridge,
 | ||
| Massachusetts. 1986.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref3">3.</a></dt><dd> Amkraut, S., personal communication,
 | ||
| January 8, 1987.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref4">4.</a></dt><dd> Amkraut. S. Girard. M., Karl. G. "motion
 | ||
| studies for a work in progress entitled `Eurythmy'" in SIGGRAPH Video
 | ||
| Review. Issue 21 (second item, time code 3:58 to 7:35). 1985. produced
 | ||
| at the Computer Graphics Research Group. Ohio State
 | ||
| University. Columbus, Ohio.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref5">5.</a></dt><dd> Austin, H., "The Logo Primer," MIT AI
 | ||
| Lab, Logo Working Paper 19, 1974.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref6">6.</a></dt><dd> Braitenberg. V. Vehicles: Experiments in
 | ||
| Synthetic Psychology. The MIT
 | ||
| Press. Cambridge. Massachusetts. 1984.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref7">7.</a></dt><dd> Burton, R., Bird Behavior, Alfred
 | ||
| A. Knopf, Inc., 1985.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref8">8.</a></dt><dd> Davis. J. R. Kay. A. Marion, A.,
 | ||
| unpublished research on behavioral simulation and animation. Atari
 | ||
| Research. 1983.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref9">9.</a></dt><dd> Girard, M., Maciejewski, A. A.,
 | ||
| "Computational Modeling for the Computer Animation of Legged Figures"
 | ||
| in Computer Graphics V19 43. 1985. (proceedings of acm SIGGRAPH `85),
 | ||
| pp. 263-270.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref10">10.</a></dt><dd> Goldberg. A. Robson. D. SMALLTALK-8O,
 | ||
| The Language and the Implementation, Addison-Wesley Publishing
 | ||
| Company, Reading, Massachusetts, 1983.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref11">11.</a></dt><dd> Goldberg, A., Kay, A., SMALLTALK-72
 | ||
| Instruction Manual, Learning Research Group, Xerox Palo Alto Research
 | ||
| Center, 1976.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref12">12.</a></dt><dd> Hewitt, C. Atkinson. R. "Parallelism
 | ||
| and Synchronization in Actor Systems," acm Symposium on Principles of
 | ||
| Programming Languages 4. January 1977, Los Angeles, California.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref13">13.</a></dt><dd> Kahn, K. M., Creation of Animation
 | ||
| from Story Descriptions. MIT Artificial Intelligence Laboratory,
 | ||
| Technical Report 540 (doctoral dissertation), August 1979.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref14">14.</a></dt><dd> Kahn, K. M., Hewitt, C., Dynamic
 | ||
| Graphics using Quasi Parallelism, May 1978, proceedings of ACM
 | ||
| SIGGRAPH, 1978.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref15">15.</a></dt><dd> Kleinrock, L., "Distributed Systems,"
 | ||
| in Communications of the AC,4t, V28#11, November 1985, pp.1200-
 | ||
| 1213.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref16">16.</a></dt><dd> Lipton, J., An Exaltation of Larks
 | ||
| (or, The Venereal Game), Grossman Publishers, 1977. Reprinted by
 | ||
| Penguin Books 1977.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref17">17.</a></dt><dd> Maciejewski, A. A., Klein, C. A.,
 | ||
| "Obstacle Avoidance for Kinematically Redundant Manipulators in
 | ||
| Dynamically Varying Environments," to appear in International Journal
 | ||
| of Robotic Research.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref18">18.</a></dt><dd> Magnenat-Thalmann. N., Thalmann, D.,
 | ||
| Computer Animation: Theory and Practice, Springer-Verlag, Tokyo,
 | ||
| 1985.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref19">19.</a></dt><dd> Marion, A., "Artificially Motivated
 | ||
| Objects," [installation piece], ACM SIGGRAPH art show, 1985.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref20">20.</a></dt><dd> Moon, D. A., "Object-oriented
 | ||
| Programming with Flavors," in Proceedings of the First Annual
 | ||
| Conference on Object-Oriented Programming Systems, Languages, and
 | ||
| Applications, ACM, 1986.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref21">21.</a></dt><dd> Myers, R., Broadwell, P., Schaufler,
 | ||
| R., "Plasm: Fish Sample," [installation piece], ACM SIGGRAPH art show,
 | ||
| 1985.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref22">22.</a></dt><dd> Papert, S., "Teaching Children to be
 | ||
| Mathematicians vs. Teaching Them About Mathematics," International
 | ||
| Journal of Mathematical Education and Sciences, V3, pp. 249-262,
 | ||
| 1972.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref23">23.</a></dt><dd> Partridge, B. L., "The Structure and
 | ||
| Function of Fish Schools," Scientific American, June 1982,
 | ||
| pp. 114-123.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref24">24.</a></dt><dd> Pitcher, T. J., Partridge, B. L.,
 | ||
| Wardle, C. S., "Blind Fish Can School," Science 194, #4268 (1976),
 | ||
| p. 964.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref25">25.</a></dt><dd> Potts, W. K., "The Chorus-Line
 | ||
| Hypothesis of Manoeuvre Coordination in Avian Flocks," letter in
 | ||
| Nature, Vol. 309, May 24, 1984, pp. 344-345.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref26">26.</a></dt><dd> Pugh, J., "Actors--The Stage is Set,"
 | ||
| acm SIGPLAN Notices, V19 #3, March 1984, pp. 61-65.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref27">27.</a></dt><dd> Reeves, W., T., "Particle Systems-A
 | ||
| Technique for Modeling a Class of Fuzzy Objects," acm Transactions on
 | ||
| Graphics, V2 #2, April 1983. and reprinted in Computer Graphics. V17
 | ||
| #3, July 1983, (acm SIGGRAPH `83 Proceedings), pp. 359-376.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref28">28.</a></dt><dd> Reynolds, C. W., Computer Animation in
 | ||
| the World of Actors and Scripts, SM thesis, MIT (the Architecture
 | ||
| Machine Group), May 1978.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref29">29.</a></dt><dd> Reynolds. C. W., "Computer Animation
 | ||
| with Scripts and Actors," Computer Graphics, V16 #3, July 1982, (acm
 | ||
| SIGGRAPH `82 Proceedings), pp. 289-296.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref30">30.</a></dt><dd> Reynolds, C. W. "Description and
 | ||
| Control of Time and Dynamics in Computer Animation" in the notes for
 | ||
| the course on Advanced Computer Animation at acm SIGGRAPH `85, and
 | ||
| reprinted, and reprinted for the notes of the same course in 1986.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref31">31.</a></dt><dd> Selous, E. Thought-transference (or
 | ||
| what?) in Birds, Constable, London, 1931.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref32">32.</a></dt><dd> Scheffer, V. B., Spires of Form.'
 | ||
| Glimpses of Evolution, Harcourt Brace Jovanovich, San Diego, 1983
 | ||
| (reprinted 1985 by Harvest/HBJ), p. 64.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref33">33.</a></dt><dd> Shaw, E., "Schooling in Fishes:
 | ||
| Critique and Review" in Development and Evolution of
 | ||
| Behavior. W. H.<p> Freeman and Company. San Francisco, 1970,
 | ||
| pp. 452480.</p><p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref34">34.</a></dt><dd> Shaw, E., "Fish in Schools," Natural
 | ||
| History 84, no. 8 (1975), pp. 4046.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref35">35.</a></dt><dd> Sims, K., Locomotion of Jointed
 | ||
| Figures Over Complex Terrain, SM thesis, MIT Media Lab, currently in
 | ||
| preparation, April 1987.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref36">36.</a></dt><dd> Symbolics Graphics Division,
 | ||
| S-Dynamics (user's manual). Symbolics Inc., November 1986.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref37">37.</a></dt><dd> Symbolics Graphics Division,
 | ||
| S-Geometry (user's manual), Symbolics Inc., October 1986.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref38">38.</a></dt><dd> Pinker, S. (editor), Visual Cognition,
 | ||
| The MIT Press, Cambridge, Massachusetts, 1985.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref39">39.</a></dt><dd> Thomas, K, Johnson, Ox, Disney
 | ||
| Animation.' The Illusion of Life, Abbeville Press, New York, 1981,
 | ||
| pp. 47- 69.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref40">40.</a></dt><dd> Wilhelms, J., "Toward Automatic Motion
 | ||
| Control," IEEE Computer Graphics and Applications. V7 #4, April 1987,
 | ||
| pp. 11-22.<p>
 | ||
| 
 | ||
| </p></dd><dt><a name="ref41">41.</a></dt><dd> Zeltser, D., "Toward an Integrated
 | ||
| View of 3-D Computer Animation," The Visual Computer, VI #4, 1985. pp.
 | ||
| 249-259.<p>
 | ||
| 
 | ||
| </p></dd></dl>
 | ||
| 
 | ||
| <p><br></p><p>
 | ||
| </p><center>
 | ||
| <a href="http://www.cs.toronto.edu/~dt/siggraph97-course/cwr87/cwr87p3.gif"><img src="Craig%20Reynolds%20Flocks,%20Herds,%20and%20Schools%20A%20Distributed%20Behavioral%20Model_files/cwr87p3.gif" width="90%"></a><p>
 | ||
| </p></center>
 | ||
| <p><br></p><p>
 | ||
| 
 | ||
| </p><h3>Footnotes</h3>
 | ||
| 
 | ||
| <dl compact="compact">
 | ||
| 
 | ||
| <dt><a name="foot1"><sup>1</sup></a></dt><dd> Note: this is a reprint of
 | ||
| the original publication in the proceeding of SIGGRAPH `87 (Computer
 | ||
| Graphics 21(4), July 1987, edited by Maureen C. Stone, pages
 | ||
| 25-34). It was produced by applying optical character recognition
 | ||
| software to scanned images of the original hardcopy pages.  The author
 | ||
| wishes to thank Ken Cushman of SGI who generously donated his time and
 | ||
| facilities to perform the OCR work, which allowed this old paper to
 | ||
| get back online.  Be forewarned: the OCR process introduces errors
 | ||
| into the text.  Most of these have been corrected through
 | ||
| spell-checking and spotty proof-reading.  Some errors may persist.
 | ||
| 
 | ||
| <p>
 | ||
| </p></dd><dt><a name="foot2"><sup>2</sup></a></dt><dd> Author's current address:
 | ||
| Silicon Studio, 2011 North Shoreline Boulevard, MS 980, Mountain View,
 | ||
| CA 94043, USA -- craig@studio.sgi.com --
 | ||
| http://reality.sgi.com/employees/craig/
 | ||
| 
 | ||
| <p> Permission to copy without fee all or part of this material is
 | ||
| granted provided that the copies are not made or distributed for
 | ||
| direct commercial advantage, the ACM copyright notice and the title of
 | ||
| the publication and its date appear, and notice is given that copying
 | ||
| is by permission of the Association for Computing Machinery. To copy
 | ||
| otherwise, or to republish requires a fee and/or specific permission.
 | ||
| 
 | ||
| </p><p> (C)1987 ACM-0-89791-227-6/87/007/0025 $00.75
 | ||
| 
 | ||
| </p><p> 
 | ||
| </p></dd><dt><a name="foot*"><sup>*</sup></a></dt><dd> In this paper flock refers
 | ||
| generically to a group of objects that exhibit this general class of
 | ||
| polarized, non colliding.  aggregate motion. The term polarization is
 | ||
| from zoology. meaning alignment of animal groups. English is rich with
 | ||
| terms for groups of animals; for a charming and literate discussion of
 | ||
| such words see An Exultation of Larks. [<a href="#ref16">16</a>]
 | ||
| 
 | ||
| <p>
 | ||
| </p></dd><dt><a name="foot**"><sup>**</sup></a></dt><dd> This paper refers to these
 | ||
| simulated bird-like. "bird-oid" objects generically as "boids" even
 | ||
| when they represent other sorts of creatures such as schooling fish.
 | ||
| 
 | ||
| </dd></dl>
 | ||
| 
 | ||
| </body></html> |