Projects Graphics

2019

Software rasterizer

Rasterization is something that as graphics programmer I deal with daily. However, the implementation details are not so obvious and there are plenty optimization techniques. My version of a rasterizer implements: perspective correct interpolation, rendering meshes, programable shaders, multi threaded binning and depth buffer.

Source code

2018

Volumetric clouds rendering

Rendering clouds has always been hard due to the nature of algorithms used to render it: some type of ray-casting. In the past few years companies like Simul Software pushed the realm of volumetric clouds into the games industry. Other companies like Guerrilla Games also implemented real-time cloud rendering systems. I based my research in the knowledge gained in similar systems and also by reading papers from Guerrilla and Stingray.

I implemented the first (brute force) implementation using Shadertoy, you can check it out here. After the initial implementation, I worked on a standalone version using DX12. I implemented several optimization techniques to run this smoothly at run time and keeping a great look.

  • Noise precalculation: implemented several noise algorithms in the CPU: perlin, simplex and worley.

  • Directional light shadow: this involves marching additional rays for each main ray. Because the clouds tile, I decided to compute the shadow pass once per frame using a compute shader.

The source for the project is in GitHub.

2017

Demo reel

This video showcases the most important projects I worked on from 2016 to 2017.

Nature rendering

Nature scenes are an important part for many videogames. They are huge and detailed scenaries that have the power to inmerse the player in the game. It also comes with other kind of problems like rendering large terrains, realistic skies, undergrow generation and placement. All of this should be done at interactive framerates. For this project, I wanted to put together diferent elements and optimization techniques using Opengl (selfmade framework).

Source(GitHub)

Demo my Sponza

For this project, I had to take a basic framework provided by the university (with window creation and inner loop managment) and render the sponza scene.

  • Physically based rendering: implemented using Cook-Torrance and custom enviroment mapping.
  • Shadow mapping: with smooth edges using multiple samples and poisson sampling.
  • Deferred: a deferred rendering pipeline. As it was my first attemp at deferred, I made it with a full fat G-buffer.
  • Antialiasing: using a deferred renderer is very powerful but aliasing is a problem. I implemented FXAA to solve this problem.
  • SSAO: developed using John Chapman's article.

Source(GitHub)

2016

Serious Engine & The R Island

During my three years at ESAT I worked in Serious Engine, a 3D rendering engine made using C++ and OpenGl. Using this engine, I developed a demo scene: "The R Island", on it, you can see water rendering using planar reflections and refractions, procedural mesh placing, instancing, screen space light scatering (god rays), procedural texturing etc.

Source(GitHub)