Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Stockner <lukas.stockner@freenet.de>2018-11-07 06:05:47 +0300
committerLukas Stockner <lukas.stockner@freenet.de>2018-11-08 03:07:54 +0300
commit47c77cd89c37595c5deeb00a9235d88c460ce356 (patch)
tree6cd5402d099119ea6ac43a887d5a5903da08dcd8 /intern/cycles/render
parent5987c4bc579d865e96ccc6ee43789981fd4f106a (diff)
Cycles: Write Cryptomatte metadata according to the specification
Reviewers: brecht, sergey, swerner Subscribers: creamsurfer, Tanguy, Noss, SteffenD Differential Revision: https://developer.blender.org/D3862
Diffstat (limited to 'intern/cycles/render')
-rw-r--r--intern/cycles/render/object.cpp34
-rw-r--r--intern/cycles/render/object.h3
-rw-r--r--intern/cycles/render/shader.cpp16
-rw-r--r--intern/cycles/render/shader.h2
4 files changed, 55 insertions, 0 deletions
diff --git a/intern/cycles/render/object.cpp b/intern/cycles/render/object.cpp
index a56a8a6ec58..dc7a1043208 100644
--- a/intern/cycles/render/object.cpp
+++ b/intern/cycles/render/object.cpp
@@ -27,6 +27,7 @@
#include "util/util_logging.h"
#include "util/util_map.h"
#include "util/util_progress.h"
+#include "util/util_set.h"
#include "util/util_vector.h"
#include "util/util_murmurhash.h"
@@ -844,4 +845,37 @@ void ObjectManager::tag_update(Scene *scene)
scene->light_manager->need_update = true;
}
+string ObjectManager::get_cryptomatte_objects(Scene *scene)
+{
+ string manifest = "{";
+
+ unordered_set<ustring, ustringHash> objects;
+ foreach(Object *object, scene->objects) {
+ if(objects.count(object->name)) {
+ continue;
+ }
+ objects.insert(object->name);
+ uint32_t hash_name = util_murmur_hash3(object->name.c_str(), object->name.length(), 0);
+ manifest += string_printf("\"%s\":\"%08x\",", object->name.c_str(), hash_name);
+ }
+ manifest[manifest.size()-1] = '}';
+ return manifest;
+}
+
+string ObjectManager::get_cryptomatte_assets(Scene *scene)
+{
+ string manifest = "{";
+ unordered_set<ustring, ustringHash> assets;
+ foreach(Object *ob, scene->objects) {
+ if(assets.count(ob->asset_name)) {
+ continue;
+ }
+ assets.insert(ob->asset_name);
+ uint32_t hash_asset = util_murmur_hash3(ob->asset_name.c_str(), ob->asset_name.length(), 0);
+ manifest += string_printf("\"%s\":\"%08x\",", ob->asset_name.c_str(), hash_asset);
+ }
+ manifest[manifest.size()-1] = '}';
+ return manifest;
+}
+
CCL_NAMESPACE_END
diff --git a/intern/cycles/render/object.h b/intern/cycles/render/object.h
index bd44b35aba3..288c3f5457a 100644
--- a/intern/cycles/render/object.h
+++ b/intern/cycles/render/object.h
@@ -116,6 +116,9 @@ public:
void apply_static_transforms(DeviceScene *dscene, Scene *scene, Progress& progress);
+ string get_cryptomatte_objects(Scene *scene);
+ string get_cryptomatte_assets(Scene *scene);
+
protected:
void device_update_object_transform(UpdateObjectTransformState *state,
Object *ob,
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp
index 8d0cec7b14e..a827f611583 100644
--- a/intern/cycles/render/shader.cpp
+++ b/intern/cycles/render/shader.cpp
@@ -699,4 +699,20 @@ float ShaderManager::linear_rgb_to_gray(float3 c)
return dot(c, rgb_to_y);
}
+string ShaderManager::get_cryptomatte_materials(Scene *scene)
+{
+ string manifest = "{";
+ unordered_set<ustring, ustringHash> materials;
+ foreach(Shader *shader, scene->shaders) {
+ if(materials.count(shader->name)) {
+ continue;
+ }
+ materials.insert(shader->name);
+ uint32_t cryptomatte_id = util_murmur_hash3(shader->name.c_str(), shader->name.length(), 0);
+ manifest += string_printf("\"%s\":\"%08x\",", shader->name.c_str(), cryptomatte_id);
+ }
+ manifest[manifest.size()-1] = '}';
+ return manifest;
+}
+
CCL_NAMESPACE_END
diff --git a/intern/cycles/render/shader.h b/intern/cycles/render/shader.h
index 58314a1e310..80731384048 100644
--- a/intern/cycles/render/shader.h
+++ b/intern/cycles/render/shader.h
@@ -197,6 +197,8 @@ public:
float linear_rgb_to_gray(float3 c);
+ string get_cryptomatte_materials(Scene *scene);
+
protected:
ShaderManager();