DirectX9 Shader Competition Results

Here are the results of our DirectX 9 Shader competition. We'll go through each of the winners, with short descriptions and downloads of their shader applications, and we'll also take a look at some of the other notable entries.

Shadery - Aras Pranckevicius, Winner

Overview: "Displays outdoors scene rendered in some-NPR (non photorealistic rendering) way. Since the time of "Bzhykt" intro I was wondering whether it's possible to render the same entirely in hardware. So, I set off for terrain, trees etc., with edges/hatches on it, and some "painterly" style. It's possible to achieve exactly the same look -- requires lots of rendertarget changes (similar to building a summed area table). But, alas, it didn't look good at all -- possibly due to some bugs on my part, possibly because of lack of precision or some other thing."

This was chosen as the winner as, in general, the overall scene was well executed and a good demonstration of NPR rendering. With the use of MRT's the its fast and planar reflections are achieved without a cubemap.

Translucency - Daniel Vollmer, 2nd Place

Click for a bigger version

Overview: "Remember when the first "ps_1_x" cards came out? At the time there were a few demonstrations for refractions that essentially hid their incorrectness by using complicated geometry (Stanford Bunny). Also, they only computed the first "hit" (in ray-tracing terms) of the ray entering the material (and presumably never leaving it). So for this demonstration I'm using simple geometry so you can (hopefully) see what's happening"

Chosen because its an interesting implementation of the perturbation map and good refraction effect.

Rollercoaster - Emil Persson, Runner up

Overview: "This demo illustrates a number of interesting usages of shaders. There are 5 shaders included, that does very different things.

  • RailShader.shd - This is the shader that constructs the rail for the roller coaster specified by a number of nodes
  • TerrainShader.shd - This shader creates a rock look for the terrain, done by applying a 3D turbulence noise function over it all.
  • LavaShader.shd - This shader creates a lava effect which has a low-frequent noise appearance
  • WaterShader.shd - This shader creates a water effect by constructing a wave normal using a 3D turbulent noise function.
  • This shader creates a wood material with some fairly simply math and a little noise."

This was chosen for its use of a wide range of shaders as well as a good particle effect shader and the generation of the track via vertex shaders.

Retro - Eyal Teler, Runner up

Overview: "You've run the program, I assume, and so viewed the magnificent earth-shattering graphics -- at least for the early 1980s. This program isn't about fancy graphics but about showing the computational power of pixel shaders 2.0. All the game logic is in pixel shaders; the C++ code just performs initialisation and stores the time and key press in constants for the shaders to read."

An innovative and audacious use of shaders and, well, its Frogger!!

Deferred - Jay Ryness, Runner up

Overview: "There are actually five shaders here. Preshade.vsh and .psh are used in the first pass, a.k.a. "geometry pass". Their purpose is to render normals, reflection vectors, diffuse colors, and z depth respectively to four render targets. Anything that is only normal or view-dependent can and should be computed in this pass. Right now, the view reflection vector is probably the main thing, but in the future I anticipate fresnel calculations and a few other things might go here. Then there's Light.vsh, OmniLight.psh and Ambient.psh. The vertex shader is oh-so-simple, because its only goal in life is to pass a few data to the pixel shaders where the important calculations happen. OmniLight.psh is the pixel shader for omni, or "point" lights. Give it a position, color, and radius, and it will do its thing. Ambient is for ambient. Soon, DirectionalLight.psh will be for, that's right, directional lights. Maybe there will be one for flourescent tubes, as well. Only a single pixel shader is needed per light type, and the sky's the limit on what kinds of lights there can be."

Overall a good implementation of a deferred shading scheme.