Amal – Assignment 9

Concept

This project explores a flocking system that evolves over time, not just in movement but in behavior and structure. Instead of keeping the system stable, I wanted to push it toward moments of tension, where the agents begin to compress, lose balance, and then break apart before reorganizing again.

The core idea is to treat flocking not as a natural simulation, but as a system under pressure. At certain moments, the swarm pulls inward and becomes dense, almost like it is being compressed into a single point. At other moments, that pressure releases and the system fractures outward.

In the prototype, I approached flocking as a kind of signal network, where agents connect through proximity and form temporary constellations. In the final version, I pushed this further into a more aggressive visual language, where the agents behave like fragments moving through cycles of compression and release.

Inspiration

In unfold by Ryoichi Kurokawa, visual structures emerge from data and gradually distort, fragment, and reorganize. This sense of systems building toward instability and then collapsing influenced how I approached the tension and release within my flocking system.

https://www.ryoichikurokawa.com/project/unfold.html

Prototype 1


In the first prototype, I focused on building a flocking system that reads as a network rather than a group of individual agents.

Each agent connects to nearby agents, creating temporary lines that appear and disappear as the system moves. This produces a constantly shifting constellation-like structure. The motion is relatively stable, but the visual output is already starting to move away from traditional flocking representations. However, there is no strong sense of progression yet. The system exists in a continuous state without clear tension or release.

Final Sketch

In the final version, I introduced a time-based system that pushes the flock through cycles of compression and release.

The agents are no longer rendered as points, but as elongated shards, which changes how motion is perceived. Instead of reading as individuals, they begin to feel like fragments of a larger structure.

The system moves through phases:

  • Compression: agents are pulled toward the center, increasing density and tension
  • Instability: movement becomes more chaotic and tightly packed
  • Fracture: agents are pushed outward, breaking the structure apart
  • Reformation: the system reorganizes and the cycle repeats

These transitions are continuous rather than abrupt, allowing the system to feel more natural and performative over time.

Code Highlight

One part of the system I focused on was controlling the transition between compression and explosion:

let cycle = (sin(t * 0.6) + 1) * 0.5;

let compress = pow(sin(cycle * PI), 2.2);
let explode = pow(sin((cycle + 0.5) % 1.0 * PI), 2.2);

This allows the system to move through phases smoothly instead of switching behaviors on and off. The forces applied to each agent are then adjusted based on these values:

let alignW = lerp(1.2, 0.35, compress);
let cohesionW = lerp(0.7, 1.6, compress);
let separationW = lerp(0.9, 2.5, explode);

By shifting these weights over time, the same flocking rules produce very different behaviors, which creates the sense of development.

Milestones and Challenges

1. Breaking away from the “boids look”
At first, everything still looked like a standard flocking simulation. Changing the rendering from points or triangles into lines and shards made a big difference in how the system is perceived.

2. Creating actual tension
Early versions just moved smoothly without any variation. Introducing compression toward a central point made the system feel more unstable and intentional.

3. Balancing forces
When separation was too strong, everything scattered too quickly. When cohesion was too strong, the system became static. The challenge was finding a balance that allowed both buildup and release.

4. Making transitions feel continuous
Abrupt changes felt artificial. Using sine-based modulation allowed the system to evolve gradually, which made the motion feel more cohesive.

Reflection + Future Improvements

This project shifted how I think about generative systems. Instead of focusing only on movement, I started thinking about how a system can develop over time and create a sense of rhythm.

The most important change was moving from a stable simulation to a system that goes through cycles of tension and release.

If I were to continue developing this, I would:

  • Introduce sound so the system reacts to audio input
  • Explore depth by moving into a 3D space
  • Add trails to visualize past movement and build memory into the system
  • Refine the pacing so that each phase feels more intentional

Right now, the system loops continuously, but it could be pushed further into a more defined narrative structure.

Leave a Reply

Your email address will not be published. Required fields are marked *