GPU Programming Project 1

Graphics Program with Modern OpenGL

Project 1 in this class is to create a graphical program of your choosing, of sufficient complexity to require you to learn how to program a GPU using modern OpenGL.

Due Dates and Grade Weights

(20 points) October 8: Project Specification and Intermediate Goal
(50 points) October 22: Project Due (30 points) Week of October 22: Presentation of your Project

Intermediate Goals

Besides the final set of features, some intermediate goal should be obtained partway through the project period. It's up to you what the midpoint is, and I'd suggest not setting it to ambitiously. The final feature list is due at the same time, in the format of the suggested projects below.

Project Presentation

For the presentation, show the class what your project looks like, and explain in a general sense how it works. We don't need line-by-line coverage, just a general description of what each shader program does. Be prepared for questions. Plan for a 10 minute presentation with time for questions.

Alternative Projects

Since CS492 is a special topics course, if you would like, you can design your own project 1 and project 2. So if you have a project that you would really like to do that doesn't fit into this mold, feel free to discuss it with me.

Project Examples

Here is a list of examples that was explained in class on September 19:
		Suggested Project 1

Title:  Grass Field with Lawnmower
Description:  There will be a field of green grass, with occasional weeds, in a gentle breeze.  Then, a lawnmower will mow the field, one row at a time.  Post-mowing, the grass (and weeds) will be short and not affected by the gentle breeze.
        1.  The grass will be varied in color, primarily with green and light brown.
        2.  The wind will move the grass in a pattern
        3.  There will be at least 100K blades of grass, possibly more depending on performance
        4.  The weeds will be taller than the grass, and there will be at least 100 of them
        5.  The lawnmower will be a textured box with wheels
        6.  The lawnmower wheels will turn at the correct speed so it looks like they are rolling on the ground
        7.  The camera will be movable using typical FPS controls
Midpoint:  Features 1 through 4

Suggested Project 2

Title:  Firework Show
Description:  Fireworks will be launched from a fixed point at the bottom of the screen.  These will be shells only, like a professional show.  Shells will explode into a variety of effects.
        1.  Shell launch angle, speed, and delay before bursting will vary from one shell to the next
        2.  Shells will burst into a number of particles, in a variety of ways to produce different effects
        3.  There will be at least 5 different effects
        4.  There will be at least 5 different color patterns, which are available for each effect, yielding 25 distinct types of shell.
        5.  Shells and particles will be subject to gravity.
        6.  The GPU will be used for physics calculations for each particle.
        7.  The camera will primarily remain at a safe viewing distance, but every 10 seconds will fly through the show and assume a different viewing position.
Midpoint:  Shells launch, explode into token effect without particles

Suggested Project 3 (for people who took CS492 last Fall)

Title:  FPS with OpenGL 4.0
Description:  An FPS similar in complexity to CS492 Game Engine Design from last Fall, updated to OpenGL 4.0.  
        1.  All OpenGL calls will be checked to make certain they are available in OpenGL 4.0+.  This will require vertex and fragment shaders.
        2.  All objects will be stored in vertex buffers on the GPU, and only one copy of large objects will be stored.
        3.  The engine will be multithreaded so that rendering, physics/movement, and collision detection will be handled separately
        4.  Lighting will be calculated in the manner of the modern tutorials wikibook
        5.  Level of detail will change depending on the distance objects are viewed from
Midpoint:  Playable, but no lighting or level of detail

Class Demo Project

Title:  Fruit Tree
Description:  A fruit tree is generated in a procedural way.  Fruit is added at the end of each branch.  Suddenly, the tree is rocked by an explosion which throws fruit in all directions.  Fruit is subject to gravity, and lands on the ground.
        1.  Tree contains at least 2,000 vertices
        2.  At least 500 fruits are generated
        3.  Fruit leaves the tree with a trajectory away from the center
        4.  Fruit physics are handled on the GPU
        5.  Fruit level of detail improves upon close viewing
        6.  The tree branch color varies depending on position within the tree
        7.  The tree rotates so that each side can be seen and is affected by a gentle breeze
Midpoint:  1, 2, 5, 6, and 7.  Fruit falls straight down without GPU physics.
Note:  This isn't done yet, but will be.  The first two are covered, and sort of #6, and #7.  We'll do a reprise of vertex attributes at some point and add in the level associated with each branch.  The fruit detail will be related to the tessellation shader demo, probably next week.  Physics will be a continuation of feedback, but might be replaced with a compute shader in a couple weeks.