
So, I've been a fan of the graphics studies that Adrian Courrèges do, so I figured I would try it for myself.
This is a rendering breakdown of one frame of my jam game, Eternal Void.
Now this might seem silly, a rendering breakdown of a jam game? Well, eternal void is actually built upon one of the most complicated rendering pipelines that can currently be found in any game. (In fact, some parts of it are beyond state of the art)
Before I start however, I really recommend you try the game out for yourself, to get a good idea of how it plays and looks! Link to game page
Have you played it and rated it now? Good, let's get on with it then!
First, let us present the final frame that will display.

Not too bad, eh? But we got a long way to go before we get there!
First, we render a G-buffer of the entire scene. For people who are not familiar with what this is, it is basically a representation of the geometry we are rendering. This means things like surface normal (i:e what direction the surface is pointing towards), depth (i:e how far said object is from the camera, this can be used to construct the exact position of the pixel later) and albedo (the raw color of the pixel). There is other information here (such as metalness, and roughness) but these are not super important.

The albedo of the frame.

The depth of the frame (remember this, it will be important later!)
Now, first of all we want to render all of the direct lighting in the scene. This is basically all the lighting that has directly come from the lights in the scene (in this case the fluorescent lights).
To accomplish this, the method described in Eric Heitz' paper, "Real-Time Polygonal-Light Shading with Linearly Transformed Cosines" is used. It gives very realistic results for not too extreme cost.
First, we do this for diffuse only, for the people reading not familiar with this, it's basically things that arent supper "reflective"

This is definitely something! But, the dark parts are way too dark, and there are way too many of them!
One reason we have this issue is because we currently do not render any specular lighting, so let's do that.

Now we're really getting somewhere! If I was nVidia, this is probably were I would slap on the RTX OFF text. But I'm not nVidia, so let's move on!
Now, we still have the problem of things being too dark. Now, why is this?
Well, currently anything that is not directly lit up by the lights, is going to be pitch black. But this is not how light behaves in the real world. In the real world, light bounces around until it eventually hits our eyes. Right now, we are basically removing all the light that comes from bounces, which is why our dark areas are so dark.
So, how do we manage this? Well, we need something known as indirect lighting (it comes in many terms, sometimes it is referred to as 'global illumination')
Visual representation of direct vs indirect lighting. Image credit goes to scratchapixel
Now, how do we model this indirect lighting exactly?
Well, there are many ways of going about this, all with their own sets of challenges and compromises. Fortunately, our scene is pretty small so we are going to be using the best method available to us (basically) which is ray-tracing.
Now, you've probably heard of / seen raytracing as a way of simulating cool looking reflections in cars and such (and we are going to be doing that soon, don't worry!) but ray-tracing is also excellent at simulating this kind of indirect lighting (in fact, it's what movies use!)
Our indirect diffuse, simulated with ray-tracing. This is actually beyond state of the art, but I am not going to go in to as of why this is here, as that is way too complex.
However, we are once again missing the specular, so let's get that too!
This is probably closer to what most people imagine when they hear ray-tracing. Pretty neat eh?
So, let's combine the indirect and the direct, what does this look like?

Neat, now we're really getting somewhere. However, we are still missing one of the key elements of what made the final frame so nice. The volumetrics!
For this, I am using the methods descibed in "Physically Based Sky, Atmosphere and Cloud Rendering in Frostbite" which whilst primarily focused on clouds and atmosphere, actually contains excellent information on how you can extend this to things like fog as well!
So, the volumetrics is actually split into two things. The volumetric "light" (basically how bright the volume is at some pixel) and the volumetric "coverage" (how much volume a single pixel has passed through)

This is the volumetric light. Nothing super complex here, it's brighter for the volumes around the light sources.

The volumetric density. Notice anything familiar? This looks pretty much like the opposite of the depth map from before. Which makes sense really, as for the objects that are further away from the camera there is going to be more volume for the light to go through! Pretty cool how that works, though.
So, let's add these volumetrics to the result from before.

amazing how something so small makes such a huge difference, huh?
Our frame is actually mostly complete now! However, it still looks a tad too clean. Also, we are missing the text, and the bright parts of the image (the light sources) just don't look very good.
First, let's try to fix the problem of the bright parts not looking bright enough. One very common way of doing this is with bloom. Which, basically adds a "halo" around the bright parts. I'm not a big fan of bloom however, so I'll be doing.
If we look at something really bright in a photo, we see something quite different.
You see it, there are pretty distinct "blades" around the sun. Let's try that instead!

Of course, my blades are much simpler. Still, a really nice effect in my opinion. Oh, and we also add the holographic text now.
Now, we only have the problem of the frame being too "clean" to clear up. The reason for this is actually the fact that everything is in focus at the same time. In the real world, this is not possible. So, to fix this, we add some state of the art pentagonal depth of field.

and just like that, we back to the final frame!
Naturally, I could not cover everything here. Actually, far from it! However, I hope this was still informative for some of you. Happy jammin'!