[Bf-blender-cvs] [31657fef40d] blender2.8: Merge branch 'master' into blender2.8

Sergey Sharybin noreply at git.blender.org
Fri Jul 27 17:21:49 CEST 2018


Commit: 31657fef40d1a99e96b4a318a6ca6b4b5b68539d
Author: Sergey Sharybin
Date:   Fri Jul 27 17:21:43 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB31657fef40d1a99e96b4a318a6ca6b4b5b68539d

Merge branch 'master' into blender2.8

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



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

diff --cc intern/cycles/blender/blender_session.cpp
index 1a4b26128e3,e11b8e0c70d..05adb6f5fe0
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@@ -393,92 -381,125 +395,98 @@@ void BlenderSession::render(BL::Depsgra
  	BufferParams buffer_params = BlenderSync::get_buffer_params(b_render, b_v3d, b_rv3d, scene->camera, width, height);
  
  	/* render each layer */
 -	BL::RenderSettings r = b_scene.render();
 -	BL::RenderSettings::layers_iterator b_layer_iter;
 -	BL::RenderResult::views_iterator b_view_iter;
 +	BL::ViewLayer b_view_layer = b_depsgraph.view_layer_eval();
  
  	/* We do some special meta attributes when we only have single layer. */
 -	const bool is_single_layer = (r.layers.length() == 1);
 +	const bool is_single_layer = (b_scene.view_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();
 -
 -		/* temporary render result to find needed passes and views */
 -		BL::RenderResult b_rr = begin_render_result(b_engine, 0, 0, 1, 1, b_rlay_name.c_str(), NULL);
 -		BL::RenderResult::layers_iterator b_single_rlay;
 -		b_rr.layers.begin(b_single_rlay);
 -
 -		/* layer will be missing if it was disabled in the UI */
 -		if(b_single_rlay == b_rr.layers.end()) {
 -			end_render_result(b_engine, b_rr, true, true, false);
 -			continue;
 -		}
 +	/* temporary render result to find needed passes and views */
 +	BL::RenderResult b_rr = begin_render_result(b_engine, 0, 0, 1, 1, b_view_layer.name().c_str(), NULL);
 +	BL::RenderResult::layers_iterator b_single_rlay;
 +	b_rr.layers.begin(b_single_rlay);
 +	BL::RenderLayer b_rlay = *b_single_rlay;
  
 -		BL::RenderLayer b_rlay = *b_single_rlay;
 -
 -		/* add passes */
 -		array<Pass> passes = sync->sync_render_passes(b_rlay, *b_layer_iter, session_params);
 -		buffer_params.passes = passes;
 -
 -		PointerRNA crl = RNA_pointer_get(&b_layer_iter->ptr, "cycles");
 -		bool use_denoising = get_boolean(crl, "use_denoising");
 -		buffer_params.denoising_data_pass = use_denoising;
 -		session->tile_manager.schedule_denoising = use_denoising;
 -		session->params.use_denoising = use_denoising;
 -		scene->film->denoising_data_pass = buffer_params.denoising_data_pass;
 -		scene->film->denoising_flags = 0;
 -		if(!get_boolean(crl, "denoising_diffuse_direct"))        scene->film->denoising_flags |= DENOISING_CLEAN_DIFFUSE_DIR;
 -		if(!get_boolean(crl, "denoising_diffuse_indirect"))      scene->film->denoising_flags |= DENOISING_CLEAN_DIFFUSE_IND;
 -		if(!get_boolean(crl, "denoising_glossy_direct"))         scene->film->denoising_flags |= DENOISING_CLEAN_GLOSSY_DIR;
 -		if(!get_boolean(crl, "denoising_glossy_indirect"))       scene->film->denoising_flags |= DENOISING_CLEAN_GLOSSY_IND;
 -		if(!get_boolean(crl, "denoising_transmission_direct"))   scene->film->denoising_flags |= DENOISING_CLEAN_TRANSMISSION_DIR;
 -		if(!get_boolean(crl, "denoising_transmission_indirect")) scene->film->denoising_flags |= DENOISING_CLEAN_TRANSMISSION_IND;
 -		if(!get_boolean(crl, "denoising_subsurface_direct"))     scene->film->denoising_flags |= DENOISING_CLEAN_SUBSURFACE_DIR;
 -		if(!get_boolean(crl, "denoising_subsurface_indirect"))   scene->film->denoising_flags |= DENOISING_CLEAN_SUBSURFACE_IND;
 -		scene->film->denoising_clean_pass = (scene->film->denoising_flags & DENOISING_CLEAN_ALL_PASSES);
 -		buffer_params.denoising_clean_pass = scene->film->denoising_clean_pass;
 -		session->params.denoising_radius = get_int(crl, "denoising_radius");
 -		session->params.denoising_strength = get_float(crl, "denoising_strength");
 -		session->params.denoising_feature_strength = get_float(crl, "denoising_feature_strength");
 -		session->params.denoising_relative_pca = get_boolean(crl, "denoising_relative_pca");
 -
 -		scene->film->pass_alpha_threshold = b_layer_iter->pass_alpha_threshold();
 -		scene->film->tag_passes_update(scene, passes);
 -		scene->film->tag_update(scene);
 -		scene->integrator->tag_update(scene);
 -
 -		int view_index = 0;
 -		for(b_rr.views.begin(b_view_iter); b_view_iter != b_rr.views.end(); ++b_view_iter, ++view_index) {
 -			b_rview_name = b_view_iter->name();
 -
 -			/* set the current view */
 -			b_engine.active_view_set(b_rview_name.c_str());
 -
 -			/* update scene */
 -			BL::Object b_camera_override(b_engine.camera_override());
 -			sync->sync_camera(b_render, b_camera_override, width, height, b_rview_name.c_str());
 -			sync->sync_data(b_render,
 -			                b_v3d,
 -			                b_camera_override,
 -			                width, height,
 -			                &python_thread_state,
 -			                b_rlay_name.c_str());
 -
 -			/* Make sure all views have different noise patterns. - hardcoded value just to make it random */
 -			if(view_index != 0) {
 -				scene->integrator->seed += hash_int_2d(scene->integrator->seed, hash_int(view_index * 0xdeadbeef));
 -				scene->integrator->tag_update(scene);
 -			}
 +	/* add passes */
 +	array<Pass> passes = sync->sync_render_passes(b_rlay, b_view_layer, session_params);
 +	buffer_params.passes = passes;
 +
 +	PointerRNA crl = RNA_pointer_get(&b_view_layer.ptr, "cycles");
 +	bool use_denoising = get_boolean(crl, "use_denoising");
 +	buffer_params.denoising_data_pass = use_denoising;
 +	session->tile_manager.schedule_denoising = use_denoising;
 +	session->params.use_denoising = use_denoising;
 +	scene->film->denoising_data_pass = buffer_params.denoising_data_pass;
 +	scene->film->denoising_flags = 0;
 +	if(!get_boolean(crl, "denoising_diffuse_direct"))        scene->film->denoising_flags |= DENOISING_CLEAN_DIFFUSE_DIR;
 +	if(!get_boolean(crl, "denoising_diffuse_indirect"))      scene->film->denoising_flags |= DENOISING_CLEAN_DIFFUSE_IND;
 +	if(!get_boolean(crl, "denoising_glossy_direct"))         scene->film->denoising_flags |= DENOISING_CLEAN_GLOSSY_DIR;
 +	if(!get_boolean(crl, "denoising_glossy_indirect"))       scene->film->denoising_flags |= DENOISING_CLEAN_GLOSSY_IND;
 +	if(!get_boolean(crl, "denoising_transmission_direct"))   scene->film->denoising_flags |= DENOISING_CLEAN_TRANSMISSION_DIR;
 +	if(!get_boolean(crl, "denoising_transmission_indirect")) scene->film->denoising_flags |= DENOISING_CLEAN_TRANSMISSION_IND;
 +	if(!get_boolean(crl, "denoising_subsurface_direct"))     scene->film->denoising_flags |= DENOISING_CLEAN_SUBSURFACE_DIR;
 +	if(!get_boolean(crl, "denoising_subsurface_indirect"))   scene->film->denoising_flags |= DENOISING_CLEAN_SUBSURFACE_IND;
 +	scene->film->denoising_clean_pass = (scene->film->denoising_flags & DENOISING_CLEAN_ALL_PASSES);
 +	buffer_params.denoising_clean_pass = scene->film->denoising_clean_pass;
 +	session->params.denoising_radius = get_int(crl, "denoising_radius");
 +	session->params.denoising_strength = get_float(crl, "denoising_strength");
 +	session->params.denoising_feature_strength = get_float(crl, "denoising_feature_strength");
 +	session->params.denoising_relative_pca = get_boolean(crl, "denoising_relative_pca");
 +
 +	scene->film->pass_alpha_threshold = b_view_layer.pass_alpha_threshold();
 +	scene->film->tag_passes_update(scene, passes);
 +	scene->film->tag_update(scene);
 +	scene->integrator->tag_update(scene);
  
 -			/* Update number of samples per layer. */
 -			int samples = sync->get_layer_samples();
 -			bool bound_samples = sync->get_layer_bound_samples();
 -			int effective_layer_samples;
 +	BL::RenderResult::views_iterator b_view_iter;
 +	int view_index = 0;
 +	for(b_rr.views.begin(b_view_iter); b_view_iter != b_rr.views.end(); ++b_view_iter, ++view_index) {
 +		b_rlay_name = b_view_layer.name();
 +		b_rview_name = b_view_iter->name();
  
 -			if(samples != 0 && (!bound_samples || (samples < session_params.samples)))
 -				effective_layer_samples = samples;
 -			else
 -				effective_layer_samples = session_params.samples;
 +		/* set the current view */
 +		b_engine.active_view_set(b_rview_name.c_str());
  
 -			/* Update tile manager if we're doing resumable render. */
 -			update_resumable_tile_manager(effective_layer_samples);
 +		/* update scene */
 +		BL::Object b_camera_override(b_engine.camera_override());
 +		sync->sync_camera(b_render, b_camera_override, width, height, b_rview_name.c_str());
 +		sync->sync_data(b_render,
 +		                b_depsgraph,
 +		                b_v3d,
 +		                b_camera_override,
 +		                width, height,
 +		                &python_thread_state);
 +		builtin_images_load();
 +
 +		/* Make sure all views have different noise patterns. - hardcoded value just to make it random */
 +		if(view_index != 0) {
 +			scene->integrator->seed += hash_int_2d(scene->integrator->seed, hash_int(view_index * 0xdeadbeef));
 +			scene->integrator->tag_update(scene);
 +		}
  
 -			/* Update session itself. */
 -			session->reset(buffer_params, effective_layer_samples);
 +		int effective_layer_samples = session_params.samples;
  
 -			/* render */
 -			session->start();
 -			session->wait();
 +		/* TODO: Update number of samples per layer. */
 +#if 0
 +		if(samples != 0 && (!bound_samples || (samples < session_params.samples)))
 +			effective_layer_samples = samples;
 +#endif
  
 -			if(session->progress.get_cancel())
 -				break;
 -		}
 +		/* Update tile manager if we're doing resumable render. */
 +		update_resumable_tile_manager(effective_layer_samples);
  
 -		if(is_single_layer) {
 -			BL::RenderResult b_rr = b_engine.get_result();
 -			string num_aa_samples = string_printf("%d", session->params.samples);
 -			b_rr.stamp_data_add_field("Cycles Samples", num_aa_samples.c_str());
 -			/* TODO(sergey): Report whether we're doing resumable render
 -			 * and also start/end sample if so.
 -			 */
 -		}
 +		/* Update session itself. */
 +		session->reset(buffer_params, effective_layer_samples);
  
 -		/* free result without merging */
 -		end_render_result(b_engine, b_rr, true, true, false);
 +		/* render */
 +		session->start();
 +		session->wait();
  
+ 		if(!b_engine.is_preview() && background && print_render_stats) {
+ 			RenderStats stats;
+ 			session->scene->collect_statistics(&stats);
+ 			printf("Render statistics:\n%s\n", stats.full_report().c_str());
+ 		}
+ 
  		if(session->progress.get_cancel())
  			break;
  	}



More information about the Bf-blender-cvs mailing list