Challenge Five

Published

October 22, 2026

Due
2026-10-29T14:15

Goals

In this challenge, you should be able to demonstrate the following:

  • Knowledge of particle systems
  • Knowledge of how sprite sheets are created
  • Good control over noise

Getting Started

  1. Accept the assignment from Classroom 50
  2. Clone the repository GitHub classroom creates to your local computer (in your shell, type git clone and the address of the repository)
Tip

I have noticed that Classroom 50 adds a lot of noise to the name of your repositories, which makes it difficult to distinguish between files in a file browser.

You can rename the directory without breaking anything, and I suggest that you do so.

git even provides you a way to do this at the moment when you clone the repository:

git clone <repo address> <new name>

Objective

In the tutorial, you produced a particle system that made it rain. You can start by copying over the particle system into your starter code.

Warning

Make sure you complete the tutorial before starting this challenge.

Your task for this challenge is to produce smoke. Your initial goal should be to produce something that looks like this:

Smoke

Once you have smoke that looks like the above, I want you to get creative and do something with it. Maybe you want to add fire, or you want to have smoke pouring off of something, or maybe you want to get abstract and use the smoke as just another design element. That is up to you.

Technical details

There are a couple of technical problems you need to address.

sprites

You will want to generate some new sprites. We want them to look like little wisps of smoke. Draw the sprites as a grid of 1x1 squares. Use a noise field to change the alpha value so we can see through them. To make sure that the sprites don’t have square edges, use the distance from the center of the sprite to further attenuate the alpha value so by the edge of the sprite the alpha value is 0, regardless of the noise value. Your goal is something mostly transparent and wispy looking.

One of the requirements is that the particles should fade away instead of popping out of existence. To change the transparency of an image, you should look into the tint function.

emitter

You shouldn’t need to change the Emitter itself, but you will want to adjust the instance you create. The version that produced the image above does impart a small kick to the particles so they go upwards.

forces

Gravity will not be as strong a factor for smoke. The smoke will initially rise because it is warmer, but the air will cool as it gets away from the heat source. The turbulence may also need some adjusting.

Requirements

  • the sketch should look like smoke
  • the sprite sheet should contain at least five unique smoke sprites that are used
  • particles should fade away with age instead of popping out of existence
  • the forces should show thoughtful choices
  • you should have some creative component that ties in what you have learned in the class to date with the smoke
  • your submission must include 3-5 curated outputs of your sketch
  • the reflection must be completed

Thoughts

A lot of the challenge of this piece is that you will need to spend time tuning parameters until you get an effect that looks correct. This will take some trial and error and thoughtful observation of the output. You will show me that you understand how the system works – by how you have tuned it to achieve the effect we are looking for.

A piece of advice would be to work on one piece at a time. For example, don’t just assume that your sprites work. Start by displaying them directly so you can see them without them also moving and fading on you.

Get the smoke working first, and then start getting creative with it. If you need to make alterations to the functioning of the system to bring your vision to fruition (e.g., you might want emitters that move, or emitters that emit different kinds of particles), make sure you document the changes in your reflection.

Note

If you are going to make changes, such as creating different kinds of particles, use polymorphism so as few pieces of the system need to know about the difference as possible.

Reflection

I would like you to write a brief reflection in the reflection.md file. It should answer the following questions:

  • Do you think it is complete?
  • If not, what is left to go and how are you going to address it?
  • What design decisions did you make and why?
  • What was the hardest part?
  • What, if anything, have you gained by completing this challenge?
  • What questions (if any) do you have about this assignment?

Revisions

If you revise your submission, please add a dated addition to your reflection that describes what has been changed.

Submitting

When you are ready to submit:

  1. Add and commit your changes and push those commit(s) to GitHub.
  2. Submit your repository to Gradescope (you can submit as often as you like up to the deadline)