UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ReflectionEnvironmentCapture.cpp File Reference
#include "ReflectionEnvironmentCapture.h"
#include "Misc/FeedbackContext.h"
#include "RenderingThread.h"
#include "RenderResource.h"
#include "ShowFlags.h"
#include "UnrealClient.h"
#include "ShaderParameters.h"
#include "RendererInterface.h"
#include "RHIStaticStates.h"
#include "SceneView.h"
#include "SceneViewExtension.h"
#include "LegacyScreenPercentageDriver.h"
#include "Shader.h"
#include "TextureResource.h"
#include "StaticBoundShaderState.h"
#include "SceneUtils.h"
#include "PrimitiveDrawingUtils.h"
#include "Components/SkyLightComponent.h"
#include "Components/ReflectionCaptureComponent.h"
#include "Engine/TextureCube.h"
#include "PostProcess/SceneRenderTargets.h"
#include "GlobalShader.h"
#include "SceneRenderTargetParameters.h"
#include "SceneRendering.h"
#include "ScenePrivate.h"
#include "SceneProxies/ReflectionCaptureProxy.h"
#include "SceneProxies/SkyLightSceneProxy.h"
#include "PostProcess/SceneFilterRendering.h"
#include "PostProcess/PostProcessing.h"
#include "ScreenRendering.h"
#include "ReflectionEnvironment.h"
#include "OneColorShader.h"
#include "PipelineStateCache.h"
#include "MobileReflectionEnvironmentCapture.h"
#include "Engine/MapBuildDataRegistry.h"
#include "Engine/Texture2D.h"
#include "EngineUtils.h"
#include "UObject/UObjectIterator.h"
#include "EngineModule.h"
#include "ClearQuad.h"
#include "VolumetricCloudRendering.h"
#include "VolumetricCloudProxy.h"
#include "RenderGraphUtils.h"
#include "PixelShaderUtils.h"
#include "Materials/MaterialRenderProxy.h"
#include "UnrealEngine.h"
#include "SceneRenderBuilder.h"

Classes

class  FCubeDownsamplePS
 
class  FCubeDownsampleMaxPS
 
class  FCubeFilterPS
 
class  FComputeBrightnessPS
 
class  FComputeCubeMaxLuminancePS
 
class  FCopyToCubeFaceVS
 
class  FCopySceneColorToCubeFacePS
 
class  FCopyCubemapToCubeFacePS
 
class  FReflectionCubemapTexture
 

Functions

 IMPLEMENT_GLOBAL_SHADER (FCubeDownsamplePS, "/Engine/Private/ReflectionEnvironmentShaders.usf", "DownsamplePS", SF_Pixel)
 
 IMPLEMENT_GLOBAL_SHADER (FCubeDownsampleMaxPS, "/Engine/Private/ReflectionEnvironmentShaders.usf", "DownsampleMaxPS", SF_Pixel)
 
 IMPLEMENT_GLOBAL_SHADER (FCubeFilterPS, "/Engine/Private/ReflectionEnvironmentShaders.usf", "FilterPS", SF_Pixel)
 
 IMPLEMENT_GLOBAL_SHADER (FComputeBrightnessPS, "/Engine/Private/ReflectionEnvironmentShaders.usf", "ComputeBrightnessMain", SF_Pixel)
 
 IMPLEMENT_GLOBAL_SHADER (FComputeCubeMaxLuminancePS, "/Engine/Private/ReflectionEnvironmentShaders.usf", "ComputeCubeMaxLuminancePS", SF_Pixel)
 
 IMPLEMENT_GLOBAL_SHADER (FCopyToCubeFaceVS, "/Engine/Private/ReflectionEnvironmentShaders.usf", "CopyToCubeFaceVS", SF_Vertex)
 
 IMPLEMENT_GLOBAL_SHADER (FCopySceneColorToCubeFacePS, "/Engine/Private/ReflectionEnvironmentShaders.usf", "CopySceneColorToCubeFaceColorPS", SF_Pixel)
 
 IMPLEMENT_GLOBAL_SHADER (FCopyCubemapToCubeFacePS, "/Engine/Private/ReflectionEnvironmentShaders.usf", "CopyCubemapToCubeFaceColorPS", SF_Pixel)
 
