Project Overview
For my final project, I created an interactive desert-inspired particle system called Traces of Wind. The project is inspired by the desert as a grounding space. For me, the desert is a place where I can slow down, breathe, and let go of negative energy. I wanted to turn that feeling into an interactive environment where the user shapes the wind and watches the sand respond.
The screen shows a bright desert scene with a blue sky, a hot sun, and a field of moving sand particles. The user controls the wind using the mouse. When the mouse moves quickly, the wind becomes stronger and the sand scatters. When the mouse slows down or stops, the sand begins to settle again.
The project does not allow the user to draw directly. Instead, the user influences a natural force, and the environment responds through movement. This connects to the idea of emergence because the final visual patterns come from many small particles following simple rules.
Traces of Wind
Interaction
The interaction is simple and direct: the mouse controls the wind.
As the user moves the mouse across the canvas, the sand particles nearby react to the direction and speed of the movement. Fast movement creates a stronger force, while slower movement creates softer motion. The user can immediately see how their actions affect the environment.
I also added darker grains into the sand. These darker grains represent heavier or negative energy. When the user moves the mouse near them, they scatter and slowly fade, as if the desert wind is carrying them away.
The user can also press R to reset the darker grains and begin again.
Implementation Details
The visual scene is built in layers. First, I created the blue sky using a gradient. Then I added a bright sun with multiple transparent circles around it to create a hot glowing effect. The sand area is drawn at the bottom of the canvas with soft dune lines and many small particles.
The main interaction comes from comparing the mouse’s current position with its previous position. This gives me the direction and strength of the mouse movement.
let nowMouse = createVector(mouseX, mouseY); let wind = p5.Vector.sub(nowMouse, lastMouse); let windPower = wind.mag(); wind.mult(0.035);
This wind vector is then applied to the particles. Particles closer to the mouse receive a stronger force, while particles farther away are less affected.
wind(w) {
let d = dist(this.pos.x, this.pos.y, mouseX, mouseY);
if (d < 200) {
let force = w.copy();
let strength = map(d, 0, 200, 1.2, 0);
force.mult(strength);
this.acc.add(force);
}
}
I also used Perlin noise to give the particles a softer natural motion.
let n = noise(this.pos.x * 0.004, this.pos.y * 0.004, frameCount * 0.006); let angle = map(n, 0, 1, -0.5, 0.5); this.acc.add(createVector(cos(angle), sin(angle)).mult(0.015));
For the emotional layer, I created darker grains that fade when the wind reaches them.
this.alpha -= w.mag() * 7;
This made the interaction feel more connected to the concept of release and letting go.
Creative Process
Prototype 1: Visual Atmosphere
In the first prototype, I focused on creating the desert environment. I wanted the scene to have a bright blue sky, a hot sun, and warm sand. At this stage, there was no interaction yet. The goal was to build the mood of the project first.
Prototype 2: Mouse-Controlled Wind
In the second prototype, I added the main interaction. The mouse became the wind. When the user moved the mouse, the sand particles reacted. This made the project feel more alive and connected to the course concepts.
Final Version
In the final version, I added the darker grains and the idea of release. These darker grains slowly fade when the user moves the wind through them. This helped connect the technical system to the personal meaning behind the project.
Video Presentation
Challenges
One challenge was making the sand movement feel natural. At first, the particles followed the mouse too directly, which made the sketch feel more like drawing than wind. To fix this, I made the force depend on distance. Particles close to the mouse are pushed more strongly, and particles farther away move less.
Another challenge was balancing the emotional concept with the visual design. I did not want the darker grains to look too dramatic or obvious. I wanted them to feel subtle, like something heavy being softened by the desert.
I also spent time adjusting the colors. The sky needed to feel blue and open, while the sun needed to feel bright and hot. The sand also had to feel warm without making the whole scene too flat.
Reflection
Overall, I think this project successfully connects a personal idea with the technical ideas from the course. I wanted to create an environment that felt calm, warm, and responsive. The desert became a way to think about grounding, movement, and release.
The interaction is simple, but I think that works well for the project. The user can immediately understand that the mouse controls the wind, and the particles respond in real time. I also like that the user does not control everything directly. They influence the force, and the system creates the final movement.
If I developed this further, I would add sound. A soft wind sound or desert ambience would make the experience more immersive. I would also like to try webcam interaction, where the user moves their hand to control the wind instead of using the mouse. Another future improvement would be making the dune patterns build up more clearly over time, so the user can leave a more visible trace in the landscape.
AI Disclosure
I used AI to help brainstorm the initial project idea, organize parts of the documentation, debug issues in my code, and explore how to achieve certain visual effects, such as the bright sun, desert atmosphere, particle movement, and fading darker grains. The final concept, interaction choices, visual direction, and edits were shaped by my own decisions, testing, and personal connection to the desert.