Merge pull request #106321 from elzewyr/shrink-factor

SoftBody3D: Add a property for scaling rest lengths of edge constraints
This commit is contained in:
Thaddeus Crews
2025-05-27 09:39:29 -05:00
19 changed files with 126 additions and 0 deletions

View File

@@ -197,6 +197,10 @@ bool JoltSoftBody3D::_ref_shared_data() {
vertex_attrib.mCompliance = vertex_attrib.mShearCompliance = inverse_stiffness;
settings.CreateConstraints(&vertex_attrib, 1, JPH::SoftBodySharedSettings::EBendType::None);
float multiplier = 1.0f - shrinking_factor;
for (JPH::SoftBodySharedSettings::Edge &e : settings.mEdgeConstraints) {
e.mRestLength *= multiplier;
}
settings.Optimize();
} else {
iter_shared_data->value.ref_count++;
@@ -500,6 +504,14 @@ void JoltSoftBody3D::set_stiffness_coefficient(float p_coefficient) {
stiffness_coefficient = CLAMP(p_coefficient, 0.0f, 1.0f);
}
float JoltSoftBody3D::get_shrinking_factor() const {
return shrinking_factor;
}
void JoltSoftBody3D::set_shrinking_factor(float p_shrinking_factor) {
shrinking_factor = p_shrinking_factor;
}
void JoltSoftBody3D::set_pressure(float p_pressure) {
if (unlikely(pressure == p_pressure)) {
return;

View File

@@ -64,6 +64,7 @@ class JoltSoftBody3D final : public JoltObject3D {
float pressure = 0.0f;
float linear_damping = 0.01f;
float stiffness_coefficient = 0.5f;
float shrinking_factor = 0.0f;
int simulation_precision = 5;
@@ -138,6 +139,9 @@ public:
float get_stiffness_coefficient() const;
void set_stiffness_coefficient(float p_coefficient);
float get_shrinking_factor() const;
void set_shrinking_factor(float p_shrinking_factor);
float get_pressure() const { return pressure; }
void set_pressure(float p_pressure);