Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/blender/blender_sync.cpp
| Show First 20 Lines • Show All 372 Lines • ▼ Show 20 Lines | void BlenderSync::sync_film() | ||||
| if(film->modified(prevfilm)) | if(film->modified(prevfilm)) | ||||
| film->tag_update(scene); | film->tag_update(scene); | ||||
| } | } | ||||
| /* Render Layer */ | /* Render Layer */ | ||||
| void BlenderSync::sync_render_layers(BL::SpaceView3D& b_v3d, const char *layer) | void BlenderSync::sync_render_layers(BL::SpaceView3D& b_v3d, const char *layer) | ||||
| { | { | ||||
| PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles"); | |||||
| string layername; | string layername; | ||||
| /* 3d view */ | /* 3d view */ | ||||
| if(b_v3d) { | if(b_v3d) { | ||||
| BL::RenderLayers layers(b_scene.render().ptr); | layername = b_scene.render_layers.active().name(); | ||||
| layername = layers.active().name(); | |||||
| layer = layername.c_str(); | layer = layername.c_str(); | ||||
| } | } | ||||
| /* render layer */ | /* render layer */ | ||||
| BL::RenderSettings r = b_scene.render(); | BL::Scene::render_layers_iterator b_rlay; | ||||
| BL::RenderSettings::layers_iterator b_rlay; | |||||
| int use_layer_samples = get_enum(cscene, "use_layer_samples"); | |||||
| bool first_layer = true; | bool first_layer = true; | ||||
| uint layer_override = get_layer(b_engine.layer_override()); | uint layer_override = get_layer(b_engine.layer_override()); | ||||
| uint scene_layers = layer_override ? layer_override : get_layer(b_scene.layers()); | uint scene_layers = layer_override ? layer_override : get_layer(b_scene.layers()); | ||||
| for(r.layers.begin(b_rlay); b_rlay != r.layers.end(); ++b_rlay) { | for(b_scene.render_layers.begin(b_rlay); b_rlay != b_scene.render_layers.end(); ++b_rlay) { | ||||
| if((!layer && first_layer) || (layer && b_rlay->name() == layer)) { | if((!layer && first_layer) || (layer && b_rlay->name() == layer)) { | ||||
| render_layer.name = b_rlay->name(); | render_layer.name = b_rlay->name(); | ||||
| render_layer.holdout_layer = get_layer(b_rlay->layers_zmask()); | render_layer.holdout_layer = 0; | ||||
| render_layer.exclude_layer = get_layer(b_rlay->layers_exclude()); | render_layer.exclude_layer = 0; | ||||
| render_layer.scene_layer = scene_layers & ~render_layer.exclude_layer; | render_layer.scene_layer = scene_layers & ~render_layer.exclude_layer; | ||||
| render_layer.scene_layer |= render_layer.exclude_layer & render_layer.holdout_layer; | render_layer.scene_layer |= render_layer.exclude_layer & render_layer.holdout_layer; | ||||
| render_layer.layer = get_layer(b_rlay->layers()); | render_layer.layer = (1 << 20) - 1; | ||||
| render_layer.layer |= render_layer.holdout_layer; | render_layer.layer |= render_layer.holdout_layer; | ||||
| render_layer.material_override = b_rlay->material_override(); | render_layer.material_override = PointerRNA_NULL; | ||||
| render_layer.use_background_shader = b_rlay->use_sky(); | render_layer.use_background_shader = b_rlay->use_sky(); | ||||
| render_layer.use_background_ao = b_rlay->use_ao(); | render_layer.use_background_ao = b_rlay->use_ao(); | ||||
| render_layer.use_surfaces = b_rlay->use_solid(); | render_layer.use_surfaces = b_rlay->use_solid(); | ||||
| render_layer.use_hair = b_rlay->use_strand(); | render_layer.use_hair = b_rlay->use_strand(); | ||||
| render_layer.bound_samples = (use_layer_samples == 1); | render_layer.bound_samples = false; | ||||
| if(use_layer_samples != 2) { | render_layer.samples = 0; | ||||
| int samples = b_rlay->samples(); | |||||
| if(get_boolean(cscene, "use_square_samples")) | |||||
| render_layer.samples = samples * samples; | |||||
| else | |||||
| render_layer.samples = samples; | |||||
| } | |||||
| } | } | ||||
| first_layer = false; | first_layer = false; | ||||
| } | } | ||||
| } | } | ||||
| /* Images */ | /* Images */ | ||||
| void BlenderSync::sync_images() | void BlenderSync::sync_images() | ||||
| ▲ Show 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | #define MAP_PASS(passname, offset) if(name == passname) return offset; | ||||
| MAP_PASS("Image", DENOISING_PASS_COLOR); | MAP_PASS("Image", DENOISING_PASS_COLOR); | ||||
| MAP_PASS("Image Variance", DENOISING_PASS_COLOR_VAR); | MAP_PASS("Image Variance", DENOISING_PASS_COLOR_VAR); | ||||
| #undef MAP_PASS | #undef MAP_PASS | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| array<Pass> BlenderSync::sync_render_passes(BL::RenderLayer& b_rlay, | array<Pass> BlenderSync::sync_render_passes(BL::RenderLayer& b_rlay, | ||||
| BL::SceneRenderLayer& b_srlay, | BL::SceneLayer& b_slay, | ||||
| const SessionParams &session_params) | const SessionParams &session_params) | ||||
| { | { | ||||
| array<Pass> passes; | array<Pass> passes; | ||||
| Pass::add(PASS_COMBINED, passes); | Pass::add(PASS_COMBINED, passes); | ||||
| if(!session_params.device.advanced_shading) { | if(!session_params.device.advanced_shading) { | ||||
| return passes; | return passes; | ||||
| } | } | ||||
| /* loop over passes */ | /* loop over passes */ | ||||
| BL::RenderLayer::passes_iterator b_pass_iter; | BL::RenderLayer::passes_iterator b_pass_iter; | ||||
| for(b_rlay.passes.begin(b_pass_iter); b_pass_iter != b_rlay.passes.end(); ++b_pass_iter) { | for(b_rlay.passes.begin(b_pass_iter); b_pass_iter != b_rlay.passes.end(); ++b_pass_iter) { | ||||
| BL::RenderPass b_pass(*b_pass_iter); | BL::RenderPass b_pass(*b_pass_iter); | ||||
| PassType pass_type = get_pass_type(b_pass); | PassType pass_type = get_pass_type(b_pass); | ||||
| if(pass_type == PASS_MOTION && scene->integrator->motion_blur) | if(pass_type == PASS_MOTION && scene->integrator->motion_blur) | ||||
| continue; | continue; | ||||
| if(pass_type != PASS_NONE) | if(pass_type != PASS_NONE) | ||||
| Pass::add(pass_type, passes); | Pass::add(pass_type, passes); | ||||
| } | } | ||||
| PointerRNA crp = RNA_pointer_get(&b_srlay.ptr, "cycles"); | PointerRNA crp = RNA_pointer_get(&b_slay.ptr, "cycles"); | ||||
| if(get_boolean(crp, "denoising_store_passes") && | if(get_boolean(crp, "denoising_store_passes") && | ||||
| get_boolean(crp, "use_denoising")) | get_boolean(crp, "use_denoising")) | ||||
| { | { | ||||
| b_engine.add_pass("Denoising Normal", 3, "XYZ", b_srlay.name().c_str()); | b_engine.add_pass("Denoising Normal", 3, "XYZ", b_slay.name().c_str()); | ||||
| b_engine.add_pass("Denoising Normal Variance", 3, "XYZ", b_srlay.name().c_str()); | b_engine.add_pass("Denoising Normal Variance", 3, "XYZ", b_slay.name().c_str()); | ||||
| b_engine.add_pass("Denoising Albedo", 3, "RGB", b_srlay.name().c_str()); | b_engine.add_pass("Denoising Albedo", 3, "RGB", b_slay.name().c_str()); | ||||
| b_engine.add_pass("Denoising Albedo Variance", 3, "RGB", b_srlay.name().c_str()); | b_engine.add_pass("Denoising Albedo Variance", 3, "RGB", b_slay.name().c_str()); | ||||
| b_engine.add_pass("Denoising Depth", 1, "Z", b_srlay.name().c_str()); | b_engine.add_pass("Denoising Depth", 1, "Z", b_slay.name().c_str()); | ||||
| b_engine.add_pass("Denoising Depth Variance", 1, "Z", b_srlay.name().c_str()); | b_engine.add_pass("Denoising Depth Variance", 1, "Z", b_slay.name().c_str()); | ||||
| b_engine.add_pass("Denoising Shadow A", 3, "XYV", b_srlay.name().c_str()); | b_engine.add_pass("Denoising Shadow A", 3, "XYV", b_slay.name().c_str()); | ||||
| b_engine.add_pass("Denoising Shadow B", 3, "XYV", b_srlay.name().c_str()); | b_engine.add_pass("Denoising Shadow B", 3, "XYV", b_slay.name().c_str()); | ||||
| b_engine.add_pass("Denoising Image", 3, "RGB", b_srlay.name().c_str()); | b_engine.add_pass("Denoising Image", 3, "RGB", b_slay.name().c_str()); | ||||
| b_engine.add_pass("Denoising Image Variance", 3, "RGB", b_srlay.name().c_str()); | b_engine.add_pass("Denoising Image Variance", 3, "RGB", b_slay.name().c_str()); | ||||
| } | } | ||||
| #ifdef __KERNEL_DEBUG__ | #ifdef __KERNEL_DEBUG__ | ||||
| if(get_boolean(crp, "pass_debug_bvh_traversed_nodes")) { | if(get_boolean(crp, "pass_debug_bvh_traversed_nodes")) { | ||||
| b_engine.add_pass("Debug BVH Traversed Nodes", 1, "X", b_srlay.name().c_str()); | b_engine.add_pass("Debug BVH Traversed Nodes", 1, "X", b_slay.name().c_str()); | ||||
| Pass::add(PASS_BVH_TRAVERSED_NODES, passes); | Pass::add(PASS_BVH_TRAVERSED_NODES, passes); | ||||
| } | } | ||||
| if(get_boolean(crp, "pass_debug_bvh_traversed_instances")) { | if(get_boolean(crp, "pass_debug_bvh_traversed_instances")) { | ||||
| b_engine.add_pass("Debug BVH Traversed Instances", 1, "X", b_srlay.name().c_str()); | b_engine.add_pass("Debug BVH Traversed Instances", 1, "X", b_slay.name().c_str()); | ||||
| Pass::add(PASS_BVH_TRAVERSED_INSTANCES, passes); | Pass::add(PASS_BVH_TRAVERSED_INSTANCES, passes); | ||||
| } | } | ||||
| if(get_boolean(crp, "pass_debug_bvh_intersections")) { | if(get_boolean(crp, "pass_debug_bvh_intersections")) { | ||||
| b_engine.add_pass("Debug BVH Intersections", 1, "X", b_srlay.name().c_str()); | b_engine.add_pass("Debug BVH Intersections", 1, "X", b_slay.name().c_str()); | ||||
| Pass::add(PASS_BVH_INTERSECTIONS, passes); | Pass::add(PASS_BVH_INTERSECTIONS, passes); | ||||
| } | } | ||||
| if(get_boolean(crp, "pass_debug_ray_bounces")) { | if(get_boolean(crp, "pass_debug_ray_bounces")) { | ||||
| b_engine.add_pass("Debug Ray Bounces", 1, "X", b_srlay.name().c_str()); | b_engine.add_pass("Debug Ray Bounces", 1, "X", b_slay.name().c_str()); | ||||
| Pass::add(PASS_RAY_BOUNCES, passes); | Pass::add(PASS_RAY_BOUNCES, passes); | ||||
| } | } | ||||
| #endif | #endif | ||||
| return passes; | return passes; | ||||
| } | } | ||||
| /* Scene Parameters */ | /* Scene Parameters */ | ||||
| ▲ Show 20 Lines • Show All 213 Lines • ▼ Show 20 Lines | SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine, | ||||
| params.reset_timeout = (double)get_float(cscene, "debug_reset_timeout"); | params.reset_timeout = (double)get_float(cscene, "debug_reset_timeout"); | ||||
| params.text_timeout = (double)get_float(cscene, "debug_text_timeout"); | params.text_timeout = (double)get_float(cscene, "debug_text_timeout"); | ||||
| /* progressive refine */ | /* progressive refine */ | ||||
| params.progressive_refine = get_boolean(cscene, "use_progressive_refine") && | params.progressive_refine = get_boolean(cscene, "use_progressive_refine") && | ||||
| !b_r.use_save_buffers(); | !b_r.use_save_buffers(); | ||||
| if(params.progressive_refine) { | if(params.progressive_refine) { | ||||
| BL::RenderSettings::layers_iterator b_rlay; | BL::Scene::render_layers_iterator b_rlay; | ||||
| for(b_r.layers.begin(b_rlay); b_rlay != b_r.layers.end(); ++b_rlay) { | for(b_scene.render_layers.begin(b_rlay); b_rlay != b_scene.render_layers.end(); ++b_rlay) { | ||||
| PointerRNA crl = RNA_pointer_get(&b_rlay->ptr, "cycles"); | PointerRNA crl = RNA_pointer_get(&b_rlay->ptr, "cycles"); | ||||
| if(get_boolean(crl, "use_denoising")) { | if(get_boolean(crl, "use_denoising")) { | ||||
| params.progressive_refine = false; | params.progressive_refine = false; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if(background) { | if(background) { | ||||
| Show All 35 Lines | |||||