« on: June 28, 2010, 08:39:30 AM »
BRIGADE REAL-TIME PATH TRACING - INTRODUCTION
First of all: Brigade is a research project. It is designed to facilitate the production of 'proof-of-concept' games that use path tracing as the primary rendering algorithm, as opposed to rasterization, which is what GPUs normally do. Path tracing uses ray tracing, and extends basic ray tracing by supporting indirect lighting and soft shadows. More complex effects, such as caustics, are also supported, but suffer from noise. Brigade does not aim to produce photo-realistic images using complex scenes and materials. The emphasis is first of all on speed, and getting the highest possible quality within a strict time budget. Higher quality graphics are the goal, but never at the expense of interactivity.
Performance is achieved by employing state-of-the-art algorithms, often based on very recent research. Besides this, engineering and optimization obviously plays an important role. The greatest gains however are obtained by using not just a GPU or CPU but both: Brigade splits the rendering task seamlessly over available compute units. Depending on your configuration, Brigade will render using the CPU only, or mostly on the GPU, or anything inbetween. This balance is reconsidered per frame. The plan is to add support for multiple GPUs as well as network rendering. Multiple CPUs are already supported, and all your cores will be put to work optimally.
Brigade is the successor to the Arauna real-time ray tracer, which has been used for a large number of student projects at the 'International Game Architecture & Design' program of the NHTV University of Applied Sciences, Breda, The Netherlands. As such, Brigade mimicks the Arauna API to ease the transition to a new rendering engine. If you are familiar with Arauna, you will feel right at home.
Brigade implements a basic path tracer, with a fixed shading path. This path supports diffuse materials with textures, as well as specular and dielectric materials (metal, glass). Dielectrics may have absorption, and an adjustable index of refraction. Lighting is entirely done using area lights, of which an unlimited amount may be specified. For Brigade, a light is simply a polygon with a material that is named 'emm0-9'. This way, entire meshes can be turned into light sources.
Brigade aims to offer a simple API to the developer. To facilitate this, the initial scene is loaded using a text file, named scene.txt. In this file, you can specify resolution, number of samples per pixel, wether or not GPU rendering should be used and so on. Thanks to this you can experiment with the path tracer without ever looking at the source code. Check scene.txt to see how to add more planes to the demo scene, for exmaple.
Internally, Brigade uses a BVH that is constructed per-frame from BVHs that are built per scene graph object. The per-object BVHs are updated as needed, for optimal performance. The BVH is then synchronized with the version on the GPU, and also converted to other structures that are needed for optimal CPU rendering. Because of the intention to use Brigade for games, fast support for animated scenes is a priority.
Brigade currently requires a recent NVidia card to run (although you may be able to run using the CPU only by altering scene.txt). Your GPU must support CUDA. Two executables are provided: One is optimized for GTX2xx class devices, the other one targets Fermi devices specifically. The first one will obviously work on a broader range of hardware, but the Fermi version is optimal for that architecture and should be used if possible. A version of Brigade that automatically detects supported features will be released at a later date.
This is yet another application that is nuked by NVIDIA driver branch 256+
In case of crash (or using an ATI GPU), disable GPU usage in scene.txt