Collision: skip expensive BVH update if the collider doesn't move.
Since the collision modifier cannot be disabled, it causes a constant hit on the viewport animation playback FPS. Most of this overhead can be automatically removed in the case when the collider is static. The updates are only skipped when the collider was stationary during the preceding update as well, so the state is stored in a field. Knowing that the collider is static can also be used to disable similar BVH updates for substeps in the actual cloth simulation code. Differential Revision: https://developer.blender.org/D2277
This commit is contained in:
@@ -71,6 +71,15 @@ void collision_move_object(CollisionModifierData *collmd, float step, float prev
|
||||
float tv[3] = {0, 0, 0};
|
||||
unsigned int i = 0;
|
||||
|
||||
/* the collider doesn't move this frame */
|
||||
if (collmd->is_static) {
|
||||
for (i = 0; i < collmd->mvert_num; i++) {
|
||||
zero_v3(collmd->current_v[i].co);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < collmd->mvert_num; i++) {
|
||||
sub_v3_v3v3(tv, collmd->xnew[i].co, collmd->x[i].co);
|
||||
VECADDS(collmd->current_x[i].co, collmd->x[i].co, tv, prevstep);
|
||||
|
||||
Reference in New Issue
Block a user