mail me

February 2008:

Wow again a long time since my last post! I'm now working at Xendex. Or more precise I worked there since August 2006 and am currently staying at home with the kids. More detailed updates on what I'm doing now can be found here: http://karenzpapa.blogspot.com

June 2006:

After the initial shock in May I am very motivated and ready to move on. Currently I am evaluating my options to find out what exactly I want to do with my future.

May 2006:

I haven't posted in a loooong time. But today I thought it's worth it. What happened the last couple of years?

  • We moved to England where I worked for Rare games. It was a brilliant experience. The people were very nice and the job was fun.
  • We moved back to Austria August 2005 to be closer to our family again. I rejoined Rockstar Vienna, we bought a house, we got another child Matthias who is absolutely gorgeous. I got ready to be settled with my life
  • Take Two decided to shut down Rockstar Vienna out of the blue. One day it's a good and stable job. The next day I get greeted by bouncers in suits when I go to work. more
  • So here I am: over 6 years game programming experience and the only major game development studio in Vienna wiped out. I still want to make games but life seems to think otherwise.

April 2003:

  • Tool 0.7.4
  • Tool 0.7.3
  • Tool 0.7.2

February 2003:

  • Moved the site to sdf-eu.org which is a great free Unix shell provider.

January 2003:

  • Added more functionality to Tool. Fixed some bugs. Still no time to continue with the engine, since the baby needs all attention it can get :)

December 2002:

  • Renamed OnTop to Tool and added removal of a window's system menu, minimizing every window to the system tray.

November 2002:

  • I'll pause development for a while since our baby was born which is one of the best things that have happened in my life. And I want to spend as much time with him as possible now.
  • Added volume change and mute to the OnTop tool. Very useful when you don't have headphones with a volume control.
  • My material & render state handling system is still a bit awkward to use. It's definitely a tricky problem to get this right.
  • Added fog that blends the water into the skybox color.
  • Having an abstract renderer base class turned out to be pretty useless, since I don't plan to switch renderers at runtime. Maybe I'll refactor that when I have time (which means never :)).
  • Added skybox and cube map to make the water look nicer.

