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
|
|
|
|
|
- Denoiser:IScreenSpaceDenoiser::DenoiseReflections()
|
|
|
|
|
- TemporalFilter:AddTemporalAAPass()
|
|
|
|
|
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()`
|