I am an R&D Engineer at the ASUS Robotics & AI Center. I studied at EPFL where I got a Bsc. of Science in Communication Systems, before obtaining a Master degree in Computer Science at ETH. I have a deep interest in maths, physics, and of course anything related to computer science, particularly algorithms, reinforcement learning, computer graphics and animation.
I am keen on discovering and learning new stuff, and putting it into practice by writing code. In my free time,
anytime I get some, I love developing video games. My dream is to one day develop something worth publishing :)
I have a huge interest in algorithms and I try to hone my skills and deepen my knowledge with each new project. Currently doing my masters at ETH, I have the chance to study in depth artificial intelligence (RL in particular) as well as computer graphics and geometry processing.
I am passionate about game development and in fact, it is what drew me into programming. I have some past projects that you can
discover down below and, hopefully many more on their way in the upcoming years!
After acquiring a mathematical maturity at EPFL with courses like Analysis, Probability, Linear and Abstract Algebra, I am applying these tools on a daily basis at ETH in courses like Advanced Machine Learning, Probabilistic AI, Natural Language Processing, Geometry Processing and Computational Models of Motion.
Java
C
C++
C#
Python
Scala
SQL
HTML
CSS
PyTorch
Tensorflow
Unity
Blender
The objective of this project was to create an end-to-end pipeline for in-hand object scanning with the Hololens 2. This project was developed together with Zikai Liu, Minguyan Chi, Dumeni Manatschal
View GithubIn this project, we developed a pipeline to scan objects in-hand. Roughly, speaking, we had to stream raw point cloud data from the Hololens, send them to PC via TCP, process them (clipping, denoising, hand removal, register and reconstruct the point cloud), while visualizing the intermediate results by sending data back to the Hololens. When the scanning is over, we post-process the obtained point cloud to obtain a corresponding mesh. More details can be found in our report.
This is the final project for the Computer Graphics course at ETH. We had to create a renderer during assignments and extend it with features of our choice.
View GithubI implemented support for both homogeneous and heterogeneous media, as well as textures, environment maps, textured area emitters, anisotropic phase functions and camera blur.
Together with Kay Lächler, we created a short fantasy animation of a Supernovae explosion as part of a project for the Computer Graphics course.
The Goal was to create a 1 minute animation of a supernovae explosion and get some practice with Unity.
A PyTorch/Tensorflow Machine Learning framework for Road Segmentation, developed in the frame of the Computational Intelligence Lab course at ETH, together with Mateusz Nowak, Alexey Gavryushin and Anne Marx.
View GithubThe goal of this project was to get more expertise in image segmentation and Deep Learning architectures in general. The paper accompanying this project can be found here.
The objective of this project was to create a geometry processing pipeline that automatically determines skeletal deformation using various skinning techniques.
View GithubTypically in computer animation, when we create a specific animation sequence for some rig, we want the deformations to be automatically computed for any mesh controlled by the said rig. Indeed, manually modifying vertex-by-vertex is just unfeasible. This is solved by an algorithm known as "skinning". In a nutshell, each vertex is moved according to the underlying joints of the rig. This implies that each vertex needs to know which joint it belongs. Again, this can be computed automatically, and to have smooth transformations, we assign to each vertex a set of harmonically interpolated weights. Various skinning techniques are implemented such as 'Per-vertex Linear Blend Skinning', 'Dual-Quaternion Blend Skinning', 'Per-face Linear Blend Skinning'. To have even more compelling results, we also implement 'Context-aware Blend-Skinning', where using example poses helps give more realistic transformations.
More Geometry Processing algorithms can be found here
A rudimentary program that simulates the flocking behavior of birds. While the implemented rules are simple, they can give rise to complex social behaviors.
View GithubWhile not technically challenging, this small project was a great way to get some hands-on experience with various integration schemes (explicit/implicit/symplectic Euler etc.), as well as their respective (un-)stability.
More Computational motion algorithms can be found here.
In a team, we developed a complete video game from scratch, in approximately 3 months. The game is published on itch.io. You can find a review of the game on freeappsforme.
The Goal was to develop an enjoyable complete game in a short time frame. We managed to created an RPG/Dungeon crawler with a very special mechanic: In order to cast spells, the player has to draw symbols on the ground. The symbol is recognized and the corresponding spell is cast.
We studied the SZR model (similar to the well-known pandemic SIR model, but for zombies, just for fun) on a lattice. An interesting part of the project was to let agents automatically learn mitigation strategies using Reinforcement Learning, and more specifically the DQN algorithm.
View GithubI wanted to get some hands-on experience in RL algorithms. This was a good opportunity as I got to implement DQN in the multi-agent setting to automatically infer zombie pandemic mitigation strategies.
The objective of this project developed with Mateusz Nowak and Alexey Gavryushin was to automate the process of segmenting the mitral valve in medical videos. This can be useful as a first step for diagnosing heart diseases.
View GithubOne of the common architectures for image segmentation is the U-Net. We trained this neural network architecture on a few dozens of labeled (segmented) images in order to segment complete videos in a test set. As the number of parameters was of the order of tens of millions, we had to use Google Colab hosted GPUs in order to accelerate training and to have enough RAM to fit the batches of images in memeory. The preprocessing includes histogram equalization, data augmentation (crucially important to prevent overfitting to the very limited original dataset), reshaping, rescaling etc. The post-processing includes various filtering operations as well as as a final ensembling operation to reduce variance in predictions and increase robustness.
Given a neural network and some input that is classified to some class, it is surprisingly easy to maliciously impercitibly modify the input so that the network misclassifies it. In today's world where the trend is to employ AI Systems in increasingly critical domains (healthcare, security, etc.), it is of fundamental importance to certify that a network is robust against this kind of attacks.
View Github
The goal of this project was to build a DeepPoly verifier that provably certifies a given network is
robust against any L-infinity perturbation attack for some input images (MNIST). The idea is instead of
propagating the input values through the network, we propagate a whole convex shape around the given image.
The key challenge is to maintain soundness (never certify the network if it is actually not robust), while
being as precise as possible (being able to prove the robustness property when it actually holds). To this end,
the verifier network (The network verifying the original neural network) is contiuously optimized for precision
using backprop/gradient descent on its parameters.
For more details about DeepPoly, have a look at the DeepPoly original paper.
The step-by-step development of a ray-tracer.
View GithubThe goal of these mini-projects was to discover ray-tracing algorithms and acceleration datastructures, as well as getting familiar with writing shaders.
In this project we designed a road collision database, analyzed and optimized the query plans.
Learn how to design a database as well as get familiar with the impact of query optimization using indexes. The detailed report can be found here.
The aim of this project was to develop the navigation software for a rover developed by the EPFL Xplore student association. This includes environment map acquisition and processing, such that it can be used by a global planner for planning an optimal path to a given destination, as well as by a local planner for local collision avoidance.
View Github
The goal of this project was to develop the software necessary to enable a rover to safely
navigate in an unknown mars-like terrain, having as only source of information a Lidar-generated
map of the environment.
The detailed report can be found
here.
This modest simulation framework was used to easily prototype, test and compare different path-planning algorithms, with a focus on A* and RRT*. It provides a simple interface to visualize path metrics and profile, as well as means to easily tweak hyper-parameters.
View GithubGain some insight into the implementation details of different path-planning algorithms and setup a framework to quickly prototype, test and compare different solutions.
My very first experience with programming and proudest achievement. I developed this little shoot'em up game within the frame of my high school maturity work. It includes 10 levels and bosses, 4 ships with unique characteristics, 5 spells, hidden levels and much more!
View Github
The goal was to have a first contact with the programming universe by developing a simple 2D game.
I went beyond and spent hundreds of hours working on this project because I couldn't get enough of it.
The result is still quite modest but it allowed me to have some solid experience in Java, designing
special effects and even music composition :)
The project report can be found
here (in french).
A little strategy game I developed together with Genc Kqiku
within the frame of a high school final year informatics course.
It includes about 10 thousands pseudo-randomly generated stellar systems, ships, various resources,
inventory system etc. Earth is in danger and your mission is to find a new planet suitable for life!
The goal was to create a strategy game with a background story and have to deal with databases to store all the data of the generated stellar systems. The LibGDX was chosen for its interesting features in UI design, but also for the ability to deploy on many platforms, mainly Windows, Android and iOS. However, due to time constraints, the game ended up only targeting Windows.
This little program was part of an introductory course to C++. It simulates a basic dodgeball game between simulated agents and thus requires no user input. The agents use the Dijkstra algorithm to search for each other.
View GithubTogether with David Schroeter, we developed this application that can display the night sky for any date, any time, anywhere on earth. It includes most visible stars, asterisms, as well as planets of the solar system. It allows the user to track a given celestial object, get information about it and much more!
View GithubThe goal was to write a clean, easily maintainable, tested and robust GUI application using JavaFX, and have performance and usability.
This is a little Zelda-inspired game developed within an introductory Java development course, together with David Schroeter. It includes various enemies, weapons, maps, a short story and an inventory system.
View GithubWrite a simple RPG game in a clean fashion, especially regarding collision detection and interaction between different actors
The objective of this project developed together with Yingxuan Duan and Sofia Artioli was to enable the player to control in-game board movement by using a physical board. This involves capturing a webcam feed, applying various image processing techniques (smoothing, filtering, thresholding etc.) to retrieve the edges of the board, and a Kalman filter for continuous tracking.
View GithubThe goal was to get familiarity and hands-on practice with fundamental elements of computer graphics (projections, perspectives, UI design), as well as implement various image processing techniques seen in the introduction to visual computing course.
This is a little program developed within an introductory Java development course, together with David Schroeter. It allows the user to generate a QR code for anything he would like to encode. Try it out!
View GithubThe goal of this project developed together with Yingxuan Duan was to recreate the well-known game Tetris on an FPGA, with an increasing score counter for each cleared line. It was great fun working closer to the hardware!
View GithubThe goal of this project developed with Yingxuan Duan was to better understand the inner workings of a multi-cycle processor and develop some familiarity with VHDL. Though not handling all possible instructions, it still had everything needed to run on an FPGA the Tetris game presented above :)
View GithubHere are some game prototypes created using Unity. I make these in my free time to learn how to use the engine as well as get a feeling of what works and what does not.
A Mech game prototype that implements core mechanics in the genre. Aiming, moving, health system, different cameras, targeted missiles, radar, character animation, special effects and so on. All the mechanics, animations, models and shaders are created by myself.
An RPG prototype. The core mechanics is that special skills are not performed by simply clicking to the corresponding buttons, but by tracing runes on the ground, each rune corresponding to some type of skill.
A short supernovae explosion animation created using Unity. This was the final project in a computer graphics course I took during my bachelor studies.
I turned my master thesis at Disney Research Studios into a scientific article which got accepted at the ACM MIG'23 Conference. The paper is published and can be viewed at the ACM Digital Library.
Gueddach et al. Runtime Motion Adaptation for Precise Character Locomotion. In Proceedings of the 16th ACM SIGGRAPH Conference on Motion, Interaction and Games (Rennes, France) (MIG ’23).
Joint Master Thesis at Disney Research Studios and ETH Zürich: development of a data-driven character locomotion system within Unity, within the Animation Group.
Teaching Assistant for the Game Programming Lab course at ETH Zürich: Course preparation and mentoring student groups.
Research Engineer at GFaI: Research and Development of AI-based computer vision solutions in the Image Processing Group.
Software Engineer at EPFL Xplore: Development of rover navigation software, path planning optimization.
Student-assistant in: