Amal – Assignment 7

Inspiration

I tried to attach the video I recorded but it takes so long to download. but here is a picture instead 🙂

Reason for Choosing This Visual

I chose Massless Suns and Dark Suns because it looks simple at first, but the more you observe it, the more complex it becomes. The installation is built from glowing spheres of light, yet it feels immersive and almost physical. What interested me most was how interaction affects the space. When someone approaches a sphere, it responds, and that response spreads to nearby spheres.

I was drawn to how minimal the elements are, but how much atmosphere they create. There is no complex geometry or detailed objects, just light, spacing, and behavior. That made it a strong candidate to recreate in code because the challenge is not modeling objects, but recreating a feeling.

Highlight of Code

The part of the code I am most proud of is the “energy propagation system.”

if (a.energy > 0.55 && b.cooldown <= 0) {
  if (a.absorbing) {
    b.energy -= a.darkness * influence * 0.7;
  } else {
    b.energy += a.energy * influence;
  }
  b.cooldown = 7;
}

Instead of triggering all spheres at once, each sphere influences nearby ones based on distance. This creates a ripple effect that moves through the system rather than a flat reaction. I also modified this logic so that once a sphere becomes a dark sun, it reverses the behavior and starts removing energy instead of spreading it.

This small change made the interaction feel more dynamic and gave the system two different modes of behavior.

Embedded Sketch

First Prototype

The first prototype focused only on basic glowing circles and mouse interaction. At that stage, the spheres would brighten when the mouse was nearby, but there was no propagation or system behavior. Everything reacted individually.

This version helped me understand how to create the glow effect using layered transparency, but it felt flat and disconnected. That is what led me to introduce interaction between the spheres.

Milestones and Challenges
Milestones

1. Visual Breakdown
I started by analyzing the installation and identifying the key elements I wanted to recreate: glowing spheres, soft pulsing, and spatial interaction.

2. Orb System
I created a class for the spheres so each one could store its own position, size, and energy. This made it easier to control them individually.

3. Glow Effect
I experimented with multiple layered circles to simulate light. This was important because a single circle did not create the same visual depth.

4. Interaction
I added mouse proximity detection so the spheres respond when the viewer moves near them.

5. Ripple Behavior
I introduced energy propagation between nearby spheres, which created the chain reaction effect.

6. Creative Twist
Finally, I added the dark sun transformation, where some spheres change behavior after repeated activation.

Challenges

One of the main challenges was making the spheres feel like they emit light rather than just being colored shapes. This required layering multiple transparent shapes and adjusting opacity carefully.

Another challenge was controlling the ripple effect. If the energy spread too quickly, everything would activate at once and lose the sense of flow. If it was too slow, the interaction felt unresponsive. Finding the right balance took multiple iterations.

The biggest conceptual challenge was adding a twist without losing the original inspiration. I wanted the system to evolve, but still clearly relate to the original installation.

Reflection and Future Improvements

This project helped me understand how much of an artwork can be recreated through behavior rather than exact visuals. The installation is not defined by specific shapes, but by how those shapes respond and interact. Translating that into code required focusing on motion, timing, and relationships between elements.

The addition of dark suns made the system feel less predictable and more alive. Instead of always returning to a stable glowing state, the system changes over time based on interaction. This made the piece feel more dynamic and slightly unstable.

For future improvements, I would like to explore adding depth, possibly by introducing a 3D space or parallax movement. I would also experiment with more complex interaction, such as tracking multiple users or using sound input to influence the system.

Amal – Midterm: Proliferate

Project Overview

Phases of the Bacterial Growth Curve

Proliferate is a generative visual system inspired by the behavior of bacteria growing inside a petri dish. The project explores how simple rules of division, movement, and environmental influence can produce complex and aesthetically varied visual outcomes. The system simulates colonies that expand outward in generations, referencing the biological process of binary fission, where organisms divide and multiply over time.

The composition is centered around a circular dish that frames the interaction space. Within this space, colonies emerge, expand, and drift, creating layered visual trails. While the initial intention was to simulate a blooming effect similar to organic growth patterns, this proved difficult to achieve. I attempted to incorporate molding behavior based on feedback from a project check-in, but this was only partially successful. Instead, the system evolved toward a balance between structured growth and organic motion.

The project is designed to feel slightly gamified. Users can interact with the system by introducing new colonies and adjusting environmental conditions in real time, which directly influence how the system evolves visually. The name Proliferate comes from the rapid division of bacteria and reflects the way visual elements multiply across the canvas.

