[Bf-blender-cvs] [6ab7f074956] temp-eevee-next-cryptomatte: Fix showing result during viewport rendering.

Jeroen Bakker noreply at git.blender.org
Tue Aug 23 09:51:51 CEST 2022


Commit: 6ab7f074956c061862bf9992c70f1d5d63a21668
Author: Jeroen Bakker
Date:   Tue Aug 23 09:42:43 2022 +0200
Branches: temp-eevee-next-cryptomatte
https://developer.blender.org/rB6ab7f074956c061862bf9992c70f1d5d63a21668

Fix showing result during viewport rendering.

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

M	source/blender/draw/engines/eevee_next/eevee_pipeline.cc
M	source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_lib.glsl
M	source/blender/draw/engines/eevee_next/shaders/eevee_film_lib.glsl

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

diff --git a/source/blender/draw/engines/eevee_next/eevee_pipeline.cc b/source/blender/draw/engines/eevee_next/eevee_pipeline.cc
index daf0fac7f0f..6ee79cd6ec7 100644
--- a/source/blender/draw/engines/eevee_next/eevee_pipeline.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_pipeline.cc
@@ -127,7 +127,10 @@ DRWShadingGroup *ForwardPipeline::material_opaque_add(::Material *blender_mat, G
   DRW_shgroup_uniform_image_ref(grp, "rp_specular_color_img", &rbufs.specular_color_tx);
   DRW_shgroup_uniform_image_ref(grp, "rp_emission_img", &rbufs.emission_tx);
   DRW_shgroup_uniform_image_ref(grp, "rp_cryptomatte_img", &rbufs.cryptomatte_tx);
-  float material_hash = inst_.cryptomatte.hash(blender_mat->id);
+  float material_hash = (inst_.film.enabled_passes_get() &
+                         EEVEE_RENDER_PASS_CRYPTOMATTE_MATERIAL) ?
+                            inst_.cryptomatte.hash(blender_mat->id) :
+                            0.0f;
   DRW_shgroup_uniform_float_copy(grp, "cryptomatte_material_hash", material_hash);
 
   /* TODO(fclem): Make this only needed if material uses it ... somehow. */
diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_lib.glsl
index b29967519c6..7b9a75387b4 100644
--- a/source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_lib.glsl
+++ b/source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_lib.glsl
@@ -15,7 +15,19 @@ vec2 merge_cryptomatte_sample(vec2 cryptomatte_sample, float hash, float weight)
   return vec2(hash, cryptomatte_sample.y + weight);
 }
 
-void film_store_cryptomatte_sample(FilmSample dst, int cryptomatte_layer_id, float hash)
+vec4 cryptomatte_false_color(float hash)
+{
+#define UINT32_MAX (4294967295U)
+
+  uint m3hash = floatBitsToUint(hash);
+  return vec4(
+      hash, float(m3hash << 8) / float(UINT32_MAX), float(m3hash << 16) / float(UINT32_MAX), 1.0);
+}
+
+void film_store_cryptomatte_sample(FilmSample dst,
+                                   int cryptomatte_layer_id,
+                                   float hash,
+                                   out vec4 out_color)
 {
   float weight = dst.weight;
 
@@ -24,6 +36,9 @@ void film_store_cryptomatte_sample(FilmSample dst, int cryptomatte_layer_id, flo
     vec4 sample_pair = imageLoad(cryptomatte_img, img_co);
     if (can_merge_cryptomatte_sample(sample_pair.xy, hash)) {
       sample_pair.xy = merge_cryptomatte_sample(sample_pair.xy, hash, weight);
+      if (i == 0) {
+        out_color = cryptomatte_false_color(sample_pair.x);
+      }
     }
     else if (can_merge_cryptomatte_sample(sample_pair.zw, hash)) {
       sample_pair.zw = merge_cryptomatte_sample(sample_pair.zw, hash, weight);
@@ -36,15 +51,8 @@ void film_store_cryptomatte_sample(FilmSample dst, int cryptomatte_layer_id, flo
       continue;
     }
     imageStore(cryptomatte_img, img_co, sample_pair);
+    if (i == 0) {
+    }
     break;
   }
 }
-
-vec4 cryptomatte_false_color(float hash)
-{
-#define UINT32_MAX (4294967295U)
-
-  uint m3hash = floatBitsToUint(hash);
-  return vec4(
-      hash, float(m3hash << 8) / float(UINT32_MAX), float(m3hash << 16) / float(UINT32_MAX), 1.0);
-}
\ No newline at end of file
diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_film_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_film_lib.glsl
index 6f6904698d0..e20553422f8 100644
--- a/source/blender/draw/engines/eevee_next/shaders/eevee_film_lib.glsl
+++ b/source/blender/draw/engines/eevee_next/shaders/eevee_film_lib.glsl
@@ -708,17 +708,17 @@ void film_process_data(ivec2 texel_film, out vec4 out_color, out float out_depth
     if (film_buf.cryptomatte_object_id != -1) {
       float hash = hashes.x;
       hashes = hashes.yzww;
-      film_store_cryptomatte_sample(dst, film_buf.cryptomatte_object_id, hash);
+      film_store_cryptomatte_sample(dst, film_buf.cryptomatte_object_id, hash, out_color);
     } 
     if (film_buf.cryptomatte_asset_id != -1) {
       float hash = hashes.x;
       hashes = hashes.yzww;
-      film_store_cryptomatte_sample(dst, film_buf.cryptomatte_asset_id, hash);
+      film_store_cryptomatte_sample(dst, film_buf.cryptomatte_asset_id, hash, out_color);
     } 
     if (film_buf.cryptomatte_material_id != -1) {
       float hash = hashes.x;
       hashes = hashes.yzww;
-      film_store_cryptomatte_sample(dst, film_buf.cryptomatte_material_id, hash);
+      film_store_cryptomatte_sample(dst, film_buf.cryptomatte_material_id, hash, out_color);
     } 
   }
 }



More information about the Bf-blender-cvs mailing list