bEmitPhotonsOutsideImportanceVolume
bEmitPhotonsOutsideImportanceVolume
#Overview
name: bEmitPhotonsOutsideImportanceVolume
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 6
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of bEmitPhotonsOutsideImportanceVolume is to control the emission of photons outside the importance volume in Unreal Engine’s lighting system. This setting is specifically related to the photon mapping and global illumination calculations in the engine’s lightmass system.
This setting variable is primarily used in the Lightmass module of Unreal Engine, which is responsible for global illumination and static lighting calculations. It’s particularly relevant to the photon mapping subsystem within Lightmass.
The value of this variable is set in the Lightmass configuration file (GLightmassIni). It’s read from the “DevOptions.PhotonMapping” section of this configuration file.
This variable interacts with other lighting-related variables, such as ImportanceBounds, IndirectPhotonPathDensity, and IndirectPhotonDensity. It affects how these other variables are used in calculations.
Developers must be aware that this variable significantly impacts the lighting calculation performance and quality. When set to true, it allows for more comprehensive lighting calculations but at the cost of increased computation time and memory usage.
Best practices when using this variable include:
- Only set it to true when you need high-quality lighting outside the importance volume.
- Be mindful of the performance impact, especially in large scenes.
- Use it in conjunction with proper importance volume setup for optimal results.
- Consider the trade-off between lighting quality and build times when adjusting this setting.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseLightmass.ini:176, section: [DevOptions.PhotonMapping]
- INI Section:
DevOptions.PhotonMapping
- Raw value:
False
- 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:2365
Scope (from outer to inner):
file
function void FLightmassExporter::WriteSceneSettings
Source code excerpt:
VERIFYLIGHTMASSINI(GConfig->GetBool(TEXT("DevOptions.PhotonMapping"), TEXT("bVisualizeIrradiancePhotonCalculation"), bConfigBool, GLightmassIni));
Scene.PhotonMappingSettings.bVisualizeIrradiancePhotonCalculation = bConfigBool;
VERIFYLIGHTMASSINI(GConfig->GetBool(TEXT("DevOptions.PhotonMapping"), TEXT("bEmitPhotonsOutsideImportanceVolume"), bConfigBool, GLightmassIni));
Scene.PhotonMappingSettings.bEmitPhotonsOutsideImportanceVolume = bConfigBool;
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);
#Loc: <Workspace>/Engine/Source/Programs/UnrealLightmass/Private/ImportExport/LightmassScene.h:297
Scope (from outer to inner):
file
namespace Lightmass
class class FDirectionalLight : public FLight, public FDirectionalLightData
Source code excerpt:
FBoxSphereBounds3f SceneBounds;
bool bEmitPhotonsOutsideImportanceVolume;
/** Bounds of the importance volume in the scene. If the radius is 0, there was no importance volume. */
FBoxSphereBounds3f ImportanceBounds;
/** Center of the importance volume in the [-1,1] space of the directional light's disk */
FVector2f ImportanceDiskOrigin;
#Loc: <Workspace>/Engine/Source/Programs/UnrealLightmass/Private/Lighting/LightingSystem.cpp:492
Scope (from outer to inner):
file
namespace Lightmass
function FStaticLightingSystem::FStaticLightingSystem
Source code excerpt:
InScene.DirectionalLights[LightIndex].Initialize(
SceneBounds,
PhotonMappingSettings.bEmitPhotonsOutsideImportanceVolume,
ImportanceBounds,
Scene.PhotonMappingSettings.IndirectPhotonEmitDiskRadius,
Scene.SceneConstants.LightGridSize,
Scene.PhotonMappingSettings.DirectPhotonDensity,
Scene.PhotonMappingSettings.DirectPhotonDensity * Scene.PhotonMappingSettings.OutsideImportanceVolumeDensityScale);
#Loc: <Workspace>/Engine/Source/Programs/UnrealLightmass/Private/Lighting/PhotonMapping.cpp:71
Scope (from outer to inner):
file
namespace Lightmass
function void FStaticLightingSystem::InitializePhotonSettings
Source code excerpt:
#endif
// If the importance volume is valid, only gather enough indirect photon paths to meet IndirectPhotonPathDensity inside the importance volume
if (!PhotonMappingSettings.bEmitPhotonsOutsideImportanceVolume && ImportanceBounds.SphereRadius > DELTA)
{
NumIndirectPhotonPaths = FMath::TruncToInt(Scene.PhotonMappingSettings.IndirectPhotonPathDensity * ImportanceSurfaceAreaMillionUnits);
}
else if (ImportanceBounds.SphereRadius > DELTA)
{
NumIndirectPhotonPaths = FMath::TruncToInt(Scene.PhotonMappingSettings.IndirectPhotonPathDensity * ImportanceSurfaceAreaMillionUnits
#Loc: <Workspace>/Engine/Source/Programs/UnrealLightmass/Private/Lighting/PhotonMapping.cpp:98
Scope (from outer to inner):
file
namespace Lightmass
function void FStaticLightingSystem::InitializePhotonSettings
Source code excerpt:
Stats.NumSecondPassPhotonsRequested = 0;
// If the importance volume is valid, only emit enough indirect photons to meet IndirectPhotonDensity inside the importance volume
if (!PhotonMappingSettings.bEmitPhotonsOutsideImportanceVolume && ImportanceBounds.SphereRadius > DELTA)
{
Stats.NumSecondPassPhotonsRequested = Scene.PhotonMappingSettings.IndirectPhotonDensity * ImportanceSurfaceAreaMillionUnits;
}
else if (ImportanceBounds.SphereRadius > DELTA)
{
Stats.NumSecondPassPhotonsRequested = Scene.PhotonMappingSettings.IndirectPhotonDensity * ImportanceSurfaceAreaMillionUnits
#Loc: <Workspace>/Engine/Source/Programs/UnrealLightmass/Public/SceneExport.h:624
Scope (from outer to inner):
file
namespace Lightmass
class class FPhotonMappingSettings
Source code excerpt:
* If this is false, nothing outside the volume will bounce lighting and will be lit with direct lighting only.
*/
bool bEmitPhotonsOutsideImportanceVolume;
/** Cone filter constant, which characterizes the falloff of the filter applied to photon density estimations. */
float ConeFilterConstant;
/** Number of photons to find in each photon map when calculating irradiance for an irradiance photon. */
int32 NumIrradianceCalculationPhotons;