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.
|