That's me

Damiano Massarelli

Software engineer passionate about graphics.

Projects

WebGPU 3D Boids

WebGPU 3D Boids

In this project WebGPU is used to control a large number of elements in a boids simulation through compute shaders and for rendering. This is my first project using WebGPU. Source code is available on GitHub and you can give it a try on your browser.

Graph Toolkit

Graph Toolkit

An implementation of the paper Improved Efficiency of Spring Embedders: Taking Advantage of GPU programming using JavaScript and WebGL2. Using a relatively modern GPU, the algorithm can run almost 900 times faster that the equivalent CPU algorithm when visualizing large graphs. A custom WebGL renderer was also developed to visualize the layout computed by the GPU algorithm without having to exchange data with the CPU (an operation that can be slow when dealing with large graphs).
Source code is available on GitHub and you can give it a try on your browser.

Harentz

harentz

Harentz is an endless arcade game where the player has to dodge 3D tetrominos to survive. Harentz is developed in C++ using SDL2, SDL gpu and a custom 3D engine based on BSP Trees. The source code is available on GitHub and you can give it a try on android.

ReGeBe

regebe

ReGeBe is by far the biggest project I've worked on. In ReGeBe the player controls Wooty, an unconventional hero in his quest to retrieve the colors stolen from the world. Despite being a relatively standard platformer, ReGeBe adds some puzzle game components: crates change their behavior when colors are shot to them making it possible to solve simple puzzles.
As the player retrieves the stolen colors, they also come back in the world which originally is in black and white.
ReGeBe is developed by a team of friends using Lua and Corona SDK. A short teaser and a demo of the game are available.

sre

sre

sre is a simple game engine I'm developing to put into practice the computer graphics concepts I'm learning. sre is built on top of OpenGL and SDL2 and it is available on GitHub. It's goal is to be simple to use and extend. At the moment it supports:

  • GameObjects and Components
  • Scene Graph
  • Event Listener
  • Skeletal Animation
  • Shadow Mapping
  • FXAA, Bloom, Motion Blur, Gamma Correction, Tone Mapping, SSAO
  • Bump Mapping and Parallax Mapping
  • Water Rendering
  • Deferred Rendering
  • PBR Materials
  • Simple Particle System

tinyraytracer-openglcompute

sre

tinyraytracer-openglcompute is a GPU port of tinyraytracer. While the original version is completely CPU based, this port leverages OpenGL compute shaders to execute ray tracing in parallel thus allowing real time rendering of relatively simple scenes. Source code is available on GitHub.

dCloth

sre

dCloth is a cloth simulation engine based on Verlet Integration written in C++ using SDL2. Source code is available on GitHub.

Education

2016 - 2018 Master's Degree in Computer Science

Roma Tre University

  • Thesis: Morphing Between Topologically Different Meshes

    The goal of the thesis was to develop a plug-in for Autodesk Maya to enable artists to copy an animation from a mesh
    A
    to a mesh
    B
    . To do so, the deformation of
    A
    is apllied to
    B
    in the form of distortion (pre-strain). If
    B
    cannot be deformed as imposed by the distortion, an elastic force will be applied to its vertices in order to reach a plausible configuration.
  • The correspondence among the vertices of
    A
    and
    B
    is therefore needed. To retrieve this correspondence, a modified version of the Product Manifold Filter is used. Moreover, in order to apply an elastic force to its vertices,
    B
    must be tetrahedralized so that it can behave as a solid body (and not as a hollow mesh). Tetrahedralization is carried out using one of two algorithms: a custom algorithm based on extrusion and the famous Delaunay tetrahedralization algorithm.
    This is still an experimental work but some of its results can be seen .
    harentz
    harentz
    harentz


  • Final grade: 110 / 110 cum laude

2013 - 2016 Bachelor’s Degree in Computer Science

Roma Tre University

  • Thesis: Development of a hypertextual-logging tool for multithreaded applications

    Logging is extremely useful to understand and monitor the execution of an application. Unfortunately, log reports are usually hard to analyze. The goal of this thesis was to create a logging framework able to produce html pages that could be easily browsed. Every log call produces an entry in a page and pages can be created an closed to more properly organize the logged information. What happens when more than one thread produces logging information? Unluckily, there is no simple answer as the order of execution of different threads is unpredictable. As a result, the pages of a thread might be polluted by the data logged by other threads. The solution is to create a different stack of pages for every thread: when a task is submitted to a thread it will create a set of pages that can only be accessed within its thread. Its first page is also connected to the page of the thread that submitted the task. The creation of this link is extremely problematic. The destination page may have not been created yet. The solution is the use of Connections Points: a mechanism whereby lazy links are created and then implemented using redirection between html pages.

  • Final grade: 110 / 110 cum laude