void CreateCubeMips (FRDGBuilder &GraphBuilder, FGlobalShaderMap *ShaderMap, FRDGTexture *CubemapTexture)
 
void ComputeSingleAverageBrightnessFromCubemap (FRDGBuilder &GraphBuilder, FGlobalShaderMap *ShaderMap, FRDGTexture *CubemapTexture, float *OutAverageBrightness)
 
void ComputeAverageBrightness (FRDGBuilder &GraphBuilder, FGlobalShaderMap *ShaderMap, FRDGTexture *CubemapTexture, float *OutAverageBrightness)
 
FRDGTextureFilterCubeMap (FRDGBuilder &GraphBuilder, FGlobalShaderMap *ShaderMap, FRDGTexture *SourceTexture)
 
void ConvolveCubeMap (FRDGBuilder &GraphBuilder, FGlobalShaderMap *ShaderMap, uint32 CubeMipStart, uint32 CubeMipEnd, uint32 FaceStart, uint32 FaceCount, FRDGTexture *RDGSrcRenderTarget, FRDGTexture *RDGDstRenderTarget)
 
void PremultiplyCubeMipAlpha (FRDGBuilder &GraphBuilder, FGlobalShaderMap *ShaderMap, FRDGTexture *CubemapTexture, int32 MipIndex)
 
FRDGTextureFilterReflectionEnvironment (FRDGBuilder &GraphBuilder, FGlobalShaderMap *ShaderMap, FRDGTexture *CubemapTexture, FSHVectorRGB3 *OutIrradianceEnvironmentMap)
 
int32 FindOrAllocateCubemapIndex (FScene *Scene, const UReflectionCaptureComponent *Component)
 
void CaptureSceneToScratchCubemap (FRDGBuilder &GraphBuilder, FSceneRenderer *SceneRenderer, FSceneRenderUpdateInputs *SceneUpdateInputs, const FReflectionCubemapTexture &ReflectionCubemapTexture, ECubeFace CubeFace, int32 CubemapSize, bool bCapturingForSkyLight, bool bLowerHemisphereIsBlack, const FLinearColor &LowerHemisphereColor, bool bCapturingForMobile)
 
void CopyCubemapToScratchCubemap (FRHICommandListImmediate &RHICmdList, ERHIFeatureLevel::Type FeatureLevel, UTextureCube *SourceCubemap, const FReflectionCubemapTexture &ReflectionCubemapTexture, int32 CubemapSize, bool bIsSkyLight, bool bLowerHemisphereIsBlack, float SourceCubemapRotation, const FLinearColor &LowerHemisphereColorValue, const FLinearColor &ColorAlphaMultiplier)
 
void BeginReflectionCaptureSlowTask (int32 NumCaptures, const TCHAR *CaptureReason)
 
void UpdateReflectionCaptureSlowTask (int32 CaptureIndex, int32 NumCaptures)
 
void EndReflectionCaptureSlowTask (int32 NumCaptures)
 
int32 NumUniqueReflectionCaptures (const TSparseArray< UReflectionCaptureComponent * > &CaptureComponents)
 
void GetReflectionCaptureData_RenderingThread (FRHICommandListImmediate &RHICmdList, FScene *Scene, const UReflectionCaptureComponent *Component, FReflectionCaptureData *OutCaptureData)
 
void UploadReflectionCapture_RenderingThread (FScene *Scene, const FReflectionCaptureData *CaptureData, const UReflectionCaptureComponent *CaptureComponent)
 
FMatrix CalcCubeFaceViewRotationMatrix (ECubeFace Face)
 
FMatrix GetCubeProjectionMatrix (float HalfFovDeg, float CubeMapSize, float NearPlane)
 
void CaptureSceneIntoScratchCubemap (FScene *Scene, const FReflectionCubemapTexture &ReflectionCubemapTexture, FVector CapturePosition, int32 CubemapSize, bool bCapturingForSkyLight, bool bStaticSceneOnly, float SkyLightNearPlane, bool bLowerHemisphereIsBlack, bool bCaptureEmissiveOnly, const FLinearColor &LowerHemisphereColor, bool bCapturingForMobile, bool bInsideTick)
 
void CopyToSceneArray (FRDGBuilder &GraphBuilder, FScene *Scene, FRDGTexture *FilteredCubeTexture, FReflectionCaptureProxy *ReflectionProxy, int32 CaptureIndex)
 
void ReadbackRadianceMap (FRDGBuilder &GraphBuilder, FRDGTexture *InputTexture, TArray< FFloat16Color > *OutRadianceMap)
 
void CopyToSkyTexture (FRDGBuilder &GraphBuilder, FScene *Scene, FRDGTexture *InputTexture, FTexture *ProcessedTexture)
 
void ComputeSpecifiedCubemapColorScale (FRDGBuilder &GraphBuilder, FGlobalShaderMap *ShaderMap, UTextureCube *SourceCubemap, int32 CubemapSize, bool bIsSkyLight, bool bLowerHemisphereIsBlack, float SourceCubemapRotation, const FLinearColor &LowerHemisphereColorValue, float &MaxFloatLuminance)
 

Variables

float GReflectionCaptureNearPlane = 5
 
constexpr int32 MinSupersampleCaptureFactor = 1
 
constexpr int32 MaxSupersampleCaptureFactor = 8
 
int32 GSupersampleCaptureFactor = 1
 
float GSkylightCaptureLODDistanceScale = 1.f
 
float ReflectionCaptureRoughestMip = 1
 
float ReflectionCaptureRoughnessMipScale = 1.2f
 
const int32 MinCapturesForSlowTask = 20
 

Function Documentation

◆ BeginReflectionCaptureSlowTask()

void BeginReflectionCaptureSlowTask ( int32  NumCaptures,
const TCHAR CaptureReason 
)

◆ CalcCubeFaceViewRotationMatrix()

FMatrix CalcCubeFaceViewRotationMatrix ( ECubeFace  Face)

Creates a transformation for a cubemap face, following the D3D cubemap layout.

◆ CaptureSceneIntoScratchCubemap()

void CaptureSceneIntoScratchCubemap ( FScene Scene,
const FReflectionCubemapTexture ReflectionCubemapTexture,
FVector  CapturePosition,
int32  CubemapSize,
bool  bCapturingForSkyLight,
bool  bStaticSceneOnly,
float  SkyLightNearPlane,
bool  bLowerHemisphereIsBlack,
bool  bCaptureEmissiveOnly,
const FLinearColor LowerHemisphereColor,
bool  bCapturingForMobile,
bool  bInsideTick 
)

◆ CaptureSceneToScratchCubemap()

void CaptureSceneToScratchCubemap ( FRDGBuilder GraphBuilder,
FSceneRenderer SceneRenderer,
FSceneRenderUpdateInputs SceneUpdateInputs,
const FReflectionCubemapTexture ReflectionCubemapTexture,
ECubeFace  CubeFace,
int32  CubemapSize,
bool  bCapturingForSkyLight,
bool  bLowerHemisphereIsBlack,
const FLinearColor LowerHemisphereColor,
bool  bCapturingForMobile 
)

Captures the scene for a reflection capture by rendering the scene multiple times and copying into a cubemap texture.

◆ ComputeAverageBrightness()

void ComputeAverageBrightness ( FRDGBuilder GraphBuilder,
FGlobalShaderMap ShaderMap,
FRDGTexture CubemapTexture,
float OutAverageBrightness 
)

◆ ComputeSingleAverageBrightnessFromCubemap()

void ComputeSingleAverageBrightnessFromCubemap ( FRDGBuilder GraphBuilder,
FGlobalShaderMap ShaderMap,
FRDGTexture CubemapTexture,
float OutAverageBrightness 
)

Computes the average brightness of the given reflection capture and stores it in the scene.

◆ ComputeSpecifiedCubemapColorScale()

void ComputeSpecifiedCubemapColorScale ( FRDGBuilder GraphBuilder,
FGlobalShaderMap ShaderMap,
UTextureCube SourceCubemap,
int32  CubemapSize,
bool  bIsSkyLight,
bool  bLowerHemisphereIsBlack,
float  SourceCubemapRotation,
const FLinearColor LowerHemisphereColorValue,
float MaxFloatLuminance 
)

◆ ConvolveCubeMap()

void ConvolveCubeMap ( FRDGBuilder GraphBuilder,
FGlobalShaderMap ShaderMap,
uint32  CubeMipStart,
uint32  CubeMipEnd,
uint32  FaceStart,
uint32  FaceCount,
FRDGTexture RDGSrcRenderTarget,
FRDGTexture RDGDstRenderTarget 
)

◆ CopyCubemapToScratchCubemap()

void CopyCubemapToScratchCubemap ( FRHICommandListImmediate RHICmdList,
ERHIFeatureLevel::Type  FeatureLevel,
UTextureCube SourceCubemap,
const FReflectionCubemapTexture ReflectionCubemapTexture,
int32  CubemapSize,
bool  bIsSkyLight,
bool  bLowerHemisphereIsBlack,
float  SourceCubemapRotation,
const FLinearColor LowerHemisphereColorValue,
const FLinearColor ColorAlphaMultiplier 
)

◆ CopyToSceneArray()

void CopyToSceneArray ( FRDGBuilder GraphBuilder,
FScene Scene,
FRDGTexture FilteredCubeTexture,
FReflectionCaptureProxy ReflectionProxy,
int32  CaptureIndex 
)

◆ CopyToSkyTexture()

void CopyToSkyTexture ( FRDGBuilder GraphBuilder,
FScene Scene,
FRDGTexture InputTexture,
FTexture ProcessedTexture 
)

◆ CreateCubeMips()

void CreateCubeMips ( FRDGBuilder GraphBuilder,
FGlobalShaderMap ShaderMap,
FRDGTexture CubemapTexture 
)

◆ EndReflectionCaptureSlowTask()

void EndReflectionCaptureSlowTask ( int32  NumCaptures)

◆ FilterCubeMap()

FRDGTexture * FilterCubeMap ( FRDGBuilder GraphBuilder,
FGlobalShaderMap ShaderMap,
FRDGTexture SourceTexture 
)

◆ FilterReflectionEnvironment()

FRDGTexture * FilterReflectionEnvironment ( FRDGBuilder GraphBuilder,
FGlobalShaderMap ShaderMap,
FRDGTexture CubemapTexture,
FSHVectorRGB3 OutIrradianceEnvironmentMap 
)

Generates mips for glossiness and filters the cubemap for a given reflection.

◆ FindOrAllocateCubemapIndex()

int32 FindOrAllocateCubemapIndex ( FScene Scene,
const UReflectionCaptureComponent Component 
)

◆ GetCubeProjectionMatrix()

FMatrix GetCubeProjectionMatrix ( float  HalfFovDeg,
float  CubeMapSize,
float  NearPlane 
)

◆ GetReflectionCaptureData_RenderingThread()

void GetReflectionCaptureData_RenderingThread ( FRHICommandListImmediate RHICmdList,
FScene Scene,
const UReflectionCaptureComponent Component,
FReflectionCaptureData OutCaptureData 
)

◆ IMPLEMENT_GLOBAL_SHADER() [1/8]

IMPLEMENT_GLOBAL_SHADER ( FComputeBrightnessPS  ,
"/Engine/Private/ReflectionEnvironmentShaders.usf"  ,
"ComputeBrightnessMain"  ,
SF_Pixel   
)

◆ IMPLEMENT_GLOBAL_SHADER() [2/8]

IMPLEMENT_GLOBAL_SHADER ( FComputeCubeMaxLuminancePS  ,
"/Engine/Private/ReflectionEnvironmentShaders.usf"  ,
"ComputeCubeMaxLuminancePS"  ,
SF_Pixel   
)

◆ IMPLEMENT_GLOBAL_SHADER() [3/8]

IMPLEMENT_GLOBAL_SHADER ( FCopyCubemapToCubeFacePS  ,
"/Engine/Private/ReflectionEnvironmentShaders.usf"  ,
"CopyCubemapToCubeFaceColorPS"  ,
SF_Pixel   
)

