diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-03-08 06:04:52 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-03-10 08:27:19 +0300 |
commit | db333d9ea4881d9f48e3cc4b1ec59b4dafb27cc0 (patch) | |
tree | 6ac02ba4a284e6196ed345be775cbad6436f5d7f /intern/cycles/kernel/geom | |
parent | 78c2063685cb6e0d0bcb895cf4eb70686455d596 (diff) |
Cycles: support arbitrary number of motion blur steps for objects.
Diffstat (limited to 'intern/cycles/kernel/geom')
-rw-r--r-- | intern/cycles/kernel/geom/geom_object.h | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/intern/cycles/kernel/geom/geom_object.h b/intern/cycles/kernel/geom/geom_object.h index 67d039e1bc7..800649abf38 100644 --- a/intern/cycles/kernel/geom/geom_object.h +++ b/intern/cycles/kernel/geom/geom_object.h @@ -40,18 +40,12 @@ enum ObjectVectorTransform { ccl_device_inline Transform object_fetch_transform(KernelGlobals *kg, int object, enum ObjectTransform type) { - Transform tfm; if(type == OBJECT_INVERSE_TRANSFORM) { - tfm.x = kernel_tex_fetch(__objects, object).tfm.mid.x; - tfm.y = kernel_tex_fetch(__objects, object).tfm.mid.y; - tfm.z = kernel_tex_fetch(__objects, object).tfm.mid.z; + return kernel_tex_fetch(__objects, object).itfm; } else { - tfm.x = kernel_tex_fetch(__objects, object).tfm.pre.x; - tfm.y = kernel_tex_fetch(__objects, object).tfm.pre.y; - tfm.z = kernel_tex_fetch(__objects, object).tfm.pre.z; + return kernel_tex_fetch(__objects, object).tfm; } - return tfm; } /* Lamp to world space transformation */ @@ -79,10 +73,12 @@ ccl_device_inline Transform object_fetch_motion_pass_transform(KernelGlobals *kg #ifdef __OBJECT_MOTION__ ccl_device_inline Transform object_fetch_transform_motion(KernelGlobals *kg, int object, float time) { - const ccl_global DecomposedMotionTransform *motion = &kernel_tex_fetch(__objects, object).tfm; + const uint motion_offset = kernel_tex_fetch(__objects, object).motion_offset; + const ccl_global DecomposedTransform *motion = &kernel_tex_fetch(__object_motion, motion_offset); + const uint num_steps = kernel_tex_fetch(__objects, object).numsteps * 2 + 1; Transform tfm; - transform_motion_array_interpolate(&tfm, &motion->pre, 3, time); + transform_motion_array_interpolate(&tfm, motion, num_steps, time); return tfm; } |