--- title: ToonReflection date: 2025-03-20 17:04:16 excerpt: tags: rating: ⭐ --- # 反射功能相关Pass - ReflectionIndirect(None) - [[#ReflectionEnvironmentAndSky]] - DiffuseIndirectAndAO(Lumen/SSR) - LumenReflections - [[#DiffuseIndirectComposite]] ## ReflectionEnvironmentAndSky 位于IndirectLightRendering.cpp的RenderDeferredReflectionsAndSkyLighting() => `AddSkyReflectionPass()` 当`DiffuseIndirectMethod = EDiffuseIndirectMethod::Lumen`(也就是开启Lumen GI),如果反射方法为Lumen或者SSR则不会执行后续逻辑。 不开启Lumen GI,反射方法为: - Lumen:`RenderLumenReflections()` - Rtx Reflection:`RenderRayTracingReflections()` - SSR:`ScreenSpaceRayTracing::RenderScreenSpaceReflections()` `RenderDeferredReflectionsAndSkyLighting()`主要执行了: 1. SkyLightDiffuse 1. RenderDistanceFieldLighting() 1. RenderDistanceFieldAOScreenGrid():渲染距离场AO。 2. RenderCapsuleShadowsForMovableSkylight():渲染胶囊阴影。 2. ReflectionIndirect - RenderLumenReflections() - RenderRayTracingReflections() - RenderScreenSpaceReflections() 3. Denoise - Denoiser:IScreenSpaceDenoiser::DenoiseReflections() - TemporalFilter:AddTemporalAAPass() 4. RenderDeferredPlanarReflections():合成平面反射结果。 5. AddSkyReflectionPass() 几种反射方式的大致执行逻辑: - LumenReflection 1. 输出FRDGTextureRef ReflectionsColor。 - SSR与Rtx 1. 输出结果到IScreenSpaceDenoiser::FReflectionsInputs DenoiserInputs的FRDGTextureRef Color。 2. 执行对应的降噪算法。 3. 结果赋予给FRDGTextureRef ReflectionsColor。 - 执行完上述反射方法后,最后执行`AddSkyReflectionPass()` `FReflectionEnvironmentSkyLightingPS`位于/Engine/Private/ReflectionEnvironmentPixelShader.usf的ReflectionEnvironmentSkyLighting()。 ## DiffuseIndirectComposite 位于IndirectLightRendering.cpp的`RenderDiffuseIndirectAndAmbientOcclusion()`