Struct bevy::core_pipeline::bloom::BloomSettings
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 crate::tonemapping::Tonemapping::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
- Greater than 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
- Greater than 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§
§impl BloomSettings
impl BloomSettings
pub const NATURAL: BloomSettings = _
pub const NATURAL: BloomSettings = _
The default bloom preset.
pub const OLD_SCHOOL: BloomSettings = _
pub const OLD_SCHOOL: BloomSettings = _
A preset that’s similar to how older games did bloom.
pub const SCREEN_BLUR: BloomSettings = _
pub const SCREEN_BLUR: BloomSettings = _
A preset that applies a very strong bloom, and blurs the whole screen.
Trait Implementations§
§impl Clone for BloomSettings
impl Clone for BloomSettings
§fn clone(&self) -> BloomSettings
fn clone(&self) -> BloomSettings
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl Component for BloomSettingswhere
BloomSettings: Send + Sync + 'static,
impl Component for BloomSettingswhere BloomSettings: Send + Sync + 'static,
§type Storage = TableStorage
type Storage = TableStorage
TableStorage
or SparseStorage
.§impl Default for BloomSettings
impl Default for BloomSettings
§fn default() -> BloomSettings
fn default() -> BloomSettings
§impl ExtractComponent for BloomSettings
impl ExtractComponent for BloomSettings
§type Query = (&'static BloomSettings, &'static Camera)
type Query = (&'static BloomSettings, &'static Camera)
ReadOnlyWorldQueryData
to fetch the components to extract.§type Out = (BloomSettings, BloomUniforms)
type Out = (BloomSettings, BloomUniforms)
§fn extract_component(
_: <<BloomSettings as ExtractComponent>::Query as WorldQuery>::Item<'_>
) -> Option<<BloomSettings as ExtractComponent>::Out>
fn extract_component( _: <<BloomSettings as ExtractComponent>::Query as WorldQuery>::Item<'_> ) -> Option<<BloomSettings as ExtractComponent>::Out>
§impl FromReflect for BloomSettingswhere
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
impl FromReflect for BloomSettingswhere f32: FromReflect + TypePath, BloomPrefilterSettings: FromReflect + TypePath, BloomCompositeMode: FromReflect + TypePath,
§fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<BloomSettings>
fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<BloomSettings>
Self
from a reflected value.§impl GetTypeRegistration for BloomSettingswhere
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
impl GetTypeRegistration for BloomSettingswhere f32: FromReflect + TypePath, BloomPrefilterSettings: FromReflect + TypePath, BloomCompositeMode: FromReflect + TypePath,
§impl Reflect for BloomSettingswhere
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
impl Reflect for BloomSettingswhere f32: FromReflect + TypePath, BloomPrefilterSettings: FromReflect + TypePath, BloomCompositeMode: FromReflect + TypePath,
§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
§fn into_any(self: Box<BloomSettings, Global>) -> Box<dyn Any, Global>
fn into_any(self: Box<BloomSettings, Global>) -> Box<dyn Any, Global>
Box<dyn Any>
.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut dyn Any
.§fn into_reflect(self: Box<BloomSettings, Global>) -> Box<dyn Reflect, Global>
fn into_reflect(self: Box<BloomSettings, Global>) -> Box<dyn Reflect, Global>
§fn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
§fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
§fn clone_value(&self) -> Box<dyn Reflect, Global>
fn clone_value(&self) -> Box<dyn Reflect, Global>
Reflect
trait object. Read more§fn set(
&mut self,
value: Box<dyn Reflect, Global>
) -> Result<(), Box<dyn Reflect, Global>>
fn set( &mut self, value: Box<dyn Reflect, Global> ) -> Result<(), Box<dyn Reflect, Global>>
§fn apply(&mut self, value: &(dyn Reflect + 'static))
fn apply(&mut self, value: &(dyn Reflect + 'static))
§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
§fn reflect_owned(self: Box<BloomSettings, Global>) -> ReflectOwned
fn reflect_owned(self: Box<BloomSettings, Global>) -> ReflectOwned
§fn reflect_partial_eq(&self, value: &(dyn Reflect + 'static)) -> Option<bool>
fn reflect_partial_eq(&self, value: &(dyn Reflect + 'static)) -> Option<bool>
§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
§fn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
§impl Struct for BloomSettingswhere
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
impl Struct for BloomSettingswhere f32: FromReflect + TypePath, BloomPrefilterSettings: FromReflect + TypePath, BloomCompositeMode: FromReflect + TypePath,
§fn field(&self, name: &str) -> Option<&(dyn Reflect + 'static)>
fn field(&self, name: &str) -> Option<&(dyn Reflect + 'static)>
name
as a &dyn Reflect
.§fn field_mut(&mut self, name: &str) -> Option<&mut (dyn Reflect + 'static)>
fn field_mut(&mut self, name: &str) -> Option<&mut (dyn Reflect + 'static)>
name
as a
&mut dyn Reflect
.§fn field_at(&self, index: usize) -> Option<&(dyn Reflect + 'static)>
fn field_at(&self, index: usize) -> Option<&(dyn Reflect + 'static)>
index
as a
&dyn Reflect
.§fn field_at_mut(&mut self, index: usize) -> Option<&mut (dyn Reflect + 'static)>
fn field_at_mut(&mut self, index: usize) -> Option<&mut (dyn Reflect + 'static)>
index
as a &mut dyn Reflect
.§fn iter_fields(&self) -> FieldIter<'_> ⓘ
fn iter_fields(&self) -> FieldIter<'_> ⓘ
§fn clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
DynamicStruct
.§impl TypePath for BloomSettingswhere
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
impl TypePath for BloomSettingswhere f32: FromReflect + TypePath, BloomPrefilterSettings: FromReflect + TypePath, BloomCompositeMode: FromReflect + TypePath,
§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
§impl Typed for BloomSettingswhere
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
impl Typed for BloomSettingswhere f32: FromReflect + TypePath, BloomPrefilterSettings: FromReflect + TypePath, BloomCompositeMode: FromReflect + TypePath,
Auto Trait Implementations§
impl RefUnwindSafe for BloomSettings
impl Send for BloomSettings
impl Sync for BloomSettings
impl Unpin for BloomSettings
impl UnwindSafe for BloomSettings
Blanket Implementations§
§impl<T, U> AsBindGroupShaderType<U> for Twhere
U: ShaderType,
&'a T: for<'a> Into<U>,
impl<T, U> AsBindGroupShaderType<U> for Twhere U: ShaderType, &'a T: for<'a> Into<U>,
§fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere C: Component,
fn component_ids( components: &mut Components, storages: &mut Storages, ids: &mut impl FnMut(ComponentId) )
unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> Cwhere F: for<'a> FnMut(&'a mut T) -> OwningPtr<'a, Aligned>,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>
fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<C> DynamicBundle for Cwhere
C: Component,
impl<C> DynamicBundle for Cwhere C: Component,
fn get_components( self, func: &mut impl FnMut(StorageType, OwningPtr<'_, Aligned>) )
§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere T: TypePath,
§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path
.§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident
.§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name
.§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere T: Default,
§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self
using data from the given World
.§impl<T> GetPath for Twhere
T: Reflect + ?Sized,
impl<T> GetPath for Twhere T: Reflect + ?Sized,
§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>
) -> Result<&(dyn Reflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p> ) -> Result<&(dyn Reflect + 'static), ReflectPathError<'p>>
path
. Read more§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>
) -> Result<&mut (dyn Reflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p> ) -> Result<&mut (dyn Reflect + 'static), ReflectPathError<'p>>
path
. Read more§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>( &self, path: impl ReflectPath<'p> ) -> Result<&T, ReflectPathError<'p>>where T: Reflect,
path
. Read more§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>( &mut self, path: impl ReflectPath<'p> ) -> Result<&mut T, ReflectPathError<'p>>where T: Reflect,
path
. Read more§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere T: FromSample<F>,
fn into_sample(self) -> T
§impl<T> NoneValue for Twhere
T: Default,
impl<T> NoneValue for Twhere T: Default,
type NoneType = T
§fn null_value() -> T
fn null_value() -> T
§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<R, P> ReadPrimitive<R> for Pwhere
R: Read + ReadEndian<P>,
P: Default,
impl<R, P> ReadPrimitive<R> for Pwhere R: Read + ReadEndian<P>, P: Default,
source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian()
.