From e7e9dd4e0a2333e6bb8872c76bf634b8985e5852 Mon Sep 17 00:00:00 2001 From: Schell Carl Scivally Date: Sun, 10 Dec 2023 08:53:11 +1300 Subject: [PATCH] WIP porting scene_cube_directional (test of directional lighting) --- crates/renderling-shader/src/pbr.rs | 41 ++-- crates/renderling-shader/src/stage.rs | 18 +- crates/renderling-shader/src/stage/id.rs | 98 --------- crates/renderling-shader/src/stage/light.rs | 197 ++++++++++++++++++ crates/renderling/src/lib.rs | 82 +++++++- .../src/linkage/stage-stage_fragment.spv | Bin 123320 -> 133644 bytes .../src/linkage/tonemapping-fragment.spv | Bin 5468 -> 5468 bytes crates/renderling/src/scene.rs | 5 +- crates/renderling/src/scene/gltf_support.rs | 2 +- crates/renderling/src/stage.rs | 53 +---- crates/renderling/src/stage/light.rs | 167 --------------- 11 files changed, 327 insertions(+), 336 deletions(-) delete mode 100644 crates/renderling-shader/src/stage/id.rs create mode 100644 crates/renderling-shader/src/stage/light.rs delete mode 100644 crates/renderling/src/stage/light.rs diff --git a/crates/renderling-shader/src/pbr.rs b/crates/renderling-shader/src/pbr.rs index 0eabb4ca..8d09f116 100644 --- a/crates/renderling-shader/src/pbr.rs +++ b/crates/renderling-shader/src/pbr.rs @@ -21,7 +21,7 @@ use crate::{ id::Id, math, slab::Slab, - stage::{GpuLight, LightType, LightingModel}, + stage::{light::LightStyle, GpuLight, LightType, LightingModel}, texture::GpuTexture, IsVector, }; @@ -344,7 +344,7 @@ pub fn stage_shade_fragment( prefiltered: Vec3, brdf: Vec2, - lights: Array, + lights: Array, slab: &[u32], ) -> Vec4 { let n = in_norm.alt_norm_or_zero(); @@ -358,19 +358,17 @@ pub fn stage_shade_fragment( // determine the light ray and the radiance match light.light_type { - LightType::END_OF_LIGHTS => { - break; - } - LightType::POINT_LIGHT => { - let frag_to_light = light.position.xyz() - in_pos; + LightStyle::Point => { + let point_light = slab.read(light.into_point_id()); + let frag_to_light = point_light.position - in_pos; let distance = frag_to_light.length(); if distance == 0.0 { continue; } let l = frag_to_light.alt_norm_or_zero(); - let attenuation = light.intensity * 1.0 / (distance * distance); + let attenuation = point_light.intensity * 1.0 / (distance * distance); lo += outgoing_radiance( - light.color, + point_light.color, albedo, attenuation, v, @@ -381,19 +379,20 @@ pub fn stage_shade_fragment( ); } - LightType::SPOT_LIGHT => { - let frag_to_light = light.position.xyz() - in_pos; + LightStyle::Spot => { + let spot_light = slab.read(light.into_spot_id()); + let frag_to_light = spot_light.position - in_pos; let distance = frag_to_light.length(); if distance == 0.0 { continue; } let l = frag_to_light.alt_norm_or_zero(); - let theta: f32 = l.dot(light.direction.xyz().alt_norm_or_zero()); - let epsilon: f32 = light.inner_cutoff - light.outer_cutoff; - let attenuation: f32 = - light.intensity * ((theta - light.outer_cutoff) / epsilon).clamp(0.0, 1.0); + let theta: f32 = l.dot(spot_light.direction.alt_norm_or_zero()); + let epsilon: f32 = spot_light.inner_cutoff - spot_light.outer_cutoff; + let attenuation: f32 = spot_light.intensity + * ((theta - spot_light.outer_cutoff) / epsilon).clamp(0.0, 1.0); lo += outgoing_radiance( - light.color, + spot_light.color, albedo, attenuation, v, @@ -404,11 +403,12 @@ pub fn stage_shade_fragment( ); } - LightType::DIRECTIONAL_LIGHT => { - let l = -light.direction.xyz().alt_norm_or_zero(); - let attenuation = light.intensity; + LightStyle::Directional => { + let dir_light = slab.read(light.into_directional_id()); + let l = -dir_light.direction.alt_norm_or_zero(); + let attenuation = dir_light.intensity; lo += outgoing_radiance( - light.color, + dir_light.color, albedo, attenuation, v, @@ -418,7 +418,6 @@ pub fn stage_shade_fragment( roughness, ); } - _ => {} } } diff --git a/crates/renderling-shader/src/stage.rs b/crates/renderling-shader/src/stage.rs index 5f3853d9..8e533fe7 100644 --- a/crates/renderling-shader/src/stage.rs +++ b/crates/renderling-shader/src/stage.rs @@ -27,6 +27,8 @@ use crate::{ IsMatrix, IsVector, }; +pub mod light; + /// A vertex in a mesh. #[cfg_attr(not(target_arch = "spirv"), derive(Debug))] #[repr(C)] @@ -883,13 +885,25 @@ pub struct Camera { /// This should be the first struct in the stage's slab. #[cfg_attr(not(target_arch = "spirv"), derive(Debug))] #[repr(C)] -#[derive(Default, Clone, Copy, PartialEq, Slabbed)] +#[derive(Clone, Copy, PartialEq, Slabbed)] pub struct StageLegend { pub atlas_size: UVec2, pub debug_mode: DebugMode, pub has_skybox: bool, pub has_lighting: bool, - pub light_array: Array, + pub light_array: Array, +} + +impl Default for StageLegend { + fn default() -> Self { + Self { + atlas_size: Default::default(), + debug_mode: Default::default(), + has_skybox: Default::default(), + has_lighting: true, + light_array: Default::default(), + } + } } #[cfg_attr(not(target_arch = "spirv"), derive(Debug))] diff --git a/crates/renderling-shader/src/stage/id.rs b/crates/renderling-shader/src/stage/id.rs deleted file mode 100644 index fd801ac8..00000000 --- a/crates/renderling-shader/src/stage/id.rs +++ /dev/null @@ -1,98 +0,0 @@ -//! Typed identifiers that can also be used as indices. -use core::marker::PhantomData; - -pub const ID_NONE: u32 = u32::MAX; - -/// An identifier. -#[derive(Ord)] -#[repr(transparent)] -#[derive(bytemuck::Pod, bytemuck::Zeroable)] -pub struct Id(pub(crate) u32, PhantomData); - -impl PartialOrd for Id { - fn partial_cmp(&self, other: &Self) -> Option { - self.0.partial_cmp(&other.0) - } -} - -impl Copy for Id {} - -impl Clone for Id { - fn clone(&self) -> Self { - Self(self.0.clone(), PhantomData) - } -} - -impl core::hash::Hash for Id { - fn hash(&self, state: &mut H) { - self.0.hash(state); - } -} - -impl PartialEq for Id { - fn eq(&self, other: &Self) -> bool { - self.0 == other.0 - } -} - -impl Eq for Id {} - -impl From> for u32 { - fn from(value: Id) -> Self { - value.0 - } -} - -/// `Id::NONE` is the default. -impl Default for Id { - fn default() -> Self { - Id::NONE - } -} - -#[cfg(not(target_arch = "spirv"))] -impl std::fmt::Debug for Id { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_tuple(&format!("Id<{}>", std::any::type_name::())) - .field(&self.0) - .finish() - } -} - -impl Id { - pub const NONE: Self = Id::new(ID_NONE); - - pub const fn new(i: u32) -> Self { - Id(i, PhantomData) - } - - /// Convert this id into a usize for use as an index. - pub fn index(&self) -> usize { - self.0 as usize - } - - pub fn is_none(&self) -> bool { - // `u32` representing "null" or "none". - self == &Id::NONE - } - - pub fn is_some(&self) -> bool { - !self.is_none() - } -} - -#[cfg(test)] -mod test { - use crate::scene::GpuEntity; - - use super::*; - - #[test] - fn id_size() { - assert_eq!( - std::mem::size_of::(), - std::mem::size_of::>(), - "id is not u32" - ); - } -} diff --git a/crates/renderling-shader/src/stage/light.rs b/crates/renderling-shader/src/stage/light.rs new file mode 100644 index 00000000..5226ed92 --- /dev/null +++ b/crates/renderling-shader/src/stage/light.rs @@ -0,0 +1,197 @@ +//! Stage lighting. +use crate::{self as renderling_shader, id::Id, slab::Slabbed}; +use glam::{Vec3, Vec4}; + +#[repr(C)] +#[cfg_attr(not(target_arch = "spirv"), derive(Debug))] +#[derive(Copy, Clone, Slabbed)] +pub struct SpotLight { + pub position: Vec3, + pub direction: Vec3, + pub attenuation: Vec3, + pub inner_cutoff: f32, + pub outer_cutoff: f32, + pub color: Vec4, + pub intensity: f32, +} + +impl Default for SpotLight { + fn default() -> Self { + let white = Vec4::splat(1.0); + let inner_cutoff = core::f32::consts::PI / 3.0; + let outer_cutoff = core::f32::consts::PI / 2.0; + let attenuation = Vec3::new(1.0, 0.014, 0.007); + let direction = Vec3::new(0.0, -1.0, 0.0); + let color = white; + let intensity = 1.0; + + Self { + position: Default::default(), + direction, + attenuation, + inner_cutoff, + outer_cutoff, + color, + intensity, + } + } +} + +#[repr(C)] +#[cfg_attr(not(target_arch = "spirv"), derive(Debug))] +#[derive(Copy, Clone, Slabbed)] +pub struct DirectionalLight { + pub direction: Vec3, + pub color: Vec4, + pub intensity: f32, +} + +impl Default for DirectionalLight { + fn default() -> Self { + let direction = Vec3::new(0.0, -1.0, 0.0); + let color = Vec4::splat(1.0); + let intensity = 1.0; + + Self { + direction, + color, + intensity, + } + } +} + +#[repr(C)] +#[cfg_attr(not(target_arch = "spirv"), derive(Debug))] +#[derive(Copy, Clone, Slabbed)] +pub struct PointLight { + pub position: Vec3, + pub attenuation: Vec3, + pub color: Vec4, + pub intensity: f32, +} + +impl Default for PointLight { + fn default() -> Self { + let attenuation = Vec3::new(1.0, 0.14, 0.07); + let color = Vec4::splat(1.0); + let intensity = 1.0; + + Self { + position: Default::default(), + attenuation, + color, + intensity, + } + } +} + +#[cfg(feature = "gltf")] +pub fn from_gltf_light_kind(kind: gltf::khr_lights_punctual::Kind) -> LightStyle { + match kind { + gltf::khr_lights_punctual::Kind::Directional => LightStyle::Directional, + gltf::khr_lights_punctual::Kind::Point => LightStyle::Point, + gltf::khr_lights_punctual::Kind::Spot { .. } => LightStyle::Spot, + } +} + +#[cfg(feature = "gltf")] +pub fn gltf_light_intensity_units(kind: gltf::khr_lights_punctual::Kind) -> &'static str { + match kind { + gltf::khr_lights_punctual::Kind::Directional => "lux (lm/m^2)", + // sr is "steradian" + _ => "candelas (lm/sr)", + } +} + +#[repr(u32)] +#[cfg_attr(not(target_arch = "spirv"), derive(Debug))] +#[derive(Copy, Clone)] +pub enum LightStyle { + Directional = 0, + Point = 1, + Spot = 2, +} + +impl Slabbed for LightStyle { + fn slab_size() -> usize { + 1 + } + + fn read_slab(&mut self, index: usize, slab: &[u32]) -> usize { + let mut proxy = 0u32; + let index = proxy.read_slab(index, slab); + match proxy { + 0 => *self = LightStyle::Directional, + 1 => *self = LightStyle::Point, + 2 => *self = LightStyle::Spot, + _ => *self = LightStyle::Directional, + } + index + } + + fn write_slab(&self, index: usize, slab: &mut [u32]) -> usize { + let proxy = *self as u32; + proxy.write_slab(index, slab) + } +} + +/// A type-erased light Id that is used as a slab pointer to any light type. +#[repr(C)] +#[cfg_attr(not(target_arch = "spirv"), derive(Debug))] +#[derive(Copy, Clone, Slabbed)] +pub struct Light { + // The type of the light + pub light_type: LightStyle, + // The index of the light in the slab + pub index: u32, +} + +impl Default for Light { + fn default() -> Self { + Self { + light_type: LightStyle::Directional, + index: Id::<()>::NONE.inner(), + } + } +} + +impl From> for Light { + fn from(id: Id) -> Self { + Self { + light_type: LightStyle::Directional, + index: id.inner(), + } + } +} + +impl From> for Light { + fn from(id: Id) -> Self { + Self { + light_type: LightStyle::Spot, + index: id.inner(), + } + } +} + +impl From> for Light { + fn from(id: Id) -> Self { + Self { + light_type: LightStyle::Point, + index: id.inner(), + } + } +} + +impl Light { + pub fn into_directional_id(self) -> Id { + Id::from(self.index) + } + + pub fn into_spot_id(self) -> Id { + Id::from(self.index) + } + + pub fn into_point_id(self) -> Id { + Id::from(self.index) + } +} diff --git a/crates/renderling/src/lib.rs b/crates/renderling/src/lib.rs index 200a0611..ea68b728 100644 --- a/crates/renderling/src/lib.rs +++ b/crates/renderling/src/lib.rs @@ -40,6 +40,8 @@ //! You can also use the [shaders module](crate::shaders) without renderlings //! and manage your own resources for maximum flexibility. +// TODO: Audit the API and make it more ergonomic/predictable. + mod atlas; pub mod bloom; mod buffer_array; @@ -102,6 +104,8 @@ pub mod shader { pub use renderling_shader::*; } +pub use renderling_shader::stage::{GpuEntityInfo, LightingModel}; + /// Set up the render graph, including: /// * 3d scene objects /// * skybox @@ -212,7 +216,10 @@ mod test { use super::*; use glam::{Mat3, Mat4, Quat, UVec2, Vec2, Vec3, Vec4, Vec4Swizzles}; use pretty_assertions::assert_eq; - use renderling_shader::stage::{DrawIndirect, GpuEntity, Vertex}; + use renderling_shader::stage::{ + light::*, new_stage_vertex, Camera, GpuEntity, NativeVertexData, RenderUnit, Transform, + Vertex, VertexData, + }; #[test] fn sanity_transmute() { @@ -1108,8 +1115,8 @@ mod test { } #[test] - /// Ensures that the directional light coloring works. - fn scene_cube_directional() { + /// Tests shading with directional light. + fn old_scene_cube_directional() { let mut r = Renderling::headless(100, 100).with_background_color(Vec3::splat(0.0).extend(1.0)); @@ -1172,6 +1179,75 @@ mod test { img_diff::assert_img_eq("scene_cube_directional.png", img); } + #[test] + /// Tests shading with directional light. + fn scene_cube_directional() { + let mut r = + Renderling::headless(100, 100).with_background_color(Vec3::splat(0.0).extend(1.0)); + let stage = r.new_stage(); + stage.configure_graph(&mut r, true); + + let (projection, _) = camera::default_perspective(100.0, 100.0); + let view = Mat4::look_at_rh( + Vec3::new(1.8, 1.8, 1.8), + Vec3::ZERO, + Vec3::new(0.0, 1.0, 0.0), + ); + let camera = stage.append(&Camera { + projection, + view, + ..Default::default() + }); + + let red = Vec3::X.extend(1.0); + let green = Vec3::Y.extend(1.0); + let blue = Vec3::Z.extend(1.0); + let dir_red = stage.append(&DirectionalLight { + direction: Vec3::NEG_Y, + color: red, + intensity: 10.0, + }); + let dir_green = stage.append(&DirectionalLight { + direction: Vec3::NEG_X, + color: green, + intensity: 10.0, + }); + let dir_blue = stage.append(&DirectionalLight { + direction: Vec3::NEG_Z, + color: blue, + intensity: 10.0, + }); + let lights = stage.append_array(&[dir_red.into(), dir_green.into(), dir_blue.into()]); + stage.set_lights(lights); + + let material = stage.append(&PbrMaterial::default()); + let vertices = stage.append_array( + &renderling_shader::math::unit_cube() + .into_iter() + .map(|(p, n)| Vertex { + position: p.extend(1.0), + normal: n.extend(0.0), + ..Default::default() + }) + .collect::>(), + ); + let vertex_data = stage.append(&NativeVertexData { + vertices, + material, + ..Default::default() + }); + + let _cube = stage.draw_unit(&RenderUnit { + vertex_data: VertexData::new_native(vertex_data), + vertex_count: vertices.len() as u32, + camera, + ..Default::default() + }); + + let img = r.render_image().unwrap(); + img_diff::assert_img_eq("scene_cube_directional.png", img); + } + #[test] // Test to make sure that we can reconstruct a normal matrix without using the // inverse transpose of a model matrix, so long as we have the T R S diff --git a/crates/renderling/src/linkage/stage-stage_fragment.spv b/crates/renderling/src/linkage/stage-stage_fragment.spv index f861a93ffcf7d5ee9a7de5785db0ef9914d9512f..03759cd369322e087fd5537974cbde33f627de06 100644 GIT binary patch literal 133644 zcma&v3E1vq^)~*^W|K0DWS-iJG$RdEN`uNgL}<`l#-buhGfEU&O0{?9St=>gC{v|= zMS}(unj=#K|MRo=ed_8tp7%KZ-{W2H8qRf{*Sgla?(g2u{p|c^F1*fSGZtNF#*7(D z&zQS@RGwvLEIdPm{_P4gW;}Gptoi;{TW`PhMh6`D>W!ZKl*h|kYQ{`z{{O%9jMZi= z5_{pu0SCU~wR>;2*?hIgK9X`~JUp^uWSQ)2KRnM5>&DTZbrz@xW6mOmt9jOmtvSS;M$F;lZ4&Jf z^E6gIXW1&JJ~G;Q7Wgw~92FbCe72_?Tcu{_d_=@r_F557{k0dk^Ve@WvAZ6pSZmlK zc4Ix$;fdioI=Xeqd1`#m$R$>;_D8H-YsT){nX#>1cZfN&n5)w~^A&3!@u@@X$&u!n zo0#)7=01o$eTcaqVp|L`_eE^WA*PpN&mUs$li1cn%>5GEW{A0OVmk~m_fKq>A*M%S zyH8@9MSH|N&LP&GI!|NmY5Od1X2e?e+RQ!@-I?+A*Zsg(f9=7y9`1qji`(~U^O66p zPptK+#X6s<)hD@ppD+G`eP_=9Tm z$@f|3yF+}Rd%m9Vy#x5}4qxB+?X!F1(Nm8ei1oZDBd&IM&&(fjHNx8i{)qcLz}pl4i2H27+arE)XL?3_&)6feg(k7yPqBq3 zu{EQueP*<0Tq`zpt=M#H^~Bo8NAPVP?HT#Rrt*nRtI6oWDZibEEB#Z{7skFuie>&rf3FL|x*iM7rkG*s1I5tB1p% ztFLpHM%4J2VD>#DqMv6*+uvE*i?d=cGx+CB!Ox9vj?F(Ww$D`SIzM)v zE$Uymz<=^8+54i{didx`9bbyAXJ3w1pZd#tacp-=-!F+)r=0&+-@h8nBNyk_qUAfI zy)TW1mH)EX?y=mjNBex+qxj{q-KC!6+p%ZN`0N%NCet1HPNegp-ILX_;>c*{SUvVp z(R_P+H`=>VjDJP6J>@=ag8MU9&g!YmpW{9!#O%B8Rk7_g?p^HaNqoeMT{EmH4#R(K z1h4h-oXtH_!}lZVy)Ig9>V?riinL!pjjjIr*T>%F_S zdOo@Sj-$s!oXD}~|6j4jyJoX!?~%SstaqMYMlTexM{Bwa7xddggr3c@~-f zcM$i1bp2oFYzs@t9*E`(bpPae4LH+Ox zyFSRbQ2bq2+GO+M3&)>x<8cqJUvaV?pLdIUn3Vbbs zGxiiWV~_XCGosz0e#Y!Cwp8}_xq0RUA9LF8Ws>vg-IsoF9?Q=6Kl%(D)-5-m<013^ zK4N{v>`C`5-wMfp_Fj8Gz5c`J`@ee{zRi=rV*Fw࿤_dhuMN5ucd(pPToGy0LW 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 SY2&@-o{iK0%A;w6$o~VJRBd?x diff --git a/crates/renderling/src/linkage/tonemapping-fragment.spv b/crates/renderling/src/linkage/tonemapping-fragment.spv index ac674150d4c67ad70b828203d53980bb87a5352f..f7b72dec7a68c2f4688b297360b715f4d5c88210 100644 GIT binary patch delta 251 zcmcbkbw_K14zqwZ0}F!`0|SFG5NpQp+fCMCRuD7+a+rWv5{RvV3QQ))G8%TkSOEF`hrZgt_?AGve5*8E-U`UK_FrPhJToPlCwJ IFFA|30W#MlzW@LL delta 250 zcmcbkbw_K14)bIiW(7fG1_lNuAeIDTYX%kuUoP+kp~ z_m(5r6J#z(CCEG;1`e>@wTui5K*V4K#2|T)US#) { + let id = Id::>::from(StageLegend::offset_of_light_array()); + // UNWRAP: safe because light array offset is guaranteed to be valid. + self.slab + .write(&self.device, &self.queue, id, &lights) + .unwrap(); + } + /// Set the images to use for the atlas. /// /// Resets the atlas, packing it with the given images and returning a vector of the textures @@ -216,47 +224,6 @@ impl Stage { self } - /// Create a new spot light and return its builder. - pub fn new_spot_light(&self) -> light::GpuSpotLightBuilder { - light::GpuSpotLightBuilder::new(self) - } - - /// Create a new directional light and return its builder. - pub fn new_directional_light(&self) -> light::GpuDirectionalLightBuilder { - light::GpuDirectionalLightBuilder::new(self) - } - - /// Create a new point light and return its builder. - pub fn new_point_light(&self) -> light::GpuPointLightBuilder { - light::GpuPointLightBuilder::new(self) - } - - /// Set the light array. - /// - /// This should be an iterator over the ids of all the lights on the stage. - pub fn set_light_array( - &self, - lights: impl IntoIterator>, - ) -> Array> { - let lights = lights.into_iter().collect::>(); - let light_array = self.append_array(&lights); - let id = Id::>>::from(StageLegend::offset_of_light_array()); - // UNWRAP: safe because we just appended the array, and the light array offset is - // guaranteed to be valid. - self.slab - .write(&self.device, &self.queue, id, &light_array) - .unwrap(); - light_array - } - - /// Set the light array. - /// - /// This should be an iterator over the ids of all the lights on the stage. - pub fn with_light_array(self, lights: impl IntoIterator>) -> Self { - self.set_light_array(lights); - self - } - /// Read all the data from the stage. /// /// This blocks until the GPU buffer is mappable, and then copies the data into a vector. diff --git a/crates/renderling/src/stage/light.rs b/crates/renderling/src/stage/light.rs deleted file mode 100644 index 5a6f57cc..00000000 --- a/crates/renderling/src/stage/light.rs +++ /dev/null @@ -1,167 +0,0 @@ -//! Light builders for the stage. -use glam::{Vec3, Vec4}; -use renderling_shader::id::Id; -use renderling_shader::stage::{GpuLight, LightType}; - -use crate::Stage; - -#[cfg(feature = "gltf")] -pub fn from_gltf_light_kind(kind: gltf::khr_lights_punctual::Kind) -> LightType { - match kind { - gltf::khr_lights_punctual::Kind::Directional => LightType::DIRECTIONAL_LIGHT, - gltf::khr_lights_punctual::Kind::Point => LightType::POINT_LIGHT, - gltf::khr_lights_punctual::Kind::Spot { .. } => LightType::SPOT_LIGHT, - } -} - -#[cfg(feature = "gltf")] -pub fn gltf_light_intensity_units(kind: gltf::khr_lights_punctual::Kind) -> &'static str { - match kind { - gltf::khr_lights_punctual::Kind::Directional => "lux (lm/m^2)", - // sr is "steradian" - _ => "candelas (lm/sr)", - } -} - -/// A builder for a spot light. -pub struct GpuSpotLightBuilder<'a> { - inner: GpuLight, - stage: &'a Stage, -} - -impl<'a> GpuSpotLightBuilder<'a> { - pub fn new(stage: &'a Stage) -> GpuSpotLightBuilder<'a> { - let inner = GpuLight { - light_type: LightType::SPOT_LIGHT, - ..Default::default() - }; - let white = Vec4::splat(1.0); - Self { inner, stage } - .with_cutoff(std::f32::consts::PI / 3.0, std::f32::consts::PI / 2.0) - .with_attenuation(1.0, 0.014, 0.007) - .with_direction(Vec3::new(0.0, -1.0, 0.0)) - .with_color(white) - .with_intensity(1.0) - } - - pub fn with_position(mut self, position: impl Into) -> Self { - self.inner.position = position.into().extend(1.0); - self - } - - pub fn with_direction(mut self, direction: impl Into) -> Self { - self.inner.direction = direction.into().extend(1.0); - self - } - - pub fn with_attenuation(mut self, constant: f32, linear: f32, quadratic: f32) -> Self { - self.inner.attenuation = Vec4::new(constant, linear, quadratic, 0.0); - self - } - - pub fn with_cutoff(mut self, inner: f32, outer: f32) -> Self { - self.inner.inner_cutoff = inner; - self.inner.outer_cutoff = outer; - self - } - - pub fn with_color(mut self, color: impl Into) -> Self { - self.inner.color = color.into(); - self - } - - pub fn with_intensity(mut self, i: f32) -> Self { - self.inner.intensity = i; - self - } - - pub fn build(self) -> Id { - self.stage.append(&self.inner) - } -} - -/// A builder for a directional light. -/// -/// Directional lights illuminate all geometry from a certain direction, -/// without attenuation. -/// -/// This is like the sun, or the moon. -pub struct GpuDirectionalLightBuilder<'a> { - inner: GpuLight, - stage: &'a Stage, -} - -impl<'a> GpuDirectionalLightBuilder<'a> { - pub fn new(stage: &'a Stage) -> GpuDirectionalLightBuilder<'a> { - let inner = GpuLight { - light_type: LightType::DIRECTIONAL_LIGHT, - ..Default::default() - }; - Self { inner, stage } - .with_direction(Vec3::new(0.0, -1.0, 0.0)) - .with_color(Vec4::splat(1.0)) - .with_intensity(1.0) - } - - pub fn with_direction(mut self, direction: impl Into) -> Self { - self.inner.direction = direction.into().extend(1.0); - self - } - - pub fn with_color(mut self, color: impl Into) -> Self { - self.inner.color = color.into(); - self - } - - pub fn with_intensity(mut self, intensity: f32) -> Self { - self.inner.intensity = intensity; - self - } - - pub fn build(self) -> Id { - self.stage.append(&self.inner) - } -} - -pub struct GpuPointLightBuilder<'a> { - inner: GpuLight, - stage: &'a Stage, -} - -impl<'a> GpuPointLightBuilder<'a> { - pub fn new(stage: &Stage) -> GpuPointLightBuilder<'_> { - let inner = GpuLight { - light_type: LightType::POINT_LIGHT, - ..Default::default() - }; - let white = Vec4::splat(1.0); - GpuPointLightBuilder { stage, inner } - .with_attenuation(1.0, 0.14, 0.07) - .with_color(white) - .with_intensity(1.0) - } - - pub fn with_position(mut self, position: impl Into) -> Self { - self.inner.position = position.into().extend(0.0); - self - } - - pub fn with_attenuation(mut self, constant: f32, linear: f32, quadratic: f32) -> Self { - self.inner.attenuation = Vec4::new(constant, linear, quadratic, 0.0); - self - } - - pub fn with_color(mut self, color: impl Into) -> Self { - self.inner.color = color.into(); - self - } - - pub fn with_intensity(mut self, i: f32) -> Self { - self.inner.intensity = i; - self - } - - pub fn build(self) -> Id { - self.stage.append(&self.inner) - } -}