Project

Nereus: A Realistic Ocean Renderer

Dissertation • October 2021 - May 2022
Tools: C++OpenGLGLSL

Summary:
A modern C++ OpenGL rendering engine for rendering realistic oceans in real-time, that serves as a framework for exploring novel wave simulation techniques and water illumination models. Third-year dissertation project for the University of Cambridge Computer Science Tripos, which received a Highly Commended Dissertation Prize. It involved all aspects from project planning and management, literature research, design, implementation and evaluation of both the software and the project.

Project Description

What is Nereus?

Nereus is a real-time render engine for rendering realistic oceans. That is, it is an application capable of rendering an ocean scene under real-time constraints, in which the water surface is animated with waves and has a realistic visual look. It is implemented in C++ and uses the OpenGL graphics API.

It has a flexible and modular architecture, which provides they key set-up and OpenGL components required to render an ocean scene. For example, there are separate modules for managing GLFW windowing, providing an UI and, most importantly, a rendering framework with classes encapsulating useful OpenGL constructs.

Its clear structure allows you to focus on the key aspects of rendering ocean scenes, without having to deal with all the additional overhead of features provided by fully-fledged game engines. This makes Nereus a good starting point for anyone interested in experimenting with and developing new illumination models and wave simulation techniques. Moreover, thanks to its careful architecture design, Nereus can be easily extended to add any new features and components that you may require.

Why was Nereus created?

I developed Nereus as my third-year dissertation project for the University of Cambridge Computer Science Tripos. This involved planning, implementation and evaluation of the software, culminating in a written dissertation.

When deciding upon a dissertation topic, I noticed that projects in the field of computer graphics with an interest in ocean rendering generally consider the following topics:

Designing and creating a flexible, modular renderer architecture that can be easily extended by future users. Exploring wave simulation techniques for animating an ocean surface. Exploring different illumination models for achieving a realistic water look. Existing projects usually look at one or two of these points in isolation, rather than all three combined. I decided to carry out a project that aimed to integrate all three goals together, producing as an end-product an open source application that could serve as a framework and a starting point for other students, researchers or artists to explore new wave simulation techniques and water illumination models. That application is Nereus.

More details and images coming soon 👀

On the meantime, you can check the project in my GitHub.