Commit: ef8be26944369942efff9b1828c6566e48ba7f22
Author: mattoverby
Date: Wed Aug 19 13:28:27 2020 -0500
Branches: soc-2020-soft-body
https://developer.blender.org/rBef8be26944369942efff9b1828c6566e48ba7f22
printout in collision detection
===================================================================
M extern/softbody/src/admmpd_collision.cpp
M extern/softbody/src/admmpd_log.cpp
M extern/softbody/src/admmpd_mesh.cpp
M extern/softbody/src/admmpd_types.h
===================================================================
diff --git a/extern/softbody/src/admmpd_collision.cpp
b/extern/softbody/src/admmpd_collision.cpp
index 54d3e402e2f..1c42a7b1b19 100644
--- a/extern/softbody/src/admmpd_collision.cpp
+++ b/extern/softbody/src/admmpd_collision.cpp
@@ -171,8 +171,9 @@ int EmbeddedMeshCollision::detect(
// We store the results of the collisions in a per-vertex buffer.
// This is a workaround so we can create them in threads.
int nev = mesh->rest_facet_verts()->rows();
- if ((int)per_vertex_pairs.size() != nev)
+ if ((int)per_vertex_pairs.size() != nev) {
per_vertex_pairs.resize(nev, std::vector<VFCollisionPair>());
+ }
//
// Thread data for detection
@@ -215,6 +216,10 @@ int EmbeddedMeshCollision::detect(
Vector3d pt_t0 = td->mesh->get_mapped_facet_vertex(td->x0,vi);
Vector3d pt_t1 = td->mesh->get_mapped_facet_vertex(td->x1,vi);
+ if (td->options->log_level >= LOGLEVEL_DEBUG) {
+ printf("\tDetecting collisions for emb vertex %d: %f %f
%f\n", vi, pt_t1[0], pt_t1[1], pt_t1[2]);
+ }
+
// Special case, check if we are below the floor
if (pt_t1[2] < td->options->floor)
{
@@ -304,6 +309,9 @@ int EmbeddedMeshCollision::detect(
// all of the BVH traversals and the other threads do none.
// I haven't actually profiled this, so maybe I'm wrong.
int max_threads = std::max(1, std::min(nev,
admmpd::get_max_threads(options)));
+ if (options->log_level >= LOGLEVEL_DEBUG) {
+ max_threads = 1;
+ }
const auto & per_thread_function =
[&per_embedded_vertex_detect,&max_threads,&nev]
(DetectThreadData *td, int thread_idx)
{
diff --git a/extern/softbody/src/admmpd_log.cpp
b/extern/softbody/src/admmpd_log.cpp
index 28c196928a6..c979cbd8ef5 100644
--- a/extern/softbody/src/admmpd_log.cpp
+++ b/extern/softbody/src/admmpd_log.cpp
@@ -56,6 +56,7 @@ std::string Logger::state_string(int state)
{
default: break;
case SOLVERSTATE_INIT: str="init"; break;
+ case SOLVERSTATE_MESHCREATE: str="mesh_init"; break;
case SOLVERSTATE_SOLVE: str="solve"; break;
case SOLVERSTATE_INIT_SOLVE: str="init_solve"; break;
case SOLVERSTATE_LOCAL_STEP: str="local_step"; break;
diff --git a/extern/softbody/src/admmpd_mesh.cpp
b/extern/softbody/src/admmpd_mesh.cpp
index 8b9f6158cf6..193ff6313f2 100644
--- a/extern/softbody/src/admmpd_mesh.cpp
+++ b/extern/softbody/src/admmpd_mesh.cpp
@@ -4,6 +4,7 @@
#include "admmpd_mesh.h"
#include "admmpd_geom.h"
#include "admmpd_timer.h"
+#include "admmpd_log.h"
#include <unordered_map>
#include <set>
#include <iostream>
@@ -70,12 +71,18 @@ bool EmbeddedMesh::create(
const unsigned int *tets, // ignored
int nt)
{
- (void)(options);
+ admmpd::Logger log(options->log_level);
+ log.start_state(SOLVERSTATE_MESHCREATE);
+
P_updated = true;
- if (nv<=0 || verts == nullptr)
+ if (nv<=0 || verts == nullptr) {
+ log.stop_state(SOLVERSTATE_MESHCREATE);
return false;
- if (nf<=0 || faces == nullptr)
+ }
+ if (nf<=0 || faces == nullptr) {
+ log.stop_state(SOLVERSTATE_MESHCREATE);
return false;
+ }
(void)(tets);
(void)(nt);
@@ -185,6 +192,10 @@ bool EmbeddedMesh::create(
if (emb_V0.rows()==0)
throw_err("create","Did not set verts");
+ log.stop_state(SOLVERSTATE_MESHCREATE);
+ if (options->log_level >= LOGLEVEL_DEBUG) {
+ printf("%s\n",log.to_string().c_str());
+ }
return true;
}
@@ -289,11 +300,6 @@ bool EmbeddedMesh::compute_embedding(const admmpd::Options
*options)
FindTetThreadData *td = (FindTetThreadData*)userdata;
const MatrixXd *emb_x0 = td->emb_mesh->rest_facet_verts();
Vector3d pt = emb_x0->row(i);
-
- if (td->opt->log_level >= LOGLEVEL_DEBUG) {
- printf("\tTesting vertex %d\n", i);
- }
-
PointInTetMeshTraverse<double> traverser(
pt,
td->lat_V0,
@@ -313,6 +319,15 @@ bool EmbeddedMesh::compute_embedding(const admmpd::Options
*options)
td->emb_v_to_tet->operator[](i) = tet_idx;
Vector4d b =
geom::point_tet_barys<double>(pt,t[0],t[1],t[2],t[3]);
td->emb_barys->row(i) = b;
+
+ if (td->opt->log_level >= LOGLEVEL_DEBUG) {
+ printf("\tFound embedding for %d: %f %f %f
%f\n", i, b[0],b[1],b[2],b[3]);
+ }
+ }
+ else {
+ if (td->opt->log_level >= LOGLEVEL_DEBUG) {
+ printf("\tDid NOT find embedding for %d!\n", i);
+ }
}
}; // end parallel find tet
diff --git a/extern/softbody/src/admmpd_types.h
b/extern/softbody/src/admmpd_types.h
index 48640268a99..5e512fb1dce 100644
--- a/extern/softbody/src/admmpd_types.h
+++ b/extern/softbody/src/admmpd_types.h
@@ -36,13 +36,14 @@ typedef Discregrid::CubicLagrangeDiscreteGrid SDFType;
#define COLLISIONMODE_NUM 2
#define SOLVERSTATE_INIT 0
-#define SOLVERSTATE_SOLVE 1
-#define SOLVERSTATE_INIT_SOLVE 2
-#define SOLVERSTATE_LOCAL_STEP 3
-#define SOLVERSTATE_GLOBAL_STEP 4
-#define SOLVERSTATE_COLLISION_UPDATE 5
-#define SOLVERSTATE_TEST_CONVERGED 6
-#define SOLVERSTATE_NUM 7
+#define SOLVERSTATE_MESHCREATE 1
+#define SOLVERSTATE_SOLVE 2
+#define SOLVERSTATE_INIT_SOLVE 3
+#define SOLVERSTATE_LOCAL_STEP 4
+#define SOLVERSTATE_GLOBAL_STEP 5
+#define SOLVERSTATE_COLLISION_UPDATE 6
+#define SOLVERSTATE_TEST_CONVERGED 7
+#define SOLVERSTATE_NUM 8
#define LOGLEVEL_NONE 0
#define LOGLEVEL_LOW 1
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs