diff options
author | Brecht Van Lommel <brecht@blender.org> | 2020-02-18 16:02:40 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2020-02-18 17:38:11 +0300 |
commit | cef4d344f948ce75a7787ad0c3915c87e1716ca1 (patch) | |
tree | 58850220311846540171ab2a00ca75808d859741 /intern/cycles/blender/blender_util.h | |
parent | 003a97e0bf509c7eb8b1ae6bdc3f26976d514ab2 (diff) |
Fix Embree failing on objects with a very high number of motion steps
Set the limit to 129 to match Embree. This applies to all devices for
consistent render results.
Ref T73778
Diffstat (limited to 'intern/cycles/blender/blender_util.h')
-rw-r--r-- | intern/cycles/blender/blender_util.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h index cb7d1c62f60..ad90a5f8d52 100644 --- a/intern/cycles/blender/blender_util.h +++ b/intern/cycles/blender/blender_util.h @@ -483,7 +483,9 @@ static inline void mesh_texture_space(BL::Mesh &b_mesh, float3 &loc, float3 &siz } /* Object motion steps, returns 0 if no motion blur needed. */ -static inline uint object_motion_steps(BL::Object &b_parent, BL::Object &b_ob) +static inline uint object_motion_steps(BL::Object &b_parent, + BL::Object &b_ob, + const int max_steps = INT_MAX) { /* Get motion enabled and steps from object itself. */ PointerRNA cobject = RNA_pointer_get(&b_ob.ptr, "cycles"); @@ -492,7 +494,7 @@ static inline uint object_motion_steps(BL::Object &b_parent, BL::Object &b_ob) return 0; } - uint steps = max(1, get_int(cobject, "motion_steps")); + int steps = max(1, get_int(cobject, "motion_steps")); /* Also check parent object, so motion blur and steps can be * controlled by dupligroup duplicator for linked groups. */ @@ -510,7 +512,7 @@ static inline uint object_motion_steps(BL::Object &b_parent, BL::Object &b_ob) /* Use uneven number of steps so we get one keyframe at the current frame, * and use 2^(steps - 1) so objects with more/fewer steps still have samples * at the same times, to avoid sampling at many different times. */ - return (2 << (steps - 1)) + 1; + return min((2 << (steps - 1)) + 1, max_steps); } /* object uses deformation motion blur */ |