Fix #32844: cycles camera motion blur producing completely blurred frames sometimes.
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Mon, 15 Oct 2012 17:56:40 +0000 (17:56 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Mon, 15 Oct 2012 17:56:40 +0000 (17:56 +0000)
intern/cycles/util/util_transform.h

index d93bbff5415d3cc0303ff994be87863792b1247a..3d6aefed56da01aaf79a0ae9137b164185fc407c 100644 (file)
@@ -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);