Commit: 0b18b204dde020480e5ebde385d6a14186977b0f
Author: mattoverby
Date: Tue Aug 25 12:43:58 2020 -0500
Branches: soc-2020-soft-body
https://developer.blender.org/rB0b18b204dde020480e5ebde385d6a14186977b0f
scaling input sdf
===================================================================
M extern/softbody/src/admmpd_mesh.cpp
===================================================================
diff --git a/extern/softbody/src/admmpd_mesh.cpp
b/extern/softbody/src/admmpd_mesh.cpp
index e9e338a581d..6e9884ca4c9 100644
--- a/extern/softbody/src/admmpd_mesh.cpp
+++ b/extern/softbody/src/admmpd_mesh.cpp
@@ -207,6 +207,10 @@ void EmbeddedMesh::compute_sdf(
const Eigen::MatrixXi *emb_f,
SDFType *sdf)
{
+ if (emb_f->rows()==0) {
+ return;
+ }
+
Matrix<double,Dynamic,Dynamic,RowMajor> v_rm = *emb_v;
Matrix<unsigned int,Dynamic,Dynamic,RowMajor> f_rm =
emb_f->cast<unsigned int>();
@@ -218,12 +222,16 @@ void EmbeddedMesh::compute_sdf(
domain.max() += 1e-3 * domain.diagonal().norm() *
Eigen::Vector3d::Ones();
domain.min() -= 1e-3 * domain.diagonal().norm() *
Eigen::Vector3d::Ones();
+ // Decide an SDF resolution. We want it to scale: high resolution
+ // for lower resolution meshes. This is because it becomes WAY too
+ // expensive to compute SDFs for high res meshes.
+ int nf = emb_f->rows();
+ unsigned int res = std::max(10, 20-(int)std::log(nf));
+ std::array<unsigned int, 3> resolution;
+ resolution[0] = res; resolution[1] = res; resolution[2] = res;
Discregrid::TriangleMesh tm(v_rm.data(), f_rm.data(), v_rm.rows(),
f_rm.rows());
mesh_is_closed = tm.is_closed();
-
Discregrid::MeshDistance md(tm);
- std::array<unsigned int, 3> resolution;
- resolution[0] = 30; resolution[1] = 30; resolution[2] = 30;
*sdf = Discregrid::CubicLagrangeDiscreteGrid(domain, resolution);
auto func = Discregrid::DiscreteGrid::ContinuousFunction{};
std::vector<std::thread::id> thread_map;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs