[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