Godeffroy Valet, Developer in Steenkerque, Belgium
Godeffroy is available for hire
Hire Godeffroy

Godeffroy Valet

Verified Expert  in Engineering

C++ Developer

Location
Steenkerque, Belgium
Toptal Member Since
January 5, 2021

Godeffroy is an expert in C++ development and software architecture who excels at producing efficient and maintainable software quickly. His experience includes VR, 3D engines, robotics, deep learning, math, and physics. Godeffroy graduated from the best engineering school in France. He continuously expands his knowledge and capabilities and helps others increase their knowledge and skills.

Portfolio

Acapela Group
Docker, DevOps, Linux, GitLab, Git, Mathematics, Science, GitLab CI/CD...
TechViz
DevOps, Continuous Integration (CI), Win32, 3D Rendering, 3D, C++, Unit Testing...
TechViz
DevOps, Continuous Integration (CI), Win32, 3D Rendering, 3D...

Experience

Availability

Part-time

Preferred Environment

C++, CMake, Bash, Python 3, C++17, GitLab, Git, Vim Text Editor, Linux, Debian Linux

The most amazing...

...software I developed was a real-time and multiplatform OpenGL recorder and replayer. By altering the record, it was used for debugging or adding VR capability.

Work Experience

Machine Learning Researcher

2018 - PRESENT
Acapela Group
  • Adapted an open-source speech recognition software product to the company's needs.
  • Designed a new Connectionist Temporal Classification (CTC) decoder for speech recognition.
  • Found and implemented new ideas for language modeling and speech synthesis, improving state-of-the-art open source models.
  • Wrote scripts to clean gigabytes of text from different sources and languages, making them fit for machine learning.
  • Participated in the screening process for new research team members.
Technologies: Docker, DevOps, Linux, GitLab, Git, Mathematics, Science, GitLab CI/CD, Unit Testing, Python, Bash Script, Deep Learning, Python 3, PyTorch, TensorFlow, Debian Linux, UTF-8, Machine Learning, Graphics Processing Unit (GPU), Solution Architecture, CI/CD Pipelines, JavaScript, Node.js, Artificial Intelligence (AI), Scripting, FFmpeg, JSON, Best Practices

Lead Developer

2015 - 2017
TechViz
  • Defined strategies to refactor a big software that had become unmaintainable, step by step, without breaking the whole thing.
  • Managed the work of two to three developers and one to two interns.
  • Improved the workflow of the team by coordinating the adoption of modern tools.
  • Conducted technical interviews to screen and hire software engineers and interns.
Technologies: DevOps, Continuous Integration (CI), Win32, 3D Rendering, 3D, C++, Unit Testing, Software Architecture, Virtual Reality (VR), Shaders, Visual Studio, Cygwin, Bash, Git, GitLab, GitLab CI/CD, CMake, C++14, OpenGL, WebSockets, APIs, Technical Leadership, Code Architecture, Architecture, Leadership, Documentation, CI/CD Pipelines, Back-end, System Architecture, Full-stack, Requirements Analysis, Graphics Processing Unit (GPU), Team Leadership, Extended Reality (XR), API Development, Solution Architecture, Software Design, Scripting, Rendering Pipelines, Low-level Programming, Software Design Patterns, Best Practices

R&D Engineer

2015 - 2016
TechViz
  • Solo-developed a new real-time and multi-platform OpenGL recorder, using C++14 meta-programming.
  • Solo-developed a new real-time and multi-platform OpenGL replayer to pair with the new OpenGL recorder.
  • Deployed the new recorder and replayer internally to assist with debugging OpenGL issues and get early feedback on these new tools.
Technologies: DevOps, Continuous Integration (CI), Win32, 3D Rendering, 3D, Software Architecture, Realtime, Git, Python, Unit Testing, CMake, OpenGL, C++, C++14, APIs, Code Architecture, Test-driven Development (TDD), Architecture, Efficient Data Serialization, Multithreading, Documentation, UTF-8, Back-end, System Architecture, Requirements Analysis, Graphics Processing Unit (GPU), User Interface (UI), Extended Reality (XR), API Development, Solution Architecture, Software Design, Data Extraction, Rendering Pipelines, Low-level Programming, Optimization, Software Design Patterns, Best Practices

R&D Engineer

2014 - 2015
TechViz
  • Found and fixed bugs in a complex OpenGL chain from client applications that can send any OpenGL flow to TechViz's OpenGL middleware, which adds VR to the OpenGL flow to its servers, which display the result to VR hardware.
  • Assisted in refactoring an old C codebase to C++11.
  • Participated in upgrading the TechViz toolchain to a newer compiler, CMake, and GitLab.
Technologies: Shaders, Win32, 3D Rendering, 3D, Software Architecture, Realtime, Visual Studio, Git, Cygwin, Virtual Reality (VR), OpenGL, C, C++, APIs, Code Architecture, Object-oriented Programming (OOP), Test-driven Development (TDD), Architecture, Multithreading, Back-end, System Architecture, Requirements Analysis, Graphics Processing Unit (GPU), Extended Reality (XR), Solution Architecture, Software Design, Scripting, Rendering Pipelines, Low-level Programming, Optimization, Software Design Patterns, Best Practices

An OpenGL Recorder and Replayer

This OpenGL recorder is a thin OpenGL shared library that intercepts calls, records them, and forwards them to the system library. I developed this project solo within one year.

The company had frequent OpenGL bugs that were difficult to debug. By recording an OpenGL trace, then removing, adding, or modifying calls and/or data, and replaying the results, fast and precise debugging was possible. Another goal was to alter the OpenGL trace on the fly to enable advanced VR on any OpenGL software (like CAD).

One challenge was implementing all OpenGL calls (with extensions) involving thousands of functions. By parsing the GL headers with a Python script and using C++ metaprogramming, I automatically made a default implementation for all those calls. Relatively few overloads were left for exceptional cases.

Another challenge was to record all the necessary data. Many API calls take raw pointers to some data. Getting the correct size of this data in all possible situations and with as little code as possible was the main challenge. With a relatively small codebase, the code was fast and maintainable. Most bugs were found and solved in a few minutes.

3D Engine with Large Area Lights

I had been looking for real-time, physically accurate lighting with ray tracing in my previous renderers, but shadows were too sharp to look natural. The real world has penumbra, and the reason for this is that lights are all area lights, not point lights.

Unfortunately, ray tracing requires casting a lot of rays, and area lights make it much worse. In particular, a general area of light is the sky. Casting rays from every point in the sky is not an option for real-time lighting. So, I designed my lighting algorithm to handle area lights with physical accuracy in real-time. I implemented a proof of concept on the CPU to ease debugging and compared the result with an identical scene rendered in Blender with the Cycle.js renderer.

My algorithm was ten times faster, despite running on CPU and having the whole sky as a light, whereas Blender had a finite square. However, Blender's ray had a few bounces, while my algorithm didn't implement secondary lights—but they are area lights so that it could be done! I developed this project on my own within a few weeks.

Universal Algebra Library with C++20

https://github.com/godefv/math
A library that uses C++20 concepts extensively to precisely constrain math operations overloads. This makes it possible to make many optimizations at compile time, exploiting compile-time information as much as possible in every expression. In fact, the library can effectively act as a compile-time symbolic math library. For example, a succession of rotations and/or translations will be simplified at compile time and trigonometry formulas will be detected to simplify the expressions.

The types are generated in a bottom-top approach. No vector type is defined explicitly; they are generated by adding and multiplying numbers and directions. Therefore, any element of the universal algebra can be expressed, and only the necessary amount of memory will be used to store it. In this way, defining new algebras is easy. For example, define a type imaginary_t, overload the square function on it to return -one, and you have just defined your own copy of the complex numbers.

This approach also makes frames explicit, which removes a huge source of bugs. By writing 2m*north+1m*east, there is little chance of flipping north and east by mistake, and units are explicit. In comparison, writing Vector2d{1.0,2.0} easily leads to hidden bugs.

SLAM and SfM Project

A hobby project for SLAM and SfM. I had been repeatedly disappointed by the OpenCV API because it's not flexible and it consistently leads to unpredictable bugs. This led me to make my own SLAM library in C++, using Eigen for maths, and to reimplement about half of the computer vision algorithms, such as epipolar geometry, triangulation, pose estimation, and RANSAC.

In the middle of development, OpenSfM was born, exactly filling the hole left by OpenCV in this field, so I decided to abort my project. Before ending the project, it performed the following steps:

1. Calibrated the camera.
2. Undistorted the images.
3. Computed optical flow, feature points, and their descriptors.
4. Indexed descriptors for matching.
5. Matched feature points.
6. Estimated the pose of the first camera.
7. Triangulated first points.
8. Estimated subsequent camera poses based on triangulated points.

The final steps were not yet very stable, but the reprojection error looked good.

Autonomous Robot for a Eurobot Contest

An autonomous robot that detects and collects objects in a 1.5-meter x 2-meter playfield where another robot competes for the same objectives. The mechanical structure had to be designed especially for the contest's requirements.

The robot I built had a small embedded computer that gathered information from sensors and a webcam, made decisions, and sent commands to the motors to take action. The computer communicated with the microcontrollers via the CAN protocol. The robot knew its current position by integrating speed data from free wheel sensors and then computing its absolute position via the webcam data by recognizing known play area features. To go from one point to another quickly, the trajectories were made of pieces of clothoid, which are physically achievable curves that can turn without reducing speed too much.

VR Controls Plugin for Unreal Engine 4

https://www.unrealengine.com/marketplace/en-US/product/vr-controls
This plugin allows you to add VR controls to any existing project while maintaining the ability to use keyboard and mouse controls. All controls are fully compatible with each other and can even be active at the same time.

1. Walk around in VR, see your motion controllers, and see a red dot where you point your right pointer and a green dot where you point your left pointer.

