System Overview

This page provides an overview of how Beast typically operates within a production pipeline.

How does Beast fit in with your game?

Beast is invoked through an API written in the C programming language, which is integrated into your game production pipeline by a programmer in your organization. Typically, the Beast API is integrated directly into the level design tool or game editor used by your artists and level designers. This allows the designers to preview the effect of any changes they make to the level, and permits their changes to be baked automatically into the lightmaps eventually used in the game. However, if you prefer, you can invoke the Beast API from a different point in your pipeline, such as during a nightly build process.

Beast is not a runtime rendering system. Its purpose is to pre-compute lighting information for your game world, in order to allow the use of effects that would be far too computationally expensive to carry out at runtime. Beast is intended to be completely agnostic of your runtime rendering and shading system; it is the responsibility of your programmers to retrieve the lighting results calculated by Beast and to integrate those results into your pipeline so that they can be used effectively at runtime in your game engine.

How does the Beast API work?

In order for Beast to calculate the lighting for your game world, you need to provide it with a rich set of input that determines what to render, how to render it, and what kind of output you need. Most of this input is provided through calls to the functions in the Beast API.

The Beast API records all of your input information in a cache on disk. When you run a rendering job, the API transparently invokes another executable (thebeast.exe or ernst.exe) to perform the actual calculations from the data stored in the cache. This program simulates the light sources, casts rays in the scene, traces bounces, etc. It runs as a separate process from your calling application, with its own memory address space.

When a rendering job is finished, you access its output data programmatically using the Beast API. Exactly how the output data is structured depends on the type of output data you have requested. What you do with this output data after you retrieve it depends on how you intend to use it in your runtime engine. For example, when you create lightmaps you will likely save them into texture files that will be loaded by your engine and applied to the meshes in your world by your shader system at runtime.

For more details on how to use the Beast API to set up and launch rendering jobs, see Integrating the Beast API.