GPU Programming Project 2

Programming Something Interesting with a GPU

Project 2 in this class will be very similar to project 1, and in many cases I know you will propose to continue your project 1. It is intended to give you experience in programming graphics processors. You can use OpenGL, or some other framework such as Vulkan or DirectX. The main requirement here is that it be a framework which exposes you to the workings of the GPU (as in, you can use Blender, but can't just do the whole project that way).

Due Dates and Grade Weights

(20 points) November 14: Project Specification
(50 points) December 5: Project Due
(30 points) Week of December 5: Presentation of your Project

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. We'll start presentations on Monday, December 5, and they'll likely spill over to December 7.

Alternative Projects

Since CS392 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. I think the mold is probably flexible enough for about anything, thought.

Project Examples

Here is a list of examples that was explained in class on September 19 (same list that was attached to 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.
Features:
        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

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


Suggestion for people who took CS392 Game Engine Design:
Title:  FPS with Variable LOD
Description:  An FPS building on the game engine from CS492 last Fall
Features:
		  1.  The game will take place in a forest of generated trees
		  2.  The trees will grow with time, increasing in detail and complexity
		  3.  The growing trees will block projectiles
		  4.  Once the trees grow large enough, they will begin to shoot at the player
		  5.  Trees can be destroyed even when small
		  6.  More trees will continue to grow until the player is killed
		  7.  Score is determined by how long the player survives


Class Demo Project from Last Time I Taught This

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.
Features:
        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
This is the "seedfruit" demo I keep referring to