From 204b01a254ac2445fea217e5211b2ed6aef631ca Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 22 Sep 2021 16:01:58 +0200 Subject: Fix T91590: Cycles specular baking not using smooth normal --- .../cycles/kernel/integrator/integrator_init_from_bake.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'intern/cycles/kernel') diff --git a/intern/cycles/kernel/integrator/integrator_init_from_bake.h b/intern/cycles/kernel/integrator/integrator_init_from_bake.h index 4898ff936c6..96db606cee1 100644 --- a/intern/cycles/kernel/integrator/integrator_init_from_bake.h +++ b/intern/cycles/kernel/integrator/integrator_init_from_bake.h @@ -112,8 +112,6 @@ ccl_device bool integrator_init_from_bake(INTEGRATOR_STATE_ARGS, float3 P, Ng; int shader; triangle_point_normal(kg, kernel_data.bake.object_index, prim, u, v, &P, &Ng, &shader); - shader &= SHADER_MASK; - if (kernel_data.film.pass_background != PASS_UNUSED) { /* Environment baking. */ @@ -132,11 +130,13 @@ ccl_device bool integrator_init_from_bake(INTEGRATOR_STATE_ARGS, } else { /* Surface baking. */ + const float3 N = (shader & SHADER_SMOOTH_NORMAL) ? triangle_smooth_normal(kg, Ng, prim, u, v) : + Ng; /* Setup ray. */ Ray ray ccl_optional_struct_init; - ray.P = P + Ng; - ray.D = -Ng; + ray.P = P + N; + ray.D = -N; ray.t = FLT_MAX; ray.time = 0.5f; @@ -166,12 +166,13 @@ ccl_device bool integrator_init_from_bake(INTEGRATOR_STATE_ARGS, integrator_state_write_isect(INTEGRATOR_STATE_PASS, &isect); /* Setup next kernel to execute. */ - const int shader_flags = kernel_tex_fetch(__shaders, shader).flags; + const int shader_index = shader & SHADER_MASK; + const int shader_flags = kernel_tex_fetch(__shaders, shader_index).flags; if ((shader_flags & SD_HAS_RAYTRACE) || (kernel_data.film.pass_ao != PASS_UNUSED)) { - INTEGRATOR_PATH_INIT_SORTED(DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE_RAYTRACE, shader); + INTEGRATOR_PATH_INIT_SORTED(DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE_RAYTRACE, shader_index); } else { - INTEGRATOR_PATH_INIT_SORTED(DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE, shader); + INTEGRATOR_PATH_INIT_SORTED(DEVICE_KERNEL_INTEGRATOR_SHADE_SURFACE, shader_index); } } -- cgit v1.2.3