LightsprintSDK 2021.08.08
Fireball

Features

Fireball is realtime global illumination solver, it produces realistic indirect lighting in dynamic scenes, taking all Light sources into account. It is recommended for use in games.

If you don't start Fireball, Realtime lighting works without any precalculations (and Offline calculations work too).
If you start Fireball, only realtime lighting works, but it is

  • faster (1.2-5x higher fps in standard situations)
  • smaller (needs only 50% of memory for the same quality)
  • produces higher quality lighting
  • doesn't allocate/fragment memory
  • doesn't change performance over time
  • calculates realtime GI also from environment/skybox
  • calculates realtime GI also from dynamically changing emissive maps

Precalculations

Fireball uses precalculation phase in which static scene is analyzed and one file is saved. This is usually done by developer at development time, final game only loads the file.

Calculation

Fireball uses the same API as the rest of Lightsprint SDK. Usually no changes in code are needed to start using Fireball, except for one additional call, see:

In case you change emissive maps dynamically (e.g. stream video into emissive map), call

  • RRSolver::setEmittance()

Outputs

Fireball calculates indirect illumination and stores it into Vertex buffer for static objects and Environment map for dynamic objects.

Sample

RealtimeRadiosity, RealtimeLights and SceneViewer samples build and use Fireball automatically. SceneViewer is good for performance/quality testing as it's possible to manipulate lights, skybox, change fireball quality etc. RealtimeRadiosity and RealtimeLights are simpler, but open for tweaking/customization, they have everything important in source code form.