Blender  V2.93
Classes | Macros | Typedefs | Functions
implicit.h File Reference
#include "stdio.h"
#include "BLI_utildefines.h"
#include "BKE_collision.h"

Go to the source code of this file.

Classes

struct  ImplicitSolverResult
 

Macros

#define IMPLICIT_SOLVER_BLENDER
 
#define CLOTH_ROOT_FRAME   /* enable use of root frame coordinate transform */
 
#define CLOTH_FORCE_GRAVITY
 
#define CLOTH_FORCE_DRAG
 
#define CLOTH_FORCE_SPRING_STRUCTURAL
 
#define CLOTH_FORCE_SPRING_SHEAR
 
#define CLOTH_FORCE_SPRING_BEND
 
#define CLOTH_FORCE_SPRING_GOAL
 
#define CLOTH_FORCE_EFFECTORS
 
#define MAX_HAIR_GRID_RES   256
 

Typedefs

typedef struct ImplicitSolverResult ImplicitSolverResult
 

Functions

BLI_INLINE void implicit_print_matrix_elem (float v)
 
void SIM_mass_spring_set_vertex_mass (struct Implicit_Data *data, int index, float mass)
 
void SIM_mass_spring_set_rest_transform (struct Implicit_Data *data, int index, float tfm[3][3])
 
void SIM_mass_spring_set_motion_state (struct Implicit_Data *data, int index, const float x[3], const float v[3])
 
void SIM_mass_spring_set_position (struct Implicit_Data *data, int index, const float x[3])
 
void SIM_mass_spring_set_velocity (struct Implicit_Data *data, int index, const float v[3])
 
void SIM_mass_spring_get_motion_state (struct Implicit_Data *data, int index, float x[3], float v[3])
 
void SIM_mass_spring_get_position (struct Implicit_Data *data, int index, float x[3])
 
void SIM_mass_spring_get_velocity (struct Implicit_Data *data, int index, float v[3])
 
void SIM_mass_spring_get_new_position (struct Implicit_Data *data, int index, float x[3])
 
void SIM_mass_spring_set_new_position (struct Implicit_Data *data, int index, const float x[3])
 
void SIM_mass_spring_get_new_velocity (struct Implicit_Data *data, int index, float v[3])
 
void SIM_mass_spring_set_new_velocity (struct Implicit_Data *data, int index, const float v[3])
 
void SIM_mass_spring_clear_constraints (struct Implicit_Data *data)
 
void SIM_mass_spring_add_constraint_ndof0 (struct Implicit_Data *data, int index, const float dV[3])
 
void SIM_mass_spring_add_constraint_ndof1 (struct Implicit_Data *data, int index, const float c1[3], const float c2[3], const float dV[3])
 
void SIM_mass_spring_add_constraint_ndof2 (struct Implicit_Data *data, int index, const float c1[3], const float dV[3])
 
bool SIM_mass_spring_solve_velocities (struct Implicit_Data *data, float dt, struct ImplicitSolverResult *result)
 
bool SIM_mass_spring_solve_positions (struct Implicit_Data *data, float dt)
 
void SIM_mass_spring_apply_result (struct Implicit_Data *data)
 
void SIM_mass_spring_clear_forces (struct Implicit_Data *data)
 
void SIM_mass_spring_force_reference_frame (struct Implicit_Data *data, int index, const float acceleration[3], const float omega[3], const float domega_dt[3], float mass)
 
void SIM_mass_spring_force_gravity (struct Implicit_Data *data, int index, float mass, const float g[3])
 
void SIM_mass_spring_force_drag (struct Implicit_Data *data, float drag)
 
void SIM_mass_spring_force_extern (struct Implicit_Data *data, int i, const float f[3], float dfdx[3][3], float dfdv[3][3])
 
void SIM_mass_spring_force_face_wind (struct Implicit_Data *data, int v1, int v2, int v3, const float(*winvec)[3])
 
void SIM_mass_spring_force_face_extern (struct Implicit_Data *data, int v1, int v2, int v3, const float(*forcevec)[3])
 
void SIM_mass_spring_force_edge_wind (struct Implicit_Data *data, int v1, int v2, float radius1, float radius2, const float(*winvec)[3])
 
void SIM_mass_spring_force_vertex_wind (struct Implicit_Data *data, int v, float radius, const float(*winvec)[3])
 