2. Rotate your VR space with the thumbstick on your left controller, and move it with the thumbstick on your right controller. These motions are discontinuous to reduce motion sickness.

3. Teleport to pointed location.

4. Grab the object pointed by your Motion Controller, remotely.

5. Grab objects with your VR hands: get close until your motion controller disappears, leaving your VR hand empty, then close your hand.

6. Drop hold objects by opening your hand. This way, you can also throw objects naturally. (Some controllers have a button on the side for grabbing. In this case, release this button to drop objects.)

7. Interact with the object pointed by your Motion Controller. The object needs to implement "InteractableInterface" provided by this plugin for this to do anything. You can also define EnterFocus/LeaveFocus events.

Real-time Face Filters for a Video Chat Application

A real-time face-filtering engine for video chat. I developed the C++ and OpenGL parts, including shaders, loading, rendering 3D static or animated meshes and textures, face landmark detection, and background segmentation.

Earth Viewer

https://gitlab.com/godefv/planet3d
An off-line multi-scale Earth viewer supporting both raster and vector geographic data. A flexible configuration file enables specifying the location and type of data to display, e.g., satellite or political maps, country borders, rivers, among others. I developed it alone as a personal project. VR is enabled via my Cinder-VR library. It uses global elevation data and parallax occlusion mapping.

NearLinker Plugin for Unreal Engine 4

This C++ Unreal Engine plugin provides a secure way to communicate with the NEAR blockchain. It offers simple Blueprint functions to interact with smart contracts and query and transfer fungible and non-fungible tokens.

Digital World Synchronization Plugin for Unreal Engine 5

This UE plugin synchronizes 3D data between Unreal Engine and a web server, holding a representation of a digital universe. This data includes meshes, materials, positions, and object-specific attributes.

Languages

C++17, C++14, C++, C++11, Python 3, Bash, Bash Script, C, Python, Embedded C++, SQL, HTML, Embedded C, CSS, JavaScript, Java, GLSL

Libraries/APIs

OpenGL, API Development, TensorFlow, Cinder, PyTorch, GDAL, Node.js, REST APIs, FFmpeg

Tools

Vim Text Editor, Git, CMake, GDB, GitLab, GitLab CI/CD, Cygwin, Visual Studio, Valgrind, Autodesk FBX SDK, CAD

Paradigms

Object-oriented Programming (OOP), Continuous Integration (CI), Test-driven Development (TDD), Requirements Analysis, Best Practices, Unit Testing, DevOps, REST

Platforms

Linux, Debian Linux, Software Design Patterns, Win32, Docker, Arduino, Raspberry Pi, Blockchain

Other

Physics, Mathematics, Science, 3D, Software Architecture, APIs, Code Architecture, Architecture, Back-end, System Architecture, Machine Learning, Solution Architecture, Software Design, Artificial Intelligence (AI), Optimization, Mechanics, Shaders, Virtual Reality (VR), Deep Learning, 3D Rendering, Technical Leadership, Microcontrollers, Efficient Data Serialization, Multithreading, Blueprints Visual Scripting, ASCII, Full-stack, Image Processing, Graphics Processing Unit (GPU), Extended Reality (XR), Unreal Engine 5, Scripting, Rendering Pipelines, Low-level Programming, Biology, Computer Vision, MEMS, Robotics, Embedded Software, Simultaneous Localization & Mapping (SLAM), 3D Reconstruction, Embedded Hardware, Electronics, PCB Design, PCB, IoT Protocols, Sensor Data, WebSockets, Networking, Embedded Systems, Security, IT Security, Control Systems, Leadership, Documentation, C++20, 3D Games, Games, CI/CD Pipelines, Linux Internals, Video Chat, MP4, 3D Animation, Maps, Geographic Information Systems, SSL Certificates, Advanced Encryption Standard (AES), Cryptography, PIC32, PIC16, UTF-8, Encryption, Embedded Development, Team Leadership, User Interface (UI), Startups, Data Extraction, Hardware, 3D Modeling, 3D CAD, Network Protocols, Web Security

Frameworks

Realtime, Unreal Engine 4, Unreal Engine, Blueprint, Robot, Qt

Storage

JSON, MySQL, Databases

Industry Expertise

Cybersecurity

2012 - 2014

Master's Degree in Nanotechnology

University of Tokyo - Tokyo, Japan

2009 - 2012

Engineer's Degree in General Studies

École Polytechnique (l'X) - Palaiseau, France

Collaboration That Works

How to Work with Toptal

Toptal matches you directly with global industry experts from our network in hours—not weeks or months.

1

Share your needs

Discuss your requirements and refine your scope in a call with a Toptal domain expert.
2

Choose your talent

Get a short list of expertly matched talent within 24 hours to review, interview, and choose from.
3

Start your risk-free talent trial

Work with your chosen talent on a trial basis for up to two weeks. Pay only if you decide to hire them.

Top talent is in high demand.

Start hiring