From cdd6a5fa1833cfebb5ecbf6464748feb83fe2cce Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Fri, 4 Feb 2022 18:43:47 +0100
Subject: [PATCH] Still bad but probably good enough

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 projects/wobble_bobble/CMakeLists.txt         |   3 +-
 .../shaders/transform_particles_to_grid.comp  |  25 ++++
 .../shaders/update_grid_forces.comp           |  62 ----------
 .../shaders/update_particle_velocities.comp   |  38 ++++---
 projects/wobble_bobble/src/Material.hpp       |  76 -------------
 projects/wobble_bobble/src/main.cpp           | 107 ++----------------
 6 files changed, 56 insertions(+), 255 deletions(-)
 delete mode 100644 projects/wobble_bobble/shaders/update_grid_forces.comp
 delete mode 100644 projects/wobble_bobble/src/Material.hpp

diff --git a/projects/wobble_bobble/CMakeLists.txt b/projects/wobble_bobble/CMakeLists.txt
index c5dc9cba..9842b13b 100644
--- a/projects/wobble_bobble/CMakeLists.txt
+++ b/projects/wobble_bobble/CMakeLists.txt
@@ -10,8 +10,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
 
 # adding source files to the project
 add_executable(wobble_bobble
-		src/main.cpp
-		src/Material.hpp)
+		src/main.cpp)
 
 fix_project(wobble_bobble)
 
