Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/blender/blender_session.cpp
| Show First 20 Lines • Show All 442 Lines • ▼ Show 20 Lines | void BlenderSession::render(BL::Depsgraph& b_depsgraph_) | ||||
| session->params.denoising_feature_strength = get_float(crl, "denoising_feature_strength"); | session->params.denoising_feature_strength = get_float(crl, "denoising_feature_strength"); | ||||
| session->params.denoising_relative_pca = get_boolean(crl, "denoising_relative_pca"); | session->params.denoising_relative_pca = get_boolean(crl, "denoising_relative_pca"); | ||||
| scene->film->pass_alpha_threshold = b_view_layer.pass_alpha_threshold(); | scene->film->pass_alpha_threshold = b_view_layer.pass_alpha_threshold(); | ||||
| scene->film->tag_passes_update(scene, passes); | scene->film->tag_passes_update(scene, passes); | ||||
| scene->film->tag_update(scene); | scene->film->tag_update(scene); | ||||
| scene->integrator->tag_update(scene); | scene->integrator->tag_update(scene); | ||||
| BL::RenderResult::views_iterator b_view_iter; | b_rview_name = b_engine.active_view_get(); | ||||
| /* Get view index for seed later on. */ | |||||
sergey: Missing spaces? | |||||
| int view_index = 0; | int view_index = 0; | ||||
| BL::RenderResult::views_iterator b_view_iter; | |||||
| for(b_rr.views.begin(b_view_iter); b_view_iter != b_rr.views.end(); ++b_view_iter, ++view_index) { | 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(); | string b_rview_iter_name = b_view_iter->name(); | ||||
| if(b_rview_iter_name == b_rview_name) { | |||||
| /* set the current view */ | break; | ||||
| b_engine.active_view_set(b_rview_name.c_str()); | } | ||||
| } | |||||
| /* update scene */ | /* Update scene. */ | ||||
| BL::Object b_camera_override(b_engine.camera_override()); | 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_camera(b_render, b_camera_override, width, height, b_rview_name.c_str()); | ||||
| sync->sync_data(b_render, | sync->sync_data(b_render, | ||||
| b_depsgraph, | b_depsgraph, | ||||
| b_v3d, | b_v3d, | ||||
| b_camera_override, | b_camera_override, | ||||
| width, height, | width, height, | ||||
| &python_thread_state); | &python_thread_state); | ||||
| builtin_images_load(); | builtin_images_load(); | ||||
Not Done Inline ActionsI'm not sure how this works. Scene's camera is never re-allocated, so you're storing same pointer every time? And later one we'll have a double-free because scene still owns the pointer? sergey: I'm not sure how this works.
Scene's camera is never re-allocated, so you're storing same… | |||||
| /* Attempt to free all data which is held by Blender side, since at this | /* Attempt to free all data which is held by Blender side, since at this | ||||
| * point we knwo that we've got everything to render current view layer. | * point we know that we've got everything to render current view layer. | ||||
| */ | */ | ||||
| free_blender_memory_if_possible(); | free_blender_memory_if_possible(); | ||||
| /* Make sure all views have different noise patterns. - hardcoded value just to make it random */ | /* Make sure all views have different noise patterns. - hardcoded value just to make it random. */ | ||||
| if(view_index != 0) { | if(view_index != 0) { | ||||
| scene->integrator->seed += hash_int_2d(scene->integrator->seed, hash_int(view_index * 0xdeadbeef)); | scene->integrator->seed += hash_int_2d(scene->integrator->seed, hash_int(view_index * 0xdeadbeef)); | ||||
| scene->integrator->tag_update(scene); | scene->integrator->tag_update(scene); | ||||
| } | } | ||||
| /* Update number of samples per layer. */ | /* Update number of samples per layer. */ | ||||
| int samples = sync->get_layer_samples(); | int samples = sync->get_layer_samples(); | ||||
| bool bound_samples = sync->get_layer_bound_samples(); | bool bound_samples = sync->get_layer_bound_samples(); | ||||
Not Done Inline ActionsComment is a sentence, starting with a capital and ending with a full stop. sergey: Comment is a sentence, starting with a capital and ending with a full stop. | |||||
| int effective_layer_samples; | int effective_layer_samples; | ||||
| if(samples != 0 && (!bound_samples || (samples < session_params.samples))) | if(samples != 0 && (!bound_samples || (samples < session_params.samples))) | ||||
| effective_layer_samples = samples; | effective_layer_samples = samples; | ||||
| else | else | ||||
| effective_layer_samples = session_params.samples; | effective_layer_samples = session_params.samples; | ||||
| /* Update tile manager if we're doing resumable render. */ | /* Update tile manager if we're doing resumable render. */ | ||||
| update_resumable_tile_manager(effective_layer_samples); | update_resumable_tile_manager(effective_layer_samples); | ||||
| /* Update session itself. */ | /* Update session itself. */ | ||||
| session->reset(buffer_params, effective_layer_samples); | session->reset(buffer_params, effective_layer_samples); | ||||
| /* render */ | /* Render. */ | ||||
| session->start(); | session->start(); | ||||
| session->wait(); | session->wait(); | ||||
| if(!b_engine.is_preview() && background && print_render_stats) { | if(!b_engine.is_preview() && background && print_render_stats) { | ||||
| RenderStats stats; | RenderStats stats; | ||||
| session->collect_statistics(&stats); | session->collect_statistics(&stats); | ||||
| printf("Render statistics:\n%s\n", stats.full_report().c_str()); | printf("Render statistics:\n%s\n", stats.full_report().c_str()); | ||||
| } | } | ||||
| if(session->progress.get_cancel()) | |||||
| break; | |||||
| } | |||||
| if(is_single_layer) { | if(is_single_layer) { | ||||
| BL::RenderResult b_rr = b_engine.get_result(); | BL::RenderResult b_rr = b_engine.get_result(); | ||||
Not Done Inline ActionsMaybe i'm missing something, but i don't think delete works for vector. sergey: Maybe i'm missing something, but i don't think `delete` works for `vector`. | |||||
| string num_aa_samples = string_printf("%d", session->params.samples); | string num_aa_samples = string_printf("%d", session->params.samples); | ||||
| b_rr.stamp_data_add_field("Cycles Samples", num_aa_samples.c_str()); | b_rr.stamp_data_add_field("Cycles Samples", num_aa_samples.c_str()); | ||||
| /* TODO(sergey): Report whether we're doing resumable render | /* TODO(sergey): Report whether we're doing resumable render | ||||
| * and also start/end sample if so. | * and also start/end sample if so. | ||||
| */ | */ | ||||
| } | } | ||||
| /* Write cryptomatte metadata. */ | /* Write cryptomatte metadata. */ | ||||
| ▲ Show 20 Lines • Show All 908 Lines • Show Last 20 Lines | |||||
Missing spaces?