1.9 KiB
Raw Blame History

title, date, excerpt, tags, rating
title date excerpt tags rating
ToonReflection 2025-03-20 17:04:16

反射功能相关Pass

ReflectionEnvironmentAndSky

位于IndirectLightRendering.cpp的RenderDeferredReflectionsAndSkyLighting() => AddSkyReflectionPass()

DiffuseIndirectMethod = EDiffuseIndirectMethod::Lumen也就是开启Lumen GI如果反射方法为Lumen或者SSR则不会执行后续逻辑。

不开启Lumen GI反射方法为

  • LumenRenderLumenReflections()
  • Rtx ReflectionRenderRayTracingReflections()
  • SSRScreenSpaceRayTracing::RenderScreenSpaceReflections()

RenderDeferredReflectionsAndSkyLighting()主要执行了:

  1. SkyLightDiffuse
    1. RenderDistanceFieldLighting()
      1. RenderDistanceFieldAOScreenGrid()渲染距离场AO。
      2. RenderCapsuleShadowsForMovableSkylight():渲染胶囊阴影。
  2. ReflectionIndirect
    • RenderLumenReflections()
    • RenderRayTracingReflections()
    • RenderScreenSpaceReflections()
  3. Denoise
    • DenoiserIScreenSpaceDenoiser::DenoiseReflections()
    • TemporalFilterAddTemporalAAPass()
  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()