bool SIM_mass_spring_force_spring_linear (struct Implicit_Data *data, int i, int j, float restlen, float stiffness_tension, float damping_tension, float stiffness_compression, float damping_compression, bool resist_compress, bool new_compress, float clamp_force)
 
bool SIM_mass_spring_force_spring_angular (struct Implicit_Data *data, int i, int j, int *i_a, int *i_b, int len_a, int len_b, float restang, float stiffness, float damping)
 
bool SIM_mass_spring_force_spring_bending (struct Implicit_Data *data, int i, int j, float restlen, float kb, float cb)
 
bool SIM_mass_spring_force_spring_bending_hair (struct Implicit_Data *data, int i, int j, int k, const float target[3], float stiffness, float damping)
 
bool SIM_mass_spring_force_spring_goal (struct Implicit_Data *data, int i, const float goal_x[3], const float goal_v[3], float stiffness, float damping)
 
float SIM_tri_tetra_volume_signed_6x (struct Implicit_Data *data, int v1, int v2, int v3)
 
float SIM_tri_area (struct Implicit_Data *data, int v1, int v2, int v3)
 
void SIM_mass_spring_force_pressure (struct Implicit_Data *data, int v1, int v2, int v3, float common_pressure, const float *vertex_pressure, const float weights[3])
 
struct HairGridSIM_hair_volume_create_vertex_grid (float cellsize, const float gmin[3], const float gmax[3])
 
void SIM_hair_volume_free_vertex_grid (struct HairGrid *grid)
 
void SIM_hair_volume_grid_geometry (struct HairGrid *grid, float *cellsize, int res[3], float gmin[3], float gmax[3])
 
void SIM_hair_volume_grid_clear (struct HairGrid *grid)
 
void SIM_hair_volume_add_vertex (struct HairGrid *grid, const float x[3], const float v[3])
 
void SIM_hair_volume_add_segment (struct HairGrid *grid, const float x1[3], const float v1[3], const float x2[3], const float v2[3], const float x3[3], const float v3[3], const float x4[3], const float v4[3], const float dir1[3], const float dir2[3], const float dir3[3])
 
void SIM_hair_volume_normalize_vertex_grid (struct HairGrid *grid)
 
bool SIM_hair_volume_solve_divergence (struct HairGrid *grid, float dt, float target_density, float target_strength)
 
void SIM_hair_volume_grid_interpolate (struct HairGrid *grid, const float x[3], float *density, float velocity[3], float velocity_smooth[3], float density_gradient[3], float velocity_gradient[3][3])
 
void SIM_hair_volume_grid_velocity (struct HairGrid *grid, const float x[3], const float v[3], float fluid_factor, float r_v[3])
 
void SIM_hair_volume_vertex_grid_forces (struct HairGrid *grid, const float x[3], const float v[3], float smoothfac, float pressurefac, float minpressure, float f[3], float dfdx[3][3], float dfdv[3][3])
 

Macro Definition Documentation

◆ CLOTH_FORCE_DRAG

#define CLOTH_FORCE_DRAG

Definition at line 42 of file implicit.h.

◆ CLOTH_FORCE_EFFECTORS

#define CLOTH_FORCE_EFFECTORS

Definition at line 47 of file implicit.h.

◆ CLOTH_FORCE_GRAVITY

#define CLOTH_FORCE_GRAVITY

Definition at line 41 of file implicit.h.

◆ CLOTH_FORCE_SPRING_BEND

#define CLOTH_FORCE_SPRING_BEND

Definition at line 45 of file implicit.h.

◆ CLOTH_FORCE_SPRING_GOAL

#define CLOTH_FORCE_SPRING_GOAL

Definition at line 46 of file implicit.h.

◆ CLOTH_FORCE_SPRING_SHEAR

#define CLOTH_FORCE_SPRING_SHEAR

Definition at line 44 of file implicit.h.

◆ CLOTH_FORCE_SPRING_STRUCTURAL

#define CLOTH_FORCE_SPRING_STRUCTURAL

Definition at line 43 of file implicit.h.

◆ CLOTH_ROOT_FRAME

#define CLOTH_ROOT_FRAME   /* enable use of root frame coordinate transform */

Definition at line 39 of file implicit.h.

◆ IMPLICIT_SOLVER_BLENDER

#define IMPLICIT_SOLVER_BLENDER