Generative System Design

The system operates through interactive and evolving states rather than fixed outputs. Each interaction produces a different visual result, ensuring variation across compositions.

These variations are driven by:

  • User interaction through mouse input
  • Adjustable environmental parameters
  • Generational growth of colonies over time

Each colony grows in stages, where the number of cells doubles with each generation. This creates radial formations that feel structured, while the movement of individual cells remains fluid and unpredictable.

The system combines multiple techniques:

  • Noise-driven motion to create organic wandering behavior
  • Force-based movement, including attraction and damping
  • Generational expansion using exponential growth patterns
  • Real-time parameter mapping through interactive controls

Together, these elements create a system that balances control and unpredictability.

Interaction and Environmental Controls

The system includes four sliders that act as environmental conditions influencing the behavior of the colonies. These are designed to feel like variables within a biological system.

Energy increases the movement of the cells. It can be understood as adding nutrients to the environment, causing the bacteria to become more active and spread further.

Growth controls how many times a colony divides. Higher values create dense and complex formations, while lower values result in minimal structures.

Air affects the speed of movement by influencing how quickly the noise changes. Higher values create more chaotic and dynamic motion.

Pull controls how strongly cells are drawn toward the center of the dish. Increasing this value creates tighter clustering, while lower values allow the system to expand outward.

These controls allow the user to experiment with different “conditions,” producing a wide range of visual outcomes from calm and contained to chaotic and dispersed.

Implementation and Process

This project builds on an earlier midterm progress version, which initially explored generative motion without a strong structural system. In that version, the movement had a more fluid and wiggly quality, creating trailing, tail-like forms that I found visually interesting. However, this behavior relied on continuous accumulation and became a major performance issue, causing the system to lag significantly over time.

Additionally, the particles were not constrained within a defined boundary, so they would drift across the entire canvas rather than staying within the petri dish. While this created more chaotic and expressive visuals, it further contributed to performance issues and reduced control over the composition.

Because of these limitations, I shifted toward a more structured approach. The updated system constrains all movement within the dish and introduces a generational growth model, which significantly improves performance and stability. As a result, the system feels less laggy and more controlled.

Through iteration, the work developed into a more defined system centered around colonies and generational growth. Instead of relying purely on continuous motion, I introduced a structured expansion model where colonies grow outward in rings, allowing the system to remain stable while still feeling dynamic.

Each colony consists of cells arranged in expanding rings. These cells maintain a base position but are continuously influenced by motion and forces, allowing them to shift, drift, and create layered visual traces over time without overwhelming the system.

A key challenge was attempting to replicate organic blooming or molding behavior. While I explored this direction and attempted to implement it based on feedback from a project check-in, the result was not fully realized within the timeframe. This led to a shift toward a hybrid approach that combines structured radial growth with organic motion.

While the current system is more stable and responsive, it does feel slightly less visually expressive than the earlier version. However, this trade-off allowed for a more reliable and interactive experience. I believe there is a way to achieve both performance and richer organic behavior, but I have not fully reached that solution yet.

The interface was intentionally kept minimal and clean to prioritize the visuals. Buttons for restarting, saving, and toggling information were designed to feel simple and unobtrusive, supporting the interaction without distracting from the system itself.

Sound is triggered when a new colony is introduced. The audio was sourced from freesound.org and adds a subtle layer of feedback to the interaction, reinforcing the moment of activation within the system.

The project evolved significantly from its initial version. Early experiments focused on movement but lacked compositional clarity and structure.

Key developments include:

  • Introducing generational growth patterns
  • Adding environmental controls through sliders
  • Establishing a clear composition using the dish as a boundary
  • Refining motion through the combination of forces and noise

Although the original goal of achieving a blooming effect was not fully met, the current system reflects a stronger balance between control and emergence.

Final Outputs

 

The following images represent selected outputs from the system:

High energy and growth settings produce dense, overlapping colonies, with movement constrained within the petri dish boundary.
Lower energy and growth settings produce sparse, evenly distributed colonies, with movement constrained within the petri dish boundary.
Moderate energy and growth settings produce a balanced colony distribution, where controlled movement and expansion create a layered yet readable system within the constrained dish.
Reflection

Proliferate demonstrates how simple behavioral rules can generate complex and visually engaging systems. The combination of structured growth and dynamic motion creates a space for continuous variation, where each interaction produces a unique outcome.

One of the strongest aspects of the project is the ability to control environmental conditions in real time. This encourages experimentation and allows the user to actively shape the visual result.

Future improvements would focus on developing more convincing organic behaviors, particularly in relation to blooming or molding, as well as expanding the system to include additional modes of interaction or evolution over time.

References and AI Disclosure

Inspirations:

  • Bacterial growth and binary fission
  • Petri dish cultures and laboratory environments

Sound:

  • Audio sourced from freesound.org

AI Disclosure:
AI tools were used as support throughout the development process, primarily for debugging, refining specific parts of the code, and understanding how certain behaviors could be implemented more effectively. AI was also used to help improve the interface design, including the structure and responsiveness of buttons and controls.

All core ideas, system design decisions, visual direction, and experimentation were developed independently. AI functioned as a technical aid rather than a generator of the project itself.

Amal – Midterm Progress: Proliferate

Concept

Here's how to make your own bacteria handprint | Vox

This project explores bacterial life inside a petri dish through the logic of binary fission. I was drawn to the simplicity of exponential growth. One cell becomes two. Two become four. Four become eight. That pattern is mathematically precise, yet visually it can feel organic and alive.

The petri dish acts as both a laboratory setting and a contained world. From the perspective of the bacteria, this circular boundary is their entire universe. Growth is not aggressive. It is natural, repetitive, and inevitable.

Through this project I am trying to visualize how simple systems can produce complex spatial transformation. The tension between geometric symmetry and organic movement is central to the concept.

System Design

The system is built around exponential growth using 2ⁿ logic.

It starts with one cell at the center.
Each click doubles the generation.
Each generation forms a new ring.

Everything is placed radially so the growth feels intentional and structured. At the same time, each cell has slight motion driven by noise so it does not feel like a static diagram.

I also introduced generational color shifts and soft background fades so the system leaves trails, almost like activity inside a petri dish.

The interaction is simple. Click and it divides. The simplicity is important to me. I did not want complicated controls. I wanted the act of division to feel immediate.

Prototype 1

The first prototype was very minimal.

It only tested the binary fission logic and radial placement. No sound. No complex motion. Just structure.

Visually it looked clean but almost too perfect. It felt more like a scientific chart than something alive. But it helped me understand how strong the doubling pattern actually is. Even in its simplest form, it already had presence.

That prototype gave me confidence that the system itself was strong enough to build on.

Current Version

The current version feels more alive.

Each cell now wiggles slightly within a constrained space. The trails create a sense of time passing. Multiple colonies can grow at once, which makes the space feel like an ecosystem rather than a single event.

The aesthetic has shifted away from realistic biology and more toward a luminous, speculative petri dish. It feels less clinical and more atmospheric.

I am excited about how something so rule based can still feel organic.

Concerns

I am still figuring out how to balance symmetry and irregularity.

Sometimes the radial placement feels too perfect. Real biological systems are not perfectly spaced. I may experiment with slight offsets to make the growth feel less mechanical.

Performance also becomes a concern at higher generations. The exponential logic is beautiful, but it scales quickly.

I also want the motion to feel softer and less jittery. I want it to feel intentional, not random.

Improvements for Final Midterm

For the final submission, I want to:

Refine the motion so it feels more like soft bodies.
Experiment with subtle asymmetry.
Introduce multiple modes, possibly a strict geometric mode and a more organic mode.
Test higher resolution rendering for A3 printing.

I feel like the core idea is strong. Now it is about refinement and sensitivity.

AI Disclosure

I used AI briefly to help refine parts of the exponential logic and tune motion parameters while troubleshooting performance.

Amal – Assignment 4: Tadpole Anemone

Concept + Inspiration

This project was created in response to the assignment requirement to use Memo Akten’s exploration of Simple Harmonic Motion as a starting point. The goal was to understand how oscillation can function as a generative system rather than just a repetitive mechanical movement.

What I found most interesting in Memo Akten’s work is how simple sine functions can create complexity when layered together. Instead of treating harmonic motion as a physics simulation, I treated it as a compositional structure. I used multiple oscillators with different frequencies and phase shifts so that interference patterns would emerge naturally from the system.

Rather than keeping the study abstract, I translated the oscillatory behavior into a tidepool ecosystem. Each anemone is driven by overlapping harmonic functions that simulate tidal pull, organic sway, and micro-movements within the tentacles. A slower oscillator controls the bloom intensity, which creates a bioluminescent effect that feels ecological instead of mechanical.

