Moved the cloth solver code into a new subfolder/library inside Blender
authorLukas Tönne <lukas.toenne@gmail.com>
Sat, 13 Sep 2014 12:36:46 +0000 (14:36 +0200)
committerLukas Tönne <lukas.toenne@gmail.com>
Tue, 20 Jan 2015 08:30:00 +0000 (09:30 +0100)
code.

The implicit solver itself should remain agnostic to the specifics of
the Blender data (cloth vs. hair). This way we could avoid the bloated
data conversion chain from particles/hair to derived mesh to cloth
modifier to implicit solver data and back. Every step in this chain adds
overhead as well as rounding errors and a possibility for bugs, not to
speak of making the code horribly complicated.

The new subfolder is named "physics" since it should be the start of a
somewhat "unified" physics systems combining all the various solvers in
the same place and managing things like synchronized time steps.

13 files changed:
build_files/cmake/macros.cmake
source/blender/CMakeLists.txt
source/blender/blenkernel/BKE_cloth.h
source/blender/blenkernel/CMakeLists.txt
source/blender/blenkernel/intern/cloth.c
source/blender/physics/BPH_mass_spring.h [new file with mode: 0644]
source/blender/physics/CMakeLists.txt [new file with mode: 0644]
source/blender/physics/intern/BPH_mass_spring.cpp [new file with mode: 0644]
source/blender/physics/intern/ConstrainedConjugateGradient.h [moved from source/blender/blenkernel/intern/ConstrainedConjugateGradient.h with 100% similarity]
source/blender/physics/intern/implicit.h [moved from source/blender/blenkernel/intern/implicit.h with 95% similarity]
source/blender/physics/intern/implicit_blender.c [moved from source/blender/blenkernel/intern/implicit.c with 99% similarity]
source/blender/physics/intern/implicit_eigen.cpp [moved from source/blender/blenkernel/intern/implicit_eigen.cpp with 99% similarity]
source/blender/render/intern/source/voxeldata.c

index 30c761b59bee6338edc93adac59e14448b6f03b3..ecdb1d06d388e02c895edd50ba617c553c7bfada 100644 (file)
@@ -508,6 +508,7 @@ macro(SETUP_BLENDER_SORTED_LIBS)
                bf_modifiers
                bf_bmesh
                bf_blenkernel
+               bf_physics
                bf_nodes
                bf_rna
                bf_gpu
index 0d309523daf2dfd35c0005d8e6fa7854f60a3c04..1cc232a8ed6ce34b36ca4a52f4cb9234c3e01643 100644 (file)
@@ -102,6 +102,7 @@ add_subdirectory(render)
 add_subdirectory(blenfont)
 add_subdirectory(blenloader)
 add_subdirectory(ikplugin)
+add_subdirectory(physics)
 add_subdirectory(gpu)
 add_subdirectory(imbuf)
 add_subdirectory(nodes)
index e0710ee7e631510c80273397d1e3d4df2dcf69bd..3dec5c82da2467dfd4cc6d44f0c7be22ece8c5a4 100644 (file)
@@ -209,19 +209,6 @@ void cloth_free_contacts(ColliderContacts *collider_contacts, int totcolliders);
 
 ////////////////////////////////////////////////
 
-
-////////////////////////////////////////////////
-// implicit.c
-////////////////////////////////////////////////
-
-// needed for cloth.c
-int implicit_init (struct Object *ob, struct ClothModifierData *clmd );
-int implicit_free (struct ClothModifierData *clmd );
-int implicit_solver (struct Object *ob, float frame, struct ClothModifierData *clmd, struct ListBase *effectors );
-void implicit_set_positions (struct ClothModifierData *clmd );
-
-bool implicit_hair_volume_get_texture_data(struct Object *UNUSED(ob), struct ClothModifierData *clmd, struct ListBase *UNUSED(effectors), struct VoxelData *vd);
-
 /////////////////////////////////////////////////
 // cloth.c
 ////////////////////////////////////////////////
