From ee0928d4be6e1f502eb7208f821d8e049795dadd Mon Sep 17 00:00:00 2001 From: Olivier Maury Date: Fri, 7 Jan 2022 17:07:08 +0100 Subject: Fix wrong shadow terminator geometry offset for instances Must take into account SD_OBJECT_TRANSFORM_APPLIED to determine if the normal was already in world space. Differential Revision: https://developer.blender.org/D13639 --- intern/cycles/kernel/light/sample.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'intern') diff --git a/intern/cycles/kernel/light/sample.h b/intern/cycles/kernel/light/sample.h index b6662c7f6b3..5a4b7c0a302 100644 --- a/intern/cycles/kernel/light/sample.h +++ b/intern/cycles/kernel/light/sample.h @@ -148,7 +148,9 @@ ccl_device_inline float3 shadow_ray_smooth_surface_offset( float3 P = V[0] * u + V[1] * v + V[2] * w; /* Local space */ float3 n = N[0] * u + N[1] * v + N[2] * w; /* We get away without normalization */ - object_normal_transform(kg, sd, &n); /* Normal x scale, world space */ + if (!(sd->object_flag & SD_OBJECT_TRANSFORM_APPLIED)) { + object_normal_transform(kg, sd, &n); /* Normal x scale, world space */ + } /* Parabolic approximation */ float a = dot(N[2] - N[0], V[0] - V[2]); -- cgit v1.2.3