assignments-grtowntech

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 thecourse is really about). A technical challenge is something that isnot just hard to implement, but also requires you to learn and thinkabout some graphics topic. Many of these topics will require you to learn something beyond what we’ve discussed in class.

Some of the technical challenges are required: you need to write shaders, have curved surfaces, and use advanced texturing.

Some challenges (the numbers are “hardness levels” explained later, and there are more details given for many of these later):

  • Really Cool Shaders (1-3)

  • Curved Surfaces

    • Sweep Object, Generalized Cylinder or Surface of Revolution (1-2)
    • Subdivision surfaces (2-4)
    • Parametric curved surfaces (2-4)
  • Hack Rendering Tricks

    • Local lights (1-2)
    • Inter-object shadows and reflections (2-3)
  • Non-Photorealistic Rendering (2-4,*)

  • Very Advanced Texturing

    • Skybox (1)
    • Billboard Object (1)
    • Projector Textures (1)
    • Environment Map (1-2)
  • Other Modeling Methods

    • Complex Procedural Model (1+)
    • Fractals (1-2)
    • L-Systems or other plant generators (1-2)
  • Performance Tricks

    • Culling (1-2)
    • Level of Detail (1)
  • Animation Techniques

    • Particle Systems (1-3)
    • Fake Physics Effects (1-2)
    • Very Complex Behaviors (1-3,*)
    • Complicated Animations (1-3,*)
  • Interface Improvements

    • Provide an “orbit” camera for when looking at objects (1-2)
    • Very Cool UI (1-3)

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.

We may not be able to help you with some of these, 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.

Some of the challenges require something to be complicated. You might wonder “when is an animation complicated enough that it qualifies as a challenge” or something like that. Generally, if you have any doubt, then it probably isn’t so complicated. But if you are in doubt, ask.

Really Cool Shaders (1-3)

Everyone has to write 3 shaders. But if the shaders do something really cool, that counts for technical challenge. Bump Mapping definitely counts as a technical challenge. A properly anti-aliased procedural shader would be a technical challenge. Phong shading would be a technical challenge except that you can get the code from just about anywhere - combine it with something more imaginative to make a technical challenge.

We'll give technical challenge points for really imaginative shaders.

Curved Surfaces

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 this you should be able to take a more arbitrary shape (a polygon or curve) and move it along a more arbitraty path.

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

For extra challenge, implement a non-interpolating scheme (like Catmull-Clark) and use exact evaluation.

To get full credit for this you must actually make an interesting object with a smooth surface.

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 (2-4)

Implement Bezier or B-Spline patches and use them to model some smooth object. Note: to get full credit for this, you need to have a more interesting object than just a patch.

Hack Rendering

Local lights (1)

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. Note: local lighting is NOT the hack "spotlight cones" that my sample program does.

Consider putting a flashing (or even spinning) siren on a police car, or ...

Inter-object shadows and reflections (2-3)

Shadows on the groundplane are easy. Shadows cast from one object onto another are much harder. Reflections of actual (dynamic) objects are really tricky - as opposed to using enviornment mapping with static environments.

Implementing shadow mapping (or shadow volumes) is one way to do this.

Non-Photorealistic Rendering

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.

Very Advanced Texturing

Skybox (1)

Make a textured sky - have clouds and stars (at night). But note that a proper skybox stays fixed relative to the camera (so it doesn't have to be so huge that it causes Z-Buffer issues).

Billboard Object (1)

Model a complex shape by using a flat object that moves to face the viewer (and probably transparency). Nice trees can be done this way.

Projector Textures (1)

Make a slide projector or something that creates an unusual effect. To get full credit, it needs to be clear that you are using the texture matrix stack to get a projection.

Environment Map (1)

Use environment mapping to create a reflective surface. Be sure to describe how you made the map.

Other Modeling Methods

Complex Procedural/Parametric Model (1+)

Generate complex shapes using a procedure. You might make branching trees, buildings with lots of columns, fractal mountains, ...

Fractcals (1-2)

Implement fractal geometry (a random kind of subdivision) to make some complex shapes like mountains or trees.

L-Systems or other Plant Generators (1-2)

These are procedural models like fractals that have specific rules for generating trees (or other plants).

Performance

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.

One trick to showing it off: allow the camera to be different than the "real" camera - that is, do culling for one camera, but have the option of drawing from a different position so you can see that things behind the camera (or blocked from view) aren't being drawn.

Doing a "don't draw what's behind the camera" (or outside of the frustum) is 1 pt, 2pts for something that is able to also cull objects that are occluded by other object. One more point for using a fancy hierarchical data structure like a BSP tree to do the culling really fast.

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.

Animation Techniques

Particle Systems (1-2)

Model a complex, moving object as a set of little particles. You can make fireworks, rain, snow, fountains, fire, ...

Fake Physics Effects (1-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 ...).

Bonus challenge for doing fake physics using the shaders (for example, having the flag movement or water waves generated in the vertex shaders).

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.

Updating my traffic system so that cars stop at the stop signs qualifies. Or cars don't drive through one another, but slow down and wait behind other cars.

If you had walking people on the steets (my town has no sidewalks) or ...

Interface Improvements

Better "Look At" controls (1-2)

When you look at an object of interest (or ride something, or follow it), you get no control of the camera. You could update the UI to allow some user control - for example to turn your head when driving in the car, or to move around an object you are looking at what still looking at it (this is called orbiting).

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

Again, this list is just a bunch of recommendations. If there’s something you want to do, ask!

Page last modified on November 11, 2008, at 09:47 PM