At 23rd December exactly two years have passed since we have started development on the current version of [w]tech. Two years described from the point of view of the programmer.
At 23rd December exactly two years have passed since we have started development on the current version of [w]tech. On the 23rd of December 2009, one day before holy eve, I decided that it is time to start over with the code. Writing everything again we needed.
You may have read it in this news-posting we published right after that: Moddb.com
Nostalgia overcomes me when reading those lines, written by my 16 year old self.
First parts of the engine started work and to grow. After some weeks we had something which could import content from one mesh format, save it in a virtual file system and render it showing the meshes normals only.
Later then the first shader-editor came around. In fact, most parts of it are still used in the current version of [w]tech, unlike much of the other code.
Having to create extra groups for all content manually wasn't really what we wanted. Aside from that I discovered how to make those fancy shiny glass-windows which you can see since Windows Vista was released. I hade the urge to develop a new GUI! Confused by the WinAPI I moved over to write my own GUI-Framework using native Direct2D, of which the first version turned out to be not the best we could have.
Still, it worked. For some time.
[w]tech was now fully shiny and glassy, with its own 'fancy' buttons and menus.
We kept that framework for quite some time and I implemented more features into the engine. While time passed by, a lot of code found its way into our codebase. Still not knowing how to make a proper lighting system, I toyed around with some PostProcess-Shaders. First one was a simple linear-blur over the whole screen. Then I read something about gaussian-blurs.
When the editor turned out to be at least a bit usable (A widget just had to be made!) I found myself importing a simple cube into the editor, building a simple world with it. It made me very proud as I created the first 'real' world. I had made a world made of cubes. That's just what programmers do; they use cubes to build a ordered world.
Anyways, world was set up, bloom was blooming, I was happy.
Of course an artist can do better things with your engine. That blew me away:
I don't remember how much time passed since that 'milestone', but I do remember what I did on some Friday night where I did not have anything other to do than to code:
I said to myself: "Get on the PC, read something about deferred shading, and then implement it!".
No sooner said than done. At 4:00AM I watched a small pointlight, attached to my mouse cursor running through a little test-scene.
Good that I had no idea of multiple rendertargets, writing vertexnormals to such a target, reconstructing the pixels worldposition from depth, applying a point light formula and those other things you need for deferred shading. It was a challenge, but it was fun.
On the next day my team mate Raphael was all like "Lol, you didn't just implement all that yesterday, right? RIGHT?!".
Now imagine the smile on my face...
Next thing to do was to implement viewports. Every editor should have them, we thought.
In fact they still aren't working right. Perspective-Modes work just fine, Ortho-Modes won't.
Now, let me skip a few parts of the engine, like some first tries of SSAO. One day, I discovered PolyVox
. And I immediately thought: I must
Of course that didn't work out of the box.
Fortunately, David Williams, the developer of PolyVox
, was able to help us out and to fix some bugs while we were working with his library. He also built in smooth volume support because of us. Again, thanks for that, David!
Then, a port to DirectX11 and our second techdemo later, we screwed our deferred shading.
The Light-Pre-Pass was found and ready to get built in! It took some time, but I got it working.
This is the last thing I'd like to have told you about the version with the old core. While writing up all those features, I gained a lot more coding skills.
I was at a point where I didn't like what I wrote anymore. When things started to get more complicated the whole system began to fail, standing in the way for more features.
I think it was the old GUI-Framework which was the reason I finally decided to take a walk through my source-directory and to delete every single file I didn't like.
"D3D10Renderer.h/.cpp", "Scene.h/.cpp", and yes, even my "main.cpp" went into the recycle-bin. Only to name a few of them, I'm sure there were more.
Next stations: New GUI, new Engine-Core!
This is what popped out. Still no perfect style, but a way nicer API than the old framework had.
I actually don't remember if I build the GUI-Framework before or after I wrote the new core.
Anyways, we needed a new core, and I spend a lot of time just writing background stuff for the engine. Probably a full month or even two passed away until I started to work on getting something drawn on screen again.
Other things had to be done. From the basic engine functionality (This time I went for a class-based implementation) to scene mangers or audio features.
Funny thing is that I had to be sure that everything I wrote worked without problems. Most of the time it just wasn't possible to test and to debug the code.
But when the first renderer came up and I plugged in the other functions into it, it almost worked out of the box. Only thing we lost was most of the Voxel Terrain, but not everything!
Now, that looks more like the current version of the engine. Still no import was possible! So it took another time to get something onscreen. I decided to build in the ASSIMP-library
, and now [w]tech has support for all of the common mesh formats. Now it looked like this:
And no, before this version there weren't any settings for the color of the lights. I take this as another milestone. ;-)
Progress bars, a better widget, more post processing, a much more robust save format for maps, more light types than the pointlight, shadows, and more! At some point I went crazy and implemented a whole bunch of nice things!
I even began coding a new shader editor. But it still isn't finished, and I haven't worked on it since those days anymore. Stil using the 'ancient' one, heh.
Best of all must have been the new property system. What would a programmer want more than something which does almost everything automatically? Containers could be saved to files, displayed as nice boxes for the user, dynamically added or removed... Well, pretty nice thing to have! Though, I won't put a picture with only code on it in here.
Me wanting to explore the capabilities of my GPU (I got a GTX570! Yeah!) more and more I did some experiments. Rendering a polygon plane with a resolution of your screen and displacing the vertices by special values from the scene meshes was one thing. Others were more useful, like distortion or other scene-effects. And I implemented a very simple version of Pong for example.
So, now things start to fade for me. From this on, I implemented so many little things I can't remember all of them. I built in scripting and physics just lately, tweaked things here and there, killed aggressive bugs.
Now the engine is quite usable. I started working on the prototype of our game 'Pulsedrive'
, and it works quite well. The game, even though far from finished, does its job just fine. You find a lot more bugs or things that have to be better when actually using
I think I should make a cut here. Everything which comes now is too new, and those things I left out are probably too unimportant. This posting is getting longer as it should have been, anyways.
Andre Taulien ([WuTz]!) and my team mates!