CSC 240: Computer Graphics

Final Project

Due: Thursday, Dec. 15, 11:59pm on Moodle

Option 1: WebGL Animated Game

If you choose this option, the goal is to synthesize everything you've learned in WebGL so far and construct an interesting and elaborate animated game. It does not have to be a game in the traditional sense - it could be anything that is interactive and has some overall goal that the user is trying to achieve (solve a maze, find certain types of objects, etc). The high-level idea is that the user will control some aspect of the game (usually the movements of a character through a world) using the keyboard/mouse.

Note: I expect that most people will choose this option, unless you really want to do into depth with Blender. Instructions for the Blender-only option are below.


  1. Blender Character

    First, create a 3D "character" model in Blender, and export it into JSON format (see Homework 9) for use in WebGL. It does not necessarily need to be human or animal like, but it should be reasonably sophisticated (i.e. not just a square or sphere). For the hierarchical modeling part below, it might be helpful to create some of the character's body parts as separate 3D objects, so that their movements can be isolated and controlled.

  2. Hierarchical Modeling

    There should be some hierarchical modeling aspect to your project (i.e. using the idea of "container" objects to create a movement hierarchy). This could be moving your characters body parts with different keyboard keys (like the robotic arm). Or it could be that some aspects of the world are moving on their own using a hierarchical model (like the ferris wheel example or the solar system).

  3. Game Play

    The user can either control the animated character with keyboard input, or interact with the character in some way. One example would be to have two characters; one moves randomly, and the user controls the other through keyboard movements. The goal would be for the user's character to either chase or run from the other character. It doesn't have to be a win/lose game, just some way for the user to interact with the world in a goal-oriented way.

  4. World and Camera

    The character should be moving around in a 3D "world". I want this to be open-ended, but there should be some context (i.e. floor, walls, a room, an outdoor scene, objects, other characters). It doesn't have to be realistic, but the camera viewpoint should give the sense that the user could walk into the space. In Homework 6 the camera was meant to be in the same place as the viewer's eye. In this assignment, if you have a character, the camera should be a bit away from the scene so that it captures the character's movements. It could track the character, or be fixed so that the entire scene is always visible.

  5. Lighting

    Use at least one light source to clearly illuminate the world.

  6. Texture Mapping

    At least part of the character or part of the world should be texture mapped.

  7. Readme and Submit

    To explain the game play, create a readme.txt file with instructions for me. Clearly explain the goal of the game and how I should use the keyboard/mouse to play it. If you used a particular web browser to run your program, let me know that too. I will not debug your code - make sure everything is included so that it will work out of the box.

    Submit a zip file (Edit: start the zip folder with your FIRST name, i.e. that includes the following files:

    • final_project.html (main WebGL file)
    • model.blend and model.json (could be several such files)
    • any texture image files
    • any libraries necessary to run your code
    • readme.txt

  8. Optional: Hosting your Project

    Note: if you would like me to host your project (so that you can send a link to friends/family) please let me know - I would be happy to! This means that your project will be publicly visible to anyone with the link. Email me after you submit your project and I will put it up (note that this will be a lower priority than grading, so it might not happen very quickly).

Option 2: Photo-realistic Image in Blender

This option is only for those who really want to become experts in Blender.

To do this option, you must find a suitable image and email it to me for approval and your reasons for wanting to learn more about Blender. Email me by Wednesday Dec 7.

If you choose this option, the goal is to integrate the 3D modeling concepts we've discussed in class to create a still image in Blender. The idea is that this rendered image will look as much like a photograph as possible.


  1. Find a photo

    Start with an existing photo you want to reconstruct in Blender. It could be a photo you've taken or a photo you find. Submit this photo along with your work. If you start with an easier photo, the standard for a realistic version will be higher, and visa-versa. Still life style photos are often the best choice.

  2. World and Camera

    The camera should be placed in a similar position to where the real camera was. The scene should be created in a 3D fashion (as opposed to trying to construct the image using 2D shapes).

  3. Lighting

    Use as many light sources as necessary to create the lighting effects of your photo (there should be at least one).

  4. Texture Mapping

    Use at least two textures in your image.

  5. Submit

    Save both a .blend file and a .jpg or .png file of the final rendered image. (Edit: zip your files and start the folder name with your first name, i.e. Submit the zip folder on Moodle.

For either option, submit your work on Moodle (Edit: so you will be submitting one file, the zipped folder). Final projects should be individual.