mirror of
https://github.com/bevyengine/bevy
synced 2024-11-26 14:40:19 +00:00
328008f904
# Objective - Closes #11985 ## Solution - alpha.rs has been moved from bevy_pbr into bevy_render; bevy_pbr and bevy_gltf now access `AlphaMode` through bevy_render. --- ## Migration Guide In the present implementation, external consumers of `AlphaMode` will have to access it through bevy_render rather than through bevy_pbr, changing their import from `bevy_pbr::AlphaMode` to `bevy_render::alpha::AlphaMode` (or the corresponding glob import from `bevy_pbr::prelude::*` to `bevy_render::prelude::*`). ## Uncertainties Some remaining things from this that I am uncertain about: - Here, the `app.register_type<AlphaMode>()` call has been moved from `PbrPlugin` to `RenderPlugin`; I'm not sure if this is quite right, and I was unable to find any direct relationship between `PbrPlugin` and `RenderPlugin`. - `AlphaMode` was placed in the prelude of bevy_render. I'm not certain that this is actually appropriate. - bevy_pbr does not re-export `AlphaMode`, which makes this a breaking change for external consumers. Any of these things could be easily changed; I'm just not confident that I necessarily adopted the right approach in these (known) ways since this codebase and ecosystem is quite new to me.
51 lines
2.2 KiB
Rust
51 lines
2.2 KiB
Rust
use bevy_reflect::std_traits::ReflectDefault;
|
|
use bevy_reflect::Reflect;
|
|
|
|
// TODO: add discussion about performance.
|
|
/// Sets how a material's base color alpha channel is used for transparency.
|
|
#[derive(Debug, Default, Reflect, Copy, Clone, PartialEq)]
|
|
#[reflect(Default, Debug)]
|
|
pub enum AlphaMode {
|
|
/// Base color alpha values are overridden to be fully opaque (1.0).
|
|
#[default]
|
|
Opaque,
|
|
/// Reduce transparency to fully opaque or fully transparent
|
|
/// based on a threshold.
|
|
///
|
|
/// Compares the base color alpha value to the specified threshold.
|
|
/// If the value is below the threshold,
|
|
/// considers the color to be fully transparent (alpha is set to 0.0).
|
|
/// If it is equal to or above the threshold,
|
|
/// considers the color to be fully opaque (alpha is set to 1.0).
|
|
Mask(f32),
|
|
/// The base color alpha value defines the opacity of the color.
|
|
/// Standard alpha-blending is used to blend the fragment's color
|
|
/// with the color behind it.
|
|
Blend,
|
|
/// Similar to [`AlphaMode::Blend`], however assumes RGB channel values are
|
|
/// [premultiplied](https://en.wikipedia.org/wiki/Alpha_compositing#Straight_versus_premultiplied).
|
|
///
|
|
/// For otherwise constant RGB values, behaves more like [`AlphaMode::Blend`] for
|
|
/// alpha values closer to 1.0, and more like [`AlphaMode::Add`] for
|
|
/// alpha values closer to 0.0.
|
|
///
|
|
/// Can be used to avoid “border” or “outline” artifacts that can occur
|
|
/// when using plain alpha-blended textures.
|
|
Premultiplied,
|
|
/// Combines the color of the fragments with the colors behind them in an
|
|
/// additive process, (i.e. like light) producing lighter results.
|
|
///
|
|
/// Black produces no effect. Alpha values can be used to modulate the result.
|
|
///
|
|
/// Useful for effects like holograms, ghosts, lasers and other energy beams.
|
|
Add,
|
|
/// Combines the color of the fragments with the colors behind them in a
|
|
/// multiplicative process, (i.e. like pigments) producing darker results.
|
|
///
|
|
/// White produces no effect. Alpha values can be used to modulate the result.
|
|
///
|
|
/// Useful for effects like stained glass, window tint film and some colored liquids.
|
|
Multiply,
|
|
}
|
|
|
|
impl Eq for AlphaMode {}
|