[Bf-blender-cvs] [4fb0eb3a6e8] master: Minor fixes after introducing special BVH traversal for self-collision.
Alexander Gavrilov
noreply at git.blender.org
Fri Jan 6 01:37:12 CET 2023
Commit: 4fb0eb3a6e86af03724c3f31d5bbdcca0daba524
Author: Alexander Gavrilov
Date: Fri Jan 6 02:34:39 2023 +0200
Branches: master
https://developer.blender.org/rB4fb0eb3a6e86af03724c3f31d5bbdcca0daba524
Minor fixes after introducing special BVH traversal for self-collision.
- Add parentheses to suppress an assertion on some compilers.
- It turns out cloth self-collision math is not precisely symmetric,
so sort the triangle index pair to restore behavior exactly identical
to the version before the new traversal.
Follow up to rB0796210c8df32
===================================================================
M source/blender/blenkernel/intern/collision.c
M source/blender/blenlib/intern/BLI_kdopbvh.c
===================================================================
diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index cd34ae29efb..bf814b7c595 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -1115,8 +1115,15 @@ static void cloth_selfcollision(void *__restrict userdata,
float epsilon = clmd->coll_parms->selfepsilon;
float pa[3], pb[3], vect[3];
- tri_a = &clmd->clothObject->tri[data->overlap[index].indexA];
- tri_b = &clmd->clothObject->tri[data->overlap[index].indexB];
+ /* Collision math is currently not symmetric, so ensure a stable order for each pair. */
+ int indexA = data->overlap[index].indexA, indexB = data->overlap[index].indexB;
+
+ if (indexA > indexB) {
+ SWAP(int, indexA, indexB);
+ }
+
+ tri_a = &clmd->clothObject->tri[indexA];
+ tri_b = &clmd->clothObject->tri[indexB];
BLI_assert(cloth_bvh_selfcollision_is_active(clmd, clmd->clothObject, tri_a, tri_b));
diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c b/source/blender/blenlib/intern/BLI_kdopbvh.c
index 174a53be6da..4e958209f78 100644
--- a/source/blender/blenlib/intern/BLI_kdopbvh.c
+++ b/source/blender/blenlib/intern/BLI_kdopbvh.c
@@ -1335,7 +1335,7 @@ BVHTreeOverlap *BLI_bvhtree_overlap_ex(
/* 'RETURN_PAIRS' was not implemented without 'max_interactions'. */
BLI_assert(overlap_pairs || max_interactions);
/* Self-overlap does not support max interactions (it's not symmetrical). */
- BLI_assert(!use_self || tree1 == tree2 && !max_interactions);
+ BLI_assert(!use_self || (tree1 == tree2 && !max_interactions));
const int root_node_len = BLI_bvhtree_overlap_thread_num(tree1);
const int thread_num = use_threading ? root_node_len : 1;
More information about the Bf-blender-cvs
mailing list