Vilhelm Hedberg

Media technology and engineering


Thesis summary 

Evaluation of hair modeling, simulation, and rendering algorithms for a vfx hair modeling system

My masters thesis is on protyping a hair modeling, simulation and rendering software for a small vfx studio located in Stockholm, Sweden. I have created a node based system of creating the desired hair style (using C++, Qt, CUDA), which is rendered in OpenGL in real time in the preview window of Autodesk Maya. The system is capable of rendering hundreds of thousands of hair strands, and still have interactive editing of the guide curves that controls the hair style. A basic hair simulation with collisions have also been implemented.

The masters thesis report can be downloaded here

The thesis is also available for download at Linköping University's electronic publishing website

Water simulation and rendering

Final project done in the class "Image Synthesis" at Stanford. I implemented a C++ SPH simulation, that James Chen and me then rendered using a modified version of the pbrt-raytracer. The rendering is done by using the same interpolation kernel as in the simulation to find the water interface.

More information on this page

Image adjusmtents screenshot 

Interactive local adjustments using the bilateral filter

Final project done in the class "Computational photography" at Stanford. It is an interactive application for the Nokia N900. The user draws a stroke on the screen and based on that an influence map is created. The user can then adjust the brightness in the influenced areas in the image.

Download report about the project (pdf).

Teslas Island screenshot 

Teslas Island

Final project done in the class "Interactive Computer Graphics" at Stanford. It is a typing game, with some influences from Guitar Hero‚ Boom boom rocket, and missile defense. To play, press the button specified on the asteroid when it is over the line in the middle of the screen.

Download for MAC OS X (early versions of the macbook might not be able to run the game.)


Edge-Preserving Decompositions for Multi-Scale Tone and Detail Manipulation (Farbman et al.)

This is a project I did in the class "Image processing for photography and vision" my first quarter at Stanford university. It is basically an edge-preserving blur that is good for creating a detail layer and a base layer of an image. This can then be used for such things as contrast manipulation, as seen above. The project is basically an implementation of this paper.

My implementation formed the basis for the implementation in the library ImageStack

Guitar Zero 

Guitar Zero

Guitar Zero is a guitar amplifier simulator made by me, Mattias Seebergs, Rickard Berg and Albin Carnstam for the course "Modelling Project". Based on this paper we simulated a tube amplifier stage in C++ and visualized the result using the Qt library. A tube amp have vacuum tubes inside of them, which have a nonlinear behavior, and therefore a bit tricky to simulate. We made some pre-calculations using MATLAB and could run the program in real-time, but with a noticable delay though. When we were done, we had a GUI that we could connect a real guitar to, and we could get a good and realistic sound from the program. The downside of the program was that it had a delay of about 50 ms or so, which lowered the overall experience when using the program.

A report is available in Swedish here: GuitarZeroReport.pdf

Billiard game 

Billiard Game

This project is a 3d billiard game made for the course "3D computer graphics" by me, Tobias Ohlsson, Mattias Seebers and John Tolunay. It is programmed using OpenGL and the library GLFW. The simple model of the table was made using blender, and some help from a skilled friend.

You can control the direction by using both the keyboard arrows and the mouse scrollwheel. By holding the mousebutton you can shoot and control the strength of the shot, indicated by the power bar in the lower left corner. A guideline shows in which direction you are aiming. There is also a cone (either blue or green depending on the active player) which points out the ball you are supposed to strike down.

Readme (in swedish)
Mac OSX: Billiard
Linux: Billiard Game.tar.bz2


Older projects and a few homeworks:



3ds explorer

Homework in the class "Interactive Computer graphics" at Stanford. We used the open source library lib3ds to import a scene from 3d studio max and rendered it with OpenGL. I also implemented bump mapping and reflection mapping.


Mini GL

Homework in the class "Interactive Computer graphics" at Stanford. The task was to create a small version of OpenGL without any frameworks or tools to help you out. We created a graphics framework with support for lights, texture and basically everything you need to render a model decently. A bit dry but very worthwile assignment.

Start from terminal by typing "./run"
L - Turn lighting on/off
1/2/3 - turn light 1/2/3 on/off.
Mac OSX zip

Iphone 1Iphone 2


A couple of homeworks in the class "iPhone programming" at Stanford resulted in this iPhone app. The task was to create an app that can download photos from flickr and display them. It also displays geotagged photos on a map. This is basically my first "real" iphone application.


FM-modulated synth

Homework in the class "Sound technology" at Linköping University. We created a simple FM synthesizer in MATLAB that played the beginning of nothing else matters by Metallica (because it is so simple).

Short report (PDF)

Blog screenshot 

The MT blog

Me and some classmates made a multi-user blog back in 2006 as a part of one of our classes. It's still up and running but since facebook came along no one ever used or blog again... I like the design we made for it.

Link (in swedish)

Perspective projection of a point 

Introduction to 3d computer graphics article

In one of the first classes in my masters program we had to write an article about the foundations of 3d graphics. The paper is pretty basic but actually covers some important stuff about computer graphics.

Download PDF


Wasn't made as part of any class but simply for the fun of it. The video demonstrates two webcam images, one with the colors transformed to how a colorblind person (deuteranopia) se the world, and the other one with normal colors. A colorblind person should not be able to see any major difference between the two frames except for clarity in the colors. If you have normal color perception you should be able to see that no red is visible in the "color blind" section of the window.

I used the processing language on an old laptop, that is why the performance is pretty bad, but you get the idea.

Download the program:
Mac OSX: Colorblind.macosx.tar.gz
Source code: Colorblind

Snow storm 

Snow storm

A silly program I made that makes falling snow flakes stick to the edges of an image. Good example of very basic edge detection though.


Vilhelm Hedberg — — +1 (650) - 714-7198