Moved the cloth solver code into a new subfolder/library inside Blender

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.
This commit is contained in:
Lukas Tönne 2014-09-13 14:36:46 +02:00
parent 1c8a33ab92
commit 5322def57c
13 changed files with 105 additions and 24 deletions

View File

@ -508,6 +508,7 @@ macro(SETUP_BLENDER_SORTED_LIBS)
bf_modifiers
bf_bmesh
bf_blenkernel
bf_physics
bf_nodes
bf_rna
bf_gpu

View 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)

View 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
////////////////////////////////////////////////

View 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

View 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. */

View File

@ -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

View File

@ -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}")

View File

@ -25,11 +25,11 @@
* ***** 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"

View 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

View 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 ==== */

View 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);
}
}