Adrian Courrèges writes detailed graphics studies of how games such as GTA V and Doom 2016 render a frame.
HN commenters credit him with starting the trend of game graphics studies, praise his Doom 2016 analysis, and say his blog inspired their own analyses.
I think mostly because having scads of clever conditionals all over the place greatly increases the risk of subtle and hard-to-reproduce bugs. From a 2007 Carmack email [1] :
> The way we have traditionally measured performance and optimized our games encouraged a lot of conditional operations -- recognizing that a particular operation doesn't need to be done in some subset of the operating states, and skipping it. This gives better demo timing numbers, but a huge amount of bugs are generated because skipping the expensive operation also usually skips some other state updating that turns out to be needed elsewhere.
> We definitely still have tasks that are performance intensive enough to need optimization, but the style gets applied as a matter of course in many cases where a performance benefit is negligible, but we still eat the bugs. Now that we are firmly decided on a 60hz game, worst case performance is more important than average case performance, so highly variable performance should be looked down on even more.
There was fascinating breakdown [2] of a single GTA V frame about five years back. It was a real eye-opener for me - whole full-screen rendering passes for things like water reflection and refraction when there isn't even any water visible in the scene.
[1] http://number-none.com/blow/john_carmack_on_inlined_code.html
[2] http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study/
Great blog post. Maybe he will post another article about MGSV5 open world rendering, as it's one of the highlights of the Fox engine.
Anyway RAGE engine from Rockstar (GTA IV+V, RDR 1+2) is probably one of the most advanced engines, so much details in rendering.
http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study-part-3/
A detailed comparison of open world game engines would be interesting with focus on LOD, streaming and rendering techniques.
* RAGE (GTA5/RDR2)
* AnvilNext (AC:O, GR:Widelands)
* Frostbite3 (NfS:Payback, SW:Battlefront2)
* Just Cause 3
* Watch Dogs 2
* Mafia 2/3
* Dunia (Far Cry 4/5)
* Decima (Horizon Zero Dawn)
* Fox (MGSV)
* REDengine (Witcher 3)
* Minecraft (Java + new C++ Bedrock ed)
* Genome (Elex)
* CryEngine/Lumberyard
* Unity
* Unreal 4 (PUBG)
It's impressive how such game engines provide seamless high speed travel with vehicles (cars, airplanes) in an open world environment.
Graphics programming analysis done using examples written in WebGL–genius. Hypertext that takes full advantage of the medium. This reminds me of something I'd see on https://pudding.cool/, but it goes far more in depth than anything there. Absolutely fantastic article.
I've been using MSAAx4 in my rendering engine for some time and only recently have considered switching to a FXAA / TAA implementation. I'm actually not sure I'm going to go through with that now. I definitely learned a lot here, and will probably use the analytical approach for UI items, I hadn't heard about that anywhere.
Not often you see graphics-programming stuff on HN. For anyone interested in more graphics write-ups, this list of frame breakdowns is one of my favorite resources:
https://www.adriancourreges.com/blog/
Definitely agree about “juicing” your game, especially from a visual perspective. There’s so many graphics concepts that I didn’t know about and didn’t have the eye to recognize.
Things like ambient occlusion, bloom, reflection probes, and physically based rendering/materials were totally unknown to me but were really essential to making a game look “AAA”.
Adrian Courreges has a great list of graphics studies that expose you to the space:
https://www.adriancourreges.com/blog/2020/12/29/graphics-studies-compilation/
Following technical artists on Twitter is also a great way to get exposure on more one-off techniques (how to make a fire effect etc.)
I’m a big fan of @minionsart and @adrianmendezzg but there’s tons of other indie devs and technical
artists sharing their work.
Education is about exercising the mind. I don't think many play with inflated balls in their adulthood, yet it's very important to teach children hand-eye coordination, team play, and other concepts so that they become better functioning humans.
There are problems with the curriculum though, one of them that it plays catch-up with the state of the world. IT in particular moves very fast. Graphics programming is not one of these things however. For example, if you've done the courses, and experiences just how hard it is to crate anything in 3d, you can better appreciate the work that goes into modern 3d engines. Look at this beautiful breakdown of the inner workings of the GTA V engine:
http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study/
I always thought this was an approach that would be well suited to ray tracing or similar. Both ray tracing and rasterisation are proportional to scene complexity and pixel count, but the balance is different. Ray tracing handles scene complexity better and rasterization covers pixels quicker.
The excellent http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study/ shows how many pixels are written to to construct a scene using rasterization. Many many intermediate render targets are involved. Any intermediate layers that are not directly in screen-space would not benefit from foveation.
Raytracing/ray marching etc. working on a pixel by pixel basis would be far more suited to larger fuzzy pixels where you are not looking.