From 43d256633ea2b2ebd7c8d74a986c0ec5a7113240 Mon Sep 17 00:00:00 2001 From: Xuchen Han Date: Fri, 19 Jun 2020 14:51:31 -0700 Subject: [PATCH] allow for larger range of stiffness values in implicit demos --- examples/DeformableDemo/LargeDeformation.cpp | 82 +++++++++++++------ .../DeformableDemo/VolumetricDeformable.cpp | 6 +- 2 files changed, 58 insertions(+), 30 deletions(-) diff --git a/examples/DeformableDemo/LargeDeformation.cpp b/examples/DeformableDemo/LargeDeformation.cpp index d12e662d2..f1a6a29f5 100644 --- a/examples/DeformableDemo/LargeDeformation.cpp +++ b/examples/DeformableDemo/LargeDeformation.cpp @@ -27,9 +27,9 @@ #include "../Utils/b3ResourcePath.h" ///The LargeDeformation shows the contact between volumetric deformable objects and rigid objects. -static btScalar E = 25; +static btScalar E = 50; static btScalar nu = 0.3; -static btScalar damping_alpha = 0.01; +static btScalar damping_alpha = 0.1; static btScalar damping_beta = 0.01; struct TetraCube @@ -119,7 +119,7 @@ void LargeDeformation::initPhysics() psb->scale(btVector3(2, 2, 2)); psb->translate(btVector3(0, 5, 0)); psb->getCollisionShape()->setMargin(0.1); - psb->setTotalMass(0.1); + psb->setTotalMass(0.5); psb->m_cfg.kKHR = 1; // collision hardness with kinematic objects psb->m_cfg.kCHR = 1; // collision hardness with rigid body psb->m_cfg.kDF = 0.5; @@ -150,34 +150,62 @@ void LargeDeformation::initPhysics() // add a few rigid bodies m_guiHelper->autogenerateGraphicsObjects(m_dynamicsWorld); - { - SliderParams slider("Young's Modulus", &E); - slider.m_minVal = 0; - slider.m_maxVal = 200; - if (m_guiHelper->getParameterInterface()) - m_guiHelper->getParameterInterface()->registerSliderFloatParameter(slider); - } - { - SliderParams slider("Poisson Ratio", &nu); - slider.m_minVal = 0.05; - slider.m_maxVal = 0.40; - if (m_guiHelper->getParameterInterface()) - m_guiHelper->getParameterInterface()->registerSliderFloatParameter(slider); - } - { - SliderParams slider("Mass Damping", &damping_alpha); - slider.m_minVal = 0.001; - slider.m_maxVal = 0.01; - if (m_guiHelper->getParameterInterface()) - m_guiHelper->getParameterInterface()->registerSliderFloatParameter(slider); - } { - SliderParams slider("Stiffness Damping", &damping_beta); - slider.m_minVal = 0.001; - slider.m_maxVal = 0.01; + SliderParams slider("Young's Modulus", &E); + slider.m_minVal = 0; + slider.m_maxVal = 2000; if (m_guiHelper->getParameterInterface()) m_guiHelper->getParameterInterface()->registerSliderFloatParameter(slider); } + { + SliderParams slider("Poisson Ratio", &nu); + slider.m_minVal = 0.05; + slider.m_maxVal = 0.49; + if (m_guiHelper->getParameterInterface()) + m_guiHelper->getParameterInterface()->registerSliderFloatParameter(slider); + } + { + SliderParams slider("Mass Damping", &damping_alpha); + slider.m_minVal = 0; + slider.m_maxVal = 1; + if (m_guiHelper->getParameterInterface()) + m_guiHelper->getParameterInterface()->registerSliderFloatParameter(slider); + } + { + SliderParams slider("Stiffness Damping", &damping_beta); + slider.m_minVal = 0; + slider.m_maxVal = 0.1; + if (m_guiHelper->getParameterInterface()) + m_guiHelper->getParameterInterface()->registerSliderFloatParameter(slider); + } +// { +// SliderParams slider("Young's Modulus", &E); +// slider.m_minVal = 0; +// slider.m_maxVal = 200; +// if (m_guiHelper->getParameterInterface()) +// m_guiHelper->getParameterInterface()->registerSliderFloatParameter(slider); +// } +// { +// SliderParams slider("Poisson Ratio", &nu); +// slider.m_minVal = 0.05; +// slider.m_maxVal = 0.40; +// if (m_guiHelper->getParameterInterface()) +// m_guiHelper->getParameterInterface()->registerSliderFloatParameter(slider); +// } +// { +// SliderParams slider("Mass Damping", &damping_alpha); +// slider.m_minVal = 0.001; +// slider.m_maxVal = 0.01; +// if (m_guiHelper->getParameterInterface()) +// m_guiHelper->getParameterInterface()->registerSliderFloatParameter(slider); +// } +// { +// SliderParams slider("Stiffness Damping", &damping_beta); +// slider.m_minVal = 0.001; +// slider.m_maxVal = 0.01; +// if (m_guiHelper->getParameterInterface()) +// m_guiHelper->getParameterInterface()->registerSliderFloatParameter(slider); +// } } void LargeDeformation::exitPhysics() diff --git a/examples/DeformableDemo/VolumetricDeformable.cpp b/examples/DeformableDemo/VolumetricDeformable.cpp index e9e9075b0..b8cd3e1b3 100644 --- a/examples/DeformableDemo/VolumetricDeformable.cpp +++ b/examples/DeformableDemo/VolumetricDeformable.cpp @@ -230,8 +230,8 @@ void VolumetricDeformable::initPhysics() getDeformableDynamicsWorld()->setImplicit(true); getDeformableDynamicsWorld()->setLineSearch(false); getDeformableDynamicsWorld()->setUseProjection(true); - getDeformableDynamicsWorld()->getSolverInfo().m_deformable_erp = 0.1; - getDeformableDynamicsWorld()->getSolverInfo().m_deformable_maxErrorReduction = btScalar(20); + getDeformableDynamicsWorld()->getSolverInfo().m_deformable_erp = 0.3; + getDeformableDynamicsWorld()->getSolverInfo().m_deformable_maxErrorReduction = btScalar(200); getDeformableDynamicsWorld()->getSolverInfo().m_leastSquaresResidualThreshold = 1e-3; getDeformableDynamicsWorld()->getSolverInfo().m_splitImpulse = true; getDeformableDynamicsWorld()->getSolverInfo().m_numIterations = 100; @@ -242,7 +242,7 @@ void VolumetricDeformable::initPhysics() { SliderParams slider("Young's Modulus", &E); slider.m_minVal = 0; - slider.m_maxVal = 200; + slider.m_maxVal = 2000; if (m_guiHelper->getParameterInterface()) m_guiHelper->getParameterInterface()->registerSliderFloatParameter(slider); }