Recent Changes - Search:

This is an old course web from 2008

W1 W2 W3 W4

Last Year's Class Web

Staff Login

Old 2008 Course Web: Assignments / GrTown

Project 3: Graphics Town

Quick Links: GraphicsTown example code, Technical Challenges,Previous Student Ideas.

Due Tuesday, December 9th, 11:59pm. Late assignments accepted according to the course late policy.

Note: Because of some University rules, all work you do (including giving a demo) is supposed to be done before exams begin. This means that project demos will be the last week of classes. Most likely, these will be on Thursday and Friday (the 11th and 12th).

Note: for this project you may work together in teams of two. If you plan to do this, BOTH teammates must send mail to Blayne before 11:59pm on Thrusday, November 20th. The entire team will receive the same grade. The expectation for teams of two are higher (as described below).

1.  Overview

The goal of this project is to create a city. But, since you only have a few weeks, it may be more like a town. You will create a program that allows the user to explore the town by flying around in it, or by looking at it from the vantage point of an inhabitant. Your town cannot be a dead place: there must be things moving around in it.

What is in your town, as well as what is happening there is up to you. We hope you will be creative. Make houses, trees, stores, cars, roads, helicopters, construction equipment, people, boats, ...What goes on in the town is up to you - make the cars drive around, drawbridges open and close, construction equipment operate, ...

We hesitate to tell you what to do, since students in the past have come up with some really creative things - we've seen cities with skyscrapers, space cities with flying saucers, a Harry Potter city with flying broomsticks, ... Some things that students did in previous years are shown here (note - that page is from 2006! the rules for the assignment have changed a bit).

If this sounds like its arbitrarily open-ended, you have the right idea. Clearly, you could make this as fancy as you want. Obviously, we will try to set our expectations to be only somewhat unreasonable :-) Our goal is to give you the opportunity to demonstrate your competence at writing 3D graphics programs, as well as an opportunity to experiment with some more advanced topics that you think are interesting.

The basic requirements are very simple. You should try to achieve them in a manner that provides flexibility so you can add fancier features as time permits. In terms of which fancier features to implement? You should pick the things that are most interesting to you. We will give you lots of ideas...

We will provide you with a Sample Solution to build on top of. You may choose not to use it, but you must provide its basic functionality (things like navigation, the ability to jump to interesting places, ...). These requirements are described here.

You will be allowed to work in pairs on this assignment, subject to some rules.

2.  Historical Note

Graphics Town has been a popular project for the graphics class for the past several years. Students have enjoyed the chance to be creative, and we (the instructor/TA) like the chance to see lots of cool stuff. The open-ended nature of the project allowed students to spend energy learning / trying out stuff in graphics that they found interesting - including stuff that we don't get to in class.

In 2005, we revised the project. Our goal is to keep the open-ended "learn what you're interested in and be creative" aspect, while being more specific about what our expectations are and making sure that the people take on enough technical challenges.

As in previous years, we provided a sample solution for people to start with. This year, we've improved it to the point where you'll probably want to use it.

For 2008, we've changed the requirements to reflect the changes in the topic structure of the class, and the other projects (you've already done an articulated object).

3.  Objectives

The overall goal of this project is to give you an opportunity to explore topics in interactive graphics: how do you make things that look interesting, and be interactive. While some of this is artistic (you need to pick interesting objects to make and good textures/... to look nice), some of it is technical: you need to pick things that can be implemented efficiently and have interesting behavior.

If you're concerned about having to be "artistic" - just try to be different than what the provided sample is. Don't use the example houses in their regular grid. (An easy way to do this is just avoid using the "SimpleLot" and "SimpleSubdivision" classes).

