diff --git a/Source/Engine/Graphics/Enums.h b/Source/Engine/Graphics/Enums.h
index 74c859352..7d9b5ceb3 100644
--- a/Source/Engine/Graphics/Enums.h
+++ b/Source/Engine/Graphics/Enums.h
@@ -591,22 +591,22 @@ API_ENUM() enum class Quality : byte
API_ENUM() enum class MaterialPostFxLocation : byte
{
///
- /// The after post processing pass using LDR input frame.
+ /// The 'after' post processing pass using LDR input frame.
///
AfterPostProcessingPass = 0,
///
- /// The before post processing pass using HDR input frame.
+ /// The 'before' post processing pass using HDR input frame.
///
BeforePostProcessingPass = 1,
///
- /// The before forward pass but after GBuffer with HDR input frame.
+ /// The 'before' forward pass but after GBuffer with HDR input frame.
///
BeforeForwardPass = 2,
///
- /// The after custom post effects.
+ /// The 'after' custom post effects.
///
AfterCustomPostEffects = 3,
@@ -620,6 +620,11 @@ API_ENUM() enum class MaterialPostFxLocation : byte
///
AfterAntiAliasingPass = 5,
+ ///
+ /// The 'after' forward pass but before any post processing.
+ ///
+ AfterForwardPass = 6,
+
API_ENUM(Attributes="HideInEditor")
MAX,
};
@@ -664,6 +669,11 @@ API_ENUM() enum class PostProcessEffectLocation
///
AfterGBufferPass = 6,
+ ///
+ /// The 'after' forward pass but before any post processing.
+ ///
+ AfterForwardPass = 7,
+
API_ENUM(Attributes="HideInEditor")
MAX,
};
diff --git a/Source/Engine/Renderer/Renderer.cpp b/Source/Engine/Renderer/Renderer.cpp
index d3ea5800e..584ab6b45 100644
--- a/Source/Engine/Renderer/Renderer.cpp
+++ b/Source/Engine/Renderer/Renderer.cpp
@@ -545,6 +545,10 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont
RENDER_TARGET_POOL_SET_NAME(frameBuffer, "FrameBuffer");
ForwardPass::Instance()->Render(renderContext, lightBuffer, frameBuffer);
+ // Material and Custom PostFx
+ renderContext.List->RunMaterialPostFxPass(context, renderContext, MaterialPostFxLocation::AfterForwardPass, frameBuffer, lightBuffer);
+ renderContext.List->RunCustomPostFxPass(context, renderContext, PostProcessEffectLocation::AfterForwardPass, frameBuffer, lightBuffer);
+
// Cleanup
context->ResetRenderTarget();
context->ResetSR();