Interim Report - Game Programming Lab '11

Group members: Daniel Bucher, Etan Kissling, Jan Rüegg, Francois

Team 2: Reign of Darkness

Progress

Functional Minimum

100% done

3D environment

done.

However, the maze generation is not yet that much sophisticated.

Main problem was doing a proper collision detection which can be used later.

Player lights

done.

Used a billboard technique to visualize them. It produced a quick result, however, this was not satisfacting and will be replaced by another shader if technically possible.

For lighting, simple phong shading is used. Specular part is somehow buggy since the shader compiler has problems with the number of arithmetic operations. It always tries to unroll loops and takes 5 minutes of Visual Studio freeze when you change a variable from 1.0 to 0.1. Adding [unroll(2)] comments lets it compile more often, but produces warnings that the attribute was ignored smile

Free moving in 3D

done.

Had severe problems with finding proper controls which do allow the player to move away from missiles (up / down / left / right) and shoot at the same time. Thanks to some friends who shared their opinion over the controls with us. New controls are:

[LEFT STICK] : forward / backward, right / left [RIGHT STICK] : pitch / yaw [LT] : down [RT] : up [A] / [DIGITAL LEFT] : roll left [B] / [DIGITAL RIGHT] : roll right [LB] / [RB] : shoot

Collect lights

done.

And if you lose light, your light intensity in the lambert shader also decreases.

Simple game menu

done.

And also gave us a free help screen :-P

Restart functionality is still missing.

Simply press [START] on all controllers who want to play, then [A] to start the deathmatch.

Understanding GIT (new target)

done (partly).

We had the problem that a person of us actually managed to break his SVN client by not properly using it hint. The consequence was not to simply recheckout and don't trying to bug it anymore, but to use git instead. Git is pretty nice, since it takes you 2 hours for an initial checkout and you run into problems with certificates and all ugly things that you combine with the word "encryption" and it gives you - hmm - no? - advantage.

Low target

100% done

Multiplayer

done.

Split screen multiplayer. What's still missing is to dynamically adapt the screen sizes based on how many players are still alive.

Shooting

done.

You only have one missile gun currently. The missiles have the same model as players and collectibles. Maybe will change later, but it is okay to run into a light orb in hope of gaining 1 life and then realizing that it was a missile :P

Maybe later, you have two guns, one for the right button and one for the left. Or one that you can charge up by holding the button for a longer time before release.

Or a lag-gun which creates several 1000 objects per second to make the garbage collector invoke multiple times and make the game crash - for when you're loosing and when you are a bad loser!

Desired target

Work in progress

Players can enable/disable environment lights during the game

NYI

Environment Lights

NYI

Graphics improvements (new target)

WIP

Volumetric lights
Thanks to notabene on the game development stack exchange, we now know about a technique to make our lights look better using volumetric materials. We simply shoot a ray to each light from each pixel and collect all light intensity over 100 steps - checking for shadows on every position. Hoping that xbox will be soft with us smile Shader compiler is already not and Etan fails at linalg in the vertex shader, making the new lights look somehow strange (they are at the wrong position and have strange shapes, like a light beam once...)

Billboard Lights
Because we have many lights (for players, collecting, shooting), it would create a very high polygon count to have sphere models for all of these. Instead, we decided to use a simple billboard technique combined with alpha blending to achieve the effect of volumentric lights in a very simple way:

billboards_cut.png

What you see on the image are the billboards, that are always rendered to directly face the respective camera. In the real game, all the red regions will be transparent (as you can see in the game screenshots). Also, with this technique the lights are correctly rendered respective to the z-buffer and depth of the other objects, so that lights are only seen when they are not occluded.

Shadow Mapping
We already did some experiments on shadow mapping. After implementing basic shadow maps, we tried using two techniques for better shadow maps:

Variance shadow mapping
[[http://www.punkuser.net/vsm/][Variance shadow mapping] is a relatively new technique to do soft shadows, that gives much better results than the previously used technique "percentage closer filtering".

As you can see in the screenshots below, the implementation is quite fast and we were already able to render a good shadow map for a single (non-point) light source in real time on the Xbox 360.

Paraboloid shadow maps
At first, we thought of using dual-paraboloid shadow maps to create the maps for our omni-directional player light sources. The advantage of that is that we only need two shadow maps per light source instead of the 6 of cubic shadow maps. After first tests, however, we concluded that this was not a good representation in our game: Because of the linear interpolation in the pixel shader, dual-paraboloid shadow mapping leads to round shadows for straight edges if the tesselation of the scene is not high enough. But because we create the whole scene by hand, and use for example really big triangles for walls to save computation time, this was a bad property.

Instead, we think that cubic shadow mapping with a really simple geometry of the came should be more efficient than dual-paraboloid mapping with an artificial increase in Polygons.

Results
Here are some of the results we got. However, because the cubic shadow maps are not yet currently implemented, we disabled shadow maps for now in the current alpha release of the game.

shadowmap1.png

shadowmap2.png

Before using the Volumetric shadow mapping technique, the shadow mapping suffered severe artifacts depending on the resolution and the angle between surface and light:

Shadowmap_fail_cut.png

Maze

WIP

Better level generation smile

Maybe levels from different hand-made blocks Levels where you don't have to rely much on the roll controls since they aren't that easily accessible anymore.

Extended Game menu (game modes)

NYI

And restart functionality.

And options to switch between controls

High target

Not yet implemented

Players can change color of environment lights and own light

NYI

Introduction movie

NYI

Extended Shooting mode

NYI

Extras

Not yet implemented

Stereoscopic 3D renderer

NYI

Mirrors

NYI

Destructible walls

NYI

Network Multiplayer

NYI

Screenshots

  • Screenshot.png:
    Screenshot.png

  • Screenshot2.png:
    Screenshot2.png

Page URL: https://twiki.graphics.ethz.ch/bin/view/GameClass/RodInterim
2025-08-03
© 2025 Eidgenössische Technische Hochschule Zürich