Procedural 3D-Fire with Perlin Noise on the GPU

Procedural 3D-Fire with Perlin Noise on the GPU

Procedural 3D-Fire with Perlin Noise on the GPU Sometimes you want to create textures and effects that resemble natural phenomena. It can be done by hand, but that restricts the result a lot. Better is, in many cases, to use procedural methods. This means that no images or textures are saved on memory, but rather computed in real-time when they are needed. As the computers get quicker and quicker but memory transfer time stays quite constant, I thought this was a good method to learn. I took the course Procedural Methods for Images, and chose to create procedural fire as my final project. The fire is built from nothing but multiple scales of Perlin Noise in four dimensions (with time). The course examiner, Stefan Gustafsson at Linköping University, has written a paper about noise that can be found here. My fire is implemented with GLSL to make use of the GPU for all the noise calculations. With a Nvidia GTX 570 graphics card you can get performances around 30 fps. The report is available in swedish....
Rigid Body Simulation

Rigid Body Simulation

Rigid Body Simulation In the course Advanced Computer Graphics we implemented a rigid body simulator. It is relatively simple, but a lot of work lies behind. The simulation consists of two parts: a collision detection method and a collision response method. The first uses the GJK (Gilbert–Johnson–Keerthi) and EPA (Expanding Polytope Algorithm) algorithms to find any collisions between any two objects. The domain is also discretized into a grid so that we make sure to only check for collisions between objects that are nearby one another. The collision response is made with the LCP (Linear Complementarity problem) method, which comes down to an optimization problem. This makes it possible for us to resolve several contact point at one time. The course emphasises a lot on parallel computing. The code uses OpenMP to parallelize the computations as much as possible. The clip below shows an example where a large amount objects are being used....
Primeengine – Life is meant to be played!

Primeengine – Life is meant to be played!

Primeengine – Life is meant to be played! In the course Technical Project Management in Audivisual Media, the goal was to make a three minute long movie including green screen scenes. We were also told to make a 30 second version, that would bring the same message. The project contained parts, such as writing a manuscript, drawing a story board etc. We chose to make a ”funny” commercial for a fictive game company and their new game engine. I took the role as the main actor and special effects creator for the war scene. The movie is done mainly in Adobe After Effects and Adobe Premiere Pro. See the links below to watch both versions of the movie....
World Energy Visualization

World Energy Visualization

World Energy Visualization This project was done in the course Information Visualization. We wanted to visualize energy related data, all over the world. Our main goal was to be able to quickly get a grip of how energy consumption in different counrties is connected to other statistics, such as GDP, population and CO2 emissions, by using certain visualization methods. The application is written in C# and uses the GAV framework, developed by the VITA group at LiU, and the data is taken from the Internet site of The World Bank. The multivariate data contains information all over the world between the years 1971-2008. The report can be downloaded with the link to the right....
Monte Carlo Ray Tracer with Photon Mapping

Monte Carlo Ray Tracer with Photon Mapping

Monte Carlo Ray Tracer with Photon Mapping Realistic image synthesis is a wide reserach area and has become important in industries such as entertainment (games and film), medical and scientific visualization. For this project we did an implementation of a Monte Carlo ray tracer using photon maps. This was a part of the course Advanced Global Illumination and Rendering at Linköping University where each student or groups of student got to implement there own ray tracer. We started this task by implementing a simple Whitted ray tracer with perfect reflection and refraction. To also handle diffuse reflectors we implemented a Monte Carlo estimator to sample radiance in several direction over the hemisphere. The last part of the project was spent on trying to reduce noise and speed up the convergence of the estimator by using the technique of Photon mapping. The ray tracer is implemented in C++ and uses OpenMP to parallelize the process on multiple cores, thus speeding up the rendering time....