Noureddine
Gueddach

Computer Scientist & Game Developer

About

Myself

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 :)

Skills

What I do

Software Development

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.

Game development

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!



Maths

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

Portfolio

View some of my work
C++/C#, Open3D, Hololens 2, Mixed Reality

In-Hand Object scanning with the Hololens 2

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 Github
More
Less
GOAL:

In 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.

LEARNING POINTS:
  • Team work.
  • Hands-on experience with Mixed Reality.
  • Computer vision algorithms.
  • Point cloud/mesh reconstruction.
  • Outlier filtering.
  • System architecture.
  • User experience.
C++

Rendering, Path Tracing

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 Github
More
Less
GOAL:

I implemented support for both homogeneous and heterogeneous media, as well as textures, environment maps, textured area emitters, anisotropic phase functions and camera blur.

LEARNING POINTS:
  • Path tracing.
  • Volume Rendering.
  • Environment maps.
  • Multiple importance sampling.
  • Texturing.
  • Modeling with blender.
  • Scene layout.
  • Lighting.
  • And much more...
C#, Unity

Supernovae Animation

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.

More
Less
GOAL:

The Goal was to create a 1 minute animation of a supernovae explosion and get some practice with Unity.

LEARNING POINTS:
  • Team work.
  • More C# and Unity experience.
  • Camera path with Bezier curves.
  • Animation skills.
  • Working with multiple shaders.
  • Screen-space post-processing.
  • L-Systems.
  • Procedural mesh generation.
  • Many more...
Python, PyTorch, Tensorflow

Road Segmentation

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 Github
More
Less
GOAL:

The 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.

LEARNING POINTS:
  • More experience with Pytorch and Tensorflow.
  • Better mastery of Python.
  • Good understanding of deep learning techniques.
  • Team work.
  • Preparing and organizing experiments.
  • Writing a scientific report.
  • Dealing with reproducibility challenges.
C++, libigl

Skinning

The objective of this project was to create a geometry processing pipeline that automatically determines skeletal deformation using various skinning techniques.

View Github
More
Less
GOAL:

Typically 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

LEARNING POINTS:
  • Understand and implement skinning techniques.
  • More hands-on numerical optimization.
  • The 'substitution' method for solving constrained linear systems.
  • Poisson stitching.
  • Further experience in C++ and libigl.
C++

Boids

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 Github
More
Less
GOAL:

While 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.

LEARNING POINTS:
  • Better knowledge of integration schemes.
  • Some C++ practice.
  • Collision handling.
C#, MonoGame

ISeeRunes (RPG/Dungeon crawler)

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.

More
Less
GOAL:

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.

LEARNING POINTS:
  • Develop a large project in a team.
  • More C# experience.
  • Story writing.
  • Sound Engineering.
  • Playtesting.
  • Image recognition.
  • Forward Kinematics.
  • Good learning experience on how to create games that are enjoyable and keep the player hooked.
Python, PyTorch

Zombie Pandemic Simulation

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 Github
More
Less
GOAL:

I 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.

LEARNING POINTS:
  • Python/PyTorch practice.
  • Hands-on experience with Reinforcement Learning.
Python, Tensorflow

Mitral valve video segmentation

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 Github
More
Less
GOAL:

One 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.

LEARNING POINTS:
  • Work with medical video segmentation.
  • Use new neural network architectures (U-Net, Attention U-Net).
  • Develop a data analysis pipeline including preprocessing, neural network training and postprocessing.
  • Hands-on experience with Tensorflow.
Python, Pytorch

Neural network adversarial robustness verification with DeepPoly

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
More
Less
GOAL:

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.

LEARNING POINTS:
  • Learning about program verification in general, and neural network verification in particular.
  • Using Pytorch to perform backpropagation on non-standard neural network code.
  • Testing different verification approaches, gauging their pros, cons and performance.
Javascript, GLSL

Ray Tracing, Shaders

The step-by-step development of a ray-tracer.

View Github
More
Less
GOAL:

The goal of these mini-projects was to discover ray-tracing algorithms and acceleration datastructures, as well as getting familiar with writing shaders.

LEARNING POINTS:
  • Camera transformations
  • GLSL shaders.
  • Ray tracing techniques
  • Acceleration datastructures.
  • Procedural generation.
SQL

Database query optimization

In this project we designed a road collision database, analyzed and optimized the query plans.

More
Less
GOAL:

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.

LEARNING POINTS:
  • SQL hands-on experience
  • Database design
  • Analyze and optimize query plans using indexes
C++, ROS, Gazebo, RViz

Path Planning Optimization - Bachelor Project

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
More
Less
GOAL:

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.

LEARNING POINTS:
  • Using the ROS (Robot Operating System) middleware and work in a distributed system environment.
  • Use the Gazebo and RViz simulation tools.
  • Gain more expertise working in a Linux environment.
  • A panoply of path planning algorithms, their pros and cons.
  • Working in a team.
