From db59f30f2bf627bee61a664b28a0f97f53b7b9dd Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 4 Nov 2018 20:13:55 +0100 Subject: [PATCH 1/3] Fix assert rendering with denoising, after recent changes. --- intern/cycles/blender/addon/engine.py | 2 +- intern/cycles/render/buffers.cpp | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/intern/cycles/blender/addon/engine.py b/intern/cycles/blender/addon/engine.py index 55638415e66..23239ee4352 100644 --- a/intern/cycles/blender/addon/engine.py +++ b/intern/cycles/blender/addon/engine.py @@ -266,7 +266,7 @@ def register_passes(engine, scene, srl): engine.register_pass(scene, srl, "CryptoAsset" + '{:02d}'.format(i), 4, "RGBA", 'COLOR') if crl.use_denoising or crl.denoising_store_passes: - engine.register_pass(scene, srl, "Noisy Image", 3, "RGBA", 'COLOR') + engine.register_pass(scene, srl, "Noisy Image", 4, "RGBA", 'COLOR') if crl.denoising_store_passes: engine.register_pass(scene, srl, "Denoising Normal", 3, "XYZ", 'VECTOR') engine.register_pass(scene, srl, "Denoising Normal Variance", 3, "XYZ", 'VECTOR') diff --git a/intern/cycles/render/buffers.cpp b/intern/cycles/render/buffers.cpp index dd20efb3dde..f901885e679 100644 --- a/intern/cycles/render/buffers.cpp +++ b/intern/cycles/render/buffers.cpp @@ -147,7 +147,7 @@ bool RenderBuffers::copy_from_device() return true; } -bool RenderBuffers::get_denoising_pass_rect(int offset, float exposure, int sample, int components, float *pixels) +bool RenderBuffers::get_denoising_pass_rect(int type, float exposure, int sample, int components, float *pixels) { if(buffer.data() == NULL) { return false; @@ -155,20 +155,20 @@ bool RenderBuffers::get_denoising_pass_rect(int offset, float exposure, int samp float invsample = 1.0f/sample; float scale = invsample; - bool variance = (offset == DENOISING_PASS_NORMAL_VAR) || - (offset == DENOISING_PASS_ALBEDO_VAR) || - (offset == DENOISING_PASS_DEPTH_VAR) || - (offset == DENOISING_PASS_COLOR_VAR); + bool variance = (type == DENOISING_PASS_NORMAL_VAR) || + (type == DENOISING_PASS_ALBEDO_VAR) || + (type == DENOISING_PASS_DEPTH_VAR) || + (type == DENOISING_PASS_COLOR_VAR); float scale_exposure = scale; - if(offset == DENOISING_PASS_COLOR || offset == DENOISING_PASS_CLEAN) { + if(type == DENOISING_PASS_COLOR || type == DENOISING_PASS_CLEAN) { scale_exposure *= exposure; } - else if(offset == DENOISING_PASS_COLOR_VAR) { + else if(type == DENOISING_PASS_COLOR_VAR) { scale_exposure *= exposure*exposure; } - offset += params.get_denoising_offset(); + int offset = type + params.get_denoising_offset(); int pass_stride = params.get_passes_size(); int size = params.width*params.height; @@ -212,7 +212,7 @@ bool RenderBuffers::get_denoising_pass_rect(int offset, float exposure, int samp } } else if(components == 4) { - assert(offset == DENOISING_PASS_COLOR); + assert(type == DENOISING_PASS_COLOR); /* Since the alpha channel is not involved in denoising, output the Combined alpha channel. */ assert(params.passes[0].type == PASS_COMBINED); From ea8e45de298c7a736dd244795a67f33c9d0bc514 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 4 Nov 2018 20:25:57 +0100 Subject: [PATCH 2/3] Fix assert rendering hair tests on some systems. --- intern/cycles/kernel/closure/bsdf_hair_principled.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/intern/cycles/kernel/closure/bsdf_hair_principled.h b/intern/cycles/kernel/closure/bsdf_hair_principled.h index b3b56be39ff..720517380ce 100644 --- a/intern/cycles/kernel/closure/bsdf_hair_principled.h +++ b/intern/cycles/kernel/closure/bsdf_hair_principled.h @@ -296,7 +296,7 @@ ccl_device float3 bsdf_principled_hair_eval(KernelGlobals *kg, float3 Y = float4_to_float3(bsdf->extra->geom); float3 X = safe_normalize(sd->dPdu); - kernel_assert(fabsf(dot(X, Y)) < 1e-4f); + kernel_assert(fabsf(dot(X, Y)) < 1e-3f); float3 Z = safe_normalize(cross(X, Y)); float3 wo = make_float3(dot(sd->I, X), dot(sd->I, Y), dot(sd->I, Z)); @@ -378,7 +378,7 @@ ccl_device int bsdf_principled_hair_sample(KernelGlobals *kg, float3 Y = float4_to_float3(bsdf->extra->geom); float3 X = safe_normalize(sd->dPdu); - kernel_assert(fabsf(dot(X, Y)) < 1e-4f); + kernel_assert(fabsf(dot(X, Y)) < 1e-3f); float3 Z = safe_normalize(cross(X, Y)); float3 wo = make_float3(dot(sd->I, X), dot(sd->I, Y), dot(sd->I, Z)); From b98f76cd90a14d500fb9a059b95aa32c3ab9e6e4 Mon Sep 17 00:00:00 2001 From: Irie Shinsuke Date: Sun, 4 Nov 2018 20:34:02 +0100 Subject: [PATCH 3/3] Fix T57388: Blender Internal + Freestyle viewport render wrongly using FSAA. --- .../intern/blender_interface/BlenderStrokeRenderer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp index 9c3ff8999b7..0b672ca6adb 100644 --- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp +++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp @@ -96,7 +96,8 @@ BlenderStrokeRenderer::BlenderStrokeRenderer(Render *re, int render_count) : Str //freestyle_scene->r.maximsize = old_scene->r.maximsize; /* DEPRECATED */ freestyle_scene->r.ocres = old_scene->r.ocres; freestyle_scene->r.color_mgt_flag = 0; // old_scene->r.color_mgt_flag; - freestyle_scene->r.scemode = old_scene->r.scemode & ~(R_SINGLE_LAYER | R_NO_FRAME_UPDATE | R_MULTIVIEW); + freestyle_scene->r.scemode = (old_scene->r.scemode & ~(R_SINGLE_LAYER | R_NO_FRAME_UPDATE | R_MULTIVIEW)) & + (re->r.scemode | ~R_FULL_SAMPLE); freestyle_scene->r.flag = old_scene->r.flag; freestyle_scene->r.threads = old_scene->r.threads; freestyle_scene->r.border.xmin = old_scene->r.border.xmin;