From 175ab4c767a909617f28af17e7c2ae8be049bdfb Mon Sep 17 00:00:00 2001 From: Schell Carl Scivally Date: Sat, 21 Feb 2026 12:11:42 +1300 Subject: [PATCH 1/2] Add global ambient light to PBR shader Add an ambient_color field (Vec4: RGB + intensity) to LightingDescriptor, allowing users to set a flat ambient light term via Stage::set_ambient_color. The ambient contribution is modulated by surface albedo and ambient occlusion, and is additive with the existing IBL and analytical light contributions. Defaults to zero for full backward compatibility. Co-authored-by: Claude --- crates/renderling/src/light/cpu.rs | 18 +++++ crates/renderling/src/light/shader.rs | 102 +++++++++++++++----------- crates/renderling/src/pbr/shader.rs | 4 +- crates/renderling/src/stage/cpu.rs | 23 ++++++ 4 files changed, 104 insertions(+), 43 deletions(-) diff --git a/crates/renderling/src/light/cpu.rs b/crates/renderling/src/light/cpu.rs index b6e36aae..aa539681 100644 --- a/crates/renderling/src/light/cpu.rs +++ b/crates/renderling/src/light/cpu.rs @@ -951,6 +951,22 @@ impl Lighting { bundle } + /// Set the global ambient light color and intensity. + /// + /// XYZ components are the RGB color, W is the intensity. + /// The ambient term is added to the final shaded color, modulated by + /// the surface albedo and ambient occlusion. + /// + /// Defaults to `Vec4::ZERO` (no ambient contribution). + pub fn set_ambient_color(&self, color: Vec4) { + self.lighting_descriptor.modify(|d| d.ambient_color = color); + } + + /// Get the current global ambient light color and intensity. + pub fn ambient_color(&self) -> Vec4 { + self.lighting_descriptor.get().ambient_color + } + /// Enable shadow mapping for the given [`AnalyticalLight`], creating /// a new [`ShadowMap`]. pub fn new_shadow_map( @@ -1031,6 +1047,8 @@ impl Lighting { update_shadow_map_texture_index, // Don't change the tiling descriptor light_tiling_descriptor_id: _, + // Don't change the ambient color (set via set_ambient_color) + ambient_color: _, }| { *analytical_lights_array = lights_array; *shadow_map_atlas_descriptor_id = self.shadow_map_atlas.descriptor_id(); diff --git a/crates/renderling/src/light/shader.rs b/crates/renderling/src/light/shader.rs index 05a67279..2575c2de 100644 --- a/crates/renderling/src/light/shader.rs +++ b/crates/renderling/src/light/shader.rs @@ -9,11 +9,11 @@ //! //! ## Note //! -//! The glTF spec [1] says directional light is in lux, whereas spot and point are -//! in candelas. The same goes for this library's shaders, but not a ton of work -//! has gone into verifying that conversion from these units into radiometric units -//! is accurate _in any way_. The shaders roughly do a conversion by dividing by 683 [2] -//! or some other constant involving 683 [3]. +//! The glTF spec [1] says directional light is in lux, whereas spot and point +//! are in candelas. The same goes for this library's shaders, but not a ton of +//! work has gone into verifying that conversion from these units into +//! radiometric units is accurate _in any way_. The shaders roughly do a +//! conversion by dividing by 683 [2] or some other constant involving 683 [3]. //! //! More work needs to be done here. PRs would be very appreciated. //! @@ -52,6 +52,14 @@ pub struct LightingDescriptor { /// `Id` of the [`LightTilingDescriptor`] to use when performing /// light tiling. pub light_tiling_descriptor_id: Id, + /// Global ambient light color and intensity. + /// + /// XYZ components are the RGB color, W is the intensity. + /// The ambient term is added to the final shaded color, + /// modulated by the surface albedo and ambient occlusion. + /// + /// Defaults to `Vec4::ZERO` (no ambient contribution). + pub ambient_color: Vec4, } #[derive(Clone, Copy, SlabItem, core::fmt::Debug)] @@ -186,11 +194,13 @@ pub struct SpotLightCalculation { pub frag_to_light_distance: f32, /// Unit vector (SpotDir) direction that the light is pointing in pub light_direction: Vec3, - /// The cosine of the cutoff angle (Phi ϕ) that specifies the spotlight's radius. + /// The cosine of the cutoff angle (Phi ϕ) that specifies the spotlight's + /// radius. /// /// Everything inside this angle is lit by the spotlight. pub cos_inner_cutoff: f32, - /// The cosine of the cutoff angle (Gamma γ) that specifies the spotlight's outer radius. + /// The cosine of the cutoff angle (Gamma γ) that specifies the spotlight's + /// outer radius. /// /// Everything outside this angle is not lit by the spotlight. /// @@ -203,21 +213,22 @@ pub struct SpotLightCalculation { pub fragment_is_inside_outer_cone: bool, /// `outer_cutoff` - `inner_cutoff` pub epsilon: f32, - /// Cosine of the angle (Theta θ) between `frag_to_light` (LightDir) vector and the - /// `light_direction` (SpotDir) vector. + /// Cosine of the angle (Theta θ) between `frag_to_light` (LightDir) vector + /// and the `light_direction` (SpotDir) vector. /// /// θ should be smaller than `outer_cutoff` (Gamma γ) to be - /// inside the spotlight, but since these are all cosines of angles, we actually - /// compare using `>`. + /// inside the spotlight, but since these are all cosines of angles, we + /// actually compare using `>`. pub cos_theta: f32, pub contribution_unclamped: f32, - /// The intensity level between `0.0` and `1.0` that should be used to determine - /// outgoing radiance. + /// The intensity level between `0.0` and `1.0` that should be used to + /// determine outgoing radiance. pub contribution: f32, } impl SpotLightCalculation { - /// Calculate the values required to determine outgoing radiance of a spot light. + /// Calculate the values required to determine outgoing radiance of a spot + /// light. pub fn new( spot_light_descriptor: SpotLightDescriptor, node_transform: Mat4, @@ -418,7 +429,8 @@ impl DirectionalLightDescriptor { // // The maximum should be the `Camera`'s `Frustum::depth()`. // TODO: in `DirectionalLightDescriptor::shadow_mapping_projection_and_view`, take Frustum - // as a parameter and then figure out the minimal view projection that includes that frustum + // as a parameter and then figure out the minimal view projection that includes that + // frustum z_near: f32, // Far limits of the light's reach z_far: f32, @@ -503,9 +515,9 @@ impl PointLightDescriptor { /// - Full moon on a clear night: 0.25 lux. /// - Quarter moon: 0.01 lux /// - Starlight overcast moonless night sky: 0.0001 lux. -/// * General indoor lighting: Around 100 to 300 lux. -/// * Office lighting: Typically around 300 to 500 lux. -/// * Reading or task lighting: Around 500 to 750 lux. +/// * General indoor lighting: Around 100 to 300 lux. +/// * Office lighting: Typically around 300 to 500 lux. +/// * Reading or task lighting: Around 500 to 750 lux. /// * Detailed work (e.g., drafting, surgery): 1000 lux or more. pub fn radius_of_illumination(intensity_candelas: f32, minimum_illuminance_lux: f32) -> f32 { (intensity_candelas / minimum_illuminance_lux).sqrt() @@ -557,7 +569,8 @@ pub struct LightDescriptor { pub light_type: LightStyle, /// The index of the light in the lighting slab pub index: u32, - /// The id of a transform to apply to the position and direction of the light. + /// The id of a transform to apply to the position and direction of the + /// light. /// /// This `Id` points to a transform on the lighting slab. /// @@ -642,7 +655,8 @@ pub struct ShadowCalculation { } impl ShadowCalculation { - /// Reads various required parameters from the slab and creates a `ShadowCalculation`. + /// Reads various required parameters from the slab and creates a + /// `ShadowCalculation`. pub fn new( light_slab: &[u32], light: LightDescriptor, @@ -713,10 +727,10 @@ impl ShadowCalculation { if !crate::math::is_inside_clip_space(frag_pos_in_light_space.xyz()) { return 0.0; } - // The range of coordinates in the light's clip space is -1.0 to 1.0 for x and y, - // but the texture space is [0, 1], and Y increases downward, so we do this - // conversion to flip Y and also normalize to the range [0.0, 1.0]. - // Z should already be 0.0 to 1.0. + // The range of coordinates in the light's clip space is -1.0 to 1.0 for x and + // y, but the texture space is [0, 1], and Y increases downward, so we + // do this conversion to flip Y and also normalize to the range [0.0, + // 1.0]. Z should already be 0.0 to 1.0. let proj_coords_uv = (frag_pos_in_light_space.xy() * Vec2::new(1.0, -1.0) + Vec2::splat(1.0)) * Vec2::splat(0.5); @@ -744,13 +758,14 @@ impl ShadowCalculation { let shadow_map_depth = shadow_map .sample_by_lod(*shadow_map_sampler, proj_coords, 0.0) .x; - // To get the current depth at this fragment we simply retrieve the projected vector's z - // coordinate which equals the depth of this fragment from the light's perspective. + // To get the current depth at this fragment we simply retrieve the projected + // vector's z coordinate which equals the depth of this fragment + // from the light's perspective. let fragment_depth = frag_pos_in_light_space.z; - // If the `current_depth`, which is the depth of the fragment from the lights POV, is - // greater than the `closest_depth` of the shadow map at that fragment, the fragment - // is in shadow + // If the `current_depth`, which is the depth of the fragment from the lights + // POV, is greater than the `closest_depth` of the shadow map at + // that fragment, the fragment is in shadow crate::println!("current_depth: {fragment_depth}"); crate::println!("closest_depth: {shadow_map_depth}"); let bias = (bias_max * (1.0 - surface_normal.dot(*light_direction))).max(*bias_min); @@ -853,11 +868,11 @@ impl ShadowCalculation { /// shader gets its projection+view matrix from the light stored in a /// `ShadowMapDescriptor`. /// -/// Here we want to render as normal forward pass would, with the `PrimitiveDescriptor` -/// and the `Camera`'s view projection matrix. +/// Here we want to render as normal forward pass would, with the +/// `PrimitiveDescriptor` and the `Camera`'s view projection matrix. /// ## Note -/// This shader will likely be expanded to include parts of occlusion culling and order -/// independent transparency. +/// This shader will likely be expanded to include parts of occlusion culling +/// and order independent transparency. #[spirv(vertex)] pub fn light_tiling_depth_pre_pass( // Points at a `Renderlet`. @@ -1065,7 +1080,8 @@ impl LightTilingInvocation { crate::math::convert_pixel_to_ndc(mid_coord, self.tile_grid_size()) } - /// Compute the min and max depth of one fragment/invocation for light tiling. + /// Compute the min and max depth of one fragment/invocation for light + /// tiling. /// /// The min and max is stored in a tile on lighting slab. fn compute_min_and_max_depth( @@ -1082,7 +1098,8 @@ impl LightTilingInvocation { let frag_depth: f32 = depth_texture.fetch(frag_pos).x; // Fragment depth scaled to min/max of u32 values // - // This is so we can compare with normal atomic ops instead of using the float extension + // This is so we can compare with normal atomic ops instead of using the float + // extension let frag_depth_u32 = quantize_depth_f32_to_u32(frag_depth); // The tile's index in all the tiles @@ -1132,9 +1149,10 @@ impl LightTilingInvocation { } } - // The difficulty here is that in SPIRV we can access `lighting_slab` atomically without wrapping it - // in a type, but on CPU we must pass an array of (something like) `AtomicU32`. I'm not sure how to - // model this interaction to test it on the CPU. + // The difficulty here is that in SPIRV we can access `lighting_slab` atomically + // without wrapping it in a type, but on CPU we must pass an array of + // (something like) `AtomicU32`. I'm not sure how to model this interaction + // to test it on the CPU. fn compute_light_lists(&self, geometry_slab: &[u32], lighting_slab: &mut [u32]) { let index = self.tile_index(); let tile_id = self.descriptor.tiles_array.at(index); @@ -1188,8 +1206,8 @@ impl LightTilingInvocation { + LightingDescriptor::OFFSET_OF_ANALYTICAL_LIGHTS_ARRAY, ); - // Each invocation will calculate a few lights' contribution to the tile, until all lights - // have been visited + // Each invocation will calculate a few lights' contribution to the tile, until + // all lights have been visited let next_light = NextLightIndex::new( self.global_id, self.descriptor.tile_size, @@ -1228,8 +1246,8 @@ impl LightTilingInvocation { radius_of_illumination(intensity_candelas, self.descriptor.minimum_illuminance_lux); let should_add = radius >= distance; if should_add { - // If the light should be added to the bin, get the next available index in the bin, - // then write the id of the light into that index. + // If the light should be added to the bin, get the next available index in the + // bin, then write the id of the light into that index. let next_index = crate::sync::atomic_i_increment::< { spirv_std::memory::Scope::Workgroup as u32 }, { spirv_std::memory::Semantics::WORKGROUP_MEMORY.bits() }, diff --git a/crates/renderling/src/pbr/shader.rs b/crates/renderling/src/pbr/shader.rs index 9b1ac36e..7ead67ae 100644 --- a/crates/renderling/src/pbr/shader.rs +++ b/crates/renderling/src/pbr/shader.rs @@ -648,6 +648,8 @@ where let kd = (1.0 - ks) * (1.0 - metallic); let diffuse = irradiance * albedo; let specular = prefiltered * (fresnel * brdf.x + brdf.y); - let color = (kd * diffuse + specular) * ao + lo + emissive; + // Global ambient light contribution, modulated by surface albedo and AO. + let ambient_light = lighting_desc.ambient_color.xyz() * lighting_desc.ambient_color.w; + let color = (kd * diffuse + specular) * ao + lo + emissive + ambient_light * albedo * ao; color.extend(1.0) } diff --git a/crates/renderling/src/stage/cpu.rs b/crates/renderling/src/stage/cpu.rs index ea53c157..a285b78a 100644 --- a/crates/renderling/src/stage/cpu.rs +++ b/crates/renderling/src/stage/cpu.rs @@ -713,6 +713,29 @@ impl Stage { self.lighting.remove_light(bundle); } + /// Set the global ambient light color and intensity. + /// + /// XYZ components are the RGB color, W is the intensity. + /// The ambient term is added to the final shaded color, modulated by + /// the surface albedo and ambient occlusion. + /// + /// Defaults to `Vec4::ZERO` (no ambient contribution). + pub fn set_ambient_color(&self, color: Vec4) -> &Self { + self.lighting.set_ambient_color(color); + self + } + + /// Set the global ambient light color and intensity (builder pattern). + pub fn with_ambient_color(self, color: Vec4) -> Self { + self.set_ambient_color(color); + self + } + + /// Get the current global ambient light color and intensity. + pub fn ambient_color(&self) -> Vec4 { + self.lighting.ambient_color() + } + /// Enable shadow mapping for the given [`AnalyticalLight`], creating /// a new [`ShadowMap`]. /// From e48ca611cb2a5954b81752b8cccf6f232f948a05 Mon Sep 17 00:00:00 2001 From: Schell Carl Scivally Date: Sat, 21 Feb 2026 12:49:35 +1300 Subject: [PATCH 2/2] regen shaders, add ambient light test --- .../light-shader-light_tiling_bin_lights.spv | Bin 26732 -> 27044 bytes .../light-shader-light_tiling_clear_tiles.spv | Bin 4576 -> 4988 bytes ..._tiling_compute_tile_min_and_max_depth.spv | Bin 3976 -> 4372 bytes ...te_tile_min_and_max_depth_multisampled.spv | Bin 3988 -> 4384 bytes .../light-shader-shadow_mapping_vertex.spv | Bin 32528 -> 32528 bytes .../primitive-shader-primitive_fragment.spv | Bin 108156 -> 108860 bytes crates/renderling/src/light/cpu/test.rs | 59 ++++++++++++++++++ ...ute_tile_min_and_max_depth_multisampled.rs | 10 +-- test_img/light/ambient/default.png | Bin 0 -> 11982 bytes test_img/light/ambient/orange.png | Bin 0 -> 14920 bytes 10 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 test_img/light/ambient/default.png create mode 100644 test_img/light/ambient/orange.png diff --git a/crates/renderling/shaders/light-shader-light_tiling_bin_lights.spv b/crates/renderling/shaders/light-shader-light_tiling_bin_lights.spv index f1f6ecd707233f8d6c3eb74009ad7ceb769266d0..e71f75f547d22f36da391af8cce79ba42b5b1411 100644 GIT binary patch literal 27044 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 A&;S4c diff --git a/crates/renderling/shaders/light-shader-light_tiling_clear_tiles.spv b/crates/renderling/shaders/light-shader-light_tiling_clear_tiles.spv index 396bc2713b3910c8ae488921f64b5d9161f2390c..f1dedef1767f14d538c66c2bd01e1bdad507cdce 100644 GIT binary patch literal 4988 zcmZ9PS%{WZ7{^~{Mn{_|9hd5&2F)&7%uKCxbhKG)f-J`tvjs#_RIrG&y0J7hi&7{k z3MwipN`s0BO1tR8rLY#85M z3?5Vz#qi?m1{OwJ(NL&yJv_Q7T8bfcxo_^xb0@A^y=3ClD<|o9R?+BE|2rK1V6Y)p zu2{Bwbw|gl<%^dry}zTQE-qTVV&#f^mo2(`<R7oL*so|R zCWD7C_3MK%g;n3{*iGyhKd{twqe^_b&hw}nh|^SGTaeFV8fy%zqsmhk-cWG-++RQQ zjIOcNQ7-aqs-JBfSbpRSzz#X*48Z^Gr!M;?wz}+hZiSoulD~eQ&Ai4kvxj%0?!r=M z42L?0e(JJs&Z#c@wpRSIulbE($EmDinU3>0wfCj2y}T>svG`rdY8>zEY;0H6^#yfk zDy{}AoBt?woyIy2pXsdPOUr#a!1hAqnP7*q{LZ>m6r+hT3+%qLS>4y1!s`MLV!C&C zY4fbH_kfk#vD;5_otKc4aeJ8;mv|01ygu+L#vp9+uCLf`09(8G-Uzma6N={g`R9Sn zzdEgNKf19@^EIyf&u5zZO|0f+T+ezltA6Tdl(IEdmwgw2_^f$fnA{IwPfnby_W zPPKgl>Qe{nY;5n-eXVVKF|^*#-edeyGgtSPx0rcg|Nc(n+Fz&pCdZE{zIjL9j@(?4 zcOcuRv44U*td!kn5Avx~Yv*|;_t=l@-FT)6c=}cjptI(&#qR2zcz@+Gd-cxx%U-XclcUW$vi{cAx*exi*0I_%>ra!_A7xM9 z%co4^*jK(Cedm`wT?1<$%uElr;A0P4e|vQ#vcq20*2-*Sy03VB8EZH=ybsXX`y(84qRjUCd2(69Ip0oe*kMsZ~q8Zm;T+w{^sT$ z_PgKV-RP{9HqR`_d*8|Gz3o0tR&O83JZ5>sDm#4t2htZKZBdsq;Je zE;{v&^!$6JuIl$r$<;M}QxM$8abGd;-I|Vo4 z`#r=mw=VSBw!^jWyGz-BN9-tdJ*CdyMSoA^^@8=CS;mNd4m$n&N}rtL2(rIZ=CF~t z#`uY;UQYaeM%K@f{`du~ueSHgoPGtXw~oHc-@p#vrMBOhe=xmYalR|Zz*XK~$PRhh zj@R)3Pi&v)W1JJL$^9hQel=F|{0Hn^Ype3)+fSa^0$3Yk>u=2Db_-m;UB>lHcOpB? zP1~)^JDBDo&Npu%IJ|uGZb#={+RVjR^5j=#_4(%A1(s**Ug-LoM}wEfFb{nik(-#t z6X(tP-@v?C_s*Lg0@ju~HG{Qxv4lGmIb7}G4g+fo_YAPyo(i`GIb7}Gwt}^VdnQi4Y;Ib7}Gjs$DVH)$_5GoE_CN#_!3A3F8c#xt6$_hPNB ztM#qQ>b)nq%O zZvt|7+U2RM@-9P`XWi$Q-;asNo+Bf9T#hdBft!*m&MW;$4B9c$yP$GD70X zGoCvAt?x8e>+PC1`XO=6zX9Dx;11S5i>6{atJooT23W3Z-tcPt7uEU%iYIVYyIljk{&k^MaH7G%$?%~;y<8_-Fv+8xo&Ds?RN z-~N8q*$Dbtn`<;M{^pIS?<(bPR$&i+tc!Z{)n8eARn{-Pb1gW%30X)%bJD{oTj@abH*OQGa{S-cs+XpTB3y{)Sa$^(Q&eH0HlOgxmQ5 literal 4576 zcmZ9PS*Vs(6ox;iw3M8+(L8G9lr*TxaXQBiC~2j3X(f`ThK8val$AwP6jTaz6OI{RJ2yY|{^?{ELwrStIaRku!6RrRj+ zcV=SrtvXj)oR1Eus-D$(4SnXE+vkj1vv%>g@e{5!?!u~zQ{!)M_}##!Sh0NRvbD|4 zYnClqykvEAb3v`;R&XQnOd&I9`$jpeWVnUB~DWe6Se zY_(@E_SRhX+;!~Fkg9v*ekCS*c6J>(3y@C^9hz!R&$?r5>UovsnK$}obZbtYtv0u& zZ$m$O_R-s{-<-S9?WOgPt$H--+Knyt_?*X5xBJ_Je?GG@_S#zYS?AuuO;4OBvX*xV zS7Ug$PNA)0Zo}uk*CFo1F_j&71`iz-TA`gLsDtb)^`UOCe@!TLQz&*e1dar51nUd;eXv~bU)KEq9IpOwKLqPrU$wt=AAz;yp1#HU z*5(>>%bT+Wo4wNKp5=J%o~7sJ`PFsp-UHvOj}iHvt#6mH-ckGi0=j;OwtmbTi;b&s z?k>NGO}iua`=w&5$89QHLlbuiit9L5l|5gIu047aSnku*;QK!eY>f6^yjR*rfL-hS z;$KNF->Z?>^&Nogy&qL{-~NNeHoDk+|9v~iZJ;3h{i!`5pKgT<3j*?vSVN z2yzsWC-z<#qpm%*e+!<6m@9RD2llM>)p_#0Pwx49qzyTO7;nzhHW}_Zbo08W8R!mc z(>DcaMXW`fH*Y#Pyu5iW*j!7WwU|qu{JO3^Z{AH{d5v}88fzUtSOmj5jQJ7#6JkDb zzS*C_`DR@^-|R17ed*J$VExmOaDM}bt3TY|!TQ4e11z@%3HMKMxcb9A2G$quUtqcQ z_w6`(xcb9A0oE7pNwD0_>_6+CLJwDexTnGT@+NJEV?OP^NrRbpVAF1I+@rO6F812K z+TXga-E)$A0Uwckd+)!Qj7?3w@ujBr9(Sp3I$KH#~2T#S-@ z^312rc>8+=v;B6?H~KPlTE9Ji1>A)1MAfw#$}D!s9R`-`oNssm@$${@x3dQ9@Y~UM z2XYr8PduM~_`7i@*fssXh{ODHjWga{E0`V0wFLd15+jylj2!Lh*S%o-XI=FeW3%U# z;5Krb$M`z`essBhuesB!i!QHTt2HO5y_4rY&5`xo?^<;Ctj}Ef@*6OMTJ<|(yRz7r z8o&LsnXf`I*4|vLgYh@ti1v|1AH^&j%^&-s-Fl5z*I(C-%U!$%oV(-t-W_fBsm?Li zaei6-{Tv6L!|Xb(%;ulLY+gCuAJ=vE9F6zxdAGDX8+RCvy1!v{UHd=mXcF=-D`3{4 diff --git a/crates/renderling/shaders/light-shader-light_tiling_compute_tile_min_and_max_depth.spv b/crates/renderling/shaders/light-shader-light_tiling_compute_tile_min_and_max_depth.spv index c6fff5501dab8914619daee6e5e774ceeb1f7d1b..249543cdff7b4bc754a9491f3dacd5fab566b0a5 100644 GIT binary patch literal 4372 zcmZ9OTW?lX5QZ0Rp_~MflYp&7yaBOdA_NPCwj7EIwrCVJ!bh=%7AO)ZY5)Tw7=M8N z1rv=TdL>2#iD;CApwZ~1KY*BMv;`&jJiBYi)|Jk;-Z{^jHGA(?SIwzSBS)l^CZ_MJ z*jSTNRZ`;q>y(tnrBManzV^wrje7^W8y{M@K)VU4+O7DVn5L$YU_y^ ztGj1UQ&YiK2KsjP?b=p(;l=*l`v!Vsdn)~XyDD9~x-0!%uT;8wb`SIp$EqQQv2G`? z@g@~mJ`LBAYSI$$C`j9ODp<;{?HWAAt~tY7A)A@;|7D(2*>IeiBJVi(yC7rDVt1AO zl!f1DaM+n&JL?Qtb(Yaa>Z~bxH5;sd@b`dS`qT}>|Kw8^`69Nm$aiPSH}XaO+IcqX zYJeh#{Z)1^WF6XAmobBnx~8ISM&1Cq>Nth{S5}{UFW-ROGWPM1cQ6gz@xBQ!D#yY}(kx_vJh*z}{`}tH3UK{Z|)UN>hl@4mR%^cJo?O_&o|90h#-;tn+-K zUkjG6NAG;-E6t-OL1K2vtWFMbF)&NCa&w|Zq zEYI;=)+t|-dGAX5$n`vUY>D3p)@DAxo^umq&m?`!S%F+L(wNl6ZXb;)#R_a4Te48w zdTzs+H+J+%f9vzUt=-<&r_sgywt&Mfdg^X1`t5)&UbxV#zj>SoSDbH;48_dN_wX5) z6uMJj?SuauzP7}lhWD8a{TcW%nK$=Y_>>NJsFyzvfAi*{4trF8+W-2kf#yDH8Tc0O}qSB+d<*o`XL`Fw?4Epl~XH@0NwJcQji zbxWSZ*T3}HRjVfD&~~E%q#zsoOSFAu{Dk}=JVs6tH>I|v#M?$^Z;aD@sS+sesK7GjLg|@L}m_k)@LmJ^e^+utyiB1!TK57=S5rVSWFz3 zb!hW2d=q3maoo)kaNLc#<8GFM)g8|DHiOmsyoB#E`0!O9zRSVtyer?mEnwp*k9e(M zAs;oA<@*XJ*M*T9Fb`tW@OtS)@l zf%Wy74ByA$!&iOyc7WBzY^8idjCHWo)-(oiM(mU17IA%XE+Xd;*!a>cVal2Ig_a`@Mop zJ9Wd%cJ@9^;)s5#nq}^6{*n-selc5>D z53KGazCOF#Gw=UepJv&PEc5&BH&MTxU~T=T86)KVVD0^$Yx7=?v6tlDulDxlC5vI% z8+H32W%fdBZw523{0-um_hqp6XDs6!fOkcl{qV|+BQD2L9&rwWy({DFrUrX70Cp~d z-=Fnwl3V=&cx{wNUta~|Qv6?}KKl9^SY7n>Nao9ZeLc&{eLadyTl-{;=<6}C_V!hq zqq!f4NbXtG$2;LLymEUL?}WF&@lNnv5$}Yzk*f>e_rc1_@39Zy!&iOy9tW!n-w(n1 zo}!k>djdXu)rap#V0H0ao(5aDa_{vFyUTl3_XTto@?OQ>t2Xk=qaR;_J)g0nu5(~( zRaf@Y-*=UB^)=Yu8e4l~hW|U9N4?*f6M3G`!z=T9X}uT0F6&h%e+jZaaa;a>@G?01 zq5svK{|Z>0-<~~?&r#(10l76qt{>rD=29pB6J#!PmS-Z~ bhiu literal 3976 zcmZ9O%WqXx6o*gCrBGW%B4{wu^x+FA6%#?cSfNd!Ef!lvQ53jVT4@t5Hc}G@7zt5> zubC#Is2CK}3OE>GGt=X;%F5sdNZWoYSjVpI0G?u3M{UbxOA@|Z<~fzs;*|2dP4G8B#=4%} zRrFI9e)GX$XMXLhGh}m;j5bndDeqMqSpVSL!7hEw>ni3`c6mN!k*^sXzL76#(9W|N zFKUpt2K}u;K5AGDcQ<@1>a%<+cHQjew%^yHyC;`t*>&jFgXN8V4VgBu zw_(%6E?$xH^n#sZ@O@y{B78Qon`aZdd8{Gq2EcWYxdxN2zM$U>mTy7t?DdtFQ-g8u zg(B7#@I_YeTjA}Wy?Btl6^dLBfsJFIt!-PU{?-8)FPJXR*JLEYfZOri~ zuV0@=ZdpbWhi7>>f>89Idn(B<_i98c>N>xQ3sM891i}Yoc~{c0{-H~=ZEc+HO|00 z8~fCm&ChF}MHceVxp#6ld+-T*`>Ty}^gL^bw}Bl|zIymQ5BC%MIV%1xHTEB{xxR;2 z@7{;6J^C5)Y_4uj<-C7^oa?9jdZ&KCUb|jshM6ckNmAwZ$vbDh-`HJ$6G#2;;6EU9 zihJ<&&i@IS)0!mnTFY5TUD%xihn>$w*qsNf3%d&iJD-oR`xmS(?CPjD;yKf>t4FRb z?EGwmowE+R2IT6(ZhpbeXCdqwk*gb_f6n`TVt6*|9!c{)hD^CNn%~&^{Y9_rqdl{C zMPB*Ybk~<+YYhA9-O=`b^4Z50bm~iB=hBSczLy$P(| zyAi%O!-uc>@Vy1B&YAc=xfN_YZg*m&Ndh_@U*;;D~#E5Pc)w-c!iTT= z@a+Pt3*Xzo`g+&GcNKj2st@1W!Ro?yHCSKoU-+(p4`21+dnZ`kfvomUTnknf_w+dV zt<4-G>AmwIGJB=YGwb8rouzYYzl>MzJ@B2i9<0B!_5G!-chvsB0k7T__x8;sW4k2l zgzb#Q!24Q(8)eSbn>WqD#N|v$J4MQW4vBbvKMqasd+JXID#3->>=%fE{l;M?mM*i||s&)8X zdjLQ6t{0Q62i|Xzx@O+F+V#T2=A^z#2HzDM!Ro%o*JpQA;{AqwlVtr#c7omazkUN? zZTnJ;kPjl$-fx#Svnj@7BzL~r+nZe$!?HK(c0$VRh1lNs{gPMy5^>C10Xsiq8D}@V zE8;u>uS`F2F^=+xGX{26#+jl9do%*}UIf1_=?{}z{loCuD388w2jjwjH#L3qbtiIl z(brvxFZQ*PWW~Ndj!awoWQ^$RC|G;@s?7_jAA3mdS=7fnVFF&cy^43j0dTw%ir=c| zkgE&d!(e4ch!?&u!-uc>c%QriRu{gng7q!F$6kXEU-jYpI#^vim+yeBTe)*R%IfVLkgPg0_xoRV?Jo<4A?D>opb$tM~R&_-`{e4$?ua1N5t+BN?X80eX7wY}ad`{ne zPCkZL=J(QiXTUD&RVP0SS)aH!{qJ)U9Q~;I*Ycl2uFh{y74kWXT%RGghRF2=yvtnb zx&FNm$``ljOsaOmB2mQ5n A#Q*>R diff --git a/crates/renderling/shaders/light-shader-light_tiling_compute_tile_min_and_max_depth_multisampled.spv b/crates/renderling/shaders/light-shader-light_tiling_compute_tile_min_and_max_depth_multisampled.spv index c29a469ba67fb0edc698fae29256d61ec7f847f3..ecf5500abb984dccb167a9427f84318b1b86e491 100644 GIT binary patch literal 4384 zcmZ9O>uZ-~7{?#yJd20YGR-x$0;f)`G?`f*Dy1~1<}v55;ig+|x^kA8rkO?%6;x1v zK~PjguQIYE(z5LMrUOMp6h+wKMa+t@&*#~F$z3IzHEZJP_ zVtDas6$fi%QB}xzemklth7|ovdGXR!OY3)bx71%XYle2iioPD@-{HlWq95209qn7& zx*HmHwl%l3-qp}hik0s6j`rKp%bHV-D+AhZH8cuDO;3;-Z>OD$sY{LKN zd}g`cIMrp|A;=fAjWv$bmHWws-#~EKnO{5W46bkDXeo78m(Mo=tbfQ8!7hEq_rm|= zlZ$*2TQ2gA$$TSU)UTb-W?i-H$YFowE@fMXHr8d#kfW~AXy?J#vR&hO3i~ftlX|aQ zi`})HL)qTJ1?a9T`J%WG-F&dJxy~ok0?rB8EaVhVNqH85z1xs)0K1g+zp<2xViYkJ zgU!2y)4bLcem8;pu+4pQ()oO$UkX;PLGOI%>#n0F<1S-|?Q-y0R>-T7?RCg&z~0T& zVnF$vYr)o;Z~M3ou9h8jtp}UaSU$&wq?4bUWbaD*$h8qXIFp;e+DzrI&$)?h&)oW$ zv%+>=R17LMbJ|B^x?MT8j+S1!w5{PboOxqMpY*pr@7vn#eN8d2oZtE2u#290T8n<$ z*dLraH7}m$PGk!(o_U=Q*W`2$uX9OZdlalb|6|i>&N*Lf1T4R5@_dKJjY$heF7(M z@0?@v4a3Iu7je`NM;^g8r+5LrzDFa$=Cmfad9CFcVbpX6HK> zcH`jHgW(Hmif(wR~LR)gXJ32 zw`dO7+O5Nw>KmCI=lwWwyjSn6G0po4IDOQ4NA};|+P6QM73avAadvW9{tt5c&MX5P z$GP(T(RM|e>07|+^BJCujWcZjoz)r0E@xF;9eX<4yyAl?)--VVy#nX#*Tb1Zo%I<@ zKmBuA-g@9d~*wSlxkC?`p7m-#8V&fZUd_e-;H2>eb>Ub2|0Y#hwmn^ zy6~-l_4WM=-`kPHSAF<4gVlv^D_CFO$?)BR9KPzqcPm(3%yt`CF6Q?n`K`?y&b!~@ z_u%Z6I-gk|@7=rf-n_qDmUj;H-2v9$yY-u{t#fPtUqx2$idjCAIF55%BZA*(SJf*ip3~b%<-s|U_F7H*{7wj+D z-mBPq)kax9`tcRm=QCE+^)=X9)#ZNr`>k@Wz5&}?V{32B@PC%)QSa}}%W0m!LzeUR z(t5w=bXl)D(W{zoy*3!>h}48za6=#?E8PEAQqsr)RG3LH>ugVh;OX7T2q7 literal 3988 zcmZ9O?Q54+7{|{ZoK9ydsiowY`Knr@7b*JF>9*z`O54KH4Dz?t=C;_@XtSaOMJoCO z6f%M=A3%E`dLrvZ6h##CRlN@S1EN>a6Jejvy>r>k4xF9u^}Qa?bFV(GNOfxX`Rd5%%-nc&>e%Gm z#O(0Y%;e}u5x1Ur#$8Pf#$Hok<+M;!s!tVg15?{xymqo`+lQyvv1MT?xD6RE=G?Q~ zLY(>{?+WDGn8w=3>L~lkh2Ju8*qL8D>kO_gbF`E?>x=zu2J0X4?O=yK=5>_w$t}(& z7x|jN;T!p)2JPIN@uCK0YtY{sl%s}qNV||*n2t?UY_H{-bDx!4uxn>ExBXs^Zg;__ zbPKvYU}a<9Or{Rj&DeCZitoyKy1<@e$lYMaT734hnx}`=Jk}6)ec&3Vx%#uNwxquw ztlW&=v)9*oCp8%N0cOP755CR_`2e#0vlkDuwlE{tBVgm$XKOo{b@Ds2?A_Hq;yntM zYvr%C9%i~vr#9wzjOo~r8q*P0duI%%qm0d4U7!owW;*DdGhUe6f)K z*Iz=ue*MINeX_>O$exXTYE8?E+ONO`A3E1o_GS;>L2rMx@f_XHHsW=#LKUNvzke#R zuRo~xN1My|2W+mNkkz|(<7F5R1>on3j}4RD_8`~3Az{jALF0$=7#cVbA$<8wkyN&Sb!fsQ^&a)1?W_WdB*HW_cw-9!l;nfY&KhOJ3Vz@W!9?a)`4o==0 z&2Mb|{-Rg*(Vp46vMm35zUy1T#;~v69c>>XpMBg0R$mYHT$<23JQvTbL3^e-#HX@f zBRJ0aLpaZQIh^s-S&OlX+7`+3)~3%&uztq&ZkWqDwiCx;9optb-+r*V@ZAsA*ZUW~4?+ z-o!z$T-?+1_DjCLBH^v-i8cS?!ZItCbC%=(9h*8g4rH}rY8|Swd+DgET;M?GWb^P1*^M?ufN@%Ec*@nJafI7 zyTt1IuU{Wn+wL4A_*Mh1qOV7?T<&W%bLGAc!D(xsj1heu25WC$wRtJ`;{?gwi~4vIP9n?Ot9TPm zgX2vof2+>Gs|(+AV7arz3*Wbp!&iO0CvSt*h3|Q=zU6o90&@7O58sPmb@99W2yET* zp6kb~4$oEHC(KWoo~zh%)kax9`tcdq{TVCjx(c>db!9*OeXG1zUx4kcv9&j5_@AN| z>iy1qkni)C$Z|`V*83H!!+O;zf6cT$aaaD|=NoYJL;qiM{%^tR{Py_2slTJh^&Px5 zM6U0V9p+M}`~%Zm<}BZNb&-1>9J!76Th4tAUR^o2G2(49b~&cJ@(`;zUCVlZxBsS^ Hw4M1M0D^H% diff --git a/crates/renderling/shaders/light-shader-shadow_mapping_vertex.spv b/crates/renderling/shaders/light-shader-shadow_mapping_vertex.spv index 9ed8e4cff9c6bf68cf090e3b529afb61cb4595c1..c8f4f018ff8ebd24e20411b7f3d9874ce9907a2b 100644 GIT binary patch delta 10383 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 B9R~ma delta 10371 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 diff --git a/crates/renderling/shaders/primitive-shader-primitive_fragment.spv b/crates/renderling/shaders/primitive-shader-primitive_fragment.spv index f3f93a2e6cd95c756bb75244bd7058dc3a879540..0fdbf28d761731ddcf21871fd14078e4cb6e6336 100644 GIT binary patch literal 108860 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�oWe%k?^!+V_vy;L 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 Soc^ozA4gU{kdtnsl>Y_FY;Irx diff --git a/crates/renderling/src/light/cpu/test.rs b/crates/renderling/src/light/cpu/test.rs index 254d610a..af6862bd 100644 --- a/crates/renderling/src/light/cpu/test.rs +++ b/crates/renderling/src/light/cpu/test.rs @@ -772,6 +772,65 @@ fn snapshot(ctx: &crate::context::Context, stage: &Stage, path: &str, save: bool frame.present(); } +#[test] +/// Ensures that setting an ambient light color produces a visibly different +/// render than the default (zero) ambient. +fn ambient_light() { + let ctx = Context::headless(256, 256).block(); + let stage = ctx + .new_stage() + .with_lighting(true) + .with_msaa_sample_count(4); + + let doc = stage + .load_gltf_document_from_path( + crate::test::workspace_dir() + .join("gltf") + .join("pedestal.glb"), + ) + .unwrap(); + + let camera = doc.cameras.first().unwrap(); + camera.camera.set_projection_and_view( + Mat4::perspective_rh(std::f32::consts::FRAC_PI_6, 1.0, 0.1, 15.0), + Mat4::look_at_rh(Vec3::new(-7.0, 5.0, 7.0), Vec3::ZERO, Vec3::Y), + ); + + let position = Vec3::new(1.1, 1.0, 1.1); + let dir_light = stage + .new_directional_light() + .with_direction(-position) + .with_color(Vec4::ONE) + .with_intensity(Lux::OUTDOOR_FOXS_WEDDING); + + let shadow_map = stage + .new_shadow_map(&dir_light, UVec2::splat(256), 0.1, 15.0) + .unwrap(); + shadow_map.update(&stage, doc.renderlets_iter()).unwrap(); + + // Render with default ambient (Vec4::ZERO) + assert_eq!(stage.ambient_color(), Vec4::ZERO); + let frame = ctx.get_next_frame().unwrap(); + stage.render(&frame.view()); + let default_img = frame.read_image().block().unwrap(); + img_diff::assert_img_eq("light/ambient/default.png", default_img.clone()); + frame.present(); + + // Render with orange ambient light + stage.set_ambient_color(Vec4::new(1.0, 0.5, 0.0, 0.3)); + let frame = ctx.get_next_frame().unwrap(); + stage.render(&frame.view()); + let orange_img = frame.read_image().block().unwrap(); + img_diff::assert_img_eq("light/ambient/orange.png", orange_img.clone()); + frame.present(); + + // The ambient light should visibly change the rendered image + assert_ne!( + default_img, orange_img, + "ambient light should visibly affect the rendered image" + ); +} + const MAX_LIGHTS: usize = 2usize.pow(10); #[cfg(feature = "light-tiling-stats")] diff --git a/crates/renderling/src/linkage/light_tiling_compute_tile_min_and_max_depth_multisampled.rs b/crates/renderling/src/linkage/light_tiling_compute_tile_min_and_max_depth_multisampled.rs index 8fa577ac..9c1af43d 100644 --- a/crates/renderling/src/linkage/light_tiling_compute_tile_min_and_max_depth_multisampled.rs +++ b/crates/renderling/src/linkage/light_tiling_compute_tile_min_and_max_depth_multisampled.rs @@ -6,10 +6,7 @@ mod target { pub const ENTRY_POINT: &str = "light::shader::light_tiling_compute_tile_min_and_max_depth_multisampled"; pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> { - wgpu::include_spirv!( - "../../shaders/light-shader-light_tiling_compute_tile_min_and_max_depth_multisampled.\ - spv" - ) + wgpu :: include_spirv ! ("../../shaders/light-shader-light_tiling_compute_tile_min_and_max_depth_multisampled.spv") } pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage { log::debug!( @@ -27,10 +24,7 @@ mod target { pub const ENTRY_POINT: &str = "lightshaderlight_tiling_compute_tile_min_and_max_depth_multisampled"; pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> { - wgpu::include_wgsl!( - "../../shaders/light-shader-light_tiling_compute_tile_min_and_max_depth_multisampled.\ - wgsl" - ) + wgpu :: include_wgsl ! ("../../shaders/light-shader-light_tiling_compute_tile_min_and_max_depth_multisampled.wgsl") } pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage { log::debug!( diff --git a/test_img/light/ambient/default.png b/test_img/light/ambient/default.png new file mode 100644 index 0000000000000000000000000000000000000000..23ab92d03d8c455e9e483a930b7e563fc12c9d69 GIT binary patch literal 11982 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 F{tpdCmvR6A literal 0 HcmV?d00001 diff --git a/test_img/light/ambient/orange.png b/test_img/light/ambient/orange.png new file mode 100644 index 0000000000000000000000000000000000000000..7264228e2ed1b1a074098af0b1172b827c42128c GIT binary patch literal 14920 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 QB?5niE{_PV3le7kA4`yzEdT%j literal 0 HcmV?d00001