CS559
Fall 2005

News
Calendar
Assignments

Lectures/Notes
Tutorials
Sample Code

Project 1
Project 2
Project 3

Basic Info
Policies

C++ hints


Project 3 : Technical Challenges

Making a cool looking town needs to be more than just an art project!

You must implement some "technical challenges" (since that's what the course is really about). A technical challenge is something that is not just hard to implement, but also requires you to learn and think about some graphics topic.

Some challenges (the numbers are "hardness levels" explained later):

  • Skybox (1)
  • Billboard Object (1)
  • Sweep Object (1)
  • Complex Procedural Model (1+)
  • Culling (1-2)
  • Level of Detail (1)
  • Projector Textures (1-2)
  • Local lights (1-2)
  • Particle Systems (1-3)
  • Subdivision surfaces (3-4)
  • Parametric curved surfaces (3-4)
  • Fractcals (2)
  • Fake Physics Effects (2)
  • Non-Photorealistic Rendering (3-4,*)
  • Using Programmable Hardware (3-4,*)
  • Very Complex Behaviors (1-3,*)
  • Complicated Animations (2-3,*)
  • Inter-object shadows and reflections (2-3)
  • Very Cool UI (1-3)
  • Environment Map (1-2)

If there's something that you want to do that you think is a "technical challenge", but not listed, please ask. We may extend this list at a later date as we think of more ideas.

Items with a * mean that we may not be able to help you with it, so doing it will require some bravery and determination.

The numbers are a hardness scale (1=easier, 3=hard).

You must attempt to do "enough" hardness points. You must attempt at least 2 points for a C, 4 points for a B, and 6 points for an A. (3,6, and 9 for groups of 2). Note: to call something an attempt, you must have at least signs of life from it. You can't say "I attempted to do subdivision, but I failed before I even wrote a line of code."

While attempting enough points is part of the minimum requirements, your grade will be based more on what works. Generally, you will get the number of hardness points that you've attempted, but we might give you more if you do a particularly good job.

It is important that if you do something, you are able to show it off in the demo/make a picture for your album. So if you model some nice object, make sure there's a fast way to get the camera to go there. Or, if you do subdivision, show different levels of the same object so we can tell you really did the subdivision.

Skybox (1)
Make a textured sky - have clouds and stars (at night).
Billboard Object (1)
Model a complex shape by using a flat object that moves to face the viewer. Nice trees can be done this way.
Sweep Object (1)
Model an object by sweeping a shape along a path. A simple example of this is a cylinder (circle moving along a line) - but to really do
Complex Procedural/Parametric Model (1+)
Generate complex shapes using a procedure. You might make branching trees, buildings with lots of columns, ...
Culling (1-2)
Use some method to avoid drawing things that will not be seen. This must be more complex than just back-face culling.
Showing this off can be hard: your world will need to be complex enough that when you turn culling off, things slow down noticeably.
Doing "don't draw objects that can be determined to be out of view" (using some kind of fast data structure so that this is more efficient than just drawing the object) is a 1 point version. The 2 point versions account for objects hiding other objects.
Level of Detail (1)
Draw objects with different levels of detail - if they are far away, draw a simpler version.
Showing this off is hard because if it works correctly, no one will notice (except that your program might be faster). Have a UI to force different levels of detail so we can see them, and see the performance difference.
Projector Textures (1-2)
Use a texture parameterized from the light source position to simulate a slide projector or shadows. The texture should appear across multiple objects.
Local lights (1-2)
Have a light that only effects nearby objects. You can't just do this using the OpenGL falloff since that limits the number of lights you have - you'll need to switch lights on and off depending on what object is being drawn. More points for using a multi-pass method.
Consider putting a flashing (or even spinning) siren on a police car, or ...
Particle Systems (1-3)
Model a complex, moving object as a set of little particles. You can make fireworks, rain, snow, fountains, fire, ...
Subdivision surfaces (3)
Implement subdivision surfaces to create smooth objects in your system. Be sure to have a way to show the original model, as well as the smoothed on.
For extra challenge, implement a non-interpolating scheme (like Catmull-Clark) and use exact evaluation.
Note: if you are a group of 2, you can count subdivision as a technical challenge twice if you implement both an interpolating scheme (e.g. modified butterfly) and an approximating scheme (e.g. Catmull-Clark) and provide some comparison.
Parametric curved surfaces (3)
Implement Bezier or B-Spline patches and use them to model some smooth object.
Fractcals (2)
Implement fractal geometry (a random kind of subdivision) to make some complex shapes like mountains or trees.
Fake Physics Effects (2)
Use some kind of math techniques to make "physical" animations (like flags waving or water ripples in a pool, or flames). Rather than trying to simulate the physics, experiment with using procedural "hacks" (a waving flag can be a sine wave ...).
Non-Photorealistic Rendering (3,*)
Give your world an artistically styled look to the drawing. For example, make everything look like a pencil drawing by tracing object edges and making things squiggly, or use "toon shading" to make things look like a cartoon. Note: if you are really going to do an NPR world, we might be willing to remove the texture requirements - but only if you'll be doing enough NPR stuff.
Using Programmable Hardware (3,*)
Use pixel and vertex shaders to create more complex objects or appearances.
Warning: the tools for doing this aren't easy to learn, and we can't provide much help.
Very Complex Behaviors (1-3,*)
Some behaviors are so complicated that they constitute a technical challenge. For example, my example driving behaviors is a technical challenge. You could add more realistic traffic to it (for example that cars don't drive through one another, but slow down and wait behind other cars).
Complicated Animations (2-3,*)
If you had walking people on the steets (my town has no sidewalks) or ...
Inter-object shadows and reflections (2-3)
Shadows on the groundplane are easy. Shadows cast from one object onto another are much harder.
Very Cool UI (1-3)
The UI of the example system isn't that great. Tweaking the flying controls will help, but isn't a technical challenge. Big improvements are possible. Imagine, flying controls that avoided going through buildings, a navigation system where you clicked on a map and were driven/flown to the appropriate place (without flying through objects), ...
You could even imagine more of a user interface that allowed you to make a game of it. Race the cars, deliver pizza's, ...
Environment Map (1-2)
Use environment mapping to create a reflective surface.