parent
574daf20e1
commit
df91fb329e
|
@ -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;
|
||||
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue