Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_material/src/alpha.rs
9331 views
1
//! Allows configuring a material's transparency behavior.
2
3
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
4
5
// TODO: add discussion about performance.
6
/// Sets how a material's base color alpha channel is used for transparency.
7
#[derive(Debug, Default, Reflect, Copy, Clone, PartialEq)]
8
#[reflect(Default, Debug, Clone)]
9
pub enum AlphaMode {
10
/// Base color alpha values are overridden to be fully opaque (1.0).
11
#[default]
12
Opaque,
13
/// Reduce transparency to fully opaque or fully transparent
14
/// based on a threshold.
15
///
16
/// Compares the base color alpha value to the specified threshold.
17
/// If the value is below the threshold,
18
/// considers the color to be fully transparent (alpha is set to 0.0).
19
/// If it is equal to or above the threshold,
20
/// considers the color to be fully opaque (alpha is set to 1.0).
21
Mask(f32),
22
/// The base color alpha value defines the opacity of the color.
23
/// Standard alpha-blending is used to blend the fragment's color
24
/// with the color behind it.
25
Blend,
26
/// Similar to [`AlphaMode::Blend`], however assumes RGB channel values are
27
/// [premultiplied](https://en.wikipedia.org/wiki/Alpha_compositing#Straight_versus_premultiplied).
28
///
29
/// For otherwise constant RGB values, behaves more like [`AlphaMode::Blend`] for
30
/// alpha values closer to 1.0, and more like [`AlphaMode::Add`] for
31
/// alpha values closer to 0.0.
32
///
33
/// Can be used to avoid “border” or “outline” artifacts that can occur
34
/// when using plain alpha-blended textures.
35
Premultiplied,
36
/// Spreads the fragment out over a hardware-dependent number of sample
37
/// locations proportional to the alpha value. This requires multisample
38
/// antialiasing; if MSAA isn't on, this is identical to
39
/// [`AlphaMode::Mask`] with a value of 0.5.
40
///
41
/// Alpha to coverage provides improved performance and better visual
42
/// fidelity over [`AlphaMode::Blend`], as Bevy doesn't have to sort objects
43
/// when it's in use. It's especially useful for complex transparent objects
44
/// like foliage.
45
///
46
/// [alpha to coverage]: https://en.wikipedia.org/wiki/Alpha_to_coverage
47
AlphaToCoverage,
48
/// Combines the color of the fragments with the colors behind them in an
49
/// additive process, (i.e. like light) producing lighter results.
50
///
51
/// Black produces no effect. Alpha values can be used to modulate the result.
52
///
53
/// Useful for effects like holograms, ghosts, lasers and other energy beams.
54
Add,
55
/// Combines the color of the fragments with the colors behind them in a
56
/// multiplicative process, (i.e. like pigments) producing darker results.
57
///
58
/// White produces no effect. Alpha values can be used to modulate the result.
59
///
60
/// Useful for effects like stained glass, window tint film and some colored liquids.
61
Multiply,
62
}
63
64
impl Eq for AlphaMode {}
65
66