[Bf-blender-cvs] [ae0c041c73b] temp-eevee-next-cryptomatte: Moving to single renderpass for cryptomatte.

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


Commit: ae0c041c73b3a49cb886f12c1be315d8060f8f82
Author: Jeroen Bakker
Date:   Mon Aug 22 13:38:39 2022 +0200
Branches: temp-eevee-next-cryptomatte
https://developer.blender.org/rBae0c041c73b3a49cb886f12c1be315d8060f8f82

Moving to single renderpass for cryptomatte.

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

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
M	source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
M	source/blender/draw/engines/eevee_next/eevee_film.cc
M	source/blender/draw/engines/eevee_next/eevee_instance.cc
M	source/blender/draw/engines/eevee_next/eevee_renderbuffers.cc
M	source/blender/draw/engines/eevee_next/eevee_shader.cc
M	source/blender/draw/engines/eevee_next/eevee_shader.hh
M	source/blender/draw/engines/eevee_next/eevee_sync.cc
M	source/blender/draw/engines/eevee_next/eevee_view.cc
D	source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_frag.glsl
M	source/blender/draw/engines/eevee_next/shaders/eevee_surf_forward_frag.glsl
D	source/blender/draw/engines/eevee_next/shaders/infos/eevee_cryptomatte_info.hh
M	source/blender/draw/engines/eevee_next/shaders/infos/eevee_material_info.hh
M	source/blender/gpu/CMakeLists.txt

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 9142616ce25..d527da0582e 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -369,7 +369,6 @@ set(GLSL_SRC
   engines/eevee_next/shaders/eevee_attributes_lib.glsl
   engines/eevee_next/shaders/eevee_camera_lib.glsl
   engines/eevee_next/shaders/eevee_colorspace_lib.glsl
-  engines/eevee_next/shaders/eevee_cryptomatte_frag.glsl
   engines/eevee_next/shaders/eevee_cryptomatte_lib.glsl
   engines/eevee_next/shaders/eevee_depth_of_field_accumulator_lib.glsl
   engines/eevee_next/shaders/eevee_depth_of_field_bokeh_lut_comp.glsl
diff --git a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
index 25f8a608a18..c69eb874949 100644
--- a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
@@ -20,19 +20,6 @@ void Cryptomatte::init()
                  "Cryptomatte and film mismatch");
 }
 
-void Cryptomatte::sync()
-{
-  if (layer_len_ == 0) {
-    return;
-  }
-
-  cryptomatte_ps_ = DRW_pass_create("Cryptomatte", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
-  GPUShader *sh_mesh = inst_.shaders.static_shader_get(CRYPTOMATTE_MESH);
-  mesh_grp_ = DRW_shgroup_create(sh_mesh, cryptomatte_ps_);
-  //GPUShader *sh_curves = inst_.shaders.static_shader_get(CRYPTOMATTE_CURVES);
-  //hair_grp_ = DRW_shgroup_create(sh_curves, cryptomatte_ps_);
-}
-
 static float hash_id(const ID *id)
 {
   const char *name = &id->name[2];
@@ -63,6 +50,8 @@ void Cryptomatte::add_hash(const ::Material *mat, float4 &r_hash) const
   }
 }
 
+#if 0
+Find API that works from the material shader. (fill object info and material data. with hashes if those layers are enabled?)
 void Cryptomatte::sync_mesh(Object *ob)
 {
   if (layer_len_ == 0) {
@@ -109,25 +98,6 @@ void Cryptomatte::sync_mesh(Object *ob)
     }
   }
 }
-
-void Cryptomatte::sync_curves(Object *ob, ModifierData *modifier_data)
-{
-  if (layer_len_ == 0) {
-    return;
-  }
-  BLI_assert_msg(false, "Not implemented yet");
-}
-
-void Cryptomatte::render()
-{
-  if (layer_len_ == 0) {
-    return;
-  }
-  const RenderBuffers &rbufs = inst_.render_buffers;
-  cryptomatte_fb_.ensure(GPU_ATTACHMENT_TEXTURE(rbufs.depth_tx),
-                         GPU_ATTACHMENT_TEXTURE(rbufs.combined_tx));
-  GPU_framebuffer_bind(cryptomatte_fb_);
-  DRW_draw_pass(cryptomatte_ps_);
-}
+#endif
 
 }  // namespace blender::eevee
\ No newline at end of file
diff --git a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
index ea533c51cff..20ef3a0ea97 100644
--- a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
+++ b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
@@ -44,23 +44,12 @@ class Cryptomatte {
   /** Number of enabled cryptomatte layers. */
   int layer_len_;
 
-  DRWPass *cryptomatte_ps_ = nullptr;
-  Framebuffer cryptomatte_fb_ = {"cryptomatte"};
-  DRWShadingGroup *mesh_grp_;
-  DRWShadingGroup *hair_grp_;
-
  public:
   Cryptomatte(Instance &inst) : inst_(inst){};
   ~Cryptomatte(){};
 
   void init();
 
-  void sync();
-  void sync_mesh(Object *ob);
-  void sync_curves(Object *object, ModifierData *modifier_data);
-  void sync_gpencil();  // TODO
-  void render();
-
  private:
   void add_hash(const Object *object, float4 &r_hash) const;
   void add_hash(const Material *material, float4 &r_hash) const;
diff --git a/source/blender/draw/engines/eevee_next/eevee_film.cc b/source/blender/draw/engines/eevee_next/eevee_film.cc
index 48f9d2ea4ff..0287c833edd 100644
--- a/source/blender/draw/engines/eevee_next/eevee_film.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_film.cc
@@ -642,7 +642,7 @@ float *Film::read_pass(eViewLayerEEVEEPassType pass_type)
   bool is_value = pass_is_value(pass_type);
   Texture &accum_tx = (pass_type == EEVEE_RENDER_PASS_COMBINED) ?
                           combined_tx_.current() :
-                          (pass_type == EEVEE_RENDER_PASS_Z) ?
+                      (pass_type == EEVEE_RENDER_PASS_Z) ?
                           depth_tx_ :
                           (is_value ? value_accum_tx_ : color_accum_tx_);
 
diff --git a/source/blender/draw/engines/eevee_next/eevee_instance.cc b/source/blender/draw/engines/eevee_next/eevee_instance.cc
index fe399882bd7..bd0a6e351a2 100644
--- a/source/blender/draw/engines/eevee_next/eevee_instance.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_instance.cc
@@ -107,7 +107,6 @@ void Instance::begin_sync()
 
   depth_of_field.sync();
   motion_blur.sync();
-  cryptomatte.sync();
   hiz_buffer.sync();
   pipelines.sync();
   main_view.sync();
diff --git a/source/blender/draw/engines/eevee_next/eevee_renderbuffers.cc b/source/blender/draw/engines/eevee_next/eevee_renderbuffers.cc
index f92bd28034a..8f41b09d09c 100644
--- a/source/blender/draw/engines/eevee_next/eevee_renderbuffers.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_renderbuffers.cc
@@ -81,7 +81,11 @@ void RenderBuffers::acquire(int2 extent)
   else if (cryptomatte_layer_len == 3) {
     cryptomatte_format = GPU_RGBA32F;
   }
-  cryptomatte_tx.acquire(pass_extent(EEVEE_RENDER_PASS_CRYPTOMATTE), cryptomatte_format);
+  cryptomatte_tx.acquire(
+      pass_extent(static_cast<eViewLayerEEVEEPassType>(EEVEE_RENDER_PASS_CRYPTOMATTE_OBJECT |
+                                                       EEVEE_RENDER_PASS_CRYPTOMATTE_ASSET |
+                                                       EEVEE_RENDER_PASS_CRYPTOMATTE_MATERIAL)),
+      cryptomatte_format);
 }
 
 void RenderBuffers::release()
