Fix #32900: object motion blur not working on the GPU. To make this work I disabled motion
blurring of scale animation, probably not a big loss in practice since it's not so common to animate this, can be added back later.
This commit is contained in:
@@ -56,7 +56,7 @@ void Object::compute_bounds(bool motion_blur, float shuttertime)
|
||||
BoundBox mbounds = mesh->bounds;
|
||||
|
||||
if(motion_blur && use_motion) {
|
||||
MotionTransform decomp;
|
||||
DecompMotionTransform decomp;
|
||||
transform_motion_decompose(&decomp, &motion, &tfm);
|
||||
|
||||
bounds = BoundBox::empty;
|
||||
@@ -222,29 +222,29 @@ void ObjectManager::device_update_transforms(Device *device, DeviceScene *dscene
|
||||
mtfm_post = mtfm_post * itfm;
|
||||
|
||||
memcpy(&objects[offset+8], &mtfm_pre, sizeof(float4)*4);
|
||||
memcpy(&objects[offset+16], &mtfm_post, sizeof(float4)*4);
|
||||
memcpy(&objects[offset+12], &mtfm_post, sizeof(float4)*4);
|
||||
}
|
||||
#ifdef __OBJECT_MOTION__
|
||||
else if(need_motion == Scene::MOTION_BLUR) {
|
||||
if(ob->use_motion) {
|
||||
/* decompose transformations for interpolation */
|
||||
MotionTransform decomp;
|
||||
DecompMotionTransform decomp;
|
||||
|
||||
transform_motion_decompose(&decomp, &ob->motion, &ob->tfm);
|
||||
memcpy(&objects[offset+8], &decomp, sizeof(float4)*12);
|
||||
memcpy(&objects[offset+8], &decomp, sizeof(float4)*8);
|
||||
flag |= SD_OBJECT_MOTION;
|
||||
have_motion = true;
|
||||
}
|
||||
else {
|
||||
float4 no_motion = make_float4(FLT_MAX);
|
||||
memcpy(&objects[offset+8], &no_motion, sizeof(float4)*12);
|
||||
memcpy(&objects[offset+8], &no_motion, sizeof(float4)*8);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* dupli object coords */
|
||||
objects[offset+20] = make_float4(ob->dupli_generated[0], ob->dupli_generated[1], ob->dupli_generated[2], 0.0f);
|
||||
objects[offset+21] = make_float4(ob->dupli_uv[0], ob->dupli_uv[1], 0.0f, 0.0f);
|
||||
objects[offset+16] = make_float4(ob->dupli_generated[0], ob->dupli_generated[1], ob->dupli_generated[2], 0.0f);
|
||||
objects[offset+17] = make_float4(ob->dupli_uv[0], ob->dupli_uv[1], 0.0f, 0.0f);
|
||||
|
||||
/* object flag */
|
||||
if(ob->use_holdout)
|
||||
|
Reference in New Issue
Block a user