In terms of your grade, effort spent on technical are more valuable. For example, it is better to spend your time making a simple "blocky" car drive around in an interesting way, or to make a simple shaped car out of parametric surfaces, or to light the car in an interesting way, then to carefully model a gorgeous model of a car. (of course, if you want to make model a gorgeous car, implement bezier patches to display its curved body, have it realistically race around a track ... - we won't complain).

Some specific things we want you to learn from this assignment (which will explain some of the requirements):

  1. To learn how to work within someone else's code - even if that code isn't perfect. (so, we'll encourage you to use my code as a starting point)
  2. To try out some of the technical topics that we've discussed in class (subdivision surfaces, culling, ...) or topics we won't discuss too much in class (particle systems, fractals, ...)
  3. To get some experience with how textures are used to make simple objects look more interesting.
  4. To get some experience with creating geometry for graphics.
  5. To gain experience working with a larger, more complex graphics application.
  6. To gain some experience creating the behavior/motion of graphics objects.
  7. To work with shaders.

4.  Project Milestones

  • Thursday, November 20th - If you want to work in a team, you must send email to the TA by the end of the day.
  • Tuesday, November 25 - Signs of Life. Each group needs to send an email to Blayne with a screenshot of their program. This is just to make sure you've at least started the project.
  • Tuesday, December 9th - Project Due. Any project with any part turned in after this date will be considered late. If you haven't used your late pass yet, then you won't be penalized.
  • Wednesday, December 10th - Friday, December 12th - Demos. Even if you plan to turn in your project later, you must give a live demo in your allocated slot.
  • Friday, December 12th, 11:59pm - No late projects accepted after this time. All files must be turned in.

5.  The Basic Requirements

5.1  Components

Your town must have:

  1. Multiple objects moving at any time (besides the ones that I made)
  2. Multiple different types of behaviors (besides the ones that I made)
  3. Multiple different types of buildings / scenery (besides the ones that I made)
  4. Multiple new textures. Some must be hand painted. Some must not be flat (that is, it must wrap onto multiple polygons)
  5. You must attempt "enough" technical challenges (see the technical challenges page).
  6. You must have at least 3 shaders in your program (by "shader" we mean a pair of vertex/fragment programs attached to an object). At least one of these shaders must provide a procedural texture, and at least one of the shaders must be (properly) affected by the lighting. At least one of the shaders must be affected by the time of day (so you need to figure out how to pass the time of day to the shader).
  7. You program must work at a sufficient frame rate (which isn't hard since the tomputers are so fast).
  8. You must add something that is effected by the time of day (besides the one shader used to fullfill the requirement above). For example, you can have an object that changes color (the shader is sensitive to the time of day) and shape (something besides the shader is sensitive to the time of day).
  9. You must use at least one type of "advanced" texture mapping: multi-texturing, projective (slide projector) texturing, environment mapping, bump mapping, or shadow mapping. (if you want to pick something not on this list, you may want to check with us to make sure it counts)
  10. An object made out of a curved surface. You can implement subdivision, or some form of parametric surfaces, or do a surface of revolution, or ... This is described more on the technical challenges page.

Good assignments always go way beyond the minimums.

5.2  Evaluating aspects

There are three aspects of this project, all will be considered in evaluating your project:

  1. Technical challenge (how much hard graphics technique did you use). See the technical challenges page. Note: that some of the technical challenge of the project comes from how complicated the objects are, how complex your shaders are, etc.
  2. Visual Complexity of your world (how cool/interesting does it look - sometimes a few really interesting things can be as good as a lot of simpler things). Again, the first criteria is that it is different than the sample solution. You should avoid using same regular grid of houses from the example.
  3. Behavioral Complexity of your world (how interesting are the things that happen in it).

This is the order of importance. While having some degree of success in all categories is important, sometimes excellence in one category can outweigh deficiencies in another.

Note that it is important that you are able to show off the features of your system. If you have written a shader, you need to use it on an object that makes it clear that your shader is doing what it advertizes.

Some students are concerned that we don't give more clear grading criteria, however, it is hard for this project. To help with this, we will schedule some "open lab" hours before the project is due so you can s describe your ideas and how us your preliminary results and we can give you some idea as to whether you are attempting to do enough to get the grade you want.

6.  The Sample Solution

We recommend that you start with the Sample Solution. You don't have to use it, but you should at least look at it. If you choose not to use it, be sure to have the required features.

7.  Working Together

For this assignment, we allow you to work with a partner. However, there are some rules for doing this:

  1. Each person on a team gets the same grade for the project. We appreciate honesty in saying who did the work, but if you are lucky enough to find a partner who does everything for you, well, ultimately you will lose out because you won't learn as much.
  2. Before the checkpoint (November 20th), you must send the TA email saying who you will be working with.
  3. After the checkpoint, you may not break up your group.
  4. All team members must be present at the grading demo.
  5. Each person must make at least 1 of the new buildings/scenery, 1 of the behaviors, 1 of the shaders, 1 thing effected by the time of day, and paint one of the textures.

While the expectations are higher for groups than for individuals, they are not that much higher.

8.  What to hand in?

As usual, you must hand in everything needed to build and run your program, including all texture files and other resources.

If you work with a partner, only turn in one copy of the project. In the other person's directory put a single file in your handing directory - a README.txt that says where to look.

In your readme, please make sure to have the following (you can break it into seperate files if you prefer):

  • Instructions on how to use your program (in case we want to use it when you're not around)
  • Descriptions of what your program does to meet all of the minimum requirements.
  • A list of the objects you modeled (if you made lots of different objects, just list the 5-10 most interesting ones). Please order the list so the most complicated/impressive one is first.
  • A list of the behaviors you made. Please order the list so the most complicated/impressive one is first.
  • A list of the shaders that you made with a brief description of each.
  • A list of the technical challenges that you attempted / completed, with a description of what you did and what you used it for.
  • If you used the sample, code, a file that describes any changes you made to the "core" of the system (e.g. other than changing main.cpp and adding new Objects and Behaviors).
  • If you did not use the example code, an explanation of why you chose not to, and a discussion of your program's features.

You should make a subdirectory of the project directory called "Gallery." In this directory, please put a few JPG pictures of the best scenes in your town. Please name the pictures login-X.jpg (where X is a number). Put a text file in the directory with captions for the pictures. (note: to make pictures, use the screen print and then use some program to convert them to JPG).

9.  Other Resources

Many students in past years have either written loaders for various model formats, or found model file readers on the web. You are welcome to do either. However, be sure to give proper attribution if you appropriate code or models. Also, be sure to include all of the models in the handin.

If you do use a model reader, remember that you must make some of the objects yourself.

10.  Grading

Unfortunately, it is very difficult to give a grading procedure ahead of time. Every project is so different.

The main thing is we'll look at the demos to see how cool/complex your world is and how well your technical components work.

Some students are concerned that we don't give more clear grading criteria, however, it is hard for this project. To help with this, we will schedule some "open lab" hours before the project is due so you can s describe your ideas and how us your preliminary results and we can give you some idea as to whether you are attempting to do enough to get the grade you want.

History - Print - Recent Changes - Search
Page last modified on November 13, 2008, at 09:38 AM