index a560bcc8be045b764a33c811fe797d99073efb16..28b6aaa3b7c8abbaf9722880139592c792db8e1a 100644 (file)
@@ -36,6 +36,7 @@ set(INC
        ../bmesh
        ../modifiers
        ../nodes
+       ../physics
        ../render/extern/include
        ../../../intern/ghost
        ../../../intern/guardedalloc
@@ -47,7 +48,6 @@ set(INC
        ../../../intern/smoke/extern
        ../../../intern/atomic
        ../../../extern/libmv
-       ../../../extern/Eigen3
 
        # XXX - BAD LEVEL CALL WM_api.h
        ../windowmanager
@@ -107,10 +107,6 @@ set(SRC
        intern/idprop.c
        intern/image.c
        intern/image_gen.c
-        intern/implicit.h
-        intern/implicit.c
-       intern/implicit_eigen.cpp
-        intern/ConstrainedConjugateGradient.h # XXX move this to a better place
        intern/ipo.c
        intern/key.c
        intern/lamp.c
index 3932a8ead2fe3a3cf55df1b93dfd3e28282a74d2..89ad084b59e5a286a5950b5d265fa272e7252a4a 100644 (file)
@@ -47,6 +47,8 @@
 #include "BKE_modifier.h"
 #include "BKE_pointcache.h"
 
+#include "BPH_mass_spring.h"
+
 // #include "PIL_time.h"  /* timing for debug prints */
 
 /* Our available solvers. */
diff --git a/source/blender/physics/BPH_mass_spring.h b/source/blender/physics/BPH_mass_spring.h
new file mode 100644 (file)
index 0000000..2960082
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) Blender Foundation
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Lukas Toenne
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __BPH_MASS_SPRING_H__
+#define __BPH_MASS_SPRING_H__
+
+int implicit_init (struct Object *ob, struct ClothModifierData *clmd );
+int implicit_free (struct ClothModifierData *clmd );
+int implicit_solver (struct Object *ob, float frame, struct ClothModifierData *clmd, struct ListBase *effectors );
+void implicit_set_positions (struct ClothModifierData *clmd );
+
+bool implicit_hair_volume_get_texture_data(struct Object *UNUSED(ob), struct ClothModifierData *clmd, struct ListBase *UNUSED(effectors), struct VoxelData *vd);
+
+#endif
diff --git a/source/blender/physics/CMakeLists.txt b/source/blender/physics/CMakeLists.txt
new file mode 100644 (file)
index 0000000..b08cf17
--- /dev/null
@@ -0,0 +1,51 @@
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# The Original Code is Copyright (C) 2014, Blender Foundation
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): Lukas Toenne
+#
+# ***** END GPL LICENSE BLOCK *****
+
+set(INC
+       .
+       intern
+       ../blenlib
+       ../blenkernel
+       ../imbuf
+       ../makesdna
+       ../../../intern/guardedalloc
+       ../../../extern/Eigen3
+)
+
+set(INC_SYS
+
+)
+
+set(SRC
+       intern/BPH_mass_spring.cpp
+       intern/ConstrainedConjugateGradient.h
+       intern/implicit.h
+       intern/implicit_blender.c
+       intern/implicit_eigen.cpp
+
+       BPH_mass_spring.h
+)
+
+blender_add_lib(bf_physics "${SRC}" "${INC}" "${INC_SYS}")
diff --git a/source/blender/physics/intern/BPH_mass_spring.cpp b/source/blender/physics/intern/BPH_mass_spring.cpp
new file mode 100644 (file)
index 0000000..e69de29
similarity index 95%
rename from source/blender/blenkernel/intern/implicit.h
rename to source/blender/physics/intern/implicit.h
index 31b8069846edc637a1b3b85bb4e54fe339a88860..edddd1b04860786e6c8fc00344e40ea40aa0f5d5 100644 (file)
  * ***** END GPL LICENSE BLOCK *****
  */
 
-#ifndef __BKE_IMPLICIT_H__
-#define __BKE_IMPLICIT_H__
+#ifndef __BPH_IMPLICIT_H__
+#define __BPH_IMPLICIT_H__
 
 /** \file implicit.h
- *  \ingroup bke
+ *  \ingroup bph
  */
 
 #include "stdio.h"
similarity index 99%
rename from source/blender/blenkernel/intern/implicit.c
rename to source/blender/physics/intern/implicit_blender.c
index 9ae53293397a7e366193e1963f0aae1756b8a37b..76b1e356299b25526d961b0060f5efbfc4a30c55 100644 (file)
@@ -26,7 +26,7 @@
  */
 
 /** \file blender/blenkernel/intern/implicit.c
- *  \ingroup bke
+ *  \ingroup bph
  */
 
 #include "implicit.h"
@@ -50,6 +50,8 @@
 #include "BKE_effect.h"
 #include "BKE_global.h"
 
+#include "BPH_mass_spring.h"
+
 #ifdef __GNUC__
 #  pragma GCC diagnostic ignored "-Wtype-limits"
 #endif
similarity index 99%
rename from source/blender/blenkernel/intern/implicit_eigen.cpp
rename to source/blender/physics/intern/implicit_eigen.cpp
index 863c715a99b56d16b37b24800f5b755a665a9156..230ca6f4f6a0b0e9a70dd6e8cd651d2f5f265db8 100644 (file)
@@ -26,7 +26,7 @@
  */
 
 /** \file blender/blenkernel/intern/implicit_eigen.cpp
- *  \ingroup bke
+ *  \ingroup bph
  */
 
 #include "implicit.h"
@@ -75,6 +75,8 @@ extern "C" {
 #include "BKE_collision.h"
 #include "BKE_effect.h"
 #include "BKE_global.h"
+
+#include "BPH_mass_spring.h"
 }
 
 /* ==== hash functions for debugging ==== */
index d360282d985fcd18b0526fb9eeba7994c7b1d19e..6f3c50bca62a61cdf134361d5d4ca10498dfd358 100644 (file)
@@ -380,7 +380,8 @@ static void init_frame_hair(VoxelData *vd, int UNUSED(cfra))
                ParticleSystemModifierData *pmd = (ParticleSystemModifierData *)md;
                
                if (pmd->psys && pmd->psys->clmd) {
-                       found |= implicit_hair_volume_get_texture_data(ob, pmd->psys->clmd, NULL, vd);
+                       // XXX TODO was moved into own subfolder, figure out how to handle this (perhaps make a wrapper in BKE)
+//                     found |= implicit_hair_volume_get_texture_data(ob, pmd->psys->clmd, NULL, vd);
                }
        }