From 1e48cfb656a845a0cdffe47f3aba370fab507de3 Mon Sep 17 00:00:00 2001 From: atlas dostal Date: Tue, 9 Sep 2025 14:14:07 -0400 Subject: [PATCH 1/4] Add StartMainPassPostProcessing node for ordering --- crates/bevy_core_pipeline/src/core_3d/mod.rs | 3 +++ crates/bevy_pbr/src/volumetric_fog/mod.rs | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/bevy_core_pipeline/src/core_3d/mod.rs b/crates/bevy_core_pipeline/src/core_3d/mod.rs index ffc25046a57e5..0e5a07b870e83 100644 --- a/crates/bevy_core_pipeline/src/core_3d/mod.rs +++ b/crates/bevy_core_pipeline/src/core_3d/mod.rs @@ -28,6 +28,7 @@ pub mod graph { MainTransparentPass, EndMainPass, Wireframe, + StartMainPassPostProcessing, LateDownsampleDepth, MotionBlur, Taa, @@ -213,6 +214,7 @@ impl Plugin for Core3dPlugin { Node3d::MainTransparentPass, ) .add_render_graph_node::(Core3d, Node3d::EndMainPass) + .add_render_graph_node::(Core3d, Node3d::StartMainPassPostProcessing) .add_render_graph_node::>(Core3d, Node3d::Tonemapping) .add_render_graph_node::(Core3d, Node3d::EndMainPassPostProcessing) .add_render_graph_node::>(Core3d, Node3d::Upscaling) @@ -230,6 +232,7 @@ impl Plugin for Core3dPlugin { Node3d::MainTransmissivePass, Node3d::MainTransparentPass, Node3d::EndMainPass, + Node3d::StartMainPassPostProcessing, Node3d::Tonemapping, Node3d::EndMainPassPostProcessing, Node3d::Upscaling, diff --git a/crates/bevy_pbr/src/volumetric_fog/mod.rs b/crates/bevy_pbr/src/volumetric_fog/mod.rs index c9ad4717f6993..3e14cf6c8f661 100644 --- a/crates/bevy_pbr/src/volumetric_fog/mod.rs +++ b/crates/bevy_pbr/src/volumetric_fog/mod.rs @@ -104,7 +104,11 @@ impl Plugin for VolumetricFogPlugin { Core3d, // Volumetric fog is a postprocessing effect. Run it after the // main pass but before bloom. - (Node3d::EndMainPass, NodePbr::VolumetricFog, Node3d::Bloom), + ( + Node3d::EndMainPass, + NodePbr::VolumetricFog, + Node3d::StartMainPassPostProcessing, + ), ); } } From 4797f98517f2aa9c70d14ed87ab99fffd21a2eb8 Mon Sep 17 00:00:00 2001 From: atlas dostal Date: Tue, 9 Sep 2025 15:44:24 -0400 Subject: [PATCH 2/4] fix comment --- crates/bevy_pbr/src/volumetric_fog/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/bevy_pbr/src/volumetric_fog/mod.rs b/crates/bevy_pbr/src/volumetric_fog/mod.rs index 3e14cf6c8f661..57cbd7bb1722c 100644 --- a/crates/bevy_pbr/src/volumetric_fog/mod.rs +++ b/crates/bevy_pbr/src/volumetric_fog/mod.rs @@ -102,8 +102,8 @@ impl Plugin for VolumetricFogPlugin { ) .add_render_graph_edges( Core3d, - // Volumetric fog is a postprocessing effect. Run it after the - // main pass but before bloom. + // Volumetric fog should run after the main pass but before bloom, so + // we order if at the start of post processing. ( Node3d::EndMainPass, NodePbr::VolumetricFog, From fa2eecb2ba8ea3748af7644e3af3042ce8500a11 Mon Sep 17 00:00:00 2001 From: atlas dostal Date: Tue, 9 Sep 2025 15:53:55 -0400 Subject: [PATCH 3/4] guide --- release-content/migration-guides/bevy_render_reorganization.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/release-content/migration-guides/bevy_render_reorganization.md b/release-content/migration-guides/bevy_render_reorganization.md index af7bf6c4102b7..d634bf333e020 100644 --- a/release-content/migration-guides/bevy_render_reorganization.md +++ b/release-content/migration-guides/bevy_render_reorganization.md @@ -39,3 +39,5 @@ They have now been given a new home in `bevy_anti_alias` and `bevy_post_process` If you were importing FxaaPlugin, SmaaPlugin, TemporalAntiAliasPlugin, or CasPlugin from `bevy_core_pipeline` or `bevy::core_pipeline`, you must now import them from `bevy_anti_alias` or `bevy::anti_alias`. If you were importing Bloom, AutoExposure, ChromaticAberration, DepthOfField, or MotionBlur from `bevy_core_pipeline` or `bevy::core_pipeline`, you must now import them from `bevy_post_process` or `bevy::post_process`. + +Additionally, you may now order rendering passes against the new `StartMainPassPostProcessing` node. From 463dabe16289687a77fb7586f80ecd437559edb4 Mon Sep 17 00:00:00 2001 From: atlas dostal Date: Tue, 9 Sep 2025 16:08:05 -0400 Subject: [PATCH 4/4] fix --- crates/bevy_anti_alias/src/taa/mod.rs | 2 +- crates/bevy_core_pipeline/src/core_2d/mod.rs | 3 +++ .../src/experimental/mip_generation/mod.rs | 2 +- crates/bevy_post_process/src/auto_exposure/mod.rs | 6 +++++- crates/bevy_post_process/src/bloom/mod.rs | 12 ++++++++++-- crates/bevy_post_process/src/motion_blur/mod.rs | 2 +- 6 files changed, 21 insertions(+), 6 deletions(-) diff --git a/crates/bevy_anti_alias/src/taa/mod.rs b/crates/bevy_anti_alias/src/taa/mod.rs index 5a65726f39d81..1781f90d9935f 100644 --- a/crates/bevy_anti_alias/src/taa/mod.rs +++ b/crates/bevy_anti_alias/src/taa/mod.rs @@ -73,7 +73,7 @@ impl Plugin for TemporalAntiAliasPlugin { .add_render_graph_edges( Core3d, ( - Node3d::EndMainPass, + Node3d::StartMainPassPostProcessing, Node3d::MotionBlur, // Running before TAA reduces edge artifacts and noise Node3d::Taa, Node3d::Bloom, diff --git a/crates/bevy_core_pipeline/src/core_2d/mod.rs b/crates/bevy_core_pipeline/src/core_2d/mod.rs index a32adbe57bd81..dee095185d44b 100644 --- a/crates/bevy_core_pipeline/src/core_2d/mod.rs +++ b/crates/bevy_core_pipeline/src/core_2d/mod.rs @@ -19,6 +19,7 @@ pub mod graph { MainTransparentPass, EndMainPass, Wireframe, + StartMainPassPostProcessing, Bloom, PostProcessing, Tonemapping, @@ -118,6 +119,7 @@ impl Plugin for Core2dPlugin { Node2d::MainTransparentPass, ) .add_render_graph_node::(Core2d, Node2d::EndMainPass) + .add_render_graph_node::(Core2d, Node2d::StartMainPassPostProcessing) .add_render_graph_node::>(Core2d, Node2d::Tonemapping) .add_render_graph_node::(Core2d, Node2d::EndMainPassPostProcessing) .add_render_graph_node::>(Core2d, Node2d::Upscaling) @@ -128,6 +130,7 @@ impl Plugin for Core2dPlugin { Node2d::MainOpaquePass, Node2d::MainTransparentPass, Node2d::EndMainPass, + Node2d::StartMainPassPostProcessing, Node2d::Tonemapping, Node2d::EndMainPassPostProcessing, Node2d::Upscaling, diff --git a/crates/bevy_core_pipeline/src/experimental/mip_generation/mod.rs b/crates/bevy_core_pipeline/src/experimental/mip_generation/mod.rs index 97d928c896d4e..227a3e391a59d 100644 --- a/crates/bevy_core_pipeline/src/experimental/mip_generation/mod.rs +++ b/crates/bevy_core_pipeline/src/experimental/mip_generation/mod.rs @@ -95,7 +95,7 @@ impl Plugin for MipGenerationPlugin { .add_render_graph_edges( Core3d, ( - Node3d::EndMainPass, + Node3d::StartMainPassPostProcessing, Node3d::LateDownsampleDepth, Node3d::EndMainPassPostProcessing, ), diff --git a/crates/bevy_post_process/src/auto_exposure/mod.rs b/crates/bevy_post_process/src/auto_exposure/mod.rs index d8975aa4ec9a9..f5b090621be02 100644 --- a/crates/bevy_post_process/src/auto_exposure/mod.rs +++ b/crates/bevy_post_process/src/auto_exposure/mod.rs @@ -75,7 +75,11 @@ impl Plugin for AutoExposurePlugin { .add_render_graph_node::(Core3d, node::AutoExposure) .add_render_graph_edges( Core3d, - (Node3d::EndMainPass, node::AutoExposure, Node3d::Tonemapping), + ( + Node3d::StartMainPassPostProcessing, + node::AutoExposure, + Node3d::Tonemapping, + ), ); } } diff --git a/crates/bevy_post_process/src/bloom/mod.rs b/crates/bevy_post_process/src/bloom/mod.rs index e0f2424ec2eb5..5e22bb7c8cadd 100644 --- a/crates/bevy_post_process/src/bloom/mod.rs +++ b/crates/bevy_post_process/src/bloom/mod.rs @@ -81,13 +81,21 @@ impl Plugin for BloomPlugin { .add_render_graph_node::>(Core3d, Node3d::Bloom) .add_render_graph_edges( Core3d, - (Node3d::EndMainPass, Node3d::Bloom, Node3d::Tonemapping), + ( + Node3d::StartMainPassPostProcessing, + Node3d::Bloom, + Node3d::Tonemapping, + ), ) // Add bloom to the 2d render graph .add_render_graph_node::>(Core2d, Node2d::Bloom) .add_render_graph_edges( Core2d, - (Node2d::EndMainPass, Node2d::Bloom, Node2d::Tonemapping), + ( + Node2d::StartMainPassPostProcessing, + Node2d::Bloom, + Node2d::Tonemapping, + ), ); } } diff --git a/crates/bevy_post_process/src/motion_blur/mod.rs b/crates/bevy_post_process/src/motion_blur/mod.rs index 9026fb7e813ad..5d66c9f51b68d 100644 --- a/crates/bevy_post_process/src/motion_blur/mod.rs +++ b/crates/bevy_post_process/src/motion_blur/mod.rs @@ -159,7 +159,7 @@ impl Plugin for MotionBlurPlugin { .add_render_graph_edges( Core3d, ( - Node3d::EndMainPass, + Node3d::StartMainPassPostProcessing, Node3d::MotionBlur, Node3d::Bloom, // we want blurred areas to bloom and tonemap properly. ),