BloomSettings

Struct BloomSettings 

Source
pub struct BloomSettings {
    pub intensity: f32,
    pub low_frequency_boost: f32,
    pub low_frequency_boost_curvature: f32,
    pub high_pass_frequency: f32,
    pub prefilter_settings: BloomPrefilterSettings,
    pub composite_mode: BloomCompositeMode,
}
Expand description

Applies a bloom effect to an HDR-enabled 2d or 3d camera.

Bloom emulates an effect found in real cameras and the human eye, causing halos to appear around very bright parts of the scene.

See also https://en.wikipedia.org/wiki/Bloom_(shader_effect).

§Usage Notes

Bloom is currently not compatible with WebGL2.

Often used in conjunction with bevy_pbr::StandardMaterial::emissive for 3d meshes.

Bloom is best used alongside a tonemapping function that desaturates bright colors, such as TonyMcMapface.

Bevy’s implementation uses a parametric curve to blend between a set of blurred (lower frequency) images generated from the camera’s view. See https://starlederer.github.io/bloom/ for a visualization of the parametric curve used in Bevy as well as a visualization of the curve’s respective scattering profile.

Fields§

§intensity: f32

Controls the baseline of how much the image is scattered (default: 0.15).

This parameter should be used only to control the strength of the bloom for the scene as a whole. Increasing it too much will make the scene appear blurry and over-exposed.

To make a mesh glow brighter, rather than increase the bloom intensity, you should increase the mesh’s emissive value.

§In energy-conserving mode

The value represents how likely the light is to scatter.

The value should be between 0.0 and 1.0 where:

  • 0.0 means no bloom
  • 1.0 means the light is scattered as much as possible

§In additive mode

The value represents how much scattered light is added to the image to create the glow effect.

In this configuration:

  • 0.0 means no bloom
  • 0.0 means a proportionate amount of scattered light is added

§low_frequency_boost: f32

Low frequency contribution boost. Controls how much more likely the light is to scatter completely sideways (low frequency image).

Comparable to a low shelf boost on an equalizer.

§In energy-conserving mode

The value should be between 0.0 and 1.0 where:

  • 0.0 means low frequency light uses base intensity for blend factor calculation
  • 1.0 means low frequency light contributes at full power

§In additive mode

The value represents how much scattered light is added to the image to create the glow effect.

In this configuration:

  • 0.0 means no bloom
  • 0.0 means a proportionate amount of scattered light is added

§low_frequency_boost_curvature: f32

Low frequency contribution boost curve. Controls the curvature of the blend factor function making frequencies next to the lowest ones contribute more.

Somewhat comparable to the Q factor of an equalizer node.

Valid range:

  • 0.0 - base base intensity and boosted intensity are linearly interpolated
  • 1.0 - all frequencies below maximum are at boosted intensity level
§high_pass_frequency: f32

Tightens how much the light scatters (default: 1.0).

Valid range:

  • 0.0 - maximum scattering angle is 0 degrees (no scattering)
  • 1.0 - maximum scattering angle is 90 degrees
§prefilter_settings: BloomPrefilterSettings§composite_mode: BloomCompositeMode

Controls whether bloom textures are blended between or added to each other. Useful if image brightening is desired and a must-change if prefilter_settings are used.

§Recommendation

Set to BloomCompositeMode::Additive if prefilter_settings are configured in a non-energy-conserving way, otherwise set to BloomCompositeMode::EnergyConserving.

Implementations§

Source§

impl BloomSettings

Source

pub const NATURAL: Self

The default bloom preset.

Source

pub const OLD_SCHOOL: Self

A preset that’s similar to how older games did bloom.

Source

pub const SCREEN_BLUR: Self

A preset that applies a very strong bloom, and blurs the whole screen.

Trait Implementations§

Source§

impl Clone for BloomSettings

Source§

fn clone(&self) -> BloomSettings

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Default for BloomSettings

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> Any for T
where T: Any,

Source§

impl<T> CloneAny for T
where T: Any + Clone,

Source§

impl<T> Component for T
where T: Send + Sync + 'static,

Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> SerializableAny for T
where T: 'static + Any + Clone + for<'a> Send + Sync,

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,