Sea Anemones shine with fluorescence! – Mendonoma Sightings

I was mainly inspired by their bioluminescence and the way they sway so beautifully in the water, this is the image the drew the majority of the inspiration and what I’ve tried to mimic. However when I was done, I realized that this looks like the small lights in the new near by gas station “the hub”, makes me wonder if the inspo was more subconscious??

Code I Am Particularly Proud Of

One section of code I am particularly proud of is the multi-layer harmonic interference that drives the tentacle motion:

// I used AI to help achieve this :)
let oscA = sin(this.t * 1.55 + p);
let oscB = sin(this.t * 0.92 + p * 0.7 + this.phase);
let oscC = sin(this.t * 0.45 + p * 1.9);

let sway = (0.75 * oscA + 0.45 * oscB + 0.25 * oscC + this.current) * 0.65;

I used AI to help refine this blending logic. My intention was to create layered oscillation instead of a single sine-driven movement. The AI-assisted refinement helped structure the interference in a way that felt balanced without becoming chaotic.

This section is important to me because it shifts the system from predictable motion to something that feels organic. By combining oscillators with different frequencies and phase relationships, the movement becomes more ecological and less mechanical while still remaining mathematically grounded in Simple Harmonic Motion.

The Sketch

Milestones and Challenges

The first milestone was building a single anemone driven by one primary harmonic function. The focus at this stage was verifying that the tentacle sway behaved consistently and that amplitude, frequency, and phase shifts were functioning correctly.

Challenge: The motion initially felt mechanical and repetitive. With only one oscillator driving the movement, the behavior was too predictable and visually flat. This prototype helped me understand the limitations of a single harmonic source.

[gif to be added but the upload time is sooooo looooooonnnnggg :/]

instead here is a video:

The second milestone introduced multiple oscillators and expanded the system into a grid of anemones. This is where interference patterns began to emerge. I layered harmonic functions with different frequencies and phase offsets to create more complex sway.

Challenge: Balancing complexity without losing control. When too many oscillators were layered equally, the movement became chaotic. I had to adjust weight values so the system felt organic rather than noisy.

This stage also introduced the idea of a global tide and a directional current controlled by mouse movement.

Reflection and Ideas for Future Work

Through this project, I began to understand how Simple Harmonic Motion can function as a structural system rather than just a visual effect. Layering oscillators changed the behavior significantly, and small adjustments in frequency and phase created noticeable shifts in organic quality. The process reinforced how sensitive generative systems are to parameter balance.

One of the main insights was that complexity does not require complicated formulas. It requires intentional relationships between simple ones. When I reduced or reweighted oscillators, the motion became more coherent. When I over-layered them, the system lost clarity. This balance became central to the final result.

For future development, I would like to explore local interaction between anemones instead of having them behave independently. Introducing neighbor-based influence could allow wave propagation across the field. I am also interested in integrating audio input so harmonic frequencies respond dynamically to sound.

Finally, I would experiment with scaling the system for projection or installation, where viewer proximity could influence tide intensity or bloom cycles. Expanding the system spatially would shift it from a screen-based study into an environmental experience.

Amal – Assignment 3

Concept

This project explores how small particles in nature respond to invisible forces in their environment. I was inspired by drifting pollen, spores, and algae suspended in water. These natural elements do not move randomly. They respond to forces such as gravity, air currents, and nearby bodies.

Using the attractor and mover structure introduced in class, I reinterpreted the system as an ecological field. The attractors function as environmental centers of influence. The movers behave like pollen particles that continuously respond to these forces. Instead of presenting a physics demonstration, the system is used to generate an evolving visual pattern.

The visual accumulation of trails transforms the physical simulation into a generative design.

Code Highlight

One section I am particularly proud of is the gravitational force calculation inside the attractor. This formula controls how each particle responds to distance and mass, and it was important to balance it so that movement felt stable but still dynamic.

This part connects directly to the force and acceleration principles explored in class.

let force = p5.Vector.sub(this.pos, mover.pos);

let distance = constrain(force.mag(), 20, 250);
force.normalize();

let strength = (this.G * this.mass * mover.mass) / (distance * distance);
force.mult(strength);

return force;
Code

Milestones and Challenges

