//! Illustrates bloom post-processing in 2d. use bevy::{ core_pipeline::tonemapping::{DebandDither, Tonemapping}, post_process::bloom::{Bloom, BloomCompositeMode}, prelude::*, }; fn main() { App::new() .add_plugins(DefaultPlugins) .add_systems(Startup, setup) .add_systems(Update, update_bloom_settings) .run(); } fn setup( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, asset_server: Res, ) { commands.spawn(( Camera2d, Camera { clear_color: ClearColorConfig::Custom(Color::BLACK), ..default() }, Tonemapping::TonyMcMapface, // 1. Using a tonemapper that desaturates to white is recommended Bloom::default(), // 2. Enable bloom for the camera DebandDither::Enabled, // Optional: bloom causes gradients which cause banding )); // Sprite commands.spawn(Sprite { image: asset_server.load("branding/bevy_bird_dark.png"), color: Color::srgb(5.0, 5.0, 5.0), // 3. Put something bright in a dark environment to see the effect custom_size: Some(Vec2::splat(160.0)), ..default() }); // Circle mesh commands.spawn(( Mesh2d(meshes.add(Circle::new(100.))), // 3. Put something bright in a dark environment to see the effect MeshMaterial2d(materials.add(Color::srgb(7.5, 0.0, 7.5))), Transform::from_translation(Vec3::new(-200., 0., 0.)), )); // Hexagon mesh commands.spawn(( Mesh2d(meshes.add(RegularPolygon::new(100., 6))), // 3. Put something bright in a dark environment to see the effect MeshMaterial2d(materials.add(Color::srgb(6.25, 9.4, 9.1))), Transform::from_translation(Vec3::new(200., 0., 0.)), )); // UI commands.spawn(( Text::default(), Node { position_type: PositionType::Absolute, top: px(12), left: px(12), ..default() }, )); } // ------------------------------------------------------------------------------------------------ fn update_bloom_settings( camera: Single<(Entity, &Tonemapping, Option<&mut Bloom>), With>, mut text: Single<&mut Text>, mut commands: Commands, keycode: Res>, time: Res