Fix #33344: cycles motion blur was still crashing on CUDA sm 2.0. Solution now
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Thu, 29 Nov 2012 13:07:45 +0000 (13:07 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Thu, 29 Nov 2012 13:07:45 +0000 (13:07 +0000)
is also an optimization, use quaternion nlerp instead of slerp, there's no good
reason to use slerp, and nlerp is faster too.

intern/cycles/util/util_transform.h

index dbf88cb67a0c8ecd31273dd4bc81e3eaede9761d..a1c12ddf0e1f1fce0a3390a4c4d86274edd75a46 100644 (file)
@@ -311,6 +311,10 @@ __device_inline Transform transform_clear_scale(const Transform& tfm)
 
 __device_inline float4 quat_interpolate(float4 q1, float4 q2, float t)
 {
+       /* use simpe nlerp instead of slerp. it's faster and almost the same */
+       return normalize((1.0f - t)*q1 + t*q2);
+
+#if 0
        /* note: this does not ensure rotation around shortest angle, q1 and q2
         * are assumed to be matched already in transform_motion_decompose */
        float costheta = dot(q1, q2);
@@ -328,6 +332,7 @@ __device_inline float4 quat_interpolate(float4 q1, float4 q2, float t)
                float thetap = theta * t;
                return q1 * cosf(thetap) + qperp * sinf(thetap);
        }
+#endif
 }
 
 __device_inline Transform transform_quick_inverse(Transform M)