[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