Technology

In this section you will find information about the techologies implemented inside Lightning Engine. Lightning Engine has been created with flexibility as its main goal and most of the subsystems are heavily data driven in order to configure the engine/application with as little code as possible. For all the features currently implemented, with latest version of the engine, see this page.

Core

Custom Run-Time Type Information (RTTI) system with reflection capabilities
  • Unified system for manipulating objects' member values, without the need to know the object's definition in code
  • Object serialization, either automatic or via custom save/load function

Virtual File System

  • Transparent loading of assets from HDD or from archives
  • Support for custom compressors and encryptors plug-ins (specified per-file or per-archive)
  • Corruption checker
  • Streaming of large files
  • Custom archive tool for creating archives

Image manager

  • Support for loading and saving custom formats through image loading plug-ins
  • Support for run-time generation of images though image factory plug-ins
  • Support for asynchronous loading of images
  • Custom image tool for generating mipmaps and preprocessing of images

Model manager

  • Support for loading custom geometry formats though model loading plug-ins

Scene manager

  • Support for custom scene nodes, through plug-ins
  • Transformation view of the scene allowing the attachment of one node to another (e.g. attach a light source on a car's headlight geometry)
  • Spatial view of the scene allows the combination of multiple different spatial representations, based on the type of each object (e.g. a building represented as a BSP tree inside a heighmap terrain represented as a quad-tree)
Abstract Time of Day interface for registering and controlling engine/game variables based on time of day with support for splines

Graphics

Flexible renderer architecture

  • No pre-defined render paths.
  • Support for different render paths based on current context (e.g. hardware capabilities, whether you are rendering to a cubemap or the main window, etc.)
  • Support for custom scene traversal algorithms (e.g. frustum culling, hierarchical occlusion culling, etc.), with ability to switch between them at run-time and per-render path

Flexible shadowing system

  • Shadow algorithms are specified per-light (and not per-object), allowing different types of algorithms to be mixed together
  • No pre-defined shadowing algorithms. Create your own through plug-ins.
  • Support for stencil shadow volumes
  • Support for shadow buffer based algorithms (e.g. Uniform shadowmaps, Parallel Split shadowmaps, Perspective shadowmaps, etc.)
  • All objects can be configured in order to cast shadows into the scene, based on their material

Abstract texture factory system for generating textures

  • Static textures, render targets and procedurally generated textures are created through the same interface
  • Attach any kind of texture to any material. You can even attach animated textures or videos

Custom Effect and Material systems

  • Create new shaders through plug-ins (For more info see our page about the shader system)
  • Specify which shaders should be used for each render path you will use
  • Support for fallback shaders based on hardware capabilities
  • Support for custom interpolators for all uniform shader variables (per-material)
  • Support for attaching dynamically generated textures (e.g. dynamic reflective cubemaps) to objects through their materials
Flexible particle system for special effects, such as smoke, fire, waterfalls, etc.

Scripting

Propriatery, object oriented scripting engine for controlling objects through scripts.

  • Extend C++ scene objects through scripts
  • Manipulate objects' parameters

Native support for states and events

Byte-code compiled for faster execution

Physics

Abstract wrapper for all physics related things (rigid bodies, joints, collision shapes, etc.) in order to be able to select between different physics engines for each project

Support for ragdolls and vehicles with suspensions.

All objects in the scene can have a physical representation (either static or dynamic)