Struct bevy_internal::core_pipeline::bloom::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 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§
source§impl BloomSettings
impl BloomSettings
sourcepub const NATURAL: BloomSettings = _
pub const NATURAL: BloomSettings = _
The default bloom preset.
sourcepub const OLD_SCHOOL: BloomSettings = _
pub const OLD_SCHOOL: BloomSettings = _
A preset that’s similar to how older games did bloom.
sourcepub const SCREEN_BLUR: BloomSettings = _
pub const SCREEN_BLUR: BloomSettings = _
A preset that applies a very strong bloom, and blurs the whole screen.
Trait Implementations§
source§impl Clone for BloomSettings
impl Clone for BloomSettings
source§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 moresource§impl Component for BloomSettings
impl Component for BloomSettings
§type Storage = TableStorage
type Storage = TableStorage
TableStorage
or SparseStorage
.source§impl Default for BloomSettings
impl Default for BloomSettings
source§fn default() -> BloomSettings
fn default() -> BloomSettings
source§impl ExtractComponent for BloomSettings
impl ExtractComponent for BloomSettings
§type QueryData = (&'static BloomSettings, &'static Camera)
type QueryData = (&'static BloomSettings, &'static Camera)
ReadOnlyQueryData
to fetch the components to extract.§type QueryFilter = ()
type QueryFilter = ()
§type Out = (BloomSettings, BloomUniforms)
type Out = (BloomSettings, BloomUniforms)
source§fn extract_component(
_: <<BloomSettings as ExtractComponent>::QueryData as WorldQuery>::Item<'_>
) -> Option<<BloomSettings as ExtractComponent>::Out>
fn extract_component( _: <<BloomSettings as ExtractComponent>::QueryData as WorldQuery>::Item<'_> ) -> Option<<BloomSettings as ExtractComponent>::Out>
source§impl FromReflect for BloomSettingswhere
BloomSettings: Any + Send + Sync,
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
impl FromReflect for BloomSettingswhere
BloomSettings: Any + Send + Sync,
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
source§fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<BloomSettings>
fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<BloomSettings>
Self
from a reflected value.source§fn take_from_reflect(
reflect: Box<dyn Reflect>
) -> Result<Self, Box<dyn Reflect>>
fn take_from_reflect( reflect: Box<dyn Reflect> ) -> Result<Self, Box<dyn Reflect>>
Self
using,
constructing the value using from_reflect
if that fails. Read moresource§impl GetTypeRegistration for BloomSettingswhere
BloomSettings: Any + Send + Sync,
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
impl GetTypeRegistration for BloomSettingswhere
BloomSettings: Any + Send + Sync,
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
source§impl Reflect for BloomSettingswhere
BloomSettings: Any + Send + Sync,
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
impl Reflect for BloomSettingswhere
BloomSettings: Any + Send + Sync,
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
source§fn into_any(self: Box<BloomSettings>) -> Box<dyn Any>
fn into_any(self: Box<BloomSettings>) -> Box<dyn Any>
Box<dyn Any>
.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut dyn Any
.source§fn into_reflect(self: Box<BloomSettings>) -> Box<dyn Reflect>
fn into_reflect(self: Box<BloomSettings>) -> Box<dyn Reflect>
source§fn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
source§fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
source§fn clone_value(&self) -> Box<dyn Reflect>
fn clone_value(&self) -> Box<dyn Reflect>
Reflect
trait object. Read moresource§fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
source§fn apply(&mut self, value: &(dyn Reflect + 'static))
fn apply(&mut self, value: &(dyn Reflect + 'static))
source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
source§fn reflect_owned(self: Box<BloomSettings>) -> ReflectOwned
fn reflect_owned(self: Box<BloomSettings>) -> ReflectOwned
source§fn reflect_partial_eq(&self, value: &(dyn Reflect + 'static)) -> Option<bool>
fn reflect_partial_eq(&self, value: &(dyn Reflect + 'static)) -> Option<bool>
source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
source§fn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
source§impl Struct for BloomSettingswhere
BloomSettings: Any + Send + Sync,
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
impl Struct for BloomSettingswhere
BloomSettings: Any + Send + Sync,
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
source§fn field(&self, name: &str) -> Option<&(dyn Reflect + 'static)>
fn field(&self, name: &str) -> Option<&(dyn Reflect + 'static)>
name
as a &dyn Reflect
.source§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
.source§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
.source§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
.source§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
index
.source§fn iter_fields(&self) -> FieldIter<'_> ⓘ
fn iter_fields(&self) -> FieldIter<'_> ⓘ
source§fn clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
DynamicStruct
.source§impl TypePath for BloomSettings
impl TypePath for BloomSettings
source§fn type_path() -> &'static str
fn type_path() -> &'static str
source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
source§impl Typed for BloomSettingswhere
BloomSettings: Any + Send + Sync,
f32: FromReflect + TypePath,
BloomPrefilterSettings: FromReflect + TypePath,
BloomCompositeMode: FromReflect + TypePath,
impl Typed for BloomSettingswhere
BloomSettings: Any + Send + Sync,
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§
source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
source§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
source§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) -> C
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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
.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.source§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.source§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.source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<C> DynamicBundle for Cwhere
C: Component,
impl<C> DynamicBundle for Cwhere
C: Component,
fn get_components(self, func: &mut impl FnMut(StorageType, OwningPtr<'_>))
source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path
.source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident
.source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name
.source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self
using data from the given World
.source§impl<S> GetField for Swhere
S: Struct,
impl<S> GetField for Swhere
S: Struct,
source§impl<T> GetPath for T
impl<T> GetPath for T
source§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 moresource§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 moresource§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 moresource§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