October 2002:

  • Written another tool I find useful when I'm debugging. It lets you switch any window to "always on top" with CRTL+SHIFT+T.
  • Since some people asked, I've made the FFT water tileable. It actually was already, but I didn't wrap the mesh at the borders yet. The screenshots were updated, now the water looks nicer because you can see more detail.
  • Downloaded MikTex and created .pdf files of my MA and PhD thesis. You can read them if you want :) (they're in German).
  • Currently I'm quite busy, so update intervals will become longer.
  • Slimmed down the webpage a bit.
  • Made Water2D and Newave contexts frame rate independent (fixed timestep with catching up depending on rendering speed).
  • Made another small tool that I need at work. It calculates the time total you've worked on a task given a series of start/end times and delta durations. Might be useful for other people that have a similar project management system as we do.
  • Did a small command line tool that lets you turn off your computer after a given time. That's handy if you've got some application running that'll finish in some time but don't want to wait for it and then turn off the PC. You can find it in the download section.
  • Added sphere tesselation function.
  • Added some more device caps checks, so that it's less likely the TestBed will crash on different systems. Can't test it though since I don't have a bunch of graphics cards.
  • Did a quick test of converting textures from RGB to HSL, setting L to 128 and then converting back RGB. Then I used this texture instead of the original diffuse texture as color map for the bump mapping. I thought this might improve the look, because setting L to a constant value should get rid of an image's contrast. Well actually the result looked really ugly since everything became more or less grey. So I've removed it from the TestBed. Just left the RGB to HSL and vice versa part in the image code.

September 2002:

  • Changed my material again. Now you can derive from the material class and implement any custom rendering code in the derived class (it's a bit like the Dx8 Effects & Techniques stuff but in C++, since I don't have the time to write an effect file parser). Later I'll move the state blocks into the materials too. Then I'll have everything needed to setup the renderer in one place.
  • Found out why plainly interpreting the alpha channel for .md3 models looks weird. The info how textures are applied is written into the scripts/models.shader file which I'm not interpreting. Well, maybe I'll do that when I have time left ...
  • Added specular bump pass. Since it seems to be impossible to get higher specular exponents than 4 (using 2 TUs) with Direct3D without using PixelShaders (alas I haven't got a PixelShader card) the specularity is too bright. You can approximate x^16 with 4*(x^2-0.75) but it seems that though you can calculate this with nVidia register combiners, you can't do the same with the Direct3D fixed function pipeline.
  • Got the bump mapped .md3 models up and running (without vs with). Currently there's only diffuse bump mapping with correct self shadowing term. Next I'll add the specular term.
  • Currently I'm working on bump mapping arbitrary models. What I do is convert the texture of a model into greyscale and then calculate a normal map from it. Then I calculate tangent spaces for the model's vertices (doubling vertices where the texture is mirrored which leads to flipping of the tangent space z-axis). Here's an image of the Quake3 Bitterman texture versus the normal mapped version mapped on a quad with twice mirrored texture. (The completely bump mapped model looks still a bit buggy due to some bug in the tangent space generation code for morphed meshes).
  • I should rework my vertex buffer handling. The current way is having one vertex buffer per mesh that caches the geometry in a ready to render format. What I should be doing is have a number of vertex buffers and cache meshes into these buffers on a LRU bases. Thus I get less buffer switches and can't have more meshes than available buffer memory on the video card. (The different buffers should be seperated dependent on vetex formats and dynamic/static geometry). Hope I'll find time to do this.
  • The .md3 importer is working (Visor, Xaero). The models are correctly animated and the data is read directly out of the .pk3 files (actually the first time that my zipstream library came in very handy). So the morph animation is working ok.

August 2002:

  • I've added vertex morphing to the engine. For testing this I've started working on an .md3 model importer.
  • Added particle system to shadow volume test so that the light source is visualized.
  • Added angular rotation to the particle system for smoke
  • Implemented a simple particle system (nothing fancy) because I'll use it to visualize light sources for my stencil shadows.
  • Finished my refactoring. Now the whole scene graph stuff is taken out of the engine. Hierarchies are still used for animations of course, but they don't store material information anymore.
  • It's raining A LOT in Austria. We have big flood disasters all over the country. (They say that are the biggest floods since about a hundred years).

July 2002:

  • Added precompiled headers. Even following the rules from Lakos' book "Large Scale C++ Design" compile times were still getting slower. So I just had to do it although some people don't recommend it, but mostly I've just put external headers into the precompiled headers (i.e. C++ standard library and Windows/DirectX stuff).
  • Refactored the light, material and render state code. Render states are no longer part of the scene tree but saved in state blocks (like in DirectX state blocks). You can create delta state blocks for state switches in the renderer. Visual unit tests really help when doing refactoring. See more in the tips section.
  • Done more refactoring of the engine. Step by step I'm getting rid of the scene graph stuff. Currently my new design is coexisting with the old one.
  • Implemented stencil shadows according to the paper "Practical and Robust Stenciled Shadow Volumes for Hardware-Accelerated Rendering" by Everitt and Kilgard. Here's a screenshot. I have to add per pixel attenuation since vertex lighting looks really bad on big polygons.

June 2002:

  • It's superhot in Vienna which makes it impossible to work on my engine :)
  • I'm checking the device caps now for Hardware T&L support and choose the device accordingly. This should fix the crashes on non GeForce cards. Since I don't have any older card I can't verify if it works.
  • Updated the engine sources in the download section.
  • The way materials are handled currently is bad. Basically they are treated as nodes in the scene tree (I got this "idea" from the book "3D Game Engine Design). Well that's not an optimal way to do it. After some thinking I decided to implement a simple shader script system and will use this for my materials since it is easier to use and more flexible. So that's the next big thing I'll implement.
  • The water algorithms are integrated in my TestBed now. So I've removed the water demo from the site. Just download the TestBed if you want to have a look at the water stuff.
  • Added spherical environment mapping to enable reflective materials. I didn't add cube maps because sphere maps suffice for my simple purposes. Note: The sphere map example provided with the DirectX8 SDK doesn't yield good results (they use vertex normal based texture coordinates and not reflection vector based). For a better algorithm search for "Using Dual Paraboloid Maps" in google (original paper "View Independent Environment Maps" by Heidrich and Seidel) the algorithm is explained in OpenGL syntax but translating to Direct3D is no problem.
  • Finally I've finished working on my TestBed that integrates all my previous hacked test applications in a consistent way. It serves well for plugging in future test applications and for "visual" unit testing (i.e. after refactoring I have an easy way to check that all features are still working by simply stepping throuh the TestBed application).
  • The water simulations are now interactive. In the statistical water you can smoothly transition from a calm to a stormy sea. In the 2D water algorithms you can drag the mouse interactively in the water (see e.g. Newave).
  • I'm not really happy with lots of stuff I've designed so I've even thought about rewriting the whole thing from scratch. But since it's a private project only I won't go that way since I honestly don't have that much time. So I guess I'll live with it and refactor those parts that annoy me too much.

May 2002:

  • Did a lot of refactoring. Completely rewritten math library, added quaternions.
  • Added memory leak detection functionality using the Win32 debug heap. This is really useful in tracking leaks. If a program has a memory leak then on exit you get a list of the leaks with file name and line number of the allocation. So you can step directly through the leaks with F4 in Visual Studio.
  • Improved unit test framework.
  • Improved my application framework and cleaned up my test application.
  • Refactored almost the whole input library.

April 2002:

  • Minor update to the zipstream library: izipstream now has a member getSize() that returns the uncompressed size of the file.
  • Did some cosmetical changes on the engine source, nothing worth mentioning.

February 2002:

  • We've been on vacation in Egypt for a week. Now here's a picture of nice volumetric light from an old Tomb Raider temple :).
  • Put together a small demo of the water algorithms. Rendering is kept simple, just a water texture with an environment map. This is only a hack to have some demo to show to others. It runs on hardware T&L cards (GeForce++) cards only. Here is a screenshot on flipcode.
  • Improved the FFT water algorithms. (From 35 FPS to 85 FPS on my system).
  • Added choppy waves displacement to the FFT water. Now this looks really good and also is really slow (doing 3 two dimensional FFTs per frame is quite costly).
  • Implemented Gerstner waves. (This one was a piece of cake compared to the FFT water). Alas, this algorithm yields a very periodic water pattern, so it looks rather unnatural.
  • Hooray, I've got the FFT water algorithm described in Tessendorf's paper up and running. Well, the screenshot doesn't look like much, but it definitely looks better in motion (and well, I should make it blue and but an environment map or gloss map on it ...).
  • Fixed a bug in the ozipbuf class (it was derived from std::streambuf instead of std::basic_streambuf<Char, Traits>).
  • Implemented a trace ostream for debugging. Currently output goes to OutputDebugString().

January 2002:

  • Implemented the statistical water method described by Tessendorf. Well, it's not perfect yet, since the water looks a bit awkward.
  • Implemented fast fourier transform in one and two dimensions (didn't bother to go higher than two, since I don't need that).
  • Did some research into water simulation. I've so far implemented two algorithms. First the one described by Gomez in "Game Programming Gems" (which has been long known in the demo scene). Second the algorithm from the SGI Newave demo.
  • Added terrain texture generation.
  • Added particle deposition.
  • Did research into terrain generation. The engine can curently generate terrain from a greyscale height map, using fault formation and midpoint displacement. I'll add particle deposition and the will then look into texture generation.
  • Did some research into collision detection using OBB/AABB trees (I'll implement that when I've time).
  • Hooray Europe's got it's own currency!

Diary 2001

ABOUT
DOWNLOAD
DIARY
FEATURES
TIPS
SCREENSHOTS