Les Imbroglios d'Alexis Breust

De l'impro sans bugs et du code lâcher-prise.

La plupart des articles techniques (en anglais) concernent le développement du moteur de jeu open-source lava que j'ai mis en place, avant tout, comme un challenge personnel pour me former sur différents algorithmes et technologies.

Ray-tracing in 10ms: Ambient occlusion

The world of ray-tracing, known for its ability to generate photorealistic images, is now at our doorstep. It's there, waiting for real-time 3D engineers to fully understand its potential. In this series of articles, I'll describe my journey of integrating this powerful new tool into my existing engine.

At 60 frames per second, you only have 16.6ms per frame. I will give you 6.6ms for your CPU tasks (updating the state of your world), which leaves me with 10ms for rendering. However, if we want to use ray-tracing, we'll need to make clever concessions.

This is a first part of a series of articles. Let's start by concretely computing the ambient occlusion.

Aft design pattern: pimpl with no p

I was sure that the pimpl design pattern was an interesting thing. It was made so that one can hide compile-time dependencies to the end-user, allowing faster compile times.

However, as you know, pimpl starts with a p. And that's the big issue: pointers. So having a nice API implies memory fragmentation and cache misses? Surely, no!

Let me present you the Aft pattern, a pimpl with no p!

Game Programmers and the C++ collapse

Everyone with little experience will tell you: if you want to program your own game engine, C++ will allow you to get the performances you need. Indeed, C is missing high-level quality-of-life features, and there are no other practical choices.

Well, that state of mind is changing among game developers.

Let's focus on why C++ is slowly digging his own grave.

Game engine: Frustum culling

When you want to draw a big 3D scene with lots of contents, you want to minimize the number of draw-calls. One of the very first technique to implement is called Frustum culling, which consists of removing things that the camera cannot see.

This is the first part of a series of articles on 3D scene optimizations. More to come!

C++ enum to string: the Macros Way

Ever now and then, I find myself looking for a way to log an enum. Fun fact is, even if it is easy to actually log it, it is hard to maintain. Having to keep a switch instruction in sync with code content, or generating a new file during a pre-build step, is not exciting. We can do better, right?

Le Risque et l'Impro

J'entends régulièrement, à l'approche d'un spectacle, des remarques du style :

Je ne me sens pas prêt pour ça.

Et je dois dire que ça m'arrive souvent de me dire ça aussi. Mais, l'improvisation étant un domaine risqué par nature, et le public le sait, pourquoi continuer à craindre une catégorie particulière ou la peur du ridicule ?

Deep Deferred Renderer

lava's render engine (namely magma) is meant to be recent standards efficient and, secondly, innovant. For the end-user, the renderer details are completly hidden. This small article explains what's behind an experimental renderer: the deep-deferred render.

Design Patterns: pimpl in C++

lava uses multiple design patterns, but any usage of those are driven by two core principles:

  • do not show more than needed ;
  • keep performances in mind.