Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/closure_eval_diffuse_lib.glsl')
-rw-r--r--source/blender/draw/engines/eevee/shaders/closure_eval_diffuse_lib.glsl14
1 files changed, 9 insertions, 5 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/closure_eval_diffuse_lib.glsl b/source/blender/draw/engines/eevee/shaders/closure_eval_diffuse_lib.glsl
index 28aaa6afd44..1e65d3ccb87 100644
--- a/source/blender/draw/engines/eevee/shaders/closure_eval_diffuse_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/closure_eval_diffuse_lib.glsl
@@ -10,7 +10,8 @@ struct ClosureInputDiffuse {
#define CLOSURE_INPUT_Diffuse_DEFAULT ClosureInputDiffuse(vec3(0.0), vec3(0.0))
struct ClosureEvalDiffuse {
- float dummy;
+ vec3 probe_sampling_dir; /** Direction to sample probes from. */
+ float ambient_occlusion; /** Final occlusion for distant lighting. */
};
/* Stubs. */
@@ -26,7 +27,10 @@ ClosureEvalDiffuse closure_Diffuse_eval_init(inout ClosureInputDiffuse cl_in,
cl_out.radiance = vec3(0.0);
ClosureEvalDiffuse cl_eval;
- cl_eval.dummy = 0.0;
+ cl_eval.ambient_occlusion = diffuse_occlusion(
+ cl_in.N, cl_common.bent_normal, cl_common.occlusion, cl_in.albedo);
+ cl_eval.probe_sampling_dir = diffuse_dominant_dir(
+ cl_in.N, cl_common.bent_normal, cl_common.occlusion);
return cl_eval;
}
@@ -49,7 +53,7 @@ void closure_Diffuse_grid_eval(ClosureInputDiffuse cl_in,
inout ClosureOutputDiffuse cl_out)
{
vec3 probe_radiance = probe_evaluate_grid(
- grid.data, cl_common.P, cl_common.bent_normal, grid.local_pos);
+ grid.data, cl_common.P, cl_eval.probe_sampling_dir, grid.local_pos);
cl_out.radiance += grid.attenuation * probe_radiance;
}
@@ -61,11 +65,11 @@ void closure_Diffuse_indirect_end(ClosureInputDiffuse cl_in,
/* If not enough light has been accumulated from probes, use the world specular cubemap
* to fill the remaining energy needed. */
if (cl_common.diffuse_accum > 0.0) {
- vec3 probe_radiance = probe_evaluate_world_diff(cl_common.bent_normal);
+ vec3 probe_radiance = probe_evaluate_world_diff(cl_eval.probe_sampling_dir);
cl_out.radiance += cl_common.diffuse_accum * probe_radiance;
}
/* Apply occlusion on radiance before the light loop. */
- cl_out.radiance *= gtao_multibounce(cl_common.occlusion, cl_in.albedo);
+ cl_out.radiance *= cl_eval.ambient_occlusion;
}
void closure_Diffuse_eval_end(ClosureInputDiffuse cl_in,