Personnal Projects

Unfortunately, I don't get to work on personal projects as much as I want to these days. Wolfen-Doo used to be my main personal project until I started working at Virtuos.

But since then, I mostly worked on quick prototypes and small ideas. Or learning about computer graphics, programming in general or real-life things like physics and space stuff. I also spend some time reading papers and presentations related to computer graphics.

And above that, I love making shaders and messing around in ShaderToy quite a lot. You can see all the shaders I posted here on my ShaderToy profile.


L.A. Noire: The VR Case Files

L.A. Noire: The VR Case Files is a VR game created from the 2011 game of the same title. The VR game came out on December 15th, 2017

Platforms PC (HTC Vive, Oculus Rift)
Languages C++, HLSL (shaders)

For the major part of 2017, I was working on L.A. Noire VR in collaboration with Video Game Deluxe and Rockstar.

My main role on the project was to optimize the game to reach and maintain the 90FPS target required by VR on PC. In order to reach this target, it was crucial to regularly profile the game and identify the possible bottlenecks. Which is not an easy task on PC because profiling tools either don't exist or are not as good as on consoles for intance.
Also, each PC is unique and one optimization might save a lot of time on one specific PC, but might make things worse on an other.

Therefore, I mainly focused on obvious optimizations that were guaranteed to save a lot of time regardless of the platform.
The biggest bottleneck of the game was the CPU. The game was originally pretty much single-threaded and the budget for rendering was about half of the frame! Which is really not a lot in VR when you think about it.

The biggest optimization I did, and probably the one I spent the most time on was Multithreaded-Rendering (MTR).
Considering the game was pretty old, and the original code is very messy because of the chaotic development of the original game, refactoring the GFX engine was absolutely necessary to be able to have a chance at multi-threading the rendering.
In order to limit the GPU bubbles, I also had to delay the commandlist execution to one frame, and execute them in a dedicated thread.
This sounds trivial but this was actually causing some issues with OpenVR because it didn't support delayed frames at the time, and it was originally messing up the reprojection and made people who were not familiar with VR even more sick.

As you probably imagine, MTR brought a lot of complications with it, mostly related to the way render-states were handled in the original game, causing a lot of flickering on screen. The problem with MTR and flickering is that it may be actually very hard to pinpoint the exact problem because you will never be able to make a capture and analyse it in RenderDoc. You have to think outside of the box and play the thought experiment of what could be causing your issue.
Retrospectively, I believe this was a great experience because I'm fairly confident I can identify the cause of any graphical bug by just looking at it and therefore spend less time debugging.

Here is a non-exhaustive list of the things I did on this project:


The Ezio Collection

The Ezio Collection is a pack of three AAA games (Assassin's Creed II, Assassin's Creed: Brotherhood and Assassin's Creed: Revelations). Released on November 15th, 2016.

Platforms PS4, Xbox One
Languages C++, HLSL (shaders)

This is the first AAA project I have ever worked on. And a quite exciting one since I absolutely love these three games. It was a real pleasure and priviledge to work on them. I never imagined I ever would. Overall this was a great opportunity for me.

But also a real challenge. It was my first time working on consoles and a project that complex. The biggest difficulty was to understand the engine, that means understanding what the programmers who originally designed the engine intended to do with it.

The gameplay, system, and core parts of each game were left untouched. Only the engine and GFX engine were to be changed, and I mainly worked on the latter.

My main task on this project was to port Assassin's Creed II from PS3/XBOX360 to current gen console, and mainly PS4. But here is a non exhaustive list of what I did on this project:


Wolfen-doo

Wolfen-Doo is a personal project I was working on during my free time. The idea was to blend Wolfenstein 3D style into the Scooby-Doo universe. It would be too long to explain why. This is kind of a private joke that motivated me to create an engine from scratch.

Platforms PC (possibly Linux and Mac as well since it's Java)
Languages Java, GLSL (shaders)

I did absolutely everything in this game, from the game code to most of the "art".

This project started as a school assignment to practise general programming and also to discover and learn more about game programming. Fortunately, I ended learning a lot more than this, like how real-time game engines are made, basics of openGL and computer graphics, better understand 3D mathematics and so much more.

This game was my first introduction to "real" game programming. I did make many other little forgettable games in the past, but most of them were made without game programming in mind (they were basically very slow, not optimized and really hard to work with).

I intended the engine to be as easy to use and as intuitive as possible. That way, I could use it again to make more games.

It features :

You can find the source code on GitHub, as well as the game executable if you want to give it a try.

Here are some videos to show what the game is like. Disclaimer: framerate issues are actually caused by the recording software.


Maya Wars

Maya Wars is a mobile city management / strategy game for Android and iOS. This is the game I worked on during my work placement

Platforms Android devices, iOS devices
Languages C++, Java, Objective-C, Javascript

If you would like more details about what I worked on on this game, you can have a look on the report I wrote half-way through my work placement (french).

Here is an example of the Eagle animation that I worked on, as well as the game interface :