Wednesday, March 30, 2011

Seeking good base project(s)

The search continues for a decent project to serve as the base for my various shadow implementations.  Ideally I would not like to have to do all the work to make a scene graph instantiating 100+ 3d models that move around in a non-trivial static environment.  I have emailed the creator of the iterinix engine for crowd simulation, hoping to get a basic version sent to me as source code, if not I'll have to do some more searching or make my own scenegraph. This YouTube video shows the IterInix engine, which is something similar to what I'm lookng for.
I will begin to do most of the research for my Shadows presentation on Monday in the next few days. The search process might end or be expedited by the time I finish the research and presentation on Monday. That is all for this week, stay tuned!

Wednesday, March 23, 2011

Project Proposal

The project proposal on shadows was submitted and approved! The next step must be to acquire one or more visual studio projects with 100ish moving characters with a shadow map and/or shadow volume implementation.


        The goal of this project is to reduce performance implications for shadow rendering. The need arises from the fact that many games’ shadow rendering methods result in too large of an FPS decrease for users to even bother using. Most conventional shadow rendering is done by a technique known as shadow volumes. Volumes are constructed using silhouette edges and rendered into a stencil buffer. This is repeated for each light source and the resulting images are combined to form a final frame, a process called multi-pass rendering. This idea is by no means novel and has been used for decades with various optimizations and tweaks increasing performance over the years.  This technique is slow because it requires many passes and shadow volume construction which consists of quickly finding silhouette edges, usually stored as additional information in the vertex buffer, and must be transformed to infinity.

        The first step of the project will be to attain a visual studio C++ project that consists of a scene with several moving objects illuminated by one or more point light sources. This project will have the option of turning shadows on which will use a conventional shadow rendering technique. Turning shadows on will reduce FPS from say 60 to 40. The goal of the project will be to be able to turn on an additional, perhaps less physically accurate shadow rendering mode which results in a non noticeable drop in FPS. One idea that might attain the goal of this project is to render shadows as a post processing effect. Inspired by screen space ambient occlusion, I propose gathering randomly distributed occlusion samples that lie within a cone from the sample point to each light source. Determining the number of points in the cone that occlude the sample point and weighting them in different ways might be a way to estimate whether the point should be in shadow. An additional technique that I have seen in some games is to render shadows quickly on a large number of objects is to use drop shadows. I have still noticed a significant performance impact in using simple drop shadows, although much less worse so than using regular shadows. Since drop shadows are simple dark circles underneath each object, it should be a simple matter of doing drop shadows as a post processing effect on the GPU. Regardless of the method, I firmly believe there should be a way to render shadows or at last an approximation with absolutely no performance hit. This project will attempt to discover and implement that method in a scene with many dynamically moving objects.