[Bf-blender-cvs] [e4f912c041b] temp_cryptomatte: Cycles: Fixes for cryptomatte writing via coverage buffer, was writing the wrong place for material cyrptomatte

Stefan Werner noreply at git.blender.org
Fri Nov 3 21:10:09 CET 2017


Commit: e4f912c041b451dcabe2a992c1c49f435b074f72
Author: Stefan Werner
Date:   Thu Aug 17 13:10:58 2017 +0200
Branches: temp_cryptomatte
https://developer.blender.org/rBe4f912c041b451dcabe2a992c1c49f435b074f72

Cycles: Fixes for cryptomatte writing via coverage buffer, was writing the wrong place for material cyrptomatte

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

M	intern/cycles/device/device_cpu.cpp
M	intern/cycles/render/coverage.cpp
M	intern/cycles/render/coverage.h

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

diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index 3c7af96c2b6..cbcd28ca06d 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -734,11 +734,12 @@ public:
 					path_trace(task, tile, kg, coverage_object, coverage_material);
 				}
 				if(kg->__data.film.use_cryptomatte & CRYPT_ACCURATE) {
+					int aov_index = 0;
 					if(kg->__data.film.use_cryptomatte & CRYPT_OBJECT) {
-						flatten_coverage(kg, coverage_object, tile);
+						aov_index += flatten_coverage(kg, coverage_object, tile, aov_index);
 					}
 					if(kg->__data.film.use_cryptomatte & CRYPT_MATERIAL) {
-						flatten_coverage(kg, coverage_material, tile);
+						aov_index += flatten_coverage(kg, coverage_material, tile, aov_index);
 					}
 				}
 			}
diff --git a/intern/cycles/render/coverage.cpp b/intern/cycles/render/coverage.cpp
index bc7eeb496d5..ac97baef93c 100644
--- a/intern/cycles/render/coverage.cpp
+++ b/intern/cycles/render/coverage.cpp
@@ -61,7 +61,7 @@ static inline void kernel_write_id_slots(float *buffer, int num_slots, float id,
 
 static bool crypomatte_comp(const std::pair<float, float>& i, const std::pair<float, float> j) { return i.first > j.first; }
 
-void flatten_coverage(KernelGlobals *kg, vector<map<float, float> > & coverage, const RenderTile &tile)
+int flatten_coverage(KernelGlobals *kg, vector<map<float, float> > & coverage, const RenderTile &tile, const int aov_index)
 {
 	/* sort the coverage map and write it to the output */
 	int index = 0;
@@ -90,13 +90,15 @@ void flatten_coverage(KernelGlobals *kg, vector<map<float, float> > & coverage,
 				}
 				int limit = min(num_slots, sorted_pixel.size());
 				for(int i = 0; i < limit; i++) {
-					int pass_offset = (kg->__data.film.pass_aov[0] & ~(1 << 31));
+					int pass_offset = (kg->__data.film.pass_aov[aov_index] & ~(1 << 31));
 					kernel_write_id_slots(buffer + pass_offset, 2 * (kg->__data.film.use_cryptomatte & 255), sorted_pixel[i].second, sorted_pixel[i].first, i == 0);
 				}
 			}
 			index++;
 		}
 	}
+
+	return kernel_data.film.use_cryptomatte & 255;
 }
 
 CCL_NAMESPACE_END
diff --git a/intern/cycles/render/coverage.h b/intern/cycles/render/coverage.h
index d225bbb35a0..53b1a35454e 100644
--- a/intern/cycles/render/coverage.h
+++ b/intern/cycles/render/coverage.h
@@ -25,7 +25,7 @@ CCL_NAMESPACE_BEGIN
 
 struct KernelGlobals;
 
-void flatten_coverage(KernelGlobals *kg, vector<map<float, float> >&coverage, const RenderTile &tile);
+int flatten_coverage(KernelGlobals *kg, vector<map<float, float> >&coverage, const RenderTile &tile, const int aov_index);
 
 CCL_NAMESPACE_END



More information about the Bf-blender-cvs mailing list