Master Thesis
Real-Time Rendering and Interactive Configuration of Apartments
My master thesis on Real-Time Rendering and Interactive Configuration of Apartments, on which I worked together with Kuba. In short: real-time global illumination via instant radiosity and deferred lighting.
From the Abstract:
We present a method for high quality, real-time rendering of apartment interiors, illuminated with dynamic light and under the conditions of changing geometry. The complete lighting solution is composed of a number of techniques (area lights, indirect illumination, direct highlight) working in conjunction with a global illumination algorithm based on virtual point lights. Rendering of hundreds of lights at real-time frame rates is enabled by a deferred lighting pipeline, decoupling scene and lighting complexity.
We demonstrate, that the described solution allows the user to interactively modify geometry (customisation of the apartment's layout) and lights (e.g. time of day modification). We also suggest an acceptable degradation method enabling the same lighting quality on slower machines.
The prototype has been developed in the Unity engine and you're welcome to try it out (it has quite high hardware requirements, though).
The thesis itself has been written in a form of a short article – a recommended read if you're interested how the technique works.
(Note: the prototype has been developed in an yet unreleased Unity version 2.6. This is why we're not posting the project files yet, nor the web player build, which is actually our target platform.)
Downloads:
- Master Thesis – the article.
- Balsa.dmg – the prototype, Mac OS uniwersal binary.
- Balsa.zip – the prototype, Windows executable.
Credits:
PuzzleBloom shaders
Fertile ground effect and improved edge detection
Demo Unity project and source code for some of the shaders used in the PuzzleBloom game.
I'm explaining the transition (fertile ground) shader, how it is able to consistently affect many objects in the scene, how I grow the grass to make it form nice patches and how the particle ring works.
There's also an improved version of the edge detection filter and a description what was wrong with it in the first place.
Downloads:
- PuzzleBloomShaders.unitypackage - download and import to an empty Unity project
Credits:
PuzzleBloom
DADIU graduation game, March 2009 production
Puzzle Bloom is an innovative action-puzzle game where you control the tree spirit Canotila in her quest to bring back life to her island.
Canotila needs assistance of the island’s native creatures to get through the industrialised world. She flies from creature to creature and uses her powers to guide them. New life will bloom into the world for each time Canotila breaks a machine, bringing her closer to the ultimate goal of return to nature.
No download needed: Solve puzzles in a full 3D environment that runs directly in your browser. Bend the static rules of traditional puzzle games by switching control over creatures. Enjoy the beautiful graphics of Canotila’s rise of nature.
So much for the back-cover game description ;) Just play the game and have fun! Oh, and: Unity rules ;)
Honors and Awards:
- Independent Games Festival Student Showcase Winner
- Gamasutra's one of The 99 Best Free Games Of 2009
- Penny Arcade Expo's PAX10 - we have beaten professional indie developers :)
Links:
- Play PuzzleBloom in your browser!
- Visual effects in PuzzleBloom – a poster for the Visionday conference
Credits:
DoubleStruggle
made entirely in just one week for the Nordic Game Jam in Unity Engine
DoubleStruggle is a game made entirely in just one week by Team Shotgun for the Nordic Game Jam 2009 in the Unity Engine.
Credits:
Computational Geometry Processing
a couple of projects made during a CGP course at DTU
A couple of my Computational Geometry Processing experiments made during a CGP course at DTU using the GEL framework.
The projects included: Delaunay Triangulation, Curvature Estimation in Triangle Meshes, Reconstruction of 2D and 3D Surfaces using Radial Basis Functions and Grand Finale: Volumetric Surface Reconstruction.
Downloads:
- All project reports – high-level description of the techniques used in the projects
- Source code and applications – coming soon...
Credits:
Eskimotion
DADIU game production using the Source engine
Eskimotion is a game developed by the wonderful Team 1 (No mouse productions), as part of the DADIU education. I was the team's Lead Programmer.
Our Inuit hero Chiku is racing through an icy labyrinth to catch the Evil Yeti King who has kidnapped Chiku’s little sister while he himself is being chased by a giant snowball. :)
The game was developed in the powerful_but_very_messy Valve's Source Engine.
Downloads:
- Eskimotion – the game, you'll need Half-life 2: episode two to play it.
- Design document – a simple design document, written in an early production phase.
- Lead programmer's report – a short document describing some issues in the production, a few screenshots.
Credits:
Terrain Roamer
computer graphics playground
I treat this application as my CG playground. I use it to test various techniques for real-time rendering and game related programming. It was built from scratch and, besides a few helper classes, every line of code is mine, as I didn't use any game engine for it – just plain openGL.
To name some of the techniques used in the app: water rendering using frame buffer objects and glsl fragment shaders, keyframe animation in a Cg vertex shader (see VitruvianMan for skeleton animation), collision detection using hierarchical AABBs and ray intersection (for now; cylinder proxy object for the avatar will arrive shortly), particle system, frustum culling, terrain LOD (a very simple algorithm for that, not useful yet) with frustum culling as well, selection buffer for picking (and moving) objects in the editor mode, extensive use of vertex buffer objects.
Downloads:
- TerrainRoamer.dmg – compiled application, ready for launching, MAC OS X only for now.
- TerrainRoamer_and_source.dmg – same, but with complete source.
Credits:
Character animation based on medical motion capture data
my B.Sc. thesis
This is the project my bachelor thesis is based on. It demonstrates methods for fast and robust mapping of motion capture data to an animation skeleton and a skinning technique eliminating typical skinning artifacts. I used a simplified physics engine to deal with mapping and a vertex program performing dual quaternion blending to achieve nice and fast skinning.
I'm especially proud of the new solution for the mapping problem I came up with: I used a clever concept described by Thomas Jacobsen from Io-Interactive in his article on Advanced Character Physics to implement an optimized physics engine performing mapping of the motion capture data to the skeleton using the Force as interface method.
I also got rid of the collapsing elbow and candy wrapper artifacts by using the Dual Quaternion Linear Blending skinning technique. Skinning is performed in the vertex shader.
The thesis has been awarded 1st place in ABB IT Challenge 2008/2009, nice :)
Downloads:
- VitruvianMan_v0.8_bin.zip – compiled application, ready for launching.
- VitruvianMan_v0.8_bin+source.zip – same, but with complete source.
- Character animation based on medical motion capture data – text of the thesis itself, polish version only.
Credits:
Tron Lightcycle Race
game prototyping in Squeak
In this project we used Squeak as a fast game prototyping platform to create yet another clone of the all-famous Tron Lightcycle Race. Squeak is a modern implementation of the Smalltalk language and environment and, besides some performance issues, which are inherent in those types of platforms, we've found Squeak a really useful tool.
Downloads:
- Tron_Squeak_win.zip – Squeak distribution opening with the game image ready to play, complete with source.
- Tron_Squeak_mac.zip – Same image, but with Squeak distribution for Mac OS X.
- Project report – Project report describing design and implementation of the prototype.
Credits:
Modelling Tool
boolean operations madness (unfinished)
This application is a rapid modelling tool. It works in a somewhat similar way to Google's SketchUp: it lets the user draw an area wherever he wants, grab it, extrude it, move around, etc. At the end of the process a boolean set operation (addition or substraction) is performed and a valid 3D mesh is generated.
User interface is designed in such a way, that it minimises clicks needed to perform any action – it cleverly finds out where the area is located in the 3D space, what is it's orientation, where to extrude it and what boolean operation to perform.
I used CGAL to get the effect of performing 3D set operations on objects – internally CGAL uses Nef polyhedra representation.
Screenshot shows the application in a preliminary stage of development, I'm still working on it.
Edit: I've put aside this project for now, as there are more exciting challenges on the horizon, but I think I'll get back to it some day.