Scaling the system from a single mover to many movers was an important milestone, as it shifted the focus from isolated motion to collective behavior. Maintaining stability while multiple forces acted simultaneously required careful adjustment, especially to ensure smooth and continuous motion across the canvas. Refining the visual output so that movement accumulated into a coherent pattern was also part of the development process. The main challenge was balancing the strength of attraction. When the force was too strong, particles collapsed into tight clusters, and when it was too weak, the system lost cohesion. Fine tuning the relationship between force strength and distance was necessary to achieve controlled but organic motion.

Reflection and Future Improvements

This project demonstrates how simple force based rules can generate complex collective behavior. Even though each particle follows the same physical logic, their interactions create layered and evolving patterns.

In the future, I would explore introducing interaction or additional forces to create more spatial variation. I am also interested in experimenting with alternative visual mappings to further strengthen the natural aesthetic.

Amal – Assignment 2

Inspiration

Concept

For this assignment, I chose to simulate the movement of a moth attracted to a lamp, inspired by how insects behave around light sources in nature. When observing moths, their motion is rarely direct or smooth; instead, it feels hesitant, wobbly, and slightly chaotic.

The goal of this sketch was to recreate that behavior using only acceleration-based forces, without relying on complex visuals. The personality of the moth comes entirely from how it moves rather than how it looks.

The lamp acts as a constant attractor, while a subtle wobble force gives the moth an organic, fluttering quality.

Code Highlight

The part of the code I am most proud of is the wobble (flutter) force, which adds personality to the moth’s movement without making it feel random:

this.wobble += 0.1;
let flutter = createVector(
  cos(this.wobble),
  sin(this.wobble)
);
flutter.mult(0.03);
this.applyForce(flutter);

This small oscillating acceleration creates a natural, insect-like flutter. Combined with the attraction to the lamp, it makes the moth feel alive and slightly unpredictable, rather than robotic. And, this is where I used ChatGPT’s to help.

The Code

Reflection & Future Work

This project helped me better understand how simple rules can create believable natural motion. Using acceleration alone forced me to think carefully about how each force affects the behavior over time.

What worked well:

  • The combination of attraction and wobble felt natural and readable.
  • Limiting speed and force helped keep the movement smooth.
  • Keeping visuals simple allowed the motion to stand out.

If I were to continue developing this sketch, I would:

  • Add a “panic zone” near the lamp where the moth starts circling instead of approaching directly.
  • Introduce multiple moths with slightly different parameters to give each one a unique personality.
  • Experiment with a pulsing or moving light source to see how the behavior adapts.

Amal – Assignment 1a

The Computational Beauty of Nature – Ch1

The concepts explored in this reading were very central to how we view things and analyze not only nature but also human-made systems like the stock market. What left a strong impression on me is how important it is to analyze interaction in order to truly understand what something is. At the beginning of this chapter, Flake introduces the idea of reductionism, which is the process of reducing something into increments to better understand its true nature.

In my understanding, we are invited to look at this from a rather “scientific” lens in order to see how we could apply a similar concept in computing. This leaves me with the impression that it is very important for us to first understand how dissecting something in terms of meaning can then help us introduce that understanding to a computer.

The Concept

My concept is inspired by fireflies. Having never experienced them, I have always been curious about what it would feel like to interact with one, so why not simulate it?

For the sake of simulating human-to-firefly interaction, I did not want the firefly to simply float around randomly. I wanted it to follow the mouse around the sketch in order to translate a sense of curiosity between both the firefly and the user.

I implemented a Gaussian random walk (List 1) and mapped the motion to color and brightness to create a firefly glow effect (List 2).

Code that I am proud of
let glow = 220 + randomGaussian() * 20;
glow = constrain(glow, 140, 255);

I’m proud of this part of the code because I wanted the firefly’s glow to feel as natural as possible. Using Gaussian randomness makes the brightness fluctuate gently instead of jumping unpredictably, and constraining the values keeps the light within a realistic range.

The Sketch

Reflection

Initially, I wanted to mimic bacteria and binary fission, but that idea felt a bit too ambitious at this stage. I decided to step back and focus on exploring motion in a simpler way, which led me to this firefly concept. I was interested in creating something that felt organic and calm rather than complex.

For future work, I wanted to place the firefly over an image of a forest, but I realized that doing so would either cause the firefly’s trail to disappear or require the background to fade over time. I think finding a way to balance a real forest image with the artificial movement of the firefly could be an interesting direction to explore further.