diff options
author | Lukas Stockner <lukas.stockner@freenet.de> | 2016-08-21 06:38:48 +0300 |
---|---|---|
committer | Lukas Stockner <lukas.stockner@freenet.de> | 2016-08-21 06:38:48 +0300 |
commit | c5e9fabe19c8721e6c4541ee0f75bdd82accca13 (patch) | |
tree | 0b7e8bff0f3b1b210f37724d1c0a51f956cc0b30 /intern/cycles/kernel/kernel_passes.h | |
parent | 98dfe6f80035eae4de737ac883a48da304f67665 (diff) | |
parent | c00b2d89911e20c8ace12a9256c689e9f43cc63b (diff) |
Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising
This was an extremely hacky merge with a lot of rebasing and git tricks involved, I hope it works as it's supposed to.
Diffstat (limited to 'intern/cycles/kernel/kernel_passes.h')
-rw-r--r-- | intern/cycles/kernel/kernel_passes.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/intern/cycles/kernel/kernel_passes.h b/intern/cycles/kernel/kernel_passes.h index 39642a61cb0..8010165d217 100644 --- a/intern/cycles/kernel/kernel_passes.h +++ b/intern/cycles/kernel/kernel_passes.h @@ -187,10 +187,16 @@ ccl_device_inline bool kernel_write_denoising_passes(KernelGlobals *kg, ccl_glob } else { ShaderClosure *max_sc = ccl_fetch_array(sd, closure, max_weight_closure); - if(max_sc->roughness <= 0.075f) { - /* This bounce is almost specular, so don't write the data yet. */ + if(max_sc->type == CLOSURE_BSDF_TRANSPARENT_ID) { return false; } + if(CLOSURE_IS_BSDF_MICROFACET(max_sc->type)) { + /* Check for roughness, almost specular surfaces don't write data. */ + MicrofacetBsdf *bsdf = (MicrofacetBsdf*) max_sc; + if(bsdf->alpha_x*bsdf->alpha_y <= 0.075f*0.075f) { + return false; + } + } kernel_write_pass_float3_var(buffer, sample, ensure_finite3(normal/sum_weight)); kernel_write_pass_float3_var(buffer + 6, sample, ensure_finite3(albedo)); kernel_write_pass_float_var(buffer + 12, sample, ensure_finite(state->path_length)); |