diff --git a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
index f2c2401c..49df3479 100644
--- a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
+++ b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
@@ -11,6 +11,14 @@ layout(set=0, binding=0, std430) readonly buffer particleBuffer {
 
 layout(set=0, binding=1, rgba32f) restrict writeonly uniform image3D gridImage;
 
+layout( push_constant ) uniform constants {
+    float lame1;
+    float lame2;
+    float t;
+    float dt;
+    float speedfactor;
+};
+
 #define SHARED_PARTICLES_BATCH_SIZE 64
 
 shared ParticleMinimal shared_particles [SHARED_PARTICLES_BATCH_SIZE];
@@ -18,6 +26,8 @@ shared ParticleMinimal shared_particles [SHARED_PARTICLES_BATCH_SIZE];
 void main()	{
     const vec3 position = (vec3(gl_GlobalInvocationID) + vec3(0.5f)) / imageSize(gridImage);
 
+    float dts = dt * speedfactor;
+
     vec4 gridValue = vec4(0.0f);
 
     uint offset = 0;
@@ -61,12 +71,27 @@ void main()	{
         memoryBarrierShared();
     }
 
+    gridValue.xyz += vec3(0.0f, -9.81f * dts * gridValue.w, 0.0f);
     gridValue.xyz /= gridValue.w;
 
     if (any(isnan(gridValue.xyz)) || any(isinf(gridValue.xyz))) {
         gridValue.xyz = vec3(0.0f);
     }
 
+    bvec3 lowerID = lessThanEqual(gl_GlobalInvocationID, ivec3(0));
+    bvec3 negativeVelocity = lessThan(gridValue.xyz, vec3(0.0f));
+
+    bvec3 greaterID = greaterThanEqual(gl_GlobalInvocationID + ivec3(1), imageSize(gridImage));
+    bvec3 positiveVelocity = greaterThan(gridValue.xyz, vec3(0.0f));
+
+    bvec3 collision = bvec3(
+        (lowerID.x && negativeVelocity.x) || (greaterID.x && positiveVelocity.x),
+        (lowerID.y && negativeVelocity.y) || (greaterID.y && positiveVelocity.y),
+        (lowerID.z && negativeVelocity.z) || (greaterID.z && positiveVelocity.z)
+    );
+
+    gridValue.xyz = mix(gridValue.xyz, vec3(0.0f), collision);
+
     barrier();
     memoryBarrierShared();
 
diff --git a/projects/wobble_bobble/shaders/update_grid_forces.comp b/projects/wobble_bobble/shaders/update_grid_forces.comp
deleted file mode 100644
index 59658132..00000000
--- a/projects/wobble_bobble/shaders/update_grid_forces.comp
+++ /dev/null
@@ -1,62 +0,0 @@
-#version 450
-#extension GL_GOOGLE_include_directive : enable
-
-layout(local_size_x = 4, local_size_y = 4, local_size_z = 4) in;
-
-#include "particle.inc"
-
-layout(set=0, binding=0, rgba32f) restrict readonly uniform image3D gridImage;
-layout(set=0, binding=1, rgba32f) restrict writeonly uniform image3D gridForceImage;
-layout(set=0, binding=2, std430) readonly buffer particleBuffer {
-    Particle particles [];
-};
-
-layout( push_constant ) uniform constants {
-    float lame1;
-    float lame2;
-    float alpha;
-    float beta;
-    float t;
-    float dt;
-    float speedfactor;
-};
-
-#define SHARED_PARTICLES_BATCH_SIZE 64
-
-shared Particle shared_particles [SHARED_PARTICLES_BATCH_SIZE];
-
-void main()	{
-
-    float dts = dt * speedfactor;
-
-    barrier();
-    memoryBarrierShared();
-    memoryBarrierImage();
-
-    const vec3 gridResolution = vec3(imageSize(gridImage));
-    const vec3 position = (vec3(gl_GlobalInvocationID) + vec3(0.5f)) / gridResolution;
-
-    vec4 gridSample = imageLoad(
-        gridImage,
-        ivec3(gl_GlobalInvocationID)
-    );
-
-    vec3 velocity = gridSample.xyz;
-    float mass = gridSample.w;
-
-    barrier();
-    memoryBarrierBuffer();
-
-    if (mass > 0.0f) {
-        velocity += vec3(0.0f, -9.81f * dts, 0.0f);
-    }
-
-    barrier();
-    memoryBarrierImage();
-
-    imageStore(
-        gridForceImage,
-        ivec3(gl_GlobalInvocationID),
-        vec4(velocity, mass)
-    );
-}
\ No newline at end of file
diff --git a/projects/wobble_bobble/shaders/update_particle_velocities.comp b/projects/wobble_bobble/shaders/update_particle_velocities.comp
index 6550c095..c5f53ee0 100644
--- a/projects/wobble_bobble/shaders/update_particle_velocities.comp
+++ b/projects/wobble_bobble/shaders/update_particle_velocities.comp
@@ -11,14 +11,11 @@ layout(set=0, binding=0, std430) restrict buffer particleBuffer {
 };
 
 layout(set=0, binding=1) uniform texture3D gridImage;
-layout(set=0, binding=2) uniform texture3D gridOldImage;
-layout(set=0, binding=3) uniform sampler gridSampler;
+layout(set=0, binding=2) uniform sampler gridSampler;
 
 layout( push_constant ) uniform constants {
     float lame1;
     float lame2;
-    float alpha;
-    float beta;
     float t;
     float dt;
     float speedfactor;
@@ -35,7 +32,6 @@ void main()	{
 
         vec3 position = particle.minimal.position;
         float size = particle.minimal.size;
-        float volume = sphere_volume(size);
         float mass = particle.minimal.mass;
 
         ivec3 gridResolution = textureSize(sampler3D(gridImage, gridSampler), 0);
@@ -56,7 +52,6 @@ void main()	{
                     vec3 voxel = position + offset;
 
                     vec4 gridSample = texture(sampler3D(gridImage, gridSampler), voxel);
-                    vec4 gridOldSample = texture(sampler3D(gridOldImage, gridSampler), voxel);
 
                     float weight = voxel_particle_weight(voxel, particle.minimal);
                     vec3 velocity = gridSample.xyz * weight;
@@ -65,7 +60,6 @@ void main()	{
                     affine_B += outerProduct(velocity, offset);
 
                     velocity_pic += velocity;
-                    velocity_flip += (gridSample.xyz - gridOldSample.xyz) * weight;
                 }
             }
         }
@@ -83,31 +77,39 @@ void main()	{
             float J = determinant(F);
 
             if (J > 0.0f) {
+                float volume = sphere_volume(size) * J;
+
                 mat3 F_T = transpose(F);
+                mat3 F_T_inv = inverse(F_T);
 
-                mat3 delta = lame2 * (F * F_T - mat3(1.0f)) + lame1 * log(J);
+                mat3 delta = lame2 * (F - F_T_inv) + lame1 * log(J) * F_T_inv;
+                mat3 stress = (1.0f / J) * delta * F_T;
 
-                mls_Q -= beta * dts * volume * delta * D_inv;
+                mls_Q -= dts * volume * stress * D_inv;
             }
 
             affine_C = affine_B * D_inv;
-            mls_Q += beta * affine_C * mass;
+            mls_Q += affine_C * mass;
         }
 
         F = (mat3(1.0f) + dts * affine_C) * F;
 
-        vec3 velocity = mix(velocity_pic, velocity_flip, alpha);
-
-        position = position + velocity * dts;
+        position = position + velocity_pic * dts;
 
         for (uint i = 0; i < 3; i++) {
             if (position[i] - size < 0.0f) {
-                position[i] = -position[i] + 2.0f * size;
-                velocity[i] *= -1.0f;
+                position[i] = size;
+
+                if (velocity_pic[i] < 0.0f) {
+                    velocity_pic[i] *= -1.0f;
+                }
             } else
             if (position[i] + size > 1.0f) {
-                position[i] = 2.0f * (1.0f - size) - position[i];
-                velocity[i] *= -1.0f;
+                position[i] = 1.0f - size;
+
+                if (velocity_pic[i] > 0.0f) {
+                    velocity_pic[i] *= -1.0f;
+                }
             }
         }
 
@@ -115,7 +117,7 @@ void main()	{
         memoryBarrierBuffer();
 
         particles[gl_GlobalInvocationID.x].minimal.position = position;
-        particles[gl_GlobalInvocationID.x].minimal.velocity = velocity;
+        particles[gl_GlobalInvocationID.x].minimal.velocity = velocity_pic;
         particles[gl_GlobalInvocationID.x].deformation = mat4(F);
         particles[gl_GlobalInvocationID.x].mls = mat4(mls_Q);
     }
diff --git a/projects/wobble_bobble/src/Material.hpp b/projects/wobble_bobble/src/Material.hpp
deleted file mode 100644
index 3da7a413..00000000
--- a/projects/wobble_bobble/src/Material.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-#pragma once
-
-enum MaterialType {
-    UNDEFINED = 0, GLASS = 1, WOOD = 2, ICE = 3, RUBBER = 4
-};
-
-struct Material {
-    MaterialType m_type;
-
-    float m_compression = 0.0f;    // K - compression modulus, given in GPa (multiple of 10^9)
-    float m_elasticity = 0.0f;     // E - elasticity modulus, given in GPa (multiple of 10^9)
-    float m_shear = 0.0f;          // G - shear modulus, given in GPa (multiple of 10^9)
-    float m_lame1 = 0.0f;          // lambda
-    float m_lame2 = 0.0f;          // mu
-    float m_poission = 0.0f;       // nu
-    float m_longitudinal = 0.0f;   // M
-
-    Material(MaterialType materialType = GLASS) {
-        float K9_E;
-        switch (materialType) {
-            case UNDEFINED:
-                break;
-            case GLASS:
-                m_shear = 26.2f * 1E9;  // valid for room temperature, data extracted from here: https://de.wikipedia.org/wiki/Schubmodul
-                m_elasticity = 65.0f * 1E9;    // 40 ... 90, data extracted from here: https://de.wikipedia.org/wiki/Elastizitätsmodul
-                m_compression = m_shear * m_elasticity / (9.0f * m_shear - 3.0f * m_elasticity);   // 35 ... 55
-                m_poission = (3.0f * m_compression - m_elasticity) / (6.0f * m_compression);
-                K9_E = (9.0f * m_compression - m_elasticity);
-                m_lame1 = (3.0f * m_compression * (3.0f * m_compression - m_elasticity)) / K9_E;
-                m_lame2 = 3.0f * m_compression * m_elasticity / K9_E;
-                m_longitudinal = 3.0f * m_compression * (3.0f * m_compression + m_elasticity) / K9_E;
-                break;
-            case WOOD:
-                m_shear = 4.0f * 1E9;          // data extracted from here: https://en.wikipedia.org/wiki/Shear_modulus
-                m_elasticity = 11.0f * 1E9;    // data extracted from here: https://de.wikipedia.org/wiki/Holz#Eigenschaften
-                m_compression = m_shear * m_elasticity / (9.0f * m_shear - 3.0f * m_elasticity);
-                m_poission = (3.0f * m_compression - m_elasticity) / (6.0f * m_compression);
-                K9_E = (9.0f * m_compression - m_elasticity);
-                m_lame1 = (3.0f * m_compression * (3.0f * m_compression - m_elasticity)) / K9_E;
-                m_lame2 = 3.0f * m_compression * m_elasticity / K9_E;
-                m_longitudinal = 3.0f * m_compression * (3.0f * m_compression + m_elasticity) / K9_E;
-                break;
-            case ICE:
-                m_elasticity = 10.0f * 1E9; // data extracted from here: https://www.yumpu.com/de/document/read/21025809/elastizitatsmodul-e-schubmodul-g-kompressionsmodul-k-
-                m_shear = 3.6f * 1E9;       // data extracted from here: https://www.yumpu.com/de/document/read/21025809/elastizitatsmodul-e-schubmodul-g-kompressionsmodul-k-
-                m_compression = m_shear * m_elasticity / (9.0f * m_shear - 3.0f * m_elasticity);
-                m_poission = (3.0f * m_compression - m_elasticity) / (6.0f * m_compression);
-                K9_E = (9.0f * m_compression - m_elasticity);
-                m_lame1 = (3.0f * m_compression * (3.0f * m_compression - m_elasticity)) / K9_E;
-                m_lame2 = 3.0f * m_compression * m_elasticity / K9_E;
-                m_longitudinal = 3.0f * m_compression * (3.0f * m_compression + m_elasticity) / K9_E;
-                break;
-            case RUBBER:
-                m_elasticity = 0.05f * 1E9;  // data extracted from here: https://www.tf.uni-kiel.de/matwis/amat/mw1_ge/kap_7/illustr/t7_1_2.html
-                m_shear = 0.0003f * 1E9;     // data extracted from here: https://www.chemie-schule.de/KnowHow/Schubmodul
-                m_compression = m_shear * m_elasticity / (9.0f * m_shear - 3.0f * m_elasticity);
-                m_poission = (3.0f * m_compression - m_elasticity) / (6.0f * m_compression);
-                K9_E = (9.0f * m_compression - m_elasticity);
-                m_lame1 = (3.0f * m_compression * (3.0f * m_compression - m_elasticity)) / K9_E;
-                m_lame2 = 3.0f * m_compression * m_elasticity / K9_E;
-                m_longitudinal = 3.0f * m_compression * (3.0f * m_compression + m_elasticity) / K9_E;
-        }
-    }
-
-    void recalculate(float elasticityModulus, float compressionModulus) {
-        m_type = UNDEFINED;
-        m_elasticity = elasticityModulus * 1E9;
-        m_compression = compressionModulus * 1E9;
-        float K9_E = (9.0f * m_compression - m_elasticity);
-        m_shear = 3.0f * m_compression * m_elasticity / K9_E;
-        m_poission = (3.0f * m_compression - m_elasticity) / (6.0f * m_compression);
-        m_lame1 = (3.0f * m_compression * (3.0f * m_compression - m_elasticity)) / K9_E;
-        m_lame2 = 3.0f * m_compression * m_elasticity / K9_E;
-        m_longitudinal = 3.0f * m_compression * (3.0f * m_compression + m_elasticity) / K9_E;
-    }
-};
\ No newline at end of file
diff --git a/projects/wobble_bobble/src/main.cpp b/projects/wobble_bobble/src/main.cpp
index 2ed39b9e..7d69a2e7 100644
--- a/projects/wobble_bobble/src/main.cpp
+++ b/projects/wobble_bobble/src/main.cpp
@@ -3,7 +3,6 @@
 #include <vkcv/camera/CameraManager.hpp>
 #include <vkcv/gui/GUI.hpp>
 #include <vkcv/shader/GLSLCompiler.hpp>
-#include "Material.hpp"
 
 #include <random>
 
@@ -23,8 +22,6 @@ struct Particle {
 struct Physics {
 	float lame1;
     float lame2;
-	float alpha;
-	float beta;
 	float t;
 	float dt;
 	float speedfactor;
@@ -174,8 +171,6 @@ int main(int argc, const char **argv) {
 			swapchainExtent.height
 	).getHandle();
 
-	int selectedMaterial = 1;
-	Material material(static_cast<MaterialType>(selectedMaterial));
 	glm::vec3 initialVelocity (0.0f, 1.0f, 0.0f);
 	float density = 2500.0f;
 	float radius = 0.1f;
@@ -196,15 +191,6 @@ int main(int argc, const char **argv) {
 			true
 	);
 	
-	vkcv::Image gridCopy = core.createImage(
-			grid.getFormat(),
-			grid.getWidth(),
-			grid.getHeight(),
-			grid.getDepth(),
-			false,
-			true
-	);
-	
 	std::vector<glm::vec4> grid_vec (grid.getWidth() * grid.getHeight() * grid.getDepth());
 	
 	for (size_t i = 0; i < grid_vec.size(); i++) {
@@ -212,7 +198,6 @@ int main(int argc, const char **argv) {
 	}
 	
 	grid.fill(grid_vec.data());
-	gridCopy.fill(grid_vec.data());
 	
 	vkcv::SamplerHandle gridSampler = core.createSampler(
 			vkcv::SamplerFilterType::LINEAR,
@@ -235,7 +220,7 @@ int main(int argc, const char **argv) {
 	{
 		vkcv::DescriptorWrites writes;
 		writes.storageBufferWrites.push_back(vkcv::BufferDescriptorWrite(0, particles.getHandle()));
-		writes.sampledImageWrites.push_back(vkcv::SampledImageDescriptorWrite(1, gridCopy.getHandle()));
+		writes.sampledImageWrites.push_back(vkcv::SampledImageDescriptorWrite(1, grid.getHandle()));
 		writes.samplerWrites.push_back(vkcv::SamplerDescriptorWrite(2, gridSampler));
 		core.writeDescriptorSet(initParticleWeightsSets[0], writes);
 	}
@@ -250,23 +235,8 @@ int main(int argc, const char **argv) {
 	{
 		vkcv::DescriptorWrites writes;
 		writes.storageBufferWrites.push_back(vkcv::BufferDescriptorWrite(0, particles.getHandle()));
-		writes.storageImageWrites.push_back(vkcv::StorageImageDescriptorWrite(1, gridCopy.getHandle()));
-		core.writeDescriptorSet(transformParticlesToGridSets[0], writes);
-	}
-	
-	std::vector<vkcv::DescriptorSetHandle> updateGridForcesSets;
-	vkcv::ComputePipelineHandle updateGridForcesPipeline = createComputePipeline(
-			core, compiler,
-			"shaders/update_grid_forces.comp",
-			updateGridForcesSets
-	);
-	
-	{
-		vkcv::DescriptorWrites writes;
-		writes.storageImageWrites.push_back(vkcv::StorageImageDescriptorWrite(0, gridCopy.getHandle()));
 		writes.storageImageWrites.push_back(vkcv::StorageImageDescriptorWrite(1, grid.getHandle()));
-		writes.storageBufferWrites.push_back(vkcv::BufferDescriptorWrite(2, particles.getHandle()));
-		core.writeDescriptorSet(updateGridForcesSets[0], writes);
+		core.writeDescriptorSet(transformParticlesToGridSets[0], writes);
 	}
 	
 	std::vector<vkcv::DescriptorSetHandle> updateParticleVelocitiesSets;
@@ -280,8 +250,7 @@ int main(int argc, const char **argv) {
 		vkcv::DescriptorWrites writes;
 		writes.storageBufferWrites.push_back(vkcv::BufferDescriptorWrite(0, particles.getHandle()));
 		writes.sampledImageWrites.push_back(vkcv::SampledImageDescriptorWrite(1, grid.getHandle()));
-		writes.sampledImageWrites.push_back(vkcv::SampledImageDescriptorWrite(2, gridCopy.getHandle()));
-		writes.samplerWrites.push_back(vkcv::SamplerDescriptorWrite(3, gridSampler));
+		writes.samplerWrites.push_back(vkcv::SamplerDescriptorWrite(2, gridSampler));
 		core.writeDescriptorSet(updateParticleVelocitiesSets[0], writes);
 	}
 	
@@ -532,12 +501,9 @@ int main(int argc, const char **argv) {
 	
 	bool renderGrid = true;
 	
-	float compression_modulus = material.m_compression / 1E9;
-	float elasticity_modulus = material.m_elasticity / 1E9;
+	float lame1 = 10.0f;
+	float lame2 = 20.0f;
 	float speed_factor = 1.0f;
-
-	float alpha = 0.0f;
-	float beta = 1.0f;
 	
 	auto start = std::chrono::system_clock::now();
 	auto current = start;
@@ -572,10 +538,8 @@ int main(int argc, const char **argv) {
 		current = next;
 		
 		Physics physics;
-		physics.lame1 = material.m_lame1;
-		physics.lame2 = material.m_lame2;
-		physics.alpha = alpha;
-		physics.beta = beta;
+		physics.lame1 = lame1;
+		physics.lame2 = lame2;
 		physics.t = static_cast<float>(0.000001 * static_cast<double>(time.count()));
 		physics.dt = static_cast<float>(0.000001 * static_cast<double>(deltatime.count()));
 		physics.speedfactor = speed_factor;
@@ -613,7 +577,7 @@ int main(int argc, const char **argv) {
 		
 		core.recordBeginDebugLabel(cmdStream, "TRANSFORM PARTICLES TO GRID", { 0.47f, 0.77f, 0.85f, 1.0f });
 		core.recordBufferMemoryBarrier(cmdStream, particles.getHandle());
-		core.prepareImageForStorage(cmdStream, gridCopy.getHandle());
+		core.prepareImageForStorage(cmdStream, grid.getHandle());
 		
 		core.recordComputeDispatchToCmdStream(
 				cmdStream,
@@ -622,24 +586,6 @@ int main(int argc, const char **argv) {
 				{ vkcv::DescriptorSetUsage(
 						0, core.getDescriptorSet(transformParticlesToGridSets[0]).vulkanHandle
 				) },
-				vkcv::PushConstants(0)
-		);
-		
-		core.recordImageMemoryBarrier(cmdStream, gridCopy.getHandle());
-		core.recordEndDebugLabel(cmdStream);
-		
-		core.recordBeginDebugLabel(cmdStream, "UPDATE GRID FORCES", { 0.47f, 0.77f, 0.85f, 1.0f });
-		core.recordBufferMemoryBarrier(cmdStream, particles.getHandle());
-		core.prepareImageForStorage(cmdStream, grid.getHandle());
-		core.prepareImageForStorage(cmdStream, gridCopy.getHandle());
-		
-		core.recordComputeDispatchToCmdStream(
-				cmdStream,
-				updateGridForcesPipeline,
-				dispatchSizeGrid,
-				{ vkcv::DescriptorSetUsage(
-						0, core.getDescriptorSet(updateGridForcesSets[0]).vulkanHandle
-				) },
 				physicsPushConstants
 		);
 		
@@ -649,7 +595,6 @@ int main(int argc, const char **argv) {
 		core.recordBeginDebugLabel(cmdStream, "UPDATE PARTICLE VELOCITIES", { 0.78f, 0.89f, 0.94f, 1.0f });
 		core.recordBufferMemoryBarrier(cmdStream, particles.getHandle());
 		core.prepareImageForSampling(cmdStream, grid.getHandle());
-		core.prepareImageForSampling(cmdStream, gridCopy.getHandle());
 		
 		core.recordComputeDispatchToCmdStream(
 				cmdStream,
@@ -721,20 +666,6 @@ int main(int argc, const char **argv) {
 		gui.beginGUI();
 		ImGui::Begin("Settings");
 
-		ImGui::BeginGroup();
-		const char* types[] = {"undefined", "glass", "wood", "ice", "rubber"};
-		if (ImGui::Combo("MaterialType", &selectedMaterial, types, IM_ARRAYSIZE(types))) {
-		    if (static_cast<MaterialType>(selectedMaterial) == MaterialType::UNDEFINED) {
-		        material.m_type = MaterialType::UNDEFINED;
-		    }
-		    else {
-		        material = Material(static_cast<MaterialType>(selectedMaterial));
-		        compression_modulus = material.m_compression / 1E9;
-		        elasticity_modulus = material.m_elasticity / 1E9;
-		    }
-		}
-		ImGui::EndGroup();
-
 		ImGui::SliderFloat("Density", &density, std::numeric_limits<float>::epsilon(), 5000.0f);
 		ImGui::SameLine(0.0f, 10.0f);
 		if (ImGui::SmallButton("Reset##density")) {
@@ -748,17 +679,11 @@ int main(int argc, const char **argv) {
 		}
 
 		ImGui::BeginGroup();
-		if (ImGui::SliderFloat("Compression Modulus", &compression_modulus, 0.0f, 500.0f)) {
-		    selectedMaterial = 0;
-		    material.recalculate(elasticity_modulus, compression_modulus);
-		}
+		ImGui::SliderFloat("Compression Modulus", &lame1, 0.0f, 100.0f);
 		ImGui::EndGroup();
 		
 		ImGui::BeginGroup();
-		if (ImGui::SliderFloat("Elasticity Modulus", &elasticity_modulus, 0.0f, 1000.0f)) {
-		    selectedMaterial = 0;
-		    material.recalculate(elasticity_modulus, compression_modulus);
-		}
+		ImGui::SliderFloat("Elasticity Modulus", &lame2, 0.0f, 100.0f);
 		ImGui::EndGroup();
 
 		ImGui::Spacing();
@@ -768,18 +693,6 @@ int main(int argc, const char **argv) {
 		ImGui::Spacing();
 		ImGui::Checkbox("Render Grid", &renderGrid);
 		
-		ImGui::SliderFloat("Alpha (PIC -> FLIP)", &alpha, 0.0f, 1.0f);
-		ImGui::SameLine(0.0f, 10.0f);
-		if (ImGui::SmallButton("Reset##alpha")) {
-		    alpha =1.0f;
-		}
-		
-		ImGui::SliderFloat("Beta (Alpha -> APIC)", &beta, 0.0f, 1.0f);
-		ImGui::SameLine(0.0f, 10.0f);
-		if (ImGui::SmallButton("Reset##beta")) {
-		    beta = 0.0f;
-		}
-		
 		ImGui::DragFloat3("Initial Velocity", reinterpret_cast<float*>(&initialVelocity), 0.001f);
 		ImGui::SameLine(0.0f, 10.0f);
 		if (ImGui::Button("Reset##particle_velocity")) {
-- 
GitLab