Definition at line 37 of file implicit.h.

◆ MAX_HAIR_GRID_RES

#define MAX_HAIR_GRID_RES   256

Definition at line 203 of file implicit.h.

Typedef Documentation

◆ ImplicitSolverResult

Function Documentation

◆ implicit_print_matrix_elem()

BLI_INLINE void implicit_print_matrix_elem ( float  v)

Definition at line 62 of file implicit.h.

References v.

Referenced by print_lmatrix().

◆ SIM_hair_volume_add_segment()

void SIM_hair_volume_add_segment ( struct HairGrid grid,
const float  x1[3],
const float  v1[3],
const float  x2[3],
const float  v2[3],
const float  x3[3],
const float  v3[3],
const float  x4[3],
const float  v4[3],
const float  dir1[3],
const float  dir2[3],
const float  dir3[3] 
)

◆ SIM_hair_volume_add_vertex()

void SIM_hair_volume_add_vertex ( struct HairGrid grid,
const float  x[3],
const float  v[3] 
)

◆ SIM_hair_volume_create_vertex_grid()

struct HairGrid* SIM_hair_volume_create_vertex_grid ( float  cellsize,
const float  gmin[3],
const float  gmax[3] 
)

◆ SIM_hair_volume_free_vertex_grid()

void SIM_hair_volume_free_vertex_grid ( struct HairGrid grid)

Definition at line 1171 of file hair_volume.cpp.

References MEM_freeN, and HairGrid::verts.

Referenced by cloth_continuum_step().

◆ SIM_hair_volume_grid_clear()

void SIM_hair_volume_grid_clear ( struct HairGrid grid)

◆ SIM_hair_volume_grid_geometry()

void SIM_hair_volume_grid_geometry ( struct HairGrid grid,
float cellsize,
int  res[3],
float  gmin[3],
float  gmax[3] 
)

◆ SIM_hair_volume_grid_interpolate()

void SIM_hair_volume_grid_interpolate ( struct HairGrid grid,
const float  x[3],
float density,
float  velocity[3],
float  velocity_smooth[3],
float  density_gradient[3],
float  velocity_gradient[3][3] 
)

◆ SIM_hair_volume_grid_velocity()

void SIM_hair_volume_grid_velocity ( struct HairGrid grid,
const float  x[3],
const float  v[3],
float  fluid_factor,
float  r_v[3] 
)

◆ SIM_hair_volume_normalize_vertex_grid()

void SIM_hair_volume_normalize_vertex_grid ( struct HairGrid grid)

◆ SIM_hair_volume_solve_divergence()

bool SIM_hair_volume_solve_divergence ( struct HairGrid grid,
float  dt,
float  target_density,
float  target_strength 
)

◆ SIM_hair_volume_vertex_grid_forces()

void SIM_hair_volume_vertex_grid_forces ( struct HairGrid grid,
const float  x[3],
const float  v[3],
float  smoothfac,
float  pressurefac,
float  minpressure,
float  f[3],
float  dfdx[3][3],
float  dfdv[3][3] 
)

◆ SIM_mass_spring_add_constraint_ndof0()

void SIM_mass_spring_add_constraint_ndof0 ( struct Implicit_Data data,
int  index,
const float  dV[3] 
)

Definition at line 1315 of file implicit_blender.c.

References data, world_to_root_v3(), and zero_m3().

Referenced by cloth_setup_constraints().

◆ SIM_mass_spring_add_constraint_ndof1()

void SIM_mass_spring_add_constraint_ndof1 ( struct Implicit_Data data,
int  index,
const float  c1[3],
const float  c2[3],
const float  dV[3] 
)

◆ SIM_mass_spring_add_constraint_ndof2()

void SIM_mass_spring_add_constraint_ndof2 ( struct Implicit_Data data,
int  index,
const float  c1[3],
const float  dV[3] 
)

◆ SIM_mass_spring_apply_result()

void SIM_mass_spring_apply_result ( struct Implicit_Data data)

Definition at line 1201 of file implicit_blender.c.

References cp_lfvector(), and data.

Referenced by SIM_cloth_solve().

◆ SIM_mass_spring_clear_constraints()

void SIM_mass_spring_clear_constraints ( struct Implicit_Data data)

Definition at line 1306 of file implicit_blender.c.

References data, unit_m3(), and zero_v3().

