[Bf-blender-cvs] [266b59e4ec0] temp-eevee-next-cryptomatte: Store material hashes in meta data.

Jeroen Bakker noreply at git.blender.org
Tue Sep 13 09:09:48 CEST 2022


Commit: 266b59e4ec03d05285a11e873f1599070f66be8a
Author: Jeroen Bakker
Date:   Tue Sep 13 09:09:45 2022 +0200
Branches: temp-eevee-next-cryptomatte
https://developer.blender.org/rB266b59e4ec03d05285a11e873f1599070f66be8a

Store material hashes in meta data.

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

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_sync.cc

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

diff --git a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
index 09ebd367ebc..bcda27d8e81 100644
--- a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
@@ -72,6 +72,15 @@ void Cryptomatte::sync_object(Object *ob)
   cryptomatte_object_buf.get_or_resize(resource_id) = object_hashes;
 }
 
+void Cryptomatte::sync_material(const ::Material *material)
+{
+  /* Material crypto hashes are generated during shader codegen stage. We only need to register
+   * them to store inside the metadata. */
+  if (material_layer_) {
+    material_layer_->add_ID(material->id);
+  }
+}
+
 void Cryptomatte::end_sync()
 {
   cryptomatte_object_buf.push_update();
diff --git a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
index 9bc5420d6f7..c823d3b5de8 100644
--- a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
+++ b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
@@ -51,10 +51,9 @@ class Cryptomatte {
 
   void begin_sync();
   void sync_object(Object *ob);
+  void sync_material(const ::Material *material);
   void end_sync();
 
-  void store_metadata(RenderResult *render_result);
-
   template<typename T> void bind_resources(draw::detail::PassBase<T> *pass)
   {
     pass->bind_ssbo(CRYPTOMATTE_BUF_SLOT, &cryptomatte_object_buf);
@@ -62,6 +61,7 @@ class Cryptomatte {
 
   /* Register ID to use inside cryptomatte layer and returns associated hash as float. */
   float register_id(const eViewLayerEEVEEPassType layer, const ID &id) const;
+  void store_metadata(RenderResult *render_result);
 };
 
 /** \} */
diff --git a/source/blender/draw/engines/eevee_next/eevee_sync.cc b/source/blender/draw/engines/eevee_next/eevee_sync.cc
index c27f3816846..afb7af89348 100644
--- a/source/blender/draw/engines/eevee_next/eevee_sync.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_sync.cc
@@ -120,6 +120,10 @@ void SyncModule::sync_mesh(Object *ob,
 
     is_shadow_caster = is_shadow_caster || material->shadow.sub_pass != nullptr;
     is_alpha_blend = is_alpha_blend || material->is_alpha_blend_transparent;
+
+    GPUMaterial *gpu_material = material_array.gpu_materials[i];
+    ::Material *mat = GPU_material_get_material(gpu_material);
+    inst_.cryptomatte.sync_material(mat);
   }
 
   inst_.manager->extract_object_attributes(res_handle, ob_ref, material_array.gpu_materials);



More information about the Bf-blender-cvs mailing list