[Bf-blender-cvs] [6ffc4982b85] temp-eevee-next-cryptomatte: Eevee-next: move towords single draw.

Jeroen Bakker noreply at git.blender.org
Mon Aug 22 15:49:48 CEST 2022


Commit: 6ffc4982b85450e466ec381af0ba3e9f445453d5
Author: Jeroen Bakker
Date:   Fri Aug 12 14:25:25 2022 +0200
Branches: temp-eevee-next-cryptomatte
https://developer.blender.org/rB6ffc4982b85450e466ec381af0ba3e9f445453d5

Eevee-next: move towords single draw.

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

M	source/blender/draw/engines/eevee_next/eevee_pipeline.cc
M	source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl
M	source/blender/draw/engines/eevee_next/shaders/eevee_surf_forward_frag.glsl
M	source/blender/draw/engines/eevee_next/shaders/eevee_surf_world_frag.glsl
M	source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh

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

diff --git a/source/blender/draw/engines/eevee_next/eevee_pipeline.cc b/source/blender/draw/engines/eevee_next/eevee_pipeline.cc
index 4be6613792d..93e9f418d88 100644
--- a/source/blender/draw/engines/eevee_next/eevee_pipeline.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_pipeline.cc
@@ -126,6 +126,7 @@ DRWShadingGroup *ForwardPipeline::material_opaque_add(::Material *blender_mat, G
   DRW_shgroup_uniform_image_ref(grp, "rp_specular_light_img", &rbufs.specular_light_tx);
   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);
 
   /* TODO(fclem): Make this only needed if material uses it ... somehow. */
   // if (true) {
@@ -208,6 +209,7 @@ DRWShadingGroup *ForwardPipeline::material_transparent_add(::Material *blender_m
     DRW_shgroup_uniform_image_ref(grp, "rp_specular_light_img", &rbufs.specular_light_tx);
     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);
   }
 
   DRWState state_disable = DRW_STATE_WRITE_DEPTH;
diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl
index c488216eeac..9d527d688c9 100644
--- a/source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl
+++ b/source/blender/draw/engines/eevee_next/shaders/eevee_nodetree_lib.glsl
@@ -261,6 +261,11 @@ void output_aov(vec4 color, float value, uint hash)
 #endif
 }
 
+void output_cryptomatte(float object_hash, float asset_hash, float material_hash) {
+#if defined(GPU_FRAGMENT_SHADER)
+#endif
+}
+
 #ifdef EEVEE_MATERIAL_STUBS
 #  define attrib_load()
 #  define nodetree_displacement() vec3(0.0)
diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_forward_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_forward_frag.glsl
index 48ced4e5374..076c6d81c64 100644
--- a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_forward_frag.glsl
+++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_forward_frag.glsl
@@ -89,6 +89,7 @@ void main()
   imageStore(rp_specular_light_img, out_texel, vec4(specular_light, 1.0));
   imageStore(rp_specular_color_img, out_texel, vec4(specular_color, 1.0));
   imageStore(rp_emission_img, out_texel, vec4(g_emission, 1.0));
+  imageStore(rp_cryptomatte_img, out_texel, vec4(cryptomatte_object_hash, cryptomatte_asset_hash, 0.0, 1.0));
 
   out_radiance.rgb *= 1.0 - g_holdout;
 
diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_world_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_world_frag.glsl
index ed75282a550..e8d08df824f 100644
--- a/source/blender/draw/engines/eevee_next/shaders/eevee_surf_world_frag.glsl
+++ b/source/blender/draw/engines/eevee_next/shaders/eevee_surf_world_frag.glsl
@@ -31,6 +31,7 @@ void main()
   imageStore(rp_specular_light_img, out_texel, vec4(0.0, 0.0, 0.0, 1.0));
   imageStore(rp_specular_color_img, out_texel, vec4(0.0, 0.0, 0.0, 1.0));
   imageStore(rp_emission_img, out_texel, vec4(0.0, 0.0, 0.0, 1.0));
+  imageStore(rp_cryptomatte_img, out_texel, vec4(0.0));
 
   out_background.rgb = safe_color(g_emission) * (1.0 - g_holdout);
   out_background.a = saturate(avg(g_transmittance)) * g_holdout;
diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh
index db3cfc4a7a2..7f6dbf2cecf 100644
--- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh
+++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh
@@ -80,6 +80,11 @@ GPU_SHADER_CREATE_INFO(eevee_aov_out)
     .image_array_out(7, Qualifier::WRITE, GPU_R16F, "aov_value_img")
     .storage_buf(7, Qualifier::READ, "AOVsInfoData", "aov_buf");
 
+GPU_SHADER_CREATE_INFO(eevee_cryptomatte_out)
+    .push_constant(Type::FLOAT, "cryptomatte_object_hash")
+    .push_constant(Type::FLOAT, "cryptomatte_asset_hash")
+    .image_out(8, Qualifier::WRITE, GPU_RGBA32F, "rp_cryptomatte_img");
+
 GPU_SHADER_CREATE_INFO(eevee_surf_deferred)
     .vertex_out(eevee_surf_iface)
     /* NOTE: This removes the possibility of using gl_FragDepth. */
@@ -116,7 +121,7 @@ GPU_SHADER_CREATE_INFO(eevee_surf_forward)
     .image_out(3, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_specular_light_img")
     .image_out(4, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_specular_color_img")
     .image_out(5, Qualifier::READ_WRITE, GPU_RGBA16F, "rp_emission_img")
-    .additional_info("eevee_aov_out"
+    .additional_info("eevee_aov_out", "eevee_cryptomatte_out"
                      //  "eevee_sampling_data",
                      //  "eevee_lightprobe_data",
                      /* Optionally added depending on the material. */
@@ -144,7 +149,7 @@ GPU_SHADER_CREATE_INFO(eevee_surf_world)
     .push_constant(Type::FLOAT, "world_opacity_fade")
     .fragment_out(0, Type::VEC4, "out_background")
     .fragment_source("eevee_surf_world_frag.glsl")
-    .additional_info("eevee_aov_out"
+    .additional_info("eevee_aov_out", "eevee_cryptomatte_out"
                      //"eevee_utility_texture"
     );



More information about the Bf-blender-cvs mailing list