Referenced by cloth_setup_constraints().

◆ SIM_mass_spring_clear_forces()

void SIM_mass_spring_clear_forces ( struct Implicit_Data data)

Definition at line 1361 of file implicit_blender.c.

References data, init_bfmatrix(), ZERO, and zero_lfvector().

Referenced by SIM_cloth_solve().

◆ SIM_mass_spring_force_drag()

void SIM_mass_spring_force_drag ( struct Implicit_Data data,
float  drag 
)

Definition at line 1436 of file implicit_blender.c.

References add_m3_m3m3(), copy_m3_m3(), data, I, madd_v3_v3fl(), and mul_m3_fl().

Referenced by cloth_calc_force().

◆ SIM_mass_spring_force_edge_wind()

void SIM_mass_spring_force_edge_wind ( struct Implicit_Data data,
int  v1,
int  v2,
float  radius1,
float  radius2,
const float(*)  winvec[3] 
)

◆ SIM_mass_spring_force_extern()

void SIM_mass_spring_force_extern ( struct Implicit_Data data,
int  i,
const float  f[3],
float  dfdx[3][3],
float  dfdv[3][3] 
)

◆ SIM_mass_spring_force_face_extern()

void SIM_mass_spring_force_face_extern ( struct Implicit_Data data,
int  v1,
int  v2,
int  v3,
const float(*)  forcevec[3] 
)

◆ SIM_mass_spring_force_face_wind()

void SIM_mass_spring_force_face_wind ( struct Implicit_Data data,
int  v1,
int  v2,
int  v3,
const float(*)  winvec[3] 
)

◆ SIM_mass_spring_force_gravity()

void SIM_mass_spring_force_gravity ( struct Implicit_Data data,
int  index,
float  mass,
const float  g[3] 
)

Definition at line 1426 of file implicit_blender.c.

References add_v3_v3(), data, mul_v3_fl(), and world_to_root_v3().

Referenced by cloth_calc_force().

◆ SIM_mass_spring_force_pressure()

void SIM_mass_spring_force_pressure ( struct Implicit_Data data,
int  v1,
int  v2,
int  v3,
float  common_pressure,
const float vertex_pressure,
const float  weights[3] 
)

◆ SIM_mass_spring_force_reference_frame()

void SIM_mass_spring_force_reference_frame ( struct Implicit_Data data,
int  index,
const float  acceleration[3],
const float  omega[3],
const float  domega_dt[3],
float  mass 
)

◆ SIM_mass_spring_force_spring_angular()

bool SIM_mass_spring_force_spring_angular ( struct Implicit_Data data,
int  i,
int  j,
int *  i_a,
int *  i_b,
int  len_a,
int  len_b,
float  restang,
float  stiffness,
float  damping 
)

◆ SIM_mass_spring_force_spring_bending()

bool SIM_mass_spring_force_spring_bending ( struct Implicit_Data data,
int  i,
int  j,
float  restlen,
float  kb,
float  cb 
)

◆ SIM_mass_spring_force_spring_bending_hair()

bool SIM_mass_spring_force_spring_bending_hair ( struct Implicit_Data data,
int  i,
int  j,
int  k,
const float  target[3],
float  stiffness,
float  damping 
)

◆ SIM_mass_spring_force_spring_goal()

bool SIM_mass_spring_force_spring_goal ( struct Implicit_Data data,
int  i,
const float  goal_x[3],
const float  goal_v[3],
float  stiffness,
float  damping 
)

◆ SIM_mass_spring_force_spring_linear()

bool SIM_mass_spring_force_spring_linear ( struct Implicit_Data data,
int  i,
int  j,
float  restlen,
float  stiffness_tension,
float  damping_tension,
float  stiffness_compression,
float  damping_compression,
bool  resist_compress,
bool  new_compress,
float  clamp_force 
)

◆ SIM_mass_spring_force_vertex_wind()

void SIM_mass_spring_force_vertex_wind ( struct Implicit_Data data,
int  v,
float  radius,
const float(*)  winvec[3] 
)

Referenced by cloth_calc_force().

◆ SIM_mass_spring_get_motion_state()

void SIM_mass_spring_get_motion_state ( struct Implicit_Data data,
int  index,
float  x[3],
float  v[3] 
)

◆ SIM_mass_spring_get_new_position()