Python, Tkinter

Path planning simulation framework

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 Github
More
Less
GOAL:

Gain some insight into the implementation details of different path-planning algorithms and setup a framework to quickly prototype, test and compare different solutions.

LEARNING POINTS:
  • Building a GUI Python application
  • Have a better understanding of path planning-algorithms
Java, Greenfoot

Nightmare Gravity

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
More
Less
GOAL:

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).

LEARNING POINTS:
  • Learn Java.
  • Design a simply UI and handle different screens (game, inventory, options, ...).
  • Overall game development and design.
  • Compose simple soundtracks for the game.
Java, SQL, LIBGDX

Project : Survival

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!

View Github
More
Less
dragon curve
GOAL:

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.

LEARNING POINTS:
  • Get more experience with Java
  • Learn how to use a database in a real application
  • Integrate 3D aspects in a 2D UI
  • Discover the challenges of creating a user experience that keeps the player interested
  • One very fun part was working on generating the galaxy that you can see on the right. This is a fractal called the 'Dragon curve', and each vertex corresponds to a visitable, unique stellar system
C++, GTKLIB

Dodgeball

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 Github
More
Less
LEARNING POINTS:
  • Develop a GUI application in C++
  • Discover and implement the Dijkstra algorithm
  • Find efficient methods to decide if a rectangle (drawn in black in the image above) intersects the brown areas
Java, JAVAFX

Rigel

Together 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 Github
More
Less
GOALS:

The goal was to write a clean, easily maintainable, tested and robust GUI application using JavaFX, and have performance and usability.

LEARNING POINTS:
  • Practice unit testing for almost every aspect of the application with JUnit.
  • Write modular and clean code.
  • Practice conversions between different frames of reference.
  • Learn to properly decouple the model from the view.
  • Have an efficient implementation of all algorithmic aspects, particularly efficient 2d queries with KD-Trees.
Java

ZeldIC

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 Github
More
Less
GOALS:

Write a simple RPG game in a clean fashion, especially regarding collision detection and interaction between different actors

LEARNING POINTS:
  • Write an engaging story.
  • Use of the visitor pattern for modeling the interactions.
  • Practice doing simple 2D animations.
  • Write a clean inventory system.
Java, Processing 3

Tangible Game

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 Github
More
Less
GOALS:

The 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.

LEARNING POINTS:
  • Physics of a rolling ball.
  • Use of projections.
  • Image processing techniques like, filtering, convolution, blurring (e.g. gaussian kernel), using a Sobel filter for image differentiation and edge detection
  • The Hough transform (for detecting the position of the vertices of the board).
  • The two-pass algorithm (for connected components detection (the board)).
  • The Kalman filter (for continuous tracking of the board).
Java

QR-Code

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 Github
More
Less
LEARNING POINTS:
  • Code modularisation.
  • Get hands-on experience with error-correcting codes (Reed Solomon).
  • Unit testing.
Assembly

Tetris

The 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 Github
More
Less
LEARNING POINTS:
  • Learn how to write and organize code in Assembly.
  • See how simple instructions can be used to produce very complex behaviours such as collision checking.
  • Load software to a physical board.
VHDL, Modelsim

Multi-cycle Nios II processor

The 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 Github
More
Less
LEARNING POINTS:
  • Practice VHDL
  • Use the Modelsim simulator to test the processor.
  • Learn the workings and components of a multi-cycle processor.

Prototypes

Game Prototypes Made with Unity

Here 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.



Mech

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.

Runes

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.

Animations

Animations Made with Unity
Supernovae Explosion

A short supernovae explosion animation created using Unity. This was the final project in a computer graphics course I took during my bachelor studies.

Publications

Publications in scientific journals
Runtime Motion Adaptation for Precise Character Locomotion

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.


Citation

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).

Work Experience

Past and current jobs
  • R&D Engineer at ASUS Robtics & AI Center (ARAIC)

    • Simulataneous Localization and Mapping (SLAM)
    • 3D Reconstruction
    • View Synthesis
    • System Architecture
    • Machine/Deep Learning
    • Microservices
  • Master Thesis at Disney Research Studios, Zürich

    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, ETH Zürich

    Teaching Assistant for the Game Programming Lab course at ETH Zürich: Course preparation and mentoring student groups.

  • GFaI e.V., Berlin

    Research Engineer at GFaI: Research and Development of AI-based computer vision solutions in the Image Processing Group.

  • EPFL Xplore

    Software Engineer at EPFL Xplore: Development of rover navigation software, path planning optimization.

  • EPFL

    Student-assistant in:

    • Analysis I : Functions, series, differential calculus and integrals.
    • Information, Computation, Communication : Introduction to algorithms and C++ programming.
    • Theory of Computation : Finite automata, Turing machines, computability theory, complexity theory, NP-completeness.

Contact

Want to get in touch? Contact me at : noureddach@gmail.com