◆ IMPLEMENT_GLOBAL_SHADER() [4/8]

IMPLEMENT_GLOBAL_SHADER ( FCopySceneColorToCubeFacePS  ,
"/Engine/Private/ReflectionEnvironmentShaders.usf"  ,
"CopySceneColorToCubeFaceColorPS"  ,
SF_Pixel   
)

◆ IMPLEMENT_GLOBAL_SHADER() [5/8]

IMPLEMENT_GLOBAL_SHADER ( FCopyToCubeFaceVS  ,
"/Engine/Private/ReflectionEnvironmentShaders.usf"  ,
"CopyToCubeFaceVS"  ,
SF_Vertex   
)

◆ IMPLEMENT_GLOBAL_SHADER() [6/8]

IMPLEMENT_GLOBAL_SHADER ( FCubeDownsampleMaxPS  ,
"/Engine/Private/ReflectionEnvironmentShaders.usf"  ,
"DownsampleMaxPS"  ,
SF_Pixel   
)

◆ IMPLEMENT_GLOBAL_SHADER() [7/8]

IMPLEMENT_GLOBAL_SHADER ( FCubeDownsamplePS  ,
"/Engine/Private/ReflectionEnvironmentShaders.usf"  ,
"DownsamplePS"  ,
SF_Pixel   
)

◆ IMPLEMENT_GLOBAL_SHADER() [8/8]

IMPLEMENT_GLOBAL_SHADER ( FCubeFilterPS  ,
"/Engine/Private/ReflectionEnvironmentShaders.usf"  ,
"FilterPS"  ,
SF_Pixel   
)

◆ NumUniqueReflectionCaptures()

int32 NumUniqueReflectionCaptures ( const TSparseArray< UReflectionCaptureComponent * > &  CaptureComponents)

◆ PremultiplyCubeMipAlpha()

void PremultiplyCubeMipAlpha ( FRDGBuilder GraphBuilder,
FGlobalShaderMap ShaderMap,
FRDGTexture CubemapTexture,
int32  MipIndex 
)

◆ ReadbackRadianceMap()

void ReadbackRadianceMap ( FRDGBuilder GraphBuilder,
FRDGTexture InputTexture,
TArray< FFloat16Color > *  OutRadianceMap 
)

◆ UpdateReflectionCaptureSlowTask()

void UpdateReflectionCaptureSlowTask ( int32  CaptureIndex,
int32  NumCaptures 
)

◆ UploadReflectionCapture_RenderingThread()

void UploadReflectionCapture_RenderingThread ( FScene Scene,
const FReflectionCaptureData CaptureData,
const UReflectionCaptureComponent CaptureComponent 
)

Variable Documentation

◆ GReflectionCaptureNearPlane

float GReflectionCaptureNearPlane = 5

Near plane to use when capturing the scene.

◆ GSkylightCaptureLODDistanceScale

float GSkylightCaptureLODDistanceScale = 1.f

◆ GSupersampleCaptureFactor

int32 GSupersampleCaptureFactor = 1

◆ MaxSupersampleCaptureFactor

constexpr int32 MaxSupersampleCaptureFactor = 8
constexpr

◆ MinCapturesForSlowTask

const int32 MinCapturesForSlowTask = 20

◆ MinSupersampleCaptureFactor

constexpr int32 MinSupersampleCaptureFactor = 1
constexpr

◆ ReflectionCaptureRoughestMip

float ReflectionCaptureRoughestMip = 1

Mip map used by a Roughness of 0, counting down from the lowest resolution mip (MipCount - 1).
This has been tweaked along with ReflectionCaptureRoughnessMipScale to make good use of the resolution in each mip, especially the highest resolution mips. This value is duplicated in ReflectionEnvironmentShared.usf!

◆ ReflectionCaptureRoughnessMipScale

float ReflectionCaptureRoughnessMipScale = 1.2f

Scales the log2 of Roughness when computing which mip to use for a given roughness. Larger values make the higher resolution mips sharper. This has been tweaked along with ReflectionCaptureRoughnessMipScale to make good use of the resolution in each mip, especially the highest resolution mips. This value is duplicated in ReflectionEnvironmentShared.usf!