Cycles: Fix denoising passes being written when they're not actually generated

This commit is contained in:
Lukas Stockner 2017-06-09 23:02:56 +02:00
parent 0a898e2405
commit c73206acc5
5 changed files with 15 additions and 12 deletions

@ -239,7 +239,8 @@ def register_passes(engine, scene, srl):
if crl.pass_debug_bvh_intersections: engine.register_pass(scene, srl, "Debug BVH Intersections", 1, "X", 'VALUE') if crl.pass_debug_bvh_intersections: engine.register_pass(scene, srl, "Debug BVH Intersections", 1, "X", 'VALUE')
if crl.pass_debug_ray_bounces: engine.register_pass(scene, srl, "Debug Ray Bounces", 1, "X", 'VALUE') if crl.pass_debug_ray_bounces: engine.register_pass(scene, srl, "Debug Ray Bounces", 1, "X", 'VALUE')
if crl.use_denoising and crl.denoising_store_passes: cscene = scene.cycles
if crl.use_denoising and crl.denoising_store_passes and not cscene.use_progressive_refine:
engine.register_pass(scene, srl, "Denoising Normal", 3, "XYZ", 'VECTOR') engine.register_pass(scene, srl, "Denoising Normal", 3, "XYZ", 'VECTOR')
engine.register_pass(scene, srl, "Denoising Normal Variance", 3, "XYZ", 'VECTOR') engine.register_pass(scene, srl, "Denoising Normal Variance", 3, "XYZ", 'VECTOR')
engine.register_pass(scene, srl, "Denoising Albedo", 3, "RGB", 'COLOR') engine.register_pass(scene, srl, "Denoising Albedo", 3, "RGB", 'COLOR')

@ -1209,6 +1209,7 @@ class CyclesRenderLayerSettings(bpy.types.PropertyGroup):
name="Use Denoising", name="Use Denoising",
description="Denoise the rendered image", description="Denoise the rendered image",
default=False, default=False,
update=update_render_passes,
) )
cls.denoising_diffuse_direct = BoolProperty( cls.denoising_diffuse_direct = BoolProperty(
name="Diffuse Direct", name="Diffuse Direct",

@ -399,14 +399,7 @@ void BlenderSession::render()
BL::RenderLayer b_rlay = *b_single_rlay; BL::RenderLayer b_rlay = *b_single_rlay;
/* add passes */ /* add passes */
array<Pass> passes; array<Pass> passes = sync->sync_render_passes(b_rlay, *b_layer_iter, session_params);
if(session_params.device.advanced_shading) {
passes = sync->sync_render_passes(b_rlay, *b_layer_iter);
}
else {
Pass::add(PASS_COMBINED, passes);
}
buffer_params.passes = passes; buffer_params.passes = passes;
PointerRNA crl = RNA_pointer_get(&b_layer_iter->ptr, "cycles"); PointerRNA crl = RNA_pointer_get(&b_layer_iter->ptr, "cycles");

@ -553,11 +553,16 @@ int BlenderSync::get_denoising_pass(BL::RenderPass& b_pass)
} }
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::SceneRenderLayer& b_srlay,
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) {
return passes;
}
/* loop over passes */ /* loop over passes */
BL::RenderLayer::passes_iterator b_pass_iter; BL::RenderLayer::passes_iterator b_pass_iter;
@ -572,7 +577,9 @@ array<Pass> BlenderSync::sync_render_passes(BL::RenderLayer& b_rlay,
} }
PointerRNA crp = RNA_pointer_get(&b_srlay.ptr, "cycles"); PointerRNA crp = RNA_pointer_get(&b_srlay.ptr, "cycles");
if(get_boolean(crp, "denoising_store_passes")) { if(get_boolean(crp, "denoising_store_passes") &&
get_boolean(crp, "use_denoising") &&
!session_params.progressive_refine) {
b_engine.add_pass("Denoising Normal", 3, "XYZ", b_srlay.name().c_str()); b_engine.add_pass("Denoising Normal", 3, "XYZ", b_srlay.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_srlay.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_srlay.name().c_str());

@ -68,7 +68,8 @@ public:
const char *layer = 0); const char *layer = 0);
void sync_render_layers(BL::SpaceView3D& b_v3d, const char *layer); void sync_render_layers(BL::SpaceView3D& b_v3d, const char *layer);
array<Pass> sync_render_passes(BL::RenderLayer& b_rlay, array<Pass> sync_render_passes(BL::RenderLayer& b_rlay,
BL::SceneRenderLayer& b_srlay); BL::SceneRenderLayer& b_srlay,
const SessionParams &session_params);
void sync_integrator(); void sync_integrator();
void sync_camera(BL::RenderSettings& b_render, void sync_camera(BL::RenderSettings& b_render,
BL::Object& b_override, BL::Object& b_override,