Mathias Anderssén

Programmer, PlaygroundSquad 2007

Mathias Anderssén:

There is no genius in my madness!

Gaming:

My early years of computer gaming was the C64 and Amiga classics such as Giana Sisters, Dune II, Cannon Fodder and Lemmings. Later put to shame by countless hours of Doom II, Warcraft II and Quake, all three in both single- and multiplayer mayhem.

I also enjoy games which allows at least some kind of alternative paths, such as the Fallout RPGs. Although what impresses me most in Fallout is the anything-can-happen atmosphere. The Thief, Alien versus Predator and Stalker-series which allows some amount of unique player-style are also favorites.

Education:

I applied to PlaygroundSquad after some years of university college education, Computer Science and a small chunk of Motion Picture Production. I guess my fondness for shader programming can be somewhat explained by my combined knowledge of photography and digital circuitry design. A good knowledge of C++ also helps when you explore new APIs such as physics and networking.

My contribution to the projects:

In Colonial Conflict I implemented among many things:

Ageia PhysX interaction: Although we have arcade physics instead of realistic momentum, each ship and all the asteroids has a collision model so that we can push around and ram each other.

Bloom and normal mapped environment map makes for a beautiful glossy experience.

RakNet-based network code with snapshot interpolation in case of packet-drop.

Hardware instanced asteroids, missiles and lasers.

In Sushi the work was less divided but some notable things I did:

Rendering effects such as UV-animations (smooth translation: moving lights on the sea floor and framed: shield and plasma effects), DX Point Sprites (Bubbles), explosions and procedural animations (the flaps moves in sync with the ships steering, the boss weapons etc. )

On-launch Time-to-impact calculation for projectiles instead of rechecking collision against the world mesh.

Cutscene with flight path for ship.

My pictures below explained:

These are some of the things I have been working on at PlaygroundSquad. If want to learn more about shaders I really recommend the ShaderX- and GPU Gems-series.

Image based lighting is a technique for lighting a mesh by picking up the colors from its surrounding, sometimes referred to as a global illumination technique. I used the article and example from Indirect Diffuse and Glossy Illumination on the GPU by István Lazányi and László Szirmay-Kalos, may be found in ShaderX5.

A luminance histogram is generated to find several pieces of information about the generated image, among them is average luminance which is used to tone map the HDR-rendering into something more suiting for computer displays. My HDR tone-mapping implementation is based on the article HDR Meets Black & White 2, ShaderX6 by Francesco Carucci, but with additional improvements: Efficient Histogram Generation Using Scattering on GPUs by Thorsten Scheuermann and Justin Hensley and Fast Summed-Area Table Generation and its Applications by Hensley, Scheuermann, Greg Coombe, Montek Singh and Anselmo Lastra.

Deferred rendering produces a Geometry Buffer that contains all information needed to shade/light the pixel at a later time, allowing the use of many small lights without the added renderpass. First based on Deferred Shading in Tabula Rasa, GPU Gems 3 by Rusty Koonce and then later enhanced by Overcoming Deferred Shading Drawbacks, ShaderX5 by Frank Puig Placeres and Deferred Shading in S.T.A.L.K.E.R, GPU Gems 2 by Oles Shishkovtsov.

Depth of Field blurs all pixels that are out of focus and makes for a good way of guiding the players attention to a specific area. My source was Real-time Depth-of-Field Implemented with a Postprocessing-Only Technique, ShaderX5 by David Gillham, but a more impressive implementation can be found in GPU Gems 3, Practical Post-Process Depth of Field by Earl Hammon Jr., Infinity Ward.

Environment map is a technique for simulating reflections. By rendering six textures in the game, one for each side of a cube (called a cube map), and looking up the respective texel with the reflected vector. Based on Programming Vertex & Pixel Shaders by Wolfgang Engel.

Bloom is the reproducing of an imaging artifact of real-world cameras (quote: Wikipedia.) Sometimes called glow. It is a technique for making some objects in the scene seem brighter than others by expanding their influence beyond their edges, useful for lights and flames. Also based on Programming Vertex & Pixel Shaders by Wolfgang Engel.

Hardware instancing and animation textures is a technique for speeding up the rendering of identical meshes. Hardware instancing allows the duplication of meshes, but due to the limit of shader constants it is not possible to use traditional GPU skinning on multiple complex objects. The solution is to save skinning matrices to a floating-point texture and do a lookup of joint matrices in the vertex shader. It is actually based on an DirectX 10 article: Animated Crowd Rendering, GPU Gems 3 by Bryan Dudash. But it is also possible in DirectX 9 as shown, although a modern graphics card is recommended since Vertex Texture Fetch (VTF) is a bit slow. Also it has to be specially ported to ATI cards by using Render to Vertex Buffer (R2VB) instead of VTF.