# A Framework for Learning and Rapid Implementation of Real-Time Global Illumination Methods
## 2 Related Work
### Rapid Implementation of Real-Time Global Illumination Methods
The user can create their own methods with the modification of the source code [30]. However, similar to the Unreal Engine mentioned above, the code base is large and the code is difficult to modify. Unity [11] game engine offers several approaches through which different rendering pipelines can be implemented. First, it contains a monolithic system, known as Built-in Render Pipeline (BRP) [31], which has a set of lighting techniques that require offline pre-processing steps. To obtain greater flexibility, the developers have created what they call the Scriptable Render Pipeline (SRP) [32], which allows the user to create rendering pipelines with a scripting language. This approach uses a multi-pass architecture. They created two frameworks on top of it. The first, called Universal Render Pipeline (URP) [33] allows the user some degree of flexibility. However, it is intended to replace the BRP, so it has the same monolithic illumination system. The second framework is called High Definition Render Pipeline (HDRP) [34] and contains implementations of several methods that meet modern requirements of real-time rendering. It also contains the implementation of a suite of illumination effects obtained with ray tracing hardware. In addition, it uses a higher application programming interface (API) level of a multi-pass architecture, compared to the SRP, that offers a certain level of flexibility and allows the user to implement their own rendering passes. The pipeline offers two types of passes [35], scene render pass and post-process render pass, that allow the implementation of a satisfactory large number of approaches necessary for modern requirements. In addition to the commercial game engines, there are various open-source game engines that offer different lighting implementations, but most have monolithic systems. Godot [36] game engine has a monolithic system that uses its own implementation of signed distance field global illumination that allows partial real-time indirect illumination. In addition to some post-processing passes that produce certain real-time illumination effects, the rest of the approaches require offline pre-processing steps. Open 3D Engine [37] also has a monolithic system that uses dynamic diffuse global illumination, which applies ray tracing for real-time global illumination. For the situation where the hardware does not support ray tracing, it uses the same technique for offline pre-processing. Similar to Godot, it has different post-processing steps to produce several real-time illumination effects. Global illumination methods have not been limited to game engines; model editor applications also offer the implementation of such methods. However, they are based on offline rendering approaches. An example is Blender [38], which provides several global illumination systems. Even though this editor offers an experimental game engine, global illumination implementations are intended for offline rendering and the real-time rendering is done by methods that do not contain indirect illumination. NVIDIA company offers a suite of frameworks designed for offline rendering with the ray tracing method, such as NVIDIA Iray [39], which uses the NVIDIA OptiX Ray Tracing Engine [40]. Due to technological advances of the GPUs, these frameworks can be used in applications for real-time rendering, but their use is experimental and is intended only for ray tracing-based methods. Moreover, in the NVIDIA Gameworks library there are several open-source demonstration frameworks for different approaches to real-time global illumination. RTX Global Illumination (RTXGI) [41] is a framework that uses ray tracing for the hardware that supports this implementation, to obtain real-time illumination. NVIDIA VXGI [42] is a framework that uses the rasterization pipeline to obtain real-time global illumination by methods that use the voxel representation of the scene. NVIDIA Falcon [43] is a more general framework, developed for the implementation of real-time rendering techniques.