main-project4

Project 4: Graphics Town Basic Instructions

Update: 12/8/2010: explanation of “properly affected by light” in a shader

Update: 12/4/2010: checkpoint 2 instructions added (they are also on the course main page).

Overview page: this tries to give you a basic idea of the project and its ground rules.

Because we want to give you a lot of flexibility, yet at the same time make sure that you’ve learned enough graphics stuff, the project takes a lot of description.

Note: Even the due date situation is complex, as it involves University Rules (things must be due before reading period), class rules, and scheduling logistics (since we will do demos). See the BAD LINK section for an explanation.

Other Pages: Checkpoint 1 Description, Checkpoint 2 Description, GrTownGalleryPage, GrTownTech, GrTownCode

1.@ Overview

The goal of this project is to create a world. 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, … There is a gallery page with some old projects if you want some ideas.

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 catch is that we do need for you to demonstrate your competence with creating 3D graphics programs. So, there is a list of required things you must do, but there is a lot of flexibility in terms of how you meet these requirements.

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…

For this project, we will provide you with framework code to build on. Years of 559 students have used it successfully, and it allows you to focus on adding cool features, rather than dealing with basic infrastructure.

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.

Several years ago, 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.

This year, the main changes are in how we phrase the requirements, how we set the intermediate deadlines, and how we will handle people working together. The problem is that since the set of things people do is so varied, its hard to describe what is “enough” cool stuff.

3.@ Objectives

If you understand what we want you to get out of this project, it will be easier for you to understand how we will assess what you do.

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

If you’re concerned about having to be “artistic” - just try to bedifferent than what the provided sample is. Don’t use the examplehouses in their regular grid. (An easy way to do this is just avoidusing the “SimpleLot” and “SimpleSubdivision” classes).

In terms of your grade, effort spent on technical aspects is morevaluable. For example, it is better to spend your time making a simple"blocky” car drive around in an interesting way, or to make a simpleshaped car out of parametric surfaces, or to light the car in aninteresting way, then to carefully model a gorgeous model of acar. (of course, if you want to make model a gorgeous car, implementbezier patches to display its curved body, have it realistically racearound a track … - we won’t complain).

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

  1. To learn how to work within someone else’s code - even if that code isn’t perfect. (so, you need to use the framework code, unless you get specific permission otherwise)
  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 Deadlines

There are 3 preliminary milestones:

  1. If you want to work with a partner, you must send email to the TA before Thanksgiving (that is, on (or before) Wednesday, November 24th).
  2. December 1 Checkpoint: On (or before) Wednesday, December 1st, you must send email to the TA and attach a screenshot of your program. This means that you must have (at least) gotten the sample code to compile. We want something just to make sure that you have started.
  3. December 8 Checkpoint: On (or before) Wednesday, December 8th, you must send email to the TA with your 2nd project checkpoint. Even if your project is going to be late, you need to send a status update. Details of this checkpoint will be provided at a later date. Details of this checkpoint have been posted on the course main page.

For checkpoint 2, please send email to Subhadip with:

  • 1 or 2 pictures - they should show that your program has gotten beyond what the starting code does
  • a description of your overall idea for the project
  • a list of the technical challenges that you intend to implement
  • a few of more complicated objects/behaviors that you intend to implement
  • whether you would be willing to give a demo on Thursday, December 16th, and whether you could give a demo between 1-4pm (15 minute time slot).

The official project due date is Wednesday, December 8th. However, late assignments will be accepted. The precise late policy will be explained closer to the due date.

If your checkpoint shows that you have completed the basic class requirements by the due date, you will be given more leniency in turning things in late.

We will do project demos beginning on either the 13th or 14th of December. Details to be determined closer to the due date.

5.@ Basic Requirements

  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 (explained in a moment). 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.

Update 12/8/2010: The “properly affected by the light” requirement for a shader is a little vague. Also, it implies that you should look at the positions of the regular GL lights (so that your shader fits in with other objects lit using the standard pipeline). The latter is hard - for annoying reasons (the standard GL lighting model is not necessarily convenient for the modern shader-based stuff).

So - for “properly affected by the light” - your shader should take lighting into account. It does imply that some shading calculation is going on. This could be as simple as assuming that the scene is predominantly lit by sunlight, and using that direction in a diffuse shading computation. (or if you wanted to really simplify, assume that the sun is vertical - e.g. its high noon). Whatever it is, your program should figure out what direction the light is coming from (even through a simplifying assumption) and make use of the surface normal. Implementing Phong Shading is a good technical challenge (that isn’t so hard).

5.1@ 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. Getting rid of my silly looking houses is an important first step, even if your make new ones that aren’t much better.
  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 successin all categories is important, sometimes excellence in one categorycan 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 advertises.

6.@ The Framework code

You need to start with the Framework Code.

7.@ Working Together

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

  1. On or before the checkpoint (November 24th), you must send the TA email saying who you will be working with.
  2. After December 1 checkpoint, you may not break up your group. If you choose to break up your group prior to Dec 1, send email to the TA. You will both need to do the Dec 1 checkpoint.
  3. Each person must independently create enough pieces to fill all the basic requirements (e.g. create a scenery object, a moving object, a texture, a shader, a behavior, a complex use of texturing, a curved surface).
  4. Generally, the entire group will get the same grade. However, we reserve the right to make exceptions.
  5. Late penalties will be assessed individually.

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 yourprogram, including all texture files and other resources.

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

In your readme, please make sure to have the following (you can breakit 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 madeto the “core” of the system (e.g. other than changing main.cpp andadding new Objects and Behaviors).
  • If 2 people worked on a project, provide an honest description of the division of labor. Be sure to note which pieces were made by a single person (since this is part of the requirements).

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

9.@ Other Resources

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

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

10.@ Grading

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

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

Some students are concerned that we don’t give more clear gradingcriteria, however, it is hard for this project. To help with this, wewill schedule some “open lab” hours before the project is due so youcan describe your ideas and show us your preliminary results and wecan give you some idea as to whether you are attempting to do enoughto get the grade you want.

Page last modified on December 08, 2010, at 08:48 AM