diff --git a/source/blender/draw/engines/eevee_next/eevee_shader.cc b/source/blender/draw/engines/eevee_next/eevee_shader.cc
index b62354dad8f..0e49b195ea2 100644
--- a/source/blender/draw/engines/eevee_next/eevee_shader.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_shader.cc
@@ -82,10 +82,6 @@ const char *ShaderModule::static_shader_create_info_name_get(eShaderType shader_
       return "eevee_film_frag";
     case FILM_COMP:
       return "eevee_film_comp";
-    case CRYPTOMATTE_CURVES:
-      return "eevee_cryptomatte_curves";
-    case CRYPTOMATTE_MESH:
-      return "eevee_cryptomatte_mesh";
     case HIZ_DEBUG:
       return "eevee_hiz_debug";
     case HIZ_UPDATE:
diff --git a/source/blender/draw/engines/eevee_next/eevee_shader.hh b/source/blender/draw/engines/eevee_next/eevee_shader.hh
index b0078b994a3..9ef42c84373 100644
--- a/source/blender/draw/engines/eevee_next/eevee_shader.hh
+++ b/source/blender/draw/engines/eevee_next/eevee_shader.hh
@@ -29,9 +29,6 @@ enum eShaderType {
   FILM_FRAG = 0,
   FILM_COMP,
 
-  CRYPTOMATTE_CURVES,
-  CRYPTOMATTE_MESH,
-
   DOF_BOKEH_LUT,
   DOF_DOWNSAMPLE,
   DOF_FILTER,
diff --git a/source/blender/draw/engines/eevee_next/eevee_sync.cc b/source/blender/draw/engines/eevee_next/eevee_sync.cc
index 2abc4bcda95..e2d4b0ac1c2 100644
--- a/source/blender/draw/engines/eevee_next/eevee_sync.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_sync.cc
@@ -131,7 +131,6 @@ void SyncModule::sync_mesh(Object *ob, ObjectHandle &ob_handle)
     is_alpha_blend = is_alpha_blend || material->is_alpha_blend_transparent;
   }
 
-  inst_.cryptomatte.sync_mesh(ob);
   // shadows.sync_object(ob, ob_handle, is_shadow_caster, is_alpha_blend);
 }
 
@@ -318,7 +317,6 @@ void SyncModule::sync_curves(Object *ob, ObjectHandle &ob_handle, ModifierData *
   shgroup_curves_call(material.prepass, ob, part_sys, modifier_data);
   shgroup_curves_call(material.shadow, ob, part_sys, modifier_data);
 
-  inst_.cryptomatte.sync_curves(ob, modifier_data);
   /* TODO(fclem) Hair velocity. */
   // shading_passes.velocity.gpencil_add(ob, ob_handle);
 
diff --git a/source/blender/draw/engines/eevee_next/eevee_view.cc b/source/blender/draw/engines/eevee_next/eevee_view.cc
index 1002040c006..44067aff9ca 100644
--- a/source/blender/draw/engines/eevee_next/eevee_view.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_view.cc
@@ -135,8 +135,6 @@ void ShadingView::render()
   inst_.lights.debug_draw(combined_fb_);
   inst_.hiz_buffer.debug_draw(combined_fb_);
 
-  inst_.cryptomatte.render();
-
   GPUTexture *combined_final_tx = render_postfx(rbufs.combined_tx);
 
   inst_.film.accumulate(sub_view_, combined_final_tx);
diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_frag.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_frag.glsl
deleted file mode 100644
index eaf30c08321..00000000000
--- a/source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_frag.glsl
+++ /dev/null
@@ -1,3 +0,0 @@
-void main() {
-    fragColor = cryptomatte_hash;
-}
\ No newline at end of file
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 9001a19bd15..46b2a39e7f6 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
@@ -106,7 +106,7 @@ void main()
   imageStore(rp_diffuse_color_img, out_texel, vec4(g_diffuse_data.color, 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));
+  imageStore(rp_cryptomatte_img, out_texel, vec4(1.0, 0.5, 0.25, 1.0));
 
   out_radiance.rgb *= 1.0 - g_holdout;
 
diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_cryptomatte_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_cryptomatte_info.hh
deleted file mode 100644
index 26de5ac73b7..00000000000
--- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_cryptomatte_info.hh
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "gpu_shader_create_info.hh"
-
-GPU_SHADER_CREATE_INFO(eevee_cryptomatte)
-    .fragment_source("eevee_cryptomatte_frag.glsl")
-    .push_constant(Type::VEC4, "cryptomatte_hash")
-    .fragment_out(0, Type::VEC4, "fragColor")
-    .additiona

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list