From 3248cd3529978aab2d9c76ff759ca6277d9b9205 Mon Sep 17 00:00:00 2001 From: tolelom <98kimsungmin@naver.com> Date: Wed, 25 Mar 2026 12:05:08 +0900 Subject: [PATCH] feat(renderer): integrate SSGI output into deferred lighting pass Adds t_ssgi/s_ssgi bindings (group 2, bindings 5-6) to lighting_shadow_bind_group_layout and deferred_lighting.wgsl. Replaces the simple ambient term with SSGI-modulated ambient: ao*ssgi_ao applied to IBL diffuse+specular, plus ssgi_indirect for indirect color bleeding. Co-Authored-By: Claude Sonnet 4.6 --- crates/voltex_renderer/src/deferred_lighting.wgsl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/voltex_renderer/src/deferred_lighting.wgsl b/crates/voltex_renderer/src/deferred_lighting.wgsl index b1989a3..6553e8d 100644 --- a/crates/voltex_renderer/src/deferred_lighting.wgsl +++ b/crates/voltex_renderer/src/deferred_lighting.wgsl @@ -49,6 +49,8 @@ struct ShadowUniform { @group(2) @binding(2) var shadow: ShadowUniform; @group(2) @binding(3) var t_brdf_lut: texture_2d; @group(2) @binding(4) var s_brdf_lut: sampler; +@group(2) @binding(5) var t_ssgi: texture_2d; +@group(2) @binding(6) var s_ssgi: sampler; // ── Vertex / Fragment structs ───────────────────────────────────────────────── @@ -294,7 +296,10 @@ fn fs_main(in: VertexOutput) -> @location(0) vec4 { let brdf_val = textureSample(t_brdf_lut, s_brdf_lut, vec2(NdotV_ibl, roughness)); let specular_ibl = prefiltered * (F0 * brdf_val.r + vec3(brdf_val.g)); - let ambient = (diffuse_ibl + specular_ibl) * ao; + let ssgi_data = textureSample(t_ssgi, s_ssgi, uv); + let ssgi_ao = ssgi_data.r; + let ssgi_indirect = ssgi_data.gba; + let ambient = (diffuse_ibl + specular_ibl) * ao * ssgi_ao + ssgi_indirect; var color = ambient + Lo;