52 lines
1.9 KiB
Markdown
Raw Normal View History

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