Pretty Blue
Creator: Augusto Mota Pinheiro | Noor Hammodi | Nicolas Towa Kamgne | Gabrielle Guidote | Jack Spiratos | Merouane Issad
Start Date: 06/08/2023
End Date: 16/08/2023
Medium: C++ | OpenGL
Welcome to Pretty Blue!
A simulated underwater world teeming with life and original landscapes at every generation,
built in just under 2 weeks by 6 undergraduate students.
For the final project of our Computer Graphics course (COMP 371), we were tasked with creating a procedural world in OpenGL. We
decided to create an underwater world, with a focus on the procedural generation of the terrain and the
creatures that inhabit it.
Dividing the project in 5 parts (camera effects, terrain generation, cutscene, flora generation & fauna generation),
I was put in charge of the camera effects and shaders for most objects. Also, I was responsible for the efficient implementation of the rendering pipeline (which included instanced rendering), which was a challenge in itself because of the
sheer quantity of rendered objects.
If you're interested in the technical details as well as the codebase, you can check out the GitHub repository for the project.
Camera Effects
After doing some research on how light behaves underwater, I decided to implement 3 camera effects:
- Simulated Caustics: A light effect that simulates the way light refracts underwater.
- Volumetric Lighting: A light effect that simulates the way light scatters underwater.
- Chromatic Aberration: A distortion effect that separates the RGB channels of the image, creating a rainbow-like effect.
Rendering Pipeline
The final pipeline is a hybrid of forward and deferred rendering, which I find to be very interesting as it was a solution that
came up naturally based off what we learned in the course.
Without going into detail, the rendering pipeline for the underwater scene is as follows:
- The world is rendered once to a framebuffer object (shadow pass).
- The world is rendered another time to another framebuffer object (color pass, includes shadows + caustics).
- The color texture is then rendered to the screen, with the volumetric lighting and chromatic aberration effects applied.
Final Thoughts
I really loved working on this project, it was the perfect mix of creativity and technical knowledge. Working with my team was a
great experience and continues to confirm my belief that working well with others is the key to success.
Overall, I'm very proud of what we accomplished in such a short amount of time (although I would have wanted more time), and I'm looking forward to working with 3D graphics again in the future!