Marc Games

( only in english )

Posts

Here is some technical details about various subjects. These posts are amied to guide game developers to implement the described features.

Compute the impulse response of a rigid-body
Efficiently render the Moon at any scales
Build the A.I for a card-game, using IS-MCST
Render the sky from an atmosphere scattering model
Implementation of real-time physic simulations
Porting guide to web-assembly using Emscripten

Behind the scene

I choose to not use an existing game engine, such as Unity or Unreal. Indeed, I like to program, within all aspects. Therefore, I created TRE (Tiny-Render Engine), which is a toolkit built on the top of SDL2 and OpenGL. This is the basement of my games. However, TRE is not a game-engine. It helps with mesh operations, UI, shaders (tiny material library), contact algorithms and sound thread.

TRE is open-source and hosted on GitHub: TinyRenderEngine

Some though about C++ feature-sets for games

TRE is using the STL, that uses exceptions for error handling. Exceptions have no impact on performances, while they are not triggered. Indeed, c++ has a nice paradigm that says: "don't pay for what you don't use". As far as exceptions are considered as nonrecoverable fatal errors, then the STL can still be used (in a solo-developer point of view).

Rendering API: modern OpenGL vs. Vulkan

Even though OpenGL is a pretty old rendering API, it is still used in legacy applications and small projects. Vulkan offers a great opportunity to tune the code that submits commands to the GPU. For example, Vulkan allows commands to be generated from multiple threads, while OpenGL does not. While my games won't be limited by the rendering CPU thread, OpenGL will stay the default rendering API.

Oriented-Object vs. Data-Driven paradigm for games

The oriented-object paradigm is often adopted by software engineers. For generic game engines, this paradigm implies to have an "entity" oriented architecture. It is demonstrated for example in the following talk: Data Driven Entity Component System in C++17. But, at a coarse level, a game is basically a software that transforms data into rendering of frames (video and sound). The data can be split by the usage:

The data-driven paradigm allows better scopes for data, and facilitates parallelism (and noticeable with the rendering thread(s)). For more details, find here some references about data-oriented design in C++:

About me

I'm an engineer in computer science, with a strong interest on applied mathematics. I'm currently working on the video-game industry, and I'm keeping developping on my free time too (alongside my other hobby ... the jazz music). ...

Email: landon.marc@outlook.fr