Godeffroy Valet
Verified Expert in Engineering
C++ Developer
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
Experience
- Physics - 20 years
- C++ - 10 years
- Software Architecture - 7 years
- OpenGL - 5 years
- Python 3 - 5 years
- Virtual Reality (VR) - 4 years
- Robotics - 3 years
- Unreal Engine - 2 years
Availability
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
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.
Lead Developer
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.
R&D Engineer
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.
R&D Engineer
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.
Experience
An OpenGL Recorder and Replayer
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
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/mathThe 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
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
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
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
Earth Viewer
https://gitlab.com/godefv/planet3dNearLinker Plugin for Unreal Engine 4
Digital World Synchronization Plugin for Unreal Engine 5
Education
Master's Degree in Nanotechnology
University of Tokyo - Tokyo, Japan
Engineer's Degree in General Studies
École Polytechnique (l'X) - Palaiseau, France
Skills
Libraries/APIs
OpenGL, API Development, TensorFlow, Cinder, PyTorch, GDAL, Node.js, REST APIs, FFmpeg
Tools
Vim Text Editor, Git, CMake, GNU Debugger (GDB), GitLab, GitLab CI/CD, Cygwin, Visual Studio, Valgrind, Autodesk FBX SDK, CAD
Languages
C++17, C++14, C++, C++11, Python 3, Bash, Bash Script, C, Python, Embedded C++, SQL, HTML, Embedded C, CSS, JavaScript, Java, C++20, GLSL
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
Frameworks
Realtime, Unreal Engine 4, Unreal Engine, Blueprint, Robot, Qt
Storage
JSON, MySQL, Databases
Industry Expertise
Cybersecurity
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, 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
How to Work with Toptal
Toptal matches you directly with global industry experts from our network in hours—not weeks or months.
Share your needs
Choose your talent
Start your risk-free talent trial
Top talent is in high demand.
Start hiring