Fix: EEVEE-Next: Broken Support for SSS

Broken by f4275cc4df
This commit is contained in:
Clément Foucault 2023-12-23 19:44:24 +13:00
parent 574daf20e1
commit df91fb329e
3 changed files with 14 additions and 13 deletions

View File

@ -610,6 +610,16 @@ GBufferWriter gbuffer_pack(GBufferDataUndetermined data_in)
/* Check special configurations first. */
if (has_diffuse) {
if (has_sss) {
/* Subsurface need to be first to be outputed in first lighting texture. */
gbuffer_closure_subsurface_pack(gbuf, data_in.diffuse);
}
else {
gbuffer_closure_diffuse_pack(gbuf, data_in.diffuse);
}
}
if (has_refraction) {
if (color_is_grayscale(data_in.refraction.color)) {
gbuffer_closure_refraction_colorless_pack(gbuf, data_in.refraction);
@ -628,15 +638,6 @@ GBufferWriter gbuffer_pack(GBufferDataUndetermined data_in)
}
}
if (has_diffuse) {
if (has_sss) {
gbuffer_closure_subsurface_pack(gbuf, data_in.diffuse);
}
else {
gbuffer_closure_diffuse_pack(gbuf, data_in.diffuse);
}
}
if (has_translucent) {
gbuffer_closure_translucent_pack(gbuf, data_in.translucent);
}
@ -712,7 +713,7 @@ GBufferReader gbuffer_read(samplerGBufferHeader header_tx,
gbuf.has_translucent = false;
gbuf.has_sss = false;
gbuf.data.thickness = 0.0;
gbuf.closure_count = 0u;
gbuf.closure_count = 0;
gbuf.layer_data = 0;
gbuf.layer_normal = 0;

View File

@ -94,7 +94,7 @@ void main(void)
GBufferReader gbuf = gbuffer_read(gbuf_header_tx, gbuf_closure_tx, gbuf_normal_tx, texel);
if (gbuf.data.diffuse.sss_id == 0u) {
if (!gbuf.has_sss) {
return;
}
@ -132,7 +132,7 @@ void main(void)
SubSurfaceSample samp = sample_neighborhood(sample_uv);
/* Reject radiance from other surfaces. Avoids light leak between objects. */
if (samp.sss_id != gbuf.data.diffuse.sss_id) {
if (samp.sss_id != gbuf.data.object_id) {
continue;
}
/* Slide 34. */

View File

@ -32,7 +32,7 @@ void main(void)
float max_radius = reduce_max(gbuf.data.diffuse.sss_radius);
imageStore(radiance_img, texel, vec4(radiance, 0.0));
imageStore(object_id_img, texel, uvec4(gbuf.data.diffuse.sss_id));
imageStore(object_id_img, texel, uvec4(gbuf.data.object_id));
vec2 center_uv = (vec2(texel) + 0.5) / vec2(textureSize(gbuf_header_tx, 0));
float depth = texelFetch(depth_tx, texel, 0).r;