Concept
For this assignment, I chose to simulate drifting clouds moving across a sky. I was inspired by how clouds move so peacefully yet unpredictably – they have a gentle, steady drift from wind, but also bob up and down with air currents and occasionally get pushed by gusts. The challenge was to recreate this serene, organic movement using only acceleration to control the motion. No directly setting velocities or positions – everything had to come from forces acting on the clouds: wind, air currents, drag, and occasional gusts. Each cloud has its own “personality” through variations in drift speed, bobbing frequency, and size, making the scene feel more natural and alive rather than mechanical.
Code Highlight
In my implementation, a section of my code that i am proud of is below:
// Vertical bobbing using perlin noise for smooth, natural variation this.time += 0.01; let bobForce = map(noise(this.time), 0, 1, -this.bobFrequency, this.bobFrequency); let bob = createVector(0, bobForce); this.applyForce(bob);
This creates the gentle up-and-down bobbing motion of the clouds. Instead of using random() which would make the clouds jitter, I used Perlin noise which gives smooth, organic transitions. Each cloud has its own time value that increments, creating unique but natural bobbing patterns. The bobFrequency variable gives each cloud a different personality – some bob more dramatically while others are more subtle. I am also proud of this snippet that creates creates air resistance, that opposes the cloud’s velocity, preventing it from accelerating infinitely and giving it that slow, peaceful drift. It’s a small detail but makes a huge difference in the realism.
// Air resistance (drag) let drag = this.vel.copy(); drag.mult(-0.05); // Drag coefficient this.applyForce(drag);
Embedded Sketch
Reflections and Future Improvements
Through this assignment, I discovered that subtle forces acting over time can generate intricate, lifelike movement. In nature, nothing moves in perfectly straight lines or at constant speeds – everything is constantly being pushed and pulled by multiple forces. By combining simple acceleration vectors (wind, drag, turbulence), I could create movement that felt surprisingly alive and organic. My biggest takeaway is personality, which comes from imperfection and variation. Making every cloud slightly different in how it responds to forces was what made the scene feel natural rather than computational. Below are some ideas i would implement in the future for improvement of what i have currently:
- Multiple cloud layers – Add parallax depth by having clouds at different “distances” moving at different speeds.
- Dynamic wind – Instead of constant wind, have the wind direction and strength change slowly over time.
- Cloud morphing – Make clouds gradually change shape as they drift, growing and shrinking.
- Weather transitions – Clouds could darken and speed up before “rain,” then slow down and lighten afterward.
- Interactive elements – Mouse interaction could create temporary wind forces that push clouds around.
- Better visual design – Use gradients and transparency to make clouds look more three-dimensional and fluffy.
- Sound – Add gentle wind sounds that change based on cloud speed.
With my implementation so far some feature i believe work very well include, the drag force, bobbing through perlin noise, personality traits of each cloud and the combination of multiple forces which created complex behaviours from simple rules.