forked from bartvdbraak/blender
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:
parent
1c8a33ab92
commit
5322def57c
@ -508,6 +508,7 @@ macro(SETUP_BLENDER_SORTED_LIBS)
|
||||
bf_modifiers
|
||||
bf_bmesh
|
||||
bf_blenkernel
|
||||
bf_physics
|
||||
bf_nodes
|
||||
bf_rna
|
||||
bf_gpu
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
////////////////////////////////////////////////
|
||||
|
@ -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
|
||||
|
@ -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. */
|
||||
|
38
source/blender/physics/BPH_mass_spring.h
Normal file
38
source/blender/physics/BPH_mass_spring.h
Normal 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
|
51
source/blender/physics/CMakeLists.txt
Normal file
51
source/blender/physics/CMakeLists.txt
Normal 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}")
|
0
source/blender/physics/intern/BPH_mass_spring.cpp
Normal file
0
source/blender/physics/intern/BPH_mass_spring.cpp
Normal 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"
|
@ -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
|
@ -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 ==== */
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user