void SIM_mass_spring_get_new_position ( struct Implicit_Data data,
int  index,
float  x[3] 
)

Definition at line 1266 of file implicit_blender.c.

References data, root_to_world_v3(), and x.

Referenced by cloth_solve_collisions().

◆ SIM_mass_spring_get_new_velocity()

void SIM_mass_spring_get_new_velocity ( struct Implicit_Data data,
int  index,
float  v[3] 
)

◆ SIM_mass_spring_get_position()

void SIM_mass_spring_get_position ( struct Implicit_Data data,
int  index,
float  x[3] 
)

◆ SIM_mass_spring_get_velocity()

void SIM_mass_spring_get_velocity ( struct Implicit_Data data,
int  index,
float  v[3] 
)

Definition at line 1261 of file implicit_blender.c.

References data, root_to_world_v3(), and v.

Referenced by cloth_calc_average_acceleration().

◆ SIM_mass_spring_set_motion_state()

void SIM_mass_spring_set_motion_state ( struct Implicit_Data data,
int  index,
const float  x[3],
const float  v[3] 
)

Definition at line 1224 of file implicit_blender.c.

References data, v, world_to_root_v3(), and x.

Referenced by SIM_cloth_solver_init(), and SIM_cloth_solver_set_positions().

◆ SIM_mass_spring_set_new_position()

void SIM_mass_spring_set_new_position ( struct Implicit_Data data,
int  index,
const float  x[3] 
)

Definition at line 1271 of file implicit_blender.c.

References data, world_to_root_v3(), and x.

◆ SIM_mass_spring_set_new_velocity()

void SIM_mass_spring_set_new_velocity ( struct Implicit_Data data,
int  index,
const float  v[3] 
)

Definition at line 1281 of file implicit_blender.c.

References data, v, and world_to_root_v3().

Referenced by cloth_continuum_step(), and cloth_solve_collisions().

◆ SIM_mass_spring_set_position()

void SIM_mass_spring_set_position ( struct Implicit_Data data,
int  index,
const float  x[3] 
)

Definition at line 1233 of file implicit_blender.c.

References data, world_to_root_v3(), and x.

Referenced by SIM_cloth_solve().

◆ SIM_mass_spring_set_rest_transform()

void SIM_mass_spring_set_rest_transform ( struct Implicit_Data data,
int  index,
float  tfm[3][3] 
)

Definition at line 1214 of file implicit_blender.c.

References copy_m3_m3(), data, and unit_m3().

Referenced by SIM_cloth_solver_set_positions().

◆ SIM_mass_spring_set_velocity()

void SIM_mass_spring_set_velocity ( struct Implicit_Data data,
int  index,
const float  v[3] 
)

Definition at line 1238 of file implicit_blender.c.

References data, v, and world_to_root_v3().

Referenced by SIM_cloth_solve().

◆ SIM_mass_spring_set_vertex_mass()

void SIM_mass_spring_set_vertex_mass ( struct Implicit_Data data,
int  index,
float  mass 
)

Definition at line 1208 of file implicit_blender.c.

References data, mul_m3_fl(), and unit_m3().

Referenced by SIM_cloth_solver_init().

◆ SIM_mass_spring_solve_positions()

bool SIM_mass_spring_solve_positions ( struct Implicit_Data data,
float  dt 
)

Definition at line 1191 of file implicit_blender.c.

References add_lfvector_lfvectorS(), and data.

Referenced by cloth_solve_collisions(), and SIM_cloth_solve().

◆ SIM_mass_spring_solve_velocities()

bool SIM_mass_spring_solve_velocities ( struct Implicit_Data data,
float  dt,
struct ImplicitSolverResult result 
)

◆ SIM_tri_area()

float SIM_tri_area ( struct Implicit_Data data,
int  v1,
int  v2,
int  v3 
)

Definition at line 1557 of file implicit_blender.c.

References calc_nor_area_tri(), data, nor, v1, and v2.

Referenced by cloth_calc_average_pressure().

◆ SIM_tri_tetra_volume_signed_6x()

float SIM_tri_tetra_volume_signed_6x ( struct Implicit_Data data,
int  v1,
int  v2,
int  v3 
)

Definition at line 1551 of file implicit_blender.c.

References data, v1, v2, and volume_tri_tetrahedron_signed_v3_6x().

Referenced by cloth_calc_volume().