Cycles: backport samples metadata format changes to 2.7.
authorSergey Sharybin <sergey.vfx@gmail.com>
Wed, 6 Feb 2019 10:49:41 +0000 (11:49 +0100)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Mon, 11 Feb 2019 17:18:32 +0000 (18:18 +0100)
The render layer name is now always included. Best to keep these consistent,
so that animation denoising and sample merging works the same for both and
tests can be the same. Ref D4311.

intern/cycles/blender/blender_session.cpp
intern/cycles/blender/blender_session.h

index 43d7ff49a3bfae1f42c19103a7db8b8ad1a20a1f..ab08b9e146d128fe12924c11eb50eefc0de107fa 100644 (file)
@@ -379,6 +379,28 @@ static void add_cryptomatte_layer(BL::RenderResult& b_rr, string name, string ma
        render_add_metadata(b_rr, prefix+"manifest", manifest);
 }
 
+void BlenderSession::stamp_view_layer_metadata_do(const string& prefix)
+{
+       BL::RenderResult b_rr = b_engine.get_result();
+       /* Configured number of samples for the view layer. */
+       b_rr.stamp_data_add_field((prefix + "samples").c_str(),
+                                 to_string(session->params.samples).c_str());
+       /* Store ranged samples information. */
+       if(session->tile_manager.range_num_samples != -1) {
+               b_rr.stamp_data_add_field(
+                       (prefix + "range_start_sample").c_str(),
+                       to_string(session->tile_manager.range_start_sample).c_str());
+               b_rr.stamp_data_add_field(
+                       (prefix + "range_num_samples").c_str(),
+                       to_string(session->tile_manager.range_num_samples).c_str());
+       }
+}
+
+void BlenderSession::stamp_view_layer_metadata(const string& view_layer_name)
+{
+       stamp_view_layer_metadata_do("cycles." + view_layer_name + ".");
+}
+
 void BlenderSession::render()
 {
        /* set callback to write out render results */
@@ -394,9 +416,6 @@ void BlenderSession::render()
        BL::RenderSettings::layers_iterator b_layer_iter;
        BL::RenderResult::views_iterator b_view_iter;
 
-       /* We do some special meta attributes when we only have single layer. */
-       const bool is_single_layer = (r.layers.length() == 1);
-
        for(r.layers.begin(b_layer_iter); b_layer_iter != r.layers.end(); ++b_layer_iter) {
                b_rlay_name = b_layer_iter->name();
 
@@ -491,15 +510,9 @@ void BlenderSession::render()
                                break;
                }
 
-               BL::RenderResult b_full_rr = b_engine.get_result();
-               if(is_single_layer) {
-                       string num_aa_samples = string_printf("%d", session->params.samples);
-                       render_add_metadata(b_full_rr, "Cycles Samples", num_aa_samples);
-                       /* TODO(sergey): Report whether we're doing resumable render
-                        * and also start/end sample if so.
-                        */
-               }
+               stamp_view_layer_metadata(b_rlay_name);
 
+               BL::RenderResult b_full_rr = b_engine.get_result();
                if(scene->film->cryptomatte_passes & CRYPT_OBJECT) {
                        add_cryptomatte_layer(b_full_rr, b_rlay_name+".CryptoObject",
                                              scene->object_manager->get_cryptomatte_objects(scene));
index b8a9096b354655e6060967d845803eafa1337ff2..2aa3c77c37d9bc235e4fd190bd099cd38a2663cc 100644 (file)
@@ -146,6 +146,9 @@ public:
        static bool print_render_stats;
 
 protected:
+       void stamp_view_layer_metadata(const string& view_layer_name);
+       void stamp_view_layer_metadata_do(const string& prefix);
+
        void do_write_update_render_result(BL::RenderResult& b_rr,
                                           BL::RenderLayer& b_rlay,
                                           RenderTile& rtile,