Assignment 2: Proxy Geometry

CMSC 491/691, Spring 2014

Due Friday, March 7, 2014


Modify your assignment 1 code (or mine) to add apparent depth to the ground surface using relief mapping or parallax occlusion mapping. Both of these methods treat the rendered geometry as an shell around the "real" geometry, described by a height map. For your height map, use pebbles-bump.ppm (in your assignment 2 repository). You only need the parallax depth effect, you do not need to also include self-shadowing.

Here are some resources for relief and parallax occlusion mapping:

691 students

Implement one of the advanced extensions to these techniques: soft shadows, handling of silhouettes with quadric silhouette approximation or prisms, acceleration (e.g. with cone step mapping or relaxed cone step mapping), steeper bumps with indirection mapping, etc.

What to turn in

You will submit your work to your class CVS repository. Submit your project source only. I do not want your intermediate build files, executables, copies of GLFW, or other stuff I can get or build myself. Do include necessary texture or model files.

Check in a readme.txt file telling me what external sources you used, what you did for your assignment, and what I should notice. Check in all of your source code files, and anything else that cannot be regenerated from them, including any external textures or models. Do not include any compiled object files, libraries or executables. They won't do me any good, and can lead to strange hard to find bugs when compiled code not corresponding to your current source is resurrected from the repository. Do not package all of your files up into a single archive. CVS has limited ability to deal with binary files, and you'll quickly end up using more space than you think you're saving.

If you need your GL system quota increased (now, or at any time during the semester), let me know.

External help

I am expecting you will need make heavy use of web resources and sample code for this assignment. Such use is explicitly allowed for this assignment, provided you document your sources. In particular, it is even OK to look at other people's physically-based shader code


This is a little more straightforward than the previous assignment, but an example of the kind of implementation based on algorithmic descriptions that are common in game development. Also, methods treating the geometry you render as a shell around the real geometry are very powerful for rendering objects that are hard to describe with polygons alone (especially smoke-like effects, but relief or parallax occlusion fit better into the sand box from last assignment).