14ercooper (or was it 14er?)
Assignment 1
This assignment was pretty straightforward, implement both Gourad and Phong shading, using both Phong and Blinn-Phong Illumination. Then, let the user switch between which pair of shading style and illumination model they wish to use with the 1-4 keys, and print the currently selected combination below the framerate data. These were to be implemented using two shader programs, each using subroutines to handle the lighting calculations, and shared UBOs for light, material, and MVP matrix uniform data. The light (a point light with quadratic attentuation im my implementation) has an ambient, diffuse, and specular component.
There's nothing particularly interesting past the assignment this time. Some implementation notes are that colors are per-vertex (though, per the assignment, no textures are applied). I find my way of calculating the squared distance to the light (dot product of the difference of the vectors) to be at least slightly clever and saves a few GPU cycles, and everything does work quite nicely, so I'm happy with the end result.
Assignment 2
This assignment was to use pipelines and seperable programs to render a teacup (or similar) object defined using bezier control points by tessilating, then to either
use perlin noise to apply a procedural texture to the object or to draw the wireframe of the object.
Nothing particularly exceptional this time, though it was mildly annoying to wrestle with the redefinitions of gl_PerVertex for the seperable programs to want to work correctly, as well as to keep it working. I did find it easier to make the pipelines from the start then simply expand them with the new shaders as I went through. The fact that you have to un-use shader programs to use pipelines was also a bit that took a while to figure out.
Assignment 3
This assignment was to implement instanced rendering of particles, deferred rendering, as well as adding motion to the particle systems GPU-side.
The instanced rendering was accomplished using an SSBO to store offsets for each particle, which gets indexed into as vec3 offsets for each particle at draw-time.
Deferred rendering is done by writing out geometry information to the g-buffer, then loading this back in during the next pass to apply Blinn-Phong illumination.
The updating of the particle system was done using a compute shader to update the positions/offsets of each particle by modifying the SSBO each frame, something which runs much faster than I would have expected.
Nothing particularly fancy, other than some cool looking effects from the instanced rendering and particle system made by the compute shader (of a cube which turns into a sphere that collapses back into the cube).
One more frustrating note was that both the textbook used in the class and the learnopengl.com tutorials for deferred rendering use RGB32F and RGB8 formats for the g-buffer, but this results in either just a completely
non-functional g-buffer on my Nvidia GPU or the static/noise filled image above on my Intel integrated GPU. Turns out, OpenGL 4.3 requires these to be of RGBA32F and RGBA8 formats, with A set to 1 otherwise it just doesn't work.
Assignment 4
This assignment was to use POVray to add several effects to a scene with a basic green ground plane, a blue sky, and a red M object that were being rendered with POVray and raytracing. I chose to add 3 effects. The first effect was 3 "soap bubble" spheres that are reflective, refractive, and iridescent, visible behind the M. The second effect I added was textures to the M (a wood texture), the sky (a sky sphere effect), and the ground (a stone texture, since I liked how it looked). The third effect I implemented was photon emission from the light targeting the reflective spheres and the M, to get more realistic lighting in parts of the scene that would otherwise simply be in shadow. Together, these create a rather nice looking scene, with some nice looking effects.
Final Project
This was a fairly open-ended assignment, where we were tasked with implementing any graphical technique we wanted, provided it was non-trivial. My team chose to implement a quad of water, complete with diffuse and specular lighting from a light source, as well as reflection and refraction off the environment. I'm quite happy with the end result, which is a quite nice looking quad of water, which also has both local and global scales of wave mechanics as well.
|