From c10c6b1cea90fd863f56606adb87ab0261e03140 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 15 Oct 2012 17:56:40 +0000 Subject: [PATCH] Fix #32844: cycles camera motion blur producing completely blurred frames sometimes. --- intern/cycles/util/util_transform.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/intern/cycles/util/util_transform.h b/intern/cycles/util/util_transform.h index d93bbff5415..3d6aefed56d 100644 --- a/intern/cycles/util/util_transform.h +++ b/intern/cycles/util/util_transform.h @@ -304,10 +304,18 @@ __device_inline float4 quat_interpolate(float4 q1, float4 q2, float t) { float costheta = dot(q1, q2); + /* rotate around shortest angle */ + if(costheta < 0.0f) { + costheta = -costheta; + q1 = -q1; + } + if(costheta > 0.9995f) { + /* linear interpolation in degenerate case */ return normalize((1.0f - t)*q1 + t*q2); } else { + /* slerp */ float theta = acosf(clamp(costheta, -1.0f, 1.0f)); float thetap = theta * t; float4 qperp = normalize(q2 - q1 * costheta);