x3d wowmodelviewer exporter (2009)

I've joined the development group of the WoWModelViewer. I'll be adding an X3D exporting option for pure X3D files that can be played with an X3D-player such as InstantReality. X3D is a markup language soon to be embedded into HTML to write 3D applications for the web in an easy fashion.

Because of that, the second exporting option is much more interessting: embedded X3D in an XHTML webpage. How does it work? Using WebGL, which is a little bit hardcore to use for the ordinary web developer, an early prototypical implementation of what could one day become X3D on the web will use the DOM tree inside modern webbrowsers to translate the embedded X3D code to WebGL. Because it is entirely written in Javascript one only needs a WebGL enabled webbrowser. Rendering a WOW character then doesn't require any plugins whatsoever. Go check it out at http://code.google.com/p/wowmodelviewer/.


pdf presenter (2008)

So, i've started a little open-source project of my own. It's a presentation tool for PDF files that has a built in presenter screen, just like Keynote on Mac OS X (I really love that feature). Since I currently don't own an Apple Laptop, I have to rely on PDFs for presentations, and I guess a lot of students who do their presentations with Beamer would also like some special presentation tool. There is KeyJNote, but this mostly does pretty transition effects.

This tool primarly aims at helping the presenter do his work, but in the future I plan on implementing transition effects with OpenGL. So far so good, if you're interested head over to http://code.google.com/p/pdf-presenter.

master thesis (2006)

My master thesis at the Fraunhofer Institute for Computer Graphics was all about mixed reality. The problem with mixed reality is that it often either looks very ugly, i.e. simple lighting and no shadows, or takes huge amounts of time for processing. Imagine this: A virtual object is placed into a real scene. The virtual object must have a shadow, visible on real objects. If someone has a red light source shining in direction of the virtual object, it must reflect red light. Also, a virtual light must illuminate the real scene, while a real shadow must also shade a virtual object. This interaction between virtual and real lighting has often been attacked with slow, clustered global illumination techniques. My task was to reimplement fast methods for real-time GPU usage.

Ambient Occlusion

In my first step, I wrote an ambient occlusion renderer, which maps the statistical light distribution over the surface of the model. The technique that is employed is a modification of Hardware-accelerated ambient occlusion computation by Sattler et al. The samples used to calculate the accesibility factor are gathered in a Monte Carlo style manner, using boost::uniform_on_sphere.

Irradiance Mapping

In the next step, the incoming light, which is captured by 180 degree wide angle lens or a light probe, is transfered to the model via irradiance mapping. Real-time irradiance map generation is done through the use of spherical harmonics, as described in Spherical Harmonic Lighting: The Gritty Details by Robin Green, and in Real-Time Computation of Dynamic Irradiance Environment Maps by Gary King, both of which I can highly recommend. Depending on the materials specularity and light transfer intensity (a HDR parameter), the colors are selected from different irradiance maps and then multiplied with the ambient occlusion parameters on the surface. In the following picture, the Grace Cathedral probe from Paul Debevec was used to calculate different irradiance maps. I also toyed around with PRT, but it didn't handle animated objects. The combination of ambient occlusion and irradiance mapping covers for most models.

Material Reconstruction

Because inserting virtual objects into real scenes leads to some changes in shading and illumination of real surfaces, surface BRDF parameters have to be known upfront of each and every material the virtual object will interact with. A mirror behaves differently from a diffuse surface in a sense that they both reflect incoming shadows or light differently. I implemented the method in Flexible Image-Based Photometric Reconstruction using Virtual Light Sources by Gibson et al., which analytically tries to reconstruct the surface BRDF from one or more images with a corresponding 3d model. This was a little rough-ride (it worked in some cases). Also, complex surfaces have so many parameters to solve for, that I used genetic algorithms through GAlib for this job instead.

Differential Rendering

After light, geometry and materials have been reconstructed, it's time for some rendering action. The fusion of real and virtual objects is done via differential rendering in a shader. The paper for it is from Paul Debevec called Rendering Synthetic Objects into Real Scenes. Here are some results.

The models have been taken from the Large Geometric Models Archive of the Georgia Institute of Technology. Rendering was done with OpenSG and Avalon. Render speed varied between 8 FPS for the dragon model and 60-80 FPS for the bunny.

Addendum: Yay, I won the "Best Thesis Award"! Here's a picture of the "Computer Grafik Abend" in Darmstadt at the Fraunhofer IGD were everything happend.

bachelor thesis (2004)

During my bachelor thesis I worked at the Fraunhofer Institute for Computer Graphics. I was part of a team for a clothing simulation project called Virtual Try-On. My job was to enhance the particle physics simulation to a point where pieces of cloth were not only able to collide correctly with static environment, but rather with moving characters and objects. So, in short, the friction model had to be replaced, and the distance field method that had been used needed to be enhanced for avatars with nonstatic behaviour. The relevant paper for the distance field method can be found here.

deimos

Deimos is my library for images, math and other stuff that was somehow useful when I needed it, and has been used in different projects. For example, it has been used in the raytracer project for intersection tests etc. All code has been tested with gcc-4 and vc-8. Note that this package is under continous construction and probably contains errors here and there. The following modules are available:

  • stream: Endian-independent stream types. Use the boost ifdefs to toggle the converter.
  • math: Vectors, matrices, geometry types, spherical harmonics and rotation, intersection code etc.
  • image: Image class and loaders for TGA and BMP file types.

The code is released under the BSD License.

Download archive
13,048 bytes
tud it-security practical course (2005)

The goal of this TUD-course was to develop a P2P based instant messaging system, that would be resistant to any kind of attack, network or security based. An open source project with similar goals is Waste. The project was entirely written in Java.

The messaging layer of our application is based on the Kademlia protocol, is completely encrypted via RSA through the Flexiprovider suite, and uses a web-of-trust voting system to exchange and check key and user integrity. Sessions between two users are initiated by a 2048-bit key exchange, followed by an AES session key. Future sessions will always be encrypted, regardless of the type of data exchange, i.e. messages or control information.

In this picture you can see Sebastian's Windows-client on the opposite side of the conversation.

raytrac0r (2004)

Behold, my very first raytracer (originally designed for a graphics course)! It features the following items:

  • Simple preview window
  • Triangle and sphere support
  • KD-Trees
  • Point, Directional and Area Lights
  • Softshadows
  • Stochastic subsampling
  • Diffuse reflections

This has been hacked together in a matter of two weeks, so the code is pretty ugly. A test with the following configuration: 2x2 rays for subsampling, 8x8 rays for softshadows and a recursiondepth of 6. The image completed on my 1.6ghz machine in approx. 6 minutes. The result is available here.

fhd graphics project (2003)

In our graphics class at the FHD we had to create a little OpenGL app. This one shows 4 little models hanging on ropes. One can zoom in and out, rotate arround the scene or rotate the cross itself, causing centrifugal force on the models. Sadly, there wasn't enough time to make them puke at a certain speed...

  • Glut, OpenGL
  • MD3 model loader (without animation)
  • TGA and BMP support
  • Simple reflection effect (copy of model flipped)

The archive contains the complete MD3 model loader. Models and their respective data need to be extracted, and there is no support for JPEG files. TGA and BMP support should properly work though. You will need deimos to compile it! A sample startup file main.cpp is also included.

The code is released under the BSD License.

Download archive
6,940 bytes

the code (2002)

The CODE is my old terrain engine project, which I sort of stalled because of the university, lazyness and crappy code.

  • SDL, OpenGL
  • 256x256 heightmaps or perlin noise
  • Skybox, Skydome
  • Precalculated lightmaps
  • Quadtree culling
  • Vertex arrays for terrain rendering
  • MD2 models
  • Generated terrain texture
  • Multitexturing
  • TGA and BMP support