This is the documentation for Enlighten.

Enlighten SDK 4.00 Release Notes


New features

Next generation per pixel probe lighting

This release massively reduces the cost of per pixel probe lighting render path, along with other major improvements. Per pixel is now the recommended probe lighting method, and replaces per mesh probe lighting.

Per pixel probe lighting texture updates that previously ran on the CPU can now run in a compute shader on the GPU, reducing the wall clock time by a couple of orders of magnitude. This enables you to increase the maximum probe placement resolution, for more accurate indirect lighting.

Other rendering improvements include:

  • Zero cost blending between levels of lighting detail, to prevent lighting pops as the camera moves further away from a surface lit by probes.
  • Compute the maximum required atlas size for your world in advance with ComputePppiAtlasMaxima, so you can determine in advance the required size of rendering resources.

Accurate and performant radiosity without lightmaps

This release enables extensive use of the Probe Radiosity instance type across massive worlds, to the same degree as regular Radiosity. Please refer to the upgrade notes below for details of the minor API change required to continue use of Probe Radiosity.

The new radiosity solution for probe lit meshes is accurate, stable and efficient when used at scale. For large meshes with complex organic shapes that are difficult to unwrap, choose the Probe Radiosity lighting mode and forget about lightmap UVs.

For large meshes formed of large flat faces or box shapes, Enlighten may still produce the best result with a lightmap.

Faster precompute with many cores

This release includes optimization of the Enlighten precompute for workstations with many CPU cores. In worlds which use probe lighting extensively, the precompute now makes full use of available CPU resources when many cores are available. On a powerful workstation with 16/32/64 cores, local precomputes finish in significantly less time.

Enlighten Pipeline: automatic probe placement

The Enlighten Pipeline library can now automatically add the required probe regions to the Enlighten scene for an instance that will be lit by probes. Simply specify the desired probe resolution when you call EnlightenPipeline::AddInstance.

The Enlighten Pipeline library can now export probe regions efficiently for very large volumes or very large meshes. The new EnlightenPipeline::AddProbeRegion function takes a closed mesh volume as input, replacing the IPrecompVolumeQuery interface.

Enlighten Pipeline: useful error messages

The Enlighten Pipeline library now reports useful error messages when the API is used incorrectly. This type of error is considered fatal and should never occur when the API is used correctly. You can use the library without exception handling enabled, but you can also choose to enable exceptions if you wish to handle the error at a higher level and attempt to continue.

Improved SNDBS precompute

When running the precompute distributed by SNDBS, tasks are now distributed more effectively to reduce the total time taken.

Sample implementation

The sample implementation has been expanded to show how to use core Enlighten functionality required for a typical implementation.

The minimal example scene now demonstrates the following Enlighten functionality:

  • Instances grouped into different zones that can be loaded as a separate streaming unit.
  • Instances with different parameter sets that are grouped into different Enlighten systems.
  • Probe Radiosity instances which are grouped into a system that does not have a lightmap.
  • Automatic placement of probes for an instance that is lit by probes.

The Sample Runtime application now makes it easy to see the contribution of different types of lighting:

  • Press S to toggle the effect of the spot light source.
  • Press E to toggle the effect of the emissive surface light source.
  • Press L to toggle between both direct and indirect lighting, direct lighting only, or indirect lighting only.

Improvements

Precompute performance:

  • Eliminated long single threaded periods in the precompute when the scene contains 100K or more instances.
  • The precompute now uses tbbmalloc scalable allocator to improve performance when many cores are available.
  • Reduced the number of probes duplicated in place of probes that were culled due to seeing back faces.
  • Reduced peak memory usage for automatic probe placement in a massive world.

Visual Studio builds:

  • Prebuilt binaries compiled with Visual Studio 2019 16.11.1 and VC tools version 14.29 for Win32, Win64 and XboxOne
  • CodeBuildTool now supports building with Visual Studio 2019 with MSVC tools version 14.29 or later.

Bug Fixes

  • Fixed incorrect radiosity after a sudden change to the environment light source after setting a reduced update rate with the high level runtime.
  • Fixed a memory stomp that could occur when two probe sets with the same GUID are added to the high level runtime.

Deprecated

  • Lightmap baking is deprecated and will be removed in a future release.
  • The low level API for per mesh probe interpolation is deprecated. Please update your implementation to use per pixel probe lighting.
  • ProbeSetManagerVoxel is deprecated and will be removed in a future release.
  • IUpdateManager::DetachSystem/CubeMap are deprecated. Instead, call IUpdateManager::EnqueueRemoveSystem/CubeMap.
  • IUpdateManager::AddDynamicObject is deprecated. Please update your implementation to use per pixel probe lighting.
  • The overloads of IUpdateManager::EnqueueRemoveSystem/ProbeSet/CubeMap with the removalMode argument are deprecated. Instead, use the overload which takes a pointer to BaseSystem, BaseProbeSet or BaseCubeMap.

Removed

General:

  • Removed BasicRadiosity2 and BasicLightmapBaking: replaced by Sample Apps
  • Removed the UV Parameteriser.

High level runtime:

  • Removed BaseProbeSet::SetFramesPerUpdatePerLod
  • Removed IUpdateManager::UpdatePppi + GetPppiRequiredOutputTextures
  • Removed SystemAlbedoData::m_OnDoneCallbackFunction
  • Removed API_ENLIGHTEN_PPPI_ATLAS_BLOCK_COUNT, replaced by API_ENLIGHTEN_PPPI_ATLAS_TILE_COUNT.
  • Removed IUpdateManager::IsSystemStatic, IsProbeSetStatic, IsCubeMapStatic.
  • Removed IUpdateManager::AllocateSystemSolutionSpace with irradianceTextureFormat argument.
  • Removed RemovalMode argument of EnqueueRemoveSystem/ProbeSet/CubeMap
  • Removed IUpdateManager::DetachProbeSet.

Upgrade Notes

General:

  • Modify your header and library paths to search for Enlighten instead of Enlighten3.
  • Modify your header and library paths to search for EnlightenHLRT instead of Enlighten3HLRT.

Probe Radiosity:

Precompute pipeline:

Per pixel probe lighting:

Patches

4.00.P1

  • Fixed major seams in per pixel probe lighting within areas with less than 1/16 resolution.
  • Fixed minor seams and light leaks in per pixel probe lighting that could occur within interior spaces.