FinalGatherImportanceSampleFraction
FinalGatherImportanceSampleFraction
#Overview
name: FinalGatherImportanceSampleFraction
The value of this variable can be defined or overridden in .ini config files. 1
.ini config file referencing this setting variable.
It is referenced in 4
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of FinalGatherImportanceSampleFraction is to control the proportion of importance-sampled rays used in the final gathering stage of the photon mapping process in Unreal Engine’s lighting system.
This setting variable is primarily used in the Lightmass subsystem, which is responsible for global illumination calculations in Unreal Engine. It’s specifically part of the photon mapping settings, which is an advanced lighting technique used to calculate indirect lighting.
The value of this variable is set in the Lightmass configuration file (GLightmassIni). It’s read from the “DevOptions.PhotonMapping” section with the key “FinalGatherImportanceSampleFraction”.
FinalGatherImportanceSampleFraction interacts with other variables in the photon mapping process, particularly:
- ImportanceTracingSettings.NumHemisphereSamples
- PhotonMappingSettings.bUsePhotonMapping
- PhotonMappingSettings.bUseFinalGathering
Developers must be aware of the following when using this variable:
- It’s a float value between 0 and 1, representing the fraction of samples that will use importance sampling.
- If set to 0, only uniform samples will be taken during final gathering.
- It affects the balance between uniform and importance sampling, which can impact the quality and performance of the lighting calculation.
Best practices when using this variable include:
- Ensure that PhotonMappingSettings.bUsePhotonMapping is true for this setting to have an effect.
- Balance this value with the total number of hemisphere samples to maintain a good mix of uniform and importance samples.
- Be cautious when setting this to extreme values (0 or 1), as it may affect the quality of the final lighting.
- Consider the interaction with irradiance caching settings, as very high values might disable irradiance caching.
- Adjust this value in conjunction with other photon mapping settings to achieve the desired balance between lighting quality and performance.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseLightmass.ini:181, section: [DevOptions.PhotonMapping]
- INI Section:
DevOptions.PhotonMapping
- Raw value:
.6
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Lightmass/Lightmass.cpp:2369
Scope (from outer to inner):
file
function void FLightmassExporter::WriteSceneSettings
Source code excerpt:
VERIFYLIGHTMASSINI(GConfig->GetFloat(TEXT("DevOptions.PhotonMapping"), TEXT("ConeFilterConstant"), Scene.PhotonMappingSettings.ConeFilterConstant, GLightmassIni));
VERIFYLIGHTMASSINI(GConfig->GetInt(TEXT("DevOptions.PhotonMapping"), TEXT("NumIrradianceCalculationPhotons"), Scene.PhotonMappingSettings.NumIrradianceCalculationPhotons, GLightmassIni));
VERIFYLIGHTMASSINI(GConfig->GetFloat(TEXT("DevOptions.PhotonMapping"), TEXT("FinalGatherImportanceSampleFraction"), Scene.PhotonMappingSettings.FinalGatherImportanceSampleFraction, GLightmassIni));
float FinalGatherImportanceSampleConeAngle;
VERIFYLIGHTMASSINI(GConfig->GetFloat(TEXT("DevOptions.PhotonMapping"), TEXT("FinalGatherImportanceSampleConeAngle"), FinalGatherImportanceSampleConeAngle, GLightmassIni));
Scene.PhotonMappingSettings.FinalGatherImportanceSampleCosConeAngle = FMath::Cos(FMath::Clamp(FinalGatherImportanceSampleConeAngle, 0.0f, 90.0f) * (float)PI / 180.0f);
VERIFYLIGHTMASSINI(GConfig->GetFloat(TEXT("DevOptions.PhotonMapping"), TEXT("IndirectPhotonEmitDiskRadius"), Scene.PhotonMappingSettings.IndirectPhotonEmitDiskRadius, GLightmassIni));
float IndirectPhotonEmitConeAngleDegrees;
VERIFYLIGHTMASSINI(GConfig->GetFloat(TEXT("DevOptions.PhotonMapping"), TEXT("IndirectPhotonEmitConeAngle"), IndirectPhotonEmitConeAngleDegrees, GLightmassIni));
#Loc: <Workspace>/Engine/Source/Programs/UnrealLightmass/Private/Lighting/LightingSystem.cpp:846
Scope (from outer to inner):
file
namespace Lightmass
function int32 FStaticLightingSystem::GetNumPhotonImportanceHemisphereSamples
Source code excerpt:
{
return PhotonMappingSettings.bUsePhotonMapping ?
FMath::TruncToInt(ImportanceTracingSettings.NumHemisphereSamples * PhotonMappingSettings.FinalGatherImportanceSampleFraction) : 0;
}
FBoxSphereBounds3f FStaticLightingSystem::GetImportanceBounds(bool bClampToScene) const
{
FBoxSphereBounds3f ImportanceBounds = Scene.GetImportanceBounds();
#Loc: <Workspace>/Engine/Source/Programs/UnrealLightmass/Private/Lighting/LightingSystem.cpp:903
Scope (from outer to inner):
file
namespace Lightmass
function void FStaticLightingSystem::ValidateSettings
Source code excerpt:
{
// Allocate all samples toward uniform sampling if there are no indirect photons
InScene.PhotonMappingSettings.FinalGatherImportanceSampleFraction = 0;
}
#if LIGHTMASS_DO_PROCESSING
if (!InScene.PhotonMappingSettings.bUseIrradiancePhotons)
#endif
{
InScene.PhotonMappingSettings.bCacheIrradiancePhotonsOnSurfaces = false;
}
InScene.PhotonMappingSettings.FinalGatherImportanceSampleFraction = FMath::Clamp(InScene.PhotonMappingSettings.FinalGatherImportanceSampleFraction, 0.0f, 1.0f);
if (InScene.ImportanceTracingSettings.NumHemisphereSamples * (1.0f - InScene.PhotonMappingSettings.FinalGatherImportanceSampleFraction) < 1)
{
// Irradiance caching needs some uniform samples
InScene.IrradianceCachingSettings.bAllowIrradianceCaching = false;
}
if (InScene.PhotonMappingSettings.bUsePhotonMapping && !InScene.PhotonMappingSettings.bUseFinalGathering)
#Loc: <Workspace>/Engine/Source/Programs/UnrealLightmass/Public/SceneExport.h:637
Scope (from outer to inner):
file
namespace Lightmass
class class FPhotonMappingSettings
Source code excerpt:
* If this is 0, only uniform samples will be taken.
*/
float FinalGatherImportanceSampleFraction;
/** Cosine of the cone angle from an importance photon direction to generate ray directions for importance sampled final gathering. */
float FinalGatherImportanceSampleCosConeAngle;
/** World space radius of the disk around an indirect photon path in which indirect photons will be emitted from directional lights. */
float IndirectPhotonEmitDiskRadius;