From 47c77cd89c37595c5deeb00a9235d88c460ce356 Mon Sep 17 00:00:00 2001 From: Lukas Stockner Date: Wed, 7 Nov 2018 04:05:47 +0100 Subject: Cycles: Write Cryptomatte metadata according to the specification Reviewers: brecht, sergey, swerner Subscribers: creamsurfer, Tanguy, Noss, SteffenD Differential Revision: https://developer.blender.org/D3862 --- intern/cycles/render/shader.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'intern/cycles/render/shader.cpp') 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 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 -- cgit v1.2.3