* bevy_pbr2: Add support for most of the StandardMaterial textures Normal maps are not included here as they require tangents in a vertex attribute. * bevy_pbr2: Ensure RenderCommandQueue is ready for PbrShaders init * texture_pipelined: Add a light to the scene so we can see stuff * WIP bevy_pbr2: back to front sorting hack * bevy_pbr2: Uniform control flow for texture sampling in pbr.frag From 'fintelia' on the Bevy Render Rework Round 2 discussion: "My understanding is that GPUs these days never use the "execute both branches and select the result" strategy. Rather, what they do is evaluate the branch condition on all threads of a warp, and jump over it if all of them evaluate to false. If even a single thread needs to execute the if statement body, however, then the remaining threads are paused until that is completed." * bevy_pbr2: Simplify texture and sampler names The StandardMaterial_ prefix is no longer needed * bevy_pbr2: Match default 'AmbientColor' of current bevy_pbr for now * bevy_pbr2: Convert from non-linear to linear sRGB for the color uniform * bevy_pbr2: Add pbr_pipelined example * Fix view vector in pbr frag to work in ortho * bevy_pbr2: Use a 90 degree y fov and light range projection for lights * bevy_pbr2: Add AmbientLight resource * bevy_pbr2: Convert PointLight color to linear sRGB for use in fragment shader * bevy_pbr2: pbr.frag: Rename PointLight.projection to view_projection The uniform contains the view_projection matrix so this was incorrect. * bevy_pbr2: PointLight is an OmniLight as it has a radius * bevy_pbr2: Factoring out duplicated code * bevy_pbr2: Implement RenderAsset for StandardMaterial * Remove unnecessary texture and sampler clones * fix comment formatting * remove redundant Buffer:from * Don't extract meshes when their material textures aren't ready * make missing textures in the queue step an error Co-authored-by: Aevyrie <aevyrie@gmail.com> Co-authored-by: Carter Anderson <mcanders1@gmail.com>
42 lines
889 B
Rust
42 lines
889 B
Rust
use bevy_ecs::reflect::ReflectComponent;
|
|
use bevy_reflect::Reflect;
|
|
use bevy_render2::color::Color;
|
|
|
|
/// An omnidirectional light
|
|
#[derive(Debug, Clone, Copy, Reflect)]
|
|
#[reflect(Component)]
|
|
pub struct OmniLight {
|
|
pub color: Color,
|
|
pub intensity: f32,
|
|
pub range: f32,
|
|
pub radius: f32,
|
|
}
|
|
|
|
impl Default for OmniLight {
|
|
fn default() -> Self {
|
|
OmniLight {
|
|
color: Color::rgb(1.0, 1.0, 1.0),
|
|
intensity: 200.0,
|
|
range: 20.0,
|
|
radius: 0.0,
|
|
}
|
|
}
|
|
}
|
|
|
|
// Ambient light color.
|
|
#[derive(Debug)]
|
|
pub struct AmbientLight {
|
|
pub color: Color,
|
|
/// Color is premultiplied by brightness before being passed to the shader
|
|
pub brightness: f32,
|
|
}
|
|
|
|
impl Default for AmbientLight {
|
|
fn default() -> Self {
|
|
Self {
|
|
color: Color::rgb(1.0, 1.0, 1.0),
|
|
brightness: 0.05,
|
|
}
|
|
}
|
|
}
|