Lab 1b
Illumination
Due: Sunday, Nov 11th 2018, 23:59
Start Early!!!
- Individual Effort:
-
- No team participation is really encouraged in the case of the
homework or the labs.
You're are not allowed to use any libraries or extra code except
gl-matrix, webgl-utils.js and some helper functions in order to initialize WebGL / load shaders. Especially Three.js is not allowed! If you're not sure or want to use some library, ask the teaching assistants before.
Objectives:
- To understand the development of graphics programs.
- To understand illumination models.
- To become closely familiar with the WebGL rendering pipeline.
- To become experts in debugging graphics code.
- To have fun.
Do the following before you proceed:
- Make sure you have read and understood the background and
became familiar with the working environment that you should
have gotten to know in Lab 1a.
- You have a fridge full of nutritious food.
Goal:
The goal of this lab is to create a simple, interactive 3D application and explore shading and illumination models. The focus
is on the development of a graphics program and how to handle surface properties and lighting. Most of the concepts
are laid out in the book as well as in class with example programs.
Tasks:
Follow this guideline step-by-step. Make sure that you thoroughly test
your program after each step so that you can find bugs easier and quicker. Create a scene with 9 3D shapes which can be seen from the camera.
The shapes should be 3D and not flat. For example: cubes, spheres, cones, or a combination of them. Ensure that at least one of the shapes
in the scene contains a curved surface (sphere, cone, cylinder, etc...) in order to better see the effects of the shading models.
This assignment directly follows
assignment 1a,
which may be used as a starting point. Implement the following shading and illumination models using a
point light source initialized at coordinates (0, 10, 0):
-
(15%) Shade the models - Gouraud/diffuse
Implement Gouraud shading (vertex shading) with diffuse illumination.
-
(15%) Shade the models - Gouraud/specular
Implement Gouraud shading (vertex shading) with the Phong illumination model to produce a specular highlight.
-
(20%) Shade the models - Phong/diffuse
Implement Phong shading (pixel shading) with diffuse illumination.
-
(20%) Shade the models - Phong/specular
Implement Phong shading (pixel shading) with the Phong illumination model to produce a specular highlight.
-
(30%) Add additional user interaction with the shapes and lights
Respond to user interaction from the keyboard. Implement the
following:
-
selection
- The user should be able to select the active lighting and shading models used by pressing the number keys between:
- 'u' (Gouraud/diffuse),
- 'i' (Gouraud/specular),
- 'o' (Phong/diffuse), and
- 'p' (Phong/specular).
-
Light transformations
- The user should be able to toggle between interacting with the shapes and interacting with the light. Use the 'L' key to toggle between the two interaction modes. Lights should
rotate and translate using the same keys as in assignment 1. Object interaction should work as before. Light transformations are with respect to the global coordinates.
Extra Credit (max 10%)
In some of the bonus tasks you will have to create a ground plane. You only have to implement it if you are doing the corresponding extra tasks.
-
(10%) Implement shadows
Using either the projection method, or shadow maps to produce an accurate shadow on the ground plane. The user should be able to turn the shadows on and off by using the 'h' key.
-
(5%) Cooke-Torrance illumination model
Implement the Cooke-Torrance shading model. This model should also be selectable by the user using the 'k' key.
-
(5%) Spot-light source
Implement a spot-light source. The user should be able to toggle between the types of light sources (point or spot) by using the 't' key. The spotlight should always be pointing at the object
and the beam should be narrow enough that it can be seen on the ground plane. Use an inner and outer radius for the spot-light, with the amount of illumination
falling off smoothly between them.
Hints
- Remember the difference between Phong illumination and Phong Shading: Phong illumination is the lighting model and Phong shading is how the surface properties are interpolated
across the faces from the vertices.
- Do not write all your code in one big file. Be as modular as you can.
Submission
- Be sure to double check your final submission by unzipping it
in another directory on a computer in the PC LAB and testing it. (Especially for
last minute submissions.) A project that doesn't run will lose
more points than one that is one day late.
- Be sure to submit any comments or remarks in a 'readme.txt' file.
- Submit your files on Moodle.
Grading Criteria
Grading the labs will be based on the following:
- 80%: Correctness and adherence to assignment specification.
- 10%: Readability and structure of code, use of comments, indentation, etc.
- 5%: Efficiency and speed (only an issue if its very inefficient)
- 5%: Adherence to lab procedures (submitting, naming conventions, etc)
In order to get a full mark, you need to do all of the assigned tasks AND
adhere to to lab procedures while creating readable and efficient code.
I.e. if you accomplish only 70% of the tasks correctly, but you do not
adhere to lab procedures, your final mark will be 70*(1-0.05) = 66.5%.
Last modified: September 29, 2018
Manfred Klaffenboeck /
manfred DOT klaffenboeck AT univie DOT ac DOT at