Programming assignment #3 - 3D Video Game

CS 248 - Introduction to Computer Graphics
Autumn Quarter, 2005
Marc Levoy
Handout #8


Game proposals due Monday, November 7 by 5:00pm
First demos on Friday, November 18
Final demos on Wednesday, December 7
Writeups due on Friday, December 9 by 5:00pm


Your assignment is to write a 3D video game using OpenGL. You are free to design and implement any sort of game you like, as long as it incorporates the required functionality described below. For purposes of this project, we consider a 3D video game to be an interactive 3D computer graphics application that has a challenging goal, is fun to play, and incorporates some concept of scoring or winning and losing. It is not required that your game idea be original, but originality will be rewarded with extra credit. It is also not required that the game be intrinsically three-dimensional; you can take a 2D game and render its components three-dimensionally, converting game pieces to solid models, lighting them, etc. (Of course, games that are intrinsically three-dimensional probably have a greater chance of winning a spot in the competition.) If you have any questions about whether your idea meets the criteria for a 3D video game, please ask the course professor or a TA. Your game proposal (due November 7), and our feedback to you afterwards, should help you in developing your game concept.

You are permitted (and encouraged) to form teams of 2-3 people and partition the work among the team members. The work expected from each team will be proportional to the size of the team. You can use the class newsgroup su.class.cs248 to find prospective team members. Each team should submit a single game proposal, jointly authored by all team members. You may change the composition of your team at any time prior to November 30 (one week before final demos). However, changes after the first demos (on November 18) are strongly discouraged.

Required functionality

Within the overall framework of your video game, you are required to include the following functionality:

In addition to these basic requirements, your game should incorporate some of the more advanced computer graphics techniques listed below, depending on the size of your project team. In particular, you are required to implement at least 2*N of these additional techniques, where N is the number of people on your team (i.e. groups of three people need to implement six techniques, individuals working alone are required to implement only two, etc.). Of course, you are encouraged to implement as many of these techniques as you can, depending on the requirements of your particular game engine, as well as using any other ideas you read about or invent on your own. Extra effort will be rewarded with extra credit.

A few hints

Video game submission requirements

The game proposal. Your first milestone is a proposal, due by 5:00pm on Monday, November 7. Your proposal can be brief - 1 page is plenty. Be sure to list all team members. The proposal should clearly state the premise of your game, describe the 3D world you plan to build for it, outline the gameplay, and enumerate the 2*N advanced techniques you plan to implement. If you envision facing any special technical challenges (like predicting collisions between a basketball and a hoop), list them. If you'd like "advanced feature" credit for something you'll be spending a lot of time on, but which is not listed above (like the ability to play against 5,000 networked opponents simultaneously), list those too. If you envision needing any special tools to achieve your goals, like a laser scanner or a motion capture system, tell us how you'll get access to these tools.

Finally, you must include at least one image in your proposal - a sample screenshot of the game in action. We don't care how you produce this image: a scanned pencil sketch will do, or something you whip up in Photoshop, Illustrator, KidPix, or your favorite computer art program. Carefully label the principal components in your image. Sample labels might be: "waterfall [here] will use real dynamics", or "[these] missiles will emit particle system smoke". The purpose of this requirement is to help us understand your proposal, and to help you think about how hard or easy it might be to implement what you propose.

Only one member of a group is required to submit for the team. The submitter should:

  1. Know the SUNet IDs of all team members
  2. Login to any of the myths (NOT elaines)
  3. Create a directory which contains the text of your proposal (plain text preferred, but we'll accept PDF) and the image.
  4. Run the submit script /usr/class/cs248/bin/submit, which will ask for the path to the above directory and SUNet IDs of the other team members.
  5. Take a deep breath, and start working on the video game.
You should need to submit just once. If your team wishes to submit a modified proposal, it should be resubmitted as described above by the same team member who submitted originally. A similar procedure is to be followed for submitting the video game.

Submitting a proposal is required, and late submissions will be penalized, but your proposal will not be graded. Neither will you be held to either the list of advanced graphics techniques you enumerate or to the composition of your team. The purpose of this proposal is to motivate you to begin working on the project, and to give us a chance to guide you. We will read and respond (by email) to every proposal. Hopefully, most of these responses will be of the form, "Cool game idea! Full speed ahead!". However, if we see you headed towards the shoals, we'll let you know.

First demos. On Friday, November 18 you will demonstrate your partially complete video game to a member of the CS248 course staff. To show reasonable progress, your 3D world should be largely in place, although perhaps lacking in detail or performance, your "gameplay" should be basically working, and at least some of the required graphics functionality (3D viewing, user input, lighting, and texture mapping) should be implemented. The 2*N advanced techniques need not be in place, except that depending on your game, you might need to have already implemented some of them in order to demonstrate your gameplay. At the demo, we will give you feedback on your game, and we will discuss with you your plans for finishing it.

Signups for these demos will be handled electronically, as usual. You can demo on any platform you like, even a laptop. However, all demos must be given in the Sweet Hall graphics cluster. There is no need to freeze your code before the demos. All team members must be present at the demo. Late demos will be permitted, but will be penalized in the usual way. No writeup or submission of source code or other files is required following these demos. In addition to giving you verbal feedback at the demo, we will also grade you. Since you are not submitting code, these grades will based only on what we see during the demo. However, these grades will be simple: minus, check-minus, check, check-plus, plus, depending on the quality of your progress.

Final demos and writeups. Your complete video game will be demonstrated on Wednesday, December 7. Signups will be handled electronically, as usual. No code freezing is required. All team members must be present at the demo. During the demo, make sure you tell us what features you have implemented. Functionality you don't show us or that doesn't work will not be given credit.

Final writeups and code and content submission is due on Friday, December 9 at 5:00pm. To submit your video game files, simply run the script /usr/class/cs248/bin/submit, as you did for the video game proposal. The team member submitting will be prompted for the directory containing all the video game files and SUNet IDs of the other members. Only one submission per team is necessary. Your submission should include your entire game - source, executable, makefiles, models, textures, etc. It should also include a README file which lists your team members, describes how to build and run your video game, and explains the 2*N (or more!) advanced computer graphics techniques you implemented. Also, your README file should include references to any external sources you referred to for inspiration, and it should indicate how your 3D models and other game content were obtained. Remember - no late demonstrations or writeup submissions will be accepted.

Separately from your joint team submission, and privately, each team member should prepare an individual writeup by 5:00pm on December 9 specifying who worked on which features of your game, and what percentage of the total work each team member did. Your writeup should be a single text file. This is to be submitted electronically by running the script /usr/class/cs248/bin/privsub from one of the myths. The script will prompt you for the location of your writeup and the names and SUNet IDs of your teammates. These submissions will be held in the strictest confidence by the course staff.

The video game competition. After the demos are finished, probably around 4:00pm (on December 7), a jury of computer graphics experts from industry and academia will join the CS 248 teaching staff to evaluate your programs as part of a video game competition. Any team may enter the competition; however, participation is not required. The first step will be the selection of roughly 8 finalists. This selection will be performed by the teaching staff immediately following the completion of demos. The second step is the selection of prizewinners, which will be performed by the jury. The composition of the jury will be announced shortly.

There will be one grand prize - an all-expenses-paid trip to Siggraph 2006 in Boston next summer, and one second-place prize - dinner for two at Il Fornaio in Palo Alto. In addition, every member of a finalist team will receive a current video game title for the PC platform, generously donated by Electronic Arts. Finally, there will also be a special prize given for the wackiest or most daring submission, but we don't yet know what it will be. (An Xbox was last year's prize in this category.) If the grand prize is won by a team, it must be split among the team members. The second-place prize will be duplicated as necessary to cover the team. Only one prize for wackiest submission will be awarded. The competition will be accompanied by an amazing party.

As a prerequisite to entering the video game competition, each team must create a web page for their project. The page should have a title, a paragraph describing the game, and links to one or more screen-shots. The links to the full-size screen shots should be by clicking on downsized versions of these images, each 128 pixels tall. After the competition, entrants will be asked to provide compressed "tar balls" or zip files for distribution of their game, along with an indication of the target platform. The distribution should include an executable for at least one platform. Any team that does not wish to enter the video game competition but would like their game distributed is also encouraged to create such a web page. Teams who do not enter the competition do not need to create one.

Good luck, and have fun!


levoy@cs.stanford.edu
Copyright © 2005 Marc Levoy
Last update: October 30, 2005 07:54:45 PM