//! Illustrates bloom post-processing in 2d. use bevy::{ core_pipeline::{ bloom::{BloomCompositeMode, BloomSettings}, tonemapping::Tonemapping, }, prelude::*, sprite::MaterialMesh2dBundle, }; fn main() { App::new() .insert_resource(ClearColor(Color::DARK_GRAY)) .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(( Camera2dBundle { camera: Camera { hdr: true, // 1. HDR is required for bloom ..default() }, tonemapping: Tonemapping::TonyMcMapface, // 2. Using a tonemapper that desaturates to white is recommended ..default() }, BloomSettings::default(), // 3. Enable bloom for the camera )); // Sprite commands.spawn(SpriteBundle { texture: asset_server.load("branding/icon.png"), sprite: Sprite { color: Color::rgb(5.0, 5.0, 5.0), // 4. Put something bright in a dark environment to see the effect custom_size: Some(Vec2::splat(160.0)), ..default() }, ..default() }); // Circle mesh commands.spawn(MaterialMesh2dBundle { mesh: meshes.add(shape::Circle::new(100.).into()).into(), // 4. Put something bright in a dark environment to see the effect material: materials.add(ColorMaterial::from(Color::rgb(7.5, 0.0, 7.5))), transform: Transform::from_translation(Vec3::new(-200., 0., 0.)), ..default() }); // Hexagon mesh commands.spawn(MaterialMesh2dBundle { mesh: meshes .add(shape::RegularPolygon::new(100., 6).into()) .into(), // 4. Put something bright in a dark environment to see the effect material: materials.add(ColorMaterial::from(Color::rgb(6.25, 9.4, 9.1))), transform: Transform::from_translation(Vec3::new(200., 0., 0.)), ..default() }); // UI commands.spawn( TextBundle::from_section( "", TextStyle { font: asset_server.load("fonts/FiraMono-Medium.ttf"), font_size: 18.0, color: Color::WHITE, }, ) .with_style(Style { position_type: PositionType::Absolute, bottom: Val::Px(10.0), left: Val::Px(10.0), ..default() }), ); } // ------------------------------------------------------------------------------------------------ fn update_bloom_settings( mut camera: Query<(Entity, Option<&mut BloomSettings>), With>, mut text: Query<&mut Text>, mut commands: Commands, keycode: Res>, time: Res