|
Blender
V2.93
|
#include "MEM_guardedalloc.h"#include "DNA_cloth_types.h"#include "DNA_collection_types.h"#include "DNA_effect_types.h"#include "DNA_meshdata_types.h"#include "DNA_object_force_types.h"#include "DNA_object_types.h"#include "DNA_scene_types.h"#include "BLI_blenlib.h"#include "BLI_edgehash.h"#include "BLI_linklist.h"#include "BLI_math.h"#include "BLI_task.h"#include "BLI_threads.h"#include "BLI_utildefines.h"#include "BKE_cloth.h"#include "BKE_collection.h"#include "BKE_effect.h"#include "BKE_layer.h"#include "BKE_modifier.h"#include "BKE_scene.h"#include "BKE_collision.h"#include "BLI_kdopbvh.h"#include "DEG_depsgraph.h"#include "DEG_depsgraph_physics.h"#include "DEG_depsgraph_query.h"Go to the source code of this file.
Classes | |
| struct | ColDetectData |
| struct | SelfColDetectData |
Macros | |
| #define | INPR(v1, v2) ((v1)[0] * (v2)[0] + (v1)[1] * (v2)[1] + (v1)[2] * (v2)[2]) |
Typedefs | |
| typedef struct ColDetectData | ColDetectData |
| typedef struct SelfColDetectData | SelfColDetectData |
Functions | |
| void | collision_move_object (CollisionModifierData *collmd, const float step, const float prevstep, const bool moving_bvh) |
| BVHTree * | bvhtree_build_from_mvert (const MVert *mvert, const struct MVertTri *tri, int tri_num, float epsilon) |
| void | bvhtree_update_from_mvert (BVHTree *bvhtree, const MVert *mvert, const MVert *mvert_moving, const MVertTri *tri, int tri_num, bool moving) |
| BLI_INLINE int | next_ind (int i) |
| static float | compute_collision_point_tri_tri (const float a1[3], const float a2[3], const float a3[3], const float b1[3], const float b2[3], const float b3[3], bool culling, bool use_normal, float r_a[3], float r_b[3], float r_vec[3]) |
| static float | compute_collision_point_edge_tri (const float a1[3], const float a2[3], const float b1[3], const float b2[3], const float b3[3], bool culling, bool use_normal, float r_a[3], float r_b[3], float r_vec[3]) |
| static void | collision_compute_barycentric (const float pv[3], const float p1[3], const float p2[3], const float p3[3], float *w1, float *w2, float *w3) |
| DO_INLINE void | collision_interpolateOnTriangle (float to[3], const float v1[3], const float v2[3], const float v3[3], const double w1, const double w2, const double w3) |
| static void | cloth_collision_impulse_vert (const float clamp_sq, const float impulse[3], struct ClothVertex *vert) |
| static int | cloth_collision_response_static (ClothModifierData *clmd, CollisionModifierData *collmd, Object *collob, CollPair *collpair, uint collision_count, const float dt) |
| static int | cloth_selfcollision_response_static (ClothModifierData *clmd, CollPair *collpair, uint collision_count, const float dt) |
| static bool | cloth_bvh_collision_is_active (const ClothModifierData *UNUSED(clmd), const Cloth *cloth, const MVertTri *tri_a) |
| static void | cloth_collision (void *__restrict userdata, const int index, const TaskParallelTLS *__restrict UNUSED(tls)) |
| static bool | cloth_bvh_selfcollision_is_active (const ClothModifierData *clmd, const Cloth *cloth, const MVertTri *tri_a, const MVertTri *tri_b) |
| static void | cloth_selfcollision (void *__restrict userdata, const int index, const TaskParallelTLS *__restrict UNUSED(tls)) |
| static void | hair_collision (void *__restrict userdata, const int index, const TaskParallelTLS *__restrict UNUSED(tls)) |
| static void | add_collision_object (ListBase *relations, Object *ob, int level, unsigned int modifier_type) |
| ListBase * | BKE_collision_relations_create (Depsgraph *depsgraph, Collection *collection, unsigned int modifier_type) |
| void | BKE_collision_relations_free (ListBase *relations) |
| Object ** | BKE_collision_objects_create (Depsgraph *depsgraph, Object *self, Collection *collection, unsigned int *numcollobj, unsigned int modifier_type) |
| void | BKE_collision_objects_free (Object **objects) |
| ListBase * | BKE_collider_cache_create (Depsgraph *depsgraph, Object *self, Collection *collection) |
| void | BKE_collider_cache_free (ListBase **colliders) |
| static bool | cloth_bvh_objcollisions_nearcheck (ClothModifierData *clmd, CollisionModifierData *collmd, CollPair **collisions, int numresult, BVHTreeOverlap *overlap, bool culling, bool use_normal) |
| static bool | cloth_bvh_selfcollisions_nearcheck (ClothModifierData *clmd, CollPair *collisions, int numresult, BVHTreeOverlap *overlap) |
| static int | cloth_bvh_objcollisions_resolve (ClothModifierData *clmd, Object **collobjs, CollPair **collisions, uint *collision_counts, const uint numcollobj, const float dt) |
| static int | cloth_bvh_selfcollisions_resolve (ClothModifierData *clmd, CollPair *collisions, int collision_count, const float dt) |
| static bool | cloth_bvh_obj_overlap_cb (void *userdata, int index_a, int UNUSED(index_b), int UNUSED(thread)) |
| static bool | cloth_bvh_self_overlap_cb (void *userdata, int index_a, int index_b, int UNUSED(thread)) |
| int | cloth_bvh_collision (Depsgraph *depsgraph, Object *ob, ClothModifierData *clmd, float step, float dt) |
| BLI_INLINE void | max_v3_v3v3 (float r[3], const float a[3], const float b[3]) |
| void | collision_get_collider_velocity (float vel_old[3], float vel_new[3], CollisionModifierData *collmd, CollPair *collpair) |
| typedef struct ColDetectData ColDetectData |
| typedef struct SelfColDetectData SelfColDetectData |
|
static |
Definition at line 1236 of file collision.c.
References BKE_modifiers_findby_type(), BLI_addtail(), FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN, FOREACH_COLLECTION_OBJECT_RECURSIVE_END, Object::instance_collection, MEM_callocN, and CollisionRelation::ob.
Referenced by BKE_collision_relations_create().
| ListBase* BKE_collider_cache_create | ( | Depsgraph * | depsgraph, |
| Object * | self, | ||
| Collection * | collection | ||
| ) |
Definition at line 1346 of file collision.c.
References BKE_modifiers_findby_type(), BLI_addtail(), CollisionModifierData::bvhtree, col, collision_move_object(), DEG_get_collision_relations(), DEG_get_evaluated_id(), depsgraph, eModifierType_Collision, LISTBASE_FOREACH, MEM_callocN, and NULL.
Referenced by dynamics_step(), and eff_calc_visibility().
| void BKE_collider_cache_free | ( | ListBase ** | colliders | ) |
Definition at line 1383 of file collision.c.
References BLI_freelistN(), MEM_freeN, and NULL.
Referenced by dynamics_step(), eff_calc_visibility(), and SCULPT_cloth_simulation_free().
| Object** BKE_collision_objects_create | ( | Depsgraph * | depsgraph, |
| Object * | self, | ||
| Collection * | collection, | ||
| unsigned int * | numcollobj, | ||
| unsigned int | modifier_type | ||
| ) |
Definition at line 1297 of file collision.c.
References BLI_listbase_count(), PartDeflect::deflect, DEG_get_collision_relations(), DEG_get_evaluated_id(), depsgraph, eModifierType_Collision, LISTBASE_FOREACH, MEM_callocN, MEM_freeN, NULL, and Object::pd.
Referenced by ccd_build_deflector_hash(), ccd_update_deflector_hash(), cloth_bvh_collision(), dynamicPaint_doStep(), query_external_colliders(), and surface_getBrushFlags().
| void BKE_collision_objects_free | ( | Object ** | objects | ) |
Definition at line 1337 of file collision.c.
References MEM_freeN.
Referenced by ccd_build_deflector_hash(), ccd_update_deflector_hash(), cloth_bvh_collision(), dynamicPaint_doStep(), query_external_colliders(), and surface_getBrushFlags().
| ListBase* BKE_collision_relations_create | ( | Depsgraph * | depsgraph, |
| Collection * | collection, | ||
| unsigned int | modifier_type | ||
| ) |
Definition at line 1267 of file collision.c.
References add_collision_object(), BASE_ENABLED_RENDER, BASE_ENABLED_VIEWPORT, BKE_collection_or_layer_objects(), DAG_EVAL_RENDER, DEG_get_input_view_layer(), DEG_get_mode(), depsgraph, Base::flag, MEM_callocN, Base::next, and Base::object.
Referenced by blender::deg::build_collision_relations().
| void BKE_collision_relations_free | ( | ListBase * | relations | ) |
Definition at line 1287 of file collision.c.
References BLI_freelistN(), and MEM_freeN.
Referenced by blender::deg::clear_physics_relations().
| BVHTree* bvhtree_build_from_mvert | ( | const MVert * | mvert, |
| const struct MVertTri * | tri, | ||
| int | tri_num, | ||
| float | epsilon | ||
| ) |
Definition at line 112 of file collision.c.
References BLI_bvhtree_balance(), BLI_bvhtree_insert(), BLI_bvhtree_new(), MVert::co, copy_v3_v3(), blender::robust_pred::epsilon, tree, and MVertTri::tri.
| void bvhtree_update_from_mvert | ( | BVHTree * | bvhtree, |
| const MVert * | mvert, | ||
| const MVert * | mvert_moving, | ||
| const MVertTri * | tri, | ||
| int | tri_num, | ||
| bool | moving | ||
| ) |
Definition at line 138 of file collision.c.
References BLI_bvhtree_update_node(), BLI_bvhtree_update_tree(), MVert::co, copy_v3_v3(), NULL, ret, and MVertTri::tri.
Referenced by collision_move_object().
| int cloth_bvh_collision | ( | Depsgraph * | depsgraph, |
| Object * | ob, | ||
| ClothModifierData * | clmd, | ||
| float | step, | ||
| float | dt | ||
| ) |
Definition at line 1565 of file collision.c.
References add_v3_v3v3(), BKE_collision_objects_create(), BKE_collision_objects_free(), BKE_modifiers_findby_type(), BLI_bvhtree_overlap(), Cloth::bvhselftree, Cloth::bvhtree, CollisionModifierData::bvhtree, bvhtree_update_from_cloth(), cloth_bvh_obj_overlap_cb(), cloth_bvh_objcollisions_nearcheck(), cloth_bvh_objcollisions_resolve(), cloth_bvh_self_overlap_cb(), cloth_bvh_selfcollisions_nearcheck(), cloth_bvh_selfcollisions_resolve(), CLOTH_COLLSETTINGS_FLAG_ENABLED, CLOTH_COLLSETTINGS_FLAG_SELF, CLOTH_SIMSETTINGS_FLAG_COLLOBJ, CLOTH_VERT_FLAG_PINNED, ClothModifierData::clothObject, ClothModifierData::coll_parms, collision_move_object(), depsgraph, eModifierType_Collision, PartDeflect::flag, ClothSimSettings::flags, ClothCollSettings::flags, ClothCollSettings::group, ClothModifierData::hairdata, ClothCollSettings::loop_count, MEM_callocN, MEM_freeN, MEM_mallocN, MEM_SAFE_FREE, MIN2, Cloth::mvert_num, NULL, Object::pd, PFIELD_CLOTH_USE_CULLING, PFIELD_CLOTH_USE_NORMAL, ret, ClothModifierData::sim_parms, Cloth::verts, verts, and ClothSimSettings::vgroup_mass.
Referenced by cloth_solve_collisions().
|
static |
Definition at line 1005 of file collision.c.
References CLOTH_VERT_FLAG_NOOBJCOLL, CLOTH_VERT_FLAG_PINNED, MVertTri::tri, Cloth::verts, and verts.
Referenced by cloth_bvh_obj_overlap_cb().
|
static |
Definition at line 1536 of file collision.c.
References cloth_bvh_collision_is_active(), ClothModifierData::clothObject, and Cloth::tri.
Referenced by cloth_bvh_collision().
|
static |
Definition at line 1392 of file collision.c.
References BLI_parallel_range_settings_defaults(), BLI_task_parallel_range(), cloth_collision(), data, hair_collision(), ClothModifierData::hairdata, MEM_mallocN, NULL, and TaskParallelSettings::use_threading.
Referenced by cloth_bvh_collision().
|
static |
Definition at line 1442 of file collision.c.
References add_v3_v3(), BKE_modifiers_findby_type(), CollisionModifierData::bvhtree, cloth_collision_response_static(), ClothModifierData::clothObject, eModifierType_Collision, Cloth::mvert_num, NULL, result, ret, Cloth::verts, verts, and zero_v3().
Referenced by cloth_bvh_collision().
|
static |
Definition at line 1548 of file collision.c.
References cloth_bvh_selfcollision_is_active(), ClothModifierData::clothObject, and Cloth::tri.
Referenced by cloth_bvh_collision().
|
static |
Definition at line 1079 of file collision.c.
References BLI_edgeset_haskey(), CLOTH_SIMSETTINGS_FLAG_SEW, CLOTH_VERT_FLAG_NOSELFCOLL, CLOTH_VERT_FLAG_PINNED, ClothSimSettings::flags, Cloth::sew_edge_graph, ClothModifierData::sim_parms, MVertTri::tri, Cloth::verts, and verts.
Referenced by cloth_bvh_self_overlap_cb(), and cloth_selfcollision().
|
static |
Definition at line 1422 of file collision.c.
References BLI_parallel_range_settings_defaults(), BLI_task_parallel_range(), cloth_selfcollision(), data, and TaskParallelSettings::use_threading.
Referenced by cloth_bvh_collision().
|
static |
Definition at line 1495 of file collision.c.
References add_v3_v3(), cloth_selfcollision_response_static(), ClothModifierData::clothObject, Cloth::mvert_num, NULL, result, ret, Cloth::verts, verts, and zero_v3().
Referenced by cloth_bvh_collision().
|
static |
Definition at line 1022 of file collision.c.
References ALMOST_ZERO, CollPair::ap1, CollPair::ap2, CollPair::ap3, BLI_bvhtree_get_epsilon(), CollPair::bp1, CollPair::bp2, CollPair::bp3, CollisionModifierData::bvhtree, ClothModifierData::clothObject, MVert::co, ClothModifierData::coll_parms, COLLISION_INACTIVE, compute_collision_point_tri_tri(), copy_v3_v3(), CollisionModifierData::current_xnew, data, distance(), CollPair::distance, ClothCollSettings::epsilon, KDL::epsilon2, CollPair::flag, len_squared_v3(), normal, normalize_v3_v3(), Cloth::tri, MVertTri::tri, CollisionModifierData::tri, ClothVertex::tx, and Cloth::verts.
Referenced by cloth_bvh_objcollisions_nearcheck().
|
static |
Definition at line 648 of file collision.c.
References fabsf, ClothVertex::impulse, ClothVertex::impulse_count, and len_squared_v3().
Referenced by cloth_collision_response_static(), and cloth_selfcollision_response_static().
|
static |
Definition at line 673 of file collision.c.
References ALMOST_ZERO, CollPair::ap1, CollPair::ap2, CollPair::ap3, BLI_bvhtree_get_epsilon(), CollPair::bp1, CollPair::bp2, CollPair::bp3, CollisionModifierData::bvhtree, ClothCollSettings::clamp, cloth_collision_impulse_vert(), ClothModifierData::clothObject, MVert::co, ClothModifierData::coll_parms, collision_compute_barycentric(), COLLISION_IN_FUTURE, COLLISION_INACTIVE, collision_interpolateOnTriangle(), copy_v3_v3(), CollisionModifierData::current_v, CollisionModifierData::current_xnew, CollPair::distance, dot_v3v3(), ClothSimSettings::dt, ClothCollSettings::epsilon, KDL::epsilon2, CollPair::flag, ClothModifierData::hairdata, i1, interp_v3_v3v3(), len_v3(), line_point_factor_v3(), max_ff(), MIN2, min_ff(), mul_v3_fl(), CollPair::normal, normalize_v3(), NULL, CollPair::pa, CollPair::pb, Object::pd, PartDeflect::pdef_cfrict, result, ClothModifierData::sim_parms, square_f(), sub_v3_v3v3(), ClothSimSettings::timescale, ClothVertex::tv, ClothVertex::tx, u1, u2, v1, v2, VECADDMUL, Cloth::verts, and zero_v3().
Referenced by cloth_bvh_objcollisions_resolve().
|
static |
Definition at line 1121 of file collision.c.
References ALMOST_ZERO, CollPair::ap1, CollPair::ap2, CollPair::ap3, BLI_assert, CollPair::bp1, CollPair::bp2, CollPair::bp3, cloth_bvh_selfcollision_is_active(), ClothModifierData::clothObject, ClothModifierData::coll_parms, COLLISION_INACTIVE, compute_collision_point_tri_tri(), copy_v3_v3(), data, distance(), CollPair::distance, blender::robust_pred::epsilon, CollPair::flag, len_squared_v3(), normal, normalize_v3_v3(), ClothCollSettings::selfepsilon, Cloth::tri, MVertTri::tri, ClothVertex::tx, and Cloth::verts.
Referenced by cloth_bvh_selfcollisions_nearcheck().
|
static |
Definition at line 840 of file collision.c.
References ALMOST_ZERO, CollPair::ap1, CollPair::ap2, CollPair::ap3, CollPair::bp1, CollPair::bp2, CollPair::bp3, cloth_collision_impulse_vert(), ClothModifierData::clothObject, ClothModifierData::coll_parms, collision_compute_barycentric(), COLLISION_IN_FUTURE, COLLISION_INACTIVE, collision_interpolateOnTriangle(), copy_v3_v3(), CollPair::distance, dot_v3v3(), ClothSimSettings::dt, CollPair::flag, len_v3(), max_ff(), MIN2, min_ff(), mul_v3_fl(), CollPair::normal, normalize_v3(), CollPair::pa, CollPair::pb, result, ClothCollSettings::self_clamp, ClothCollSettings::self_friction, ClothCollSettings::selfepsilon, ClothModifierData::sim_parms, square_f(), sub_v3_v3v3(), ClothSimSettings::timescale, ClothVertex::tv, ClothVertex::tx, u1, u2, v1, v2, VECADDMUL, and Cloth::verts.
Referenced by cloth_bvh_selfcollisions_resolve().
|
static |
Definition at line 581 of file collision.c.
References Freestyle::a, ALMOST_ZERO, Freestyle::c, double(), e, fabs(), float(), INPR, and sub_v3db_v3fl_v3fl().
Referenced by cloth_collision_response_static(), cloth_selfcollision_response_static(), and collision_get_collider_velocity().
| void collision_get_collider_velocity | ( | float | vel_old[3], |
| float | vel_new[3], | ||
| CollisionModifierData * | collmd, | ||
| CollPair * | collpair | ||
| ) |
Definition at line 1740 of file collision.c.
References CollPair::bp1, CollPair::bp2, CollPair::bp3, MVert::co, collision_compute_barycentric(), collision_interpolateOnTriangle(), copy_v3_v3(), CollisionModifierData::current_v, CollisionModifierData::current_x, CollPair::pb, u1, and u2.
| DO_INLINE void collision_interpolateOnTriangle | ( | float | to[3], |
| const float | v1[3], | ||
| const float | v2[3], | ||
| const float | v3[3], | ||
| const double | w1, | ||
| const double | w2, | ||
| const double | w3 | ||
| ) |
Definition at line 634 of file collision.c.
References v1, v2, VECADDMUL, and zero_v3().
Referenced by cloth_collision_response_static(), cloth_selfcollision_response_static(), and collision_get_collider_velocity().
| void collision_move_object | ( | CollisionModifierData * | collmd, |
| const float | step, | ||
| const float | prevstep, | ||
| const bool | moving_bvh | ||
| ) |
Definition at line 82 of file collision.c.
References CollisionModifierData::bvhtree, bvhtree_update_from_mvert(), MVert::co, CollisionModifierData::current_v, CollisionModifierData::current_x, CollisionModifierData::current_xnew, interp_v3_v3v3(), CollisionModifierData::is_static, CollisionModifierData::mvert_num, sub_v3_v3v3(), CollisionModifierData::tri, CollisionModifierData::tri_num, CollisionModifierData::x, CollisionModifierData::xnew, and zero_v3().
Referenced by BKE_collider_cache_create(), cloth_brush_collider_cache_create(), and cloth_bvh_collision().
|
static |
Definition at line 407 of file collision.c.
References Freestyle::a, closest_on_tri_to_point_v3(), closest_to_line_v3(), copy_v3_v3(), cross_v3_v3v3(), dot_v3v3(), interp_v3_v3v3(), isect_line_plane_v3(), isect_line_segment_tri_v3(), isect_ray_tri_v3(), isect_seg_seg_v3(), len_squared_v3v3(), len_v3(), madd_v3_v3v3fl(), mid_v3_v3v3v3(), negate_v3_v3(), next_ind(), normal, normal_tri_v3(), NULL, point_in_slice_seg(), sqrtf, and sub_v3_v3v3().
Referenced by hair_collision().
|
static |
Definition at line 196 of file collision.c.
References Freestyle::a, closest_on_tri_to_point_v3(), closest_to_line_v3(), copy_v3_v3(), cross_v3_v3v3(), dot_v3v3(), isect_line_plane_v3(), isect_ray_tri_v3(), isect_seg_seg_v3(), isect_tri_tri_v3_ex(), len_squared_v3v3(), len_v3(), madd_v3_v3v3fl(), mid_v3_v3v3v3(), negate_v3(), negate_v3_v3(), next_ind(), normal, normal_tri_v3(), NULL, point_in_slice_seg(), sqrtf, and sub_v3_v3v3().
Referenced by cloth_collision(), and cloth_selfcollision().
|
static |
Definition at line 1178 of file collision.c.
References ALMOST_ZERO, CollPair::ap1, CollPair::ap2, BLI_bvhtree_get_epsilon(), CollPair::bp1, CollPair::bp2, CollPair::bp3, CollisionModifierData::bvhtree, ClothModifierData::clothObject, MVert::co, ClothModifierData::coll_parms, COLLISION_INACTIVE, compute_collision_point_edge_tri(), copy_v3_v3(), CollisionModifierData::current_x, data, distance(), CollPair::distance, Cloth::edges, ClothCollSettings::epsilon, KDL::epsilon2, CollPair::flag, len_squared_v3(), normal, normalize_v3_v3(), MVertTri::tri, CollisionModifierData::tri, ClothVertex::tx, MEdge::v1, MEdge::v2, and Cloth::verts.
Referenced by cloth_bvh_objcollisions_nearcheck().
| BLI_INLINE void max_v3_v3v3 | ( | float | r[3], |
| const float | a[3], | ||
| const float | b[3] | ||
| ) |
Definition at line 1733 of file collision.c.
References Freestyle::a, max_ff(), and r.
| BLI_INLINE int next_ind | ( | int | i | ) |
Definition at line 191 of file collision.c.
Referenced by compute_collision_point_edge_tri(), and compute_collision_point_tri_tri().