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:
authorClément Foucault <foucault.clem@gmail.com>2017-06-14 19:52:53 +0300
committerClément Foucault <foucault.clem@gmail.com>2017-06-15 01:55:45 +0300
commit0ca2f5affde8cb8ce7fe4e93ae27063c7c577933 (patch)
treec7c42d9ea75f5025224c17385d6a762112c2111f /source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
parent26e710b1fd57919a057306d39dcc8e6a04bb64a7 (diff)
Eevee: Irradiance grid: support for non-blocking update and multiple bounces.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl')
-rw-r--r--source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl15
1 files changed, 9 insertions, 6 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
index 6bd2e3f4822..f539327abc4 100644
--- a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
@@ -382,7 +382,8 @@ vec3 eevee_surface_lit(vec3 world_normal, vec3 albedo, vec3 f0, float roughness,
}
}
- for (int i = 0; i < MAX_GRID && i < grid_count; ++i) {
+ /* Start at 1 because 0 is world irradiance */
+ for (int i = 1; i < MAX_GRID && i < grid_count; ++i) {
GridData gd = grids_data[i];
vec3 localpos = (gd.localmat * vec4(sd.W, 1.0)).xyz;
@@ -440,15 +441,17 @@ vec3 eevee_surface_lit(vec3 world_normal, vec3 albedo, vec3 f0, float roughness,
}
/* World probe */
- if (spec_accum.a < 1.0 || diff_accum.a < 1.0) {
- ProbeData pd = probes_data[0];
-
+ if (diff_accum.a < 1.0 && grid_count > 0) {
IrradianceData ir_data = load_irradiance_cell(0, sd.N);
- vec3 spec = textureLod_octahedron(probeCubes, vec4(spec_dir, 0), roughness * lodMax).rgb;
vec3 diff = compute_irradiance(sd.N, ir_data);
-
diff_accum.rgb += diff * (1.0 - diff_accum.a);
+ }
+
+ if (spec_accum.a < 1.0) {
+ ProbeData pd = probes_data[0];
+
+ vec3 spec = textureLod_octahedron(probeCubes, vec4(spec_dir, 0), roughness * lodMax).rgb;
spec_accum.rgb += spec * (1.0 - spec_accum.a);
}