August 23, 2020

Past projects

As a self taught graphics programmer, tutorials and personal projects were some of the best learning tools I had access to. They are a fun and engaging way to learn, and at the end of the day you have something cool you can show other people.

Here I’ve collected some of the personal projects I’ve developed over the years.

2014

This is around the time I started to learn the basics of programming, mostly as a hobby.

Checkbox Renderer

Checkbox Renderer

After I taught myself the basics of javascript, I worked on this little project as a way to practice.

The name says it all, it’s a very basic renderer using checkboxes as pixels. It can render points and lines (using Bresenham’s line algorithm) and by default it renders a cube with perspective projection.

2015

This year I started getting more into computer graphics.

Raymarched Terrain

Raymarched Terrain

After reading some of Inigo Quilez’s articles, I had to try my hand at implementing something similar. I didn’t know Shadertoy was around during this time, but it would be perfect for this project.

The terrain rendering is done inside a fragment shader, which marches a ray from each pixel until they intersect (or not) a procedurally generated terrain.

Simulation of the Solar System

Solar System

In this project I intended to simulate the gravitational pull between many objects (like a whole galaxy). In the end I only ended up simulating the orbit of the planets in the solar system.

2D Gravity Simulation

Gravity Simulation

This is probably the first project I’ve made that has user interaction. Keeping in theme with gravity simulations, this project allows the user to place objects of different mass, direction of travel and velocity, and simulates the gravitational pull between them.

Electromagnetic Simulation with Finite Elements Method

Finite Elements

During one of my classes a professor showed how the Finite Elements Method could be used for electromagnetic simulations. Seeing the parallels between triangle rasterization and FEM, I decided to try and implement a simple EM simulation.

Maze Solver/Generator

Maze

After reading a post on stackoverflow about solving mazes with Breadth-First Search I just had to do my own implementation. The implementation also features a maze generator using Depth-First Search.

2016

Back then I still had no intention of pursuing computer graphics as a profession.

Endless Runner

Endless Runner

A very simple endless runner game I made when I was recovering from a hangover.

Image Filter Sandbox

Filter Sandbox

As a way to teach myself some web development tools such as bootstrap and angular, I made this little single-page application to play around with image filters. The basic idea was to have a number of convolutional filters in a stack, but I ended up adding basic shader support after realizing how powerful that would be.

This is far from a finished project (you can’t even add new filters, having to use and modify pre-existing ones), but at least it’s in a state where you can play around.

2018

Nearing the end of my graduation, I started to focus on job searching and found that computer graphics is actually a viable field of work where I live.

Tinyrenderer

Tiny Renderer

After seeing an open position at Audaces, I decided to take on a rendering-focused project to put on my resume before applying. Luckily I came across the excellent tutorial series on creating a software rasterizer by ssloy.

Following the tutorial series, I made my own implementation in javascript, so the renderer could run on the browser. It features line and triangle rasterization, texture mapping, a depth buffer, normal mapping, shadow mapping and SSAO. Rendering of course is really slow, and for that reason only a single frame is rendered.