Struct bevy::core_pipeline::auto_exposure::AutoExposureSettings
source · pub struct AutoExposureSettings {
pub range: RangeInclusive<f32>,
pub filter: RangeInclusive<f32>,
pub speed_brighten: f32,
pub speed_darken: f32,
pub exponential_transition_distance: f32,
pub metering_mask: Handle<Image>,
pub compensation_curve: Handle<AutoExposureCompensationCurve>,
}
Expand description
Component that enables auto exposure for an HDR-enabled 2d or 3d camera.
Auto exposure adjusts the exposure of the camera automatically to simulate the human eye’s ability to adapt to different lighting conditions.
Bevy’s implementation builds a 64 bin histogram of the scene’s luminance, and then adjusts the exposure so that the average brightness of the final render will be middle gray. Because it’s using a histogram, some details can be selectively ignored or emphasized. Outliers like shadows and specular highlights can be ignored, and certain areas can be given more (or less) weight based on a mask.
§Usage Notes
Auto Exposure requires compute shaders and is not compatible with WebGL2.
Fields§
§range: RangeInclusive<f32>
The range of exposure values for the histogram.
Pixel values below this range will be ignored, and pixel values above this range will be
clamped in the sense that they will count towards the highest bin in the histogram.
The default value is -8.0..=8.0
.
filter: RangeInclusive<f32>
The portion of the histogram to consider when metering.
By default, the darkest 10% and the brightest 10% of samples are ignored,
so the default value is 0.10..=0.90
.
speed_brighten: f32
The speed at which the exposure adapts from dark to bright scenes, in F-stops per second.
speed_darken: f32
The speed at which the exposure adapts from bright to dark scenes, in F-stops per second.
exponential_transition_distance: f32
The distance in F-stops from the target exposure from where to transition from animating in linear fashion to animating exponentially. This helps against jittering when the target exposure keeps on changing slightly from frame to frame, while still maintaining a relatively slow animation for big changes in scene brightness.
ev
➔●┐
| ⬈ ├ exponential section
│ ⬈ ┘
│ ⬈ ┐
│ ⬈ ├ linear section
│⬈ ┘
●───────────────────────── time
The default value is 1.5.
metering_mask: Handle<Image>
The mask to apply when metering. The mask will cover the entire screen, where:
(0.0, 0.0)
is the top-left corner,(1.0, 1.0)
is the bottom-right corner. Only the red channel of the texture is used. The sample at the current screen position will be used to weight the contribution of each pixel to the histogram:- 0.0 means the pixel will not contribute to the histogram,
- 1.0 means the pixel will contribute fully to the histogram.
The default value is a white image, so all pixels contribute equally.
§Usage Notes
The mask is quantized to 16 discrete levels because of limitations in the compute shader implementation.
compensation_curve: Handle<AutoExposureCompensationCurve>
Exposure compensation curve to apply after metering.
The default value is a flat line at 0.0.
For more information, see AutoExposureCompensationCurve
.
Trait Implementations§
source§impl Clone for AutoExposureSettings
impl Clone for AutoExposureSettings
source§fn clone(&self) -> AutoExposureSettings
fn clone(&self) -> AutoExposureSettings
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Component for AutoExposureSettings
impl Component for AutoExposureSettings
source§const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
source§fn register_component_hooks(_hooks: &mut ComponentHooks)
fn register_component_hooks(_hooks: &mut ComponentHooks)
ComponentHooks
.source§impl Default for AutoExposureSettings
impl Default for AutoExposureSettings
source§fn default() -> AutoExposureSettings
fn default() -> AutoExposureSettings
source§impl ExtractComponent for AutoExposureSettingswhere
AutoExposureSettings: Clone,
impl ExtractComponent for AutoExposureSettingswhere
AutoExposureSettings: Clone,
§type QueryData = &'static AutoExposureSettings
type QueryData = &'static AutoExposureSettings
ReadOnlyQueryData
to fetch the components to extract.§type QueryFilter = ()
type QueryFilter = ()
§type Out = AutoExposureSettings
type Out = AutoExposureSettings
source§fn extract_component(
item: <<AutoExposureSettings as ExtractComponent>::QueryData as WorldQuery>::Item<'_>
) -> Option<<AutoExposureSettings as ExtractComponent>::Out>
fn extract_component( item: <<AutoExposureSettings as ExtractComponent>::QueryData as WorldQuery>::Item<'_> ) -> Option<<AutoExposureSettings as ExtractComponent>::Out>
source§impl FromReflect for AutoExposureSettingswhere
AutoExposureSettings: Any + Send + Sync,
RangeInclusive<f32>: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
Handle<Image>: FromReflect + TypePath + RegisterForReflection,
Handle<AutoExposureCompensationCurve>: FromReflect + TypePath + RegisterForReflection,
impl FromReflect for AutoExposureSettingswhere
AutoExposureSettings: Any + Send + Sync,
RangeInclusive<f32>: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
Handle<Image>: FromReflect + TypePath + RegisterForReflection,
Handle<AutoExposureCompensationCurve>: FromReflect + TypePath + RegisterForReflection,
source§fn from_reflect(
reflect: &(dyn Reflect + 'static)
) -> Option<AutoExposureSettings>
fn from_reflect( reflect: &(dyn Reflect + 'static) ) -> Option<AutoExposureSettings>
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 AutoExposureSettingswhere
AutoExposureSettings: Any + Send + Sync,
RangeInclusive<f32>: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
Handle<Image>: FromReflect + TypePath + RegisterForReflection,
Handle<AutoExposureCompensationCurve>: FromReflect + TypePath + RegisterForReflection,
impl GetTypeRegistration for AutoExposureSettingswhere
AutoExposureSettings: Any + Send + Sync,
RangeInclusive<f32>: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
Handle<Image>: FromReflect + TypePath + RegisterForReflection,
Handle<AutoExposureCompensationCurve>: FromReflect + TypePath + RegisterForReflection,
source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration
for this type.source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
source§impl Reflect for AutoExposureSettingswhere
AutoExposureSettings: Any + Send + Sync,
RangeInclusive<f32>: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
Handle<Image>: FromReflect + TypePath + RegisterForReflection,
Handle<AutoExposureCompensationCurve>: FromReflect + TypePath + RegisterForReflection,
impl Reflect for AutoExposureSettingswhere
AutoExposureSettings: Any + Send + Sync,
RangeInclusive<f32>: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
Handle<Image>: FromReflect + TypePath + RegisterForReflection,
Handle<AutoExposureCompensationCurve>: FromReflect + TypePath + RegisterForReflection,
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<AutoExposureSettings>) -> Box<dyn Any>
fn into_any(self: Box<AutoExposureSettings>) -> 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<AutoExposureSettings>) -> Box<dyn Reflect>
fn into_reflect(self: Box<AutoExposureSettings>) -> 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 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<AutoExposureSettings>) -> ReflectOwned
fn reflect_owned(self: Box<AutoExposureSettings>) -> 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 apply(&mut self, value: &(dyn Reflect + 'static))
fn apply(&mut self, value: &(dyn Reflect + 'static))
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 AutoExposureSettingswhere
AutoExposureSettings: Any + Send + Sync,
RangeInclusive<f32>: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
Handle<Image>: FromReflect + TypePath + RegisterForReflection,
Handle<AutoExposureCompensationCurve>: FromReflect + TypePath + RegisterForReflection,
impl Struct for AutoExposureSettingswhere
AutoExposureSettings: Any + Send + Sync,
RangeInclusive<f32>: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
Handle<Image>: FromReflect + TypePath + RegisterForReflection,
Handle<AutoExposureCompensationCurve>: FromReflect + TypePath + RegisterForReflection,
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 AutoExposureSettings
impl TypePath for AutoExposureSettings
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 AutoExposureSettingswhere
AutoExposureSettings: Any + Send + Sync,
RangeInclusive<f32>: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
Handle<Image>: FromReflect + TypePath + RegisterForReflection,
Handle<AutoExposureCompensationCurve>: FromReflect + TypePath + RegisterForReflection,
impl Typed for AutoExposureSettingswhere
AutoExposureSettings: Any + Send + Sync,
RangeInclusive<f32>: FromReflect + TypePath + RegisterForReflection,
f32: FromReflect + TypePath + RegisterForReflection,
Handle<Image>: FromReflect + TypePath + RegisterForReflection,
Handle<AutoExposureCompensationCurve>: FromReflect + TypePath + RegisterForReflection,
Auto Trait Implementations§
impl Freeze for AutoExposureSettings
impl !RefUnwindSafe for AutoExposureSettings
impl Send for AutoExposureSettings
impl Sync for AutoExposureSettings
impl Unpin for AutoExposureSettings
impl !UnwindSafe for AutoExposureSettings
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<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> 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§fn get_component_ids(
components: &Components,
ids: &mut impl FnMut(Option<ComponentId>)
)
fn get_component_ids( components: &Components, ids: &mut impl FnMut(Option<ComponentId>) )
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