[Bf-blender-cvs] [883e22a92ca] blender-v2.81-release: Fix T71050 EEVEE: Light Path Node broken in 2.81

Clément Foucault noreply at git.blender.org
Tue Oct 29 15:17:58 CET 2019


Commit: 883e22a92ca5b2b22bd441bedc6bdd1626980f35
Author: Clément Foucault
Date:   Tue Oct 29 15:05:07 2019 +0100
Branches: blender-v2.81-release
https://developer.blender.org/rB883e22a92ca5b2b22bd441bedc6bdd1626980f35

Fix T71050 EEVEE: Light Path Node broken in 2.81

Also fixes the sampling of hashed shadows.

===================================================================

M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/engines/eevee/eevee_private.h
M	source/blender/draw/engines/eevee/eevee_shadows.c
M	source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl
M	source/blender/draw/engines/eevee/shaders/prepass_frag.glsl

===================================================================

diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 701d73461fc..5eba1b6c808 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -68,8 +68,6 @@ static struct {
 
   uint sss_count;
 
-  float alpha_hash_offset;
-  float alpha_hash_scale;
   float noise_offsets[3];
 } e_data = {NULL}; /* Engine data */
 
@@ -609,14 +607,14 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata,
   }
 
   if (!DRW_state_is_image_render() && ((stl->effects->enabled_effects & EFFECT_TAA) == 0)) {
-    e_data.alpha_hash_offset = 0.0f;
-    e_data.alpha_hash_scale = 1.0f;
+    sldata->common_data.alpha_hash_offset = 0.0f;
+    sldata->common_data.alpha_hash_scale = 1.0f;
   }
   else {
     double r;
     BLI_halton_1d(5, 0.0, stl->effects->taa_current_sample - 1, &r);
-    e_data.alpha_hash_offset = (float)r;
-    e_data.alpha_hash_scale = 0.01f;
+    sldata->common_data.alpha_hash_offset = (float)r;
+    sldata->common_data.alpha_hash_scale = 0.01f;
   }
 
   {
@@ -1218,14 +1216,6 @@ static void material_opaque(Material *ma,
           DRW_shgroup_uniform_float(*shgrp_depth, "alphaThreshold", &ma->alpha_threshold, 1);
           DRW_shgroup_uniform_float(*shgrp_depth_clip, "alphaThreshold", &ma->alpha_threshold, 1);
         }
-        else if (ma->blend_method == MA_BM_HASHED) {
-          DRW_shgroup_uniform_float(*shgrp_depth, "hashAlphaOffset", &e_data.alpha_hash_offset, 1);
-          DRW_shgroup_uniform_float(
-              *shgrp_depth_clip, "hashAlphaOffset", &e_data.alpha_hash_offset, 1);
-          DRW_shgroup_uniform_float_copy(*shgrp_depth, "hashAlphaScale", e_data.alpha_hash_scale);
-          DRW_shgroup_uniform_float_copy(
-              *shgrp_depth_clip, "hashAlphaScale", e_data.alpha_hash_scale);
-        }
       }
     }
 
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index f4f40d40de6..32c0523474a 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -665,9 +665,13 @@ typedef struct EEVEE_CommonUniformBuffer {
   float prb_lod_cube_max;      /* float */
   float prb_lod_planar_max;    /* float */
   /* Misc */
-  int hiz_mip_offset; /* int */
-  int ray_type;       /* int */
-  float ray_depth;    /* float */
+  int hiz_mip_offset;      /* int */
+  int ray_type;            /* int */
+  float ray_depth;         /* float */
+  float alpha_hash_offset; /* float */
+  float alpha_hash_scale;  /* float */
+  float pad7;              /* float */
+  float pad8;              /* float */
 } EEVEE_CommonUniformBuffer;
 
 BLI_STATIC_ASSERT_ALIGN(EEVEE_CommonUniformBuffer, 16)
diff --git a/source/blender/draw/engines/eevee/eevee_shadows.c b/source/blender/draw/engines/eevee/eevee_shadows.c
index 46fc6e07c1c..1776f535237 100644
--- a/source/blender/draw/engines/eevee/eevee_shadows.c
+++ b/source/blender/draw/engines/eevee/eevee_shadows.c
@@ -365,7 +365,7 @@ void EEVEE_shadows_draw(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, DRWView
 
   /* Precompute all shadow/view test before rendering and trashing the culling cache. */
   BLI_bitmap *cube_visible = BLI_BITMAP_NEW_ALLOCA(MAX_SHADOW_CUBE);
-  bool any_visible = false;
+  bool any_visible = linfo->cascade_len > 0;
   for (int cube = 0; cube < linfo->cube_len; cube++) {
     if (DRW_culling_sphere_test(view, linfo->shadow_bounds + cube)) {
       BLI_BITMAP_ENABLE(cube_visible, cube);
@@ -373,7 +373,7 @@ void EEVEE_shadows_draw(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, DRWView
     }
   }
 
-  if (!any_visible && linfo->cascade_len == 0) {
+  if (any_visible) {
     sldata->common_data.ray_type = EEVEE_RAY_SHADOW;
     DRW_uniformbuffer_update(sldata->common_ubo, &sldata->common_data);
   }
@@ -400,7 +400,7 @@ void EEVEE_shadows_draw(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, DRWView
 
   DRW_uniformbuffer_update(sldata->shadow_ubo, &linfo->shadow_data); /* Update all data at once */
 
-  if (!any_visible && linfo->cascade_len == 0) {
+  if (any_visible) {
     sldata->common_data.ray_type = saved_ray_type;
     DRW_uniformbuffer_update(sldata->common_ubo, &sldata->common_data);
   }
diff --git a/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl b/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl
index c7ae2417904..7f255b0859d 100644
--- a/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/common_uniforms_lib.glsl
@@ -43,6 +43,10 @@ layout(std140) uniform common_block
   int hizMipOffset;
   int rayType;
   float rayDepth;
+  float alphaHashOffset;
+  float alphaHashScale;
+  float pad7;
+  float pad8;
 };
 
 /* rayType (keep in sync with ray_type) */
diff --git a/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl b/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl
index dea6bc020ec..b49dbfceba2 100644
--- a/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl
@@ -12,14 +12,11 @@ float hash3d(vec3 a)
   return hash(vec2(hash(a.xy), a.z));
 }
 
-uniform float hashAlphaOffset;
-uniform float hashAlphaScale = 1.0; /* Roughly in pixel */
-
 float hashed_alpha_threshold(vec3 co)
 {
   /* Find the discretized derivatives of our coordinates. */
   float max_deriv = max(length(dFdx(co)), length(dFdy(co)));
-  float pix_scale = 1.0 / (hashAlphaScale * max_deriv);
+  float pix_scale = 1.0 / (alphaHashScale * max_deriv);
 
   /* Find two nearest log-discretized noise scales. */
   float pix_scale_log = log2(pix_scale);
@@ -52,7 +49,7 @@ float hashed_alpha_threshold(vec3 co)
   threshold = clamp(threshold, 1.0e-6, 1.0);
 
   /* Jitter the threshold for TAA accumulation. */
-  return fract(threshold + hashAlphaOffset);
+  return fract(threshold + alphaHashOffset);
 }
 
 #endif



More information about the Bf-blender-cvs mailing list