Blender
V3.3
|
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 |
#define CLOTH_FORCE_DRAG |
Definition at line 26 of file implicit.h.
#define CLOTH_FORCE_EFFECTORS |
Definition at line 31 of file implicit.h.
#define CLOTH_FORCE_GRAVITY |
Definition at line 25 of file implicit.h.
#define CLOTH_FORCE_SPRING_BEND |
Definition at line 29 of file implicit.h.
#define CLOTH_FORCE_SPRING_GOAL |
Definition at line 30 of file implicit.h.
#define CLOTH_FORCE_SPRING_SHEAR |
Definition at line 28 of file implicit.h.
#define CLOTH_FORCE_SPRING_STRUCTURAL |
Definition at line 27 of file implicit.h.
Definition at line 23 of file implicit.h.
#define IMPLICIT_SOLVER_BLENDER |
Definition at line 21 of file implicit.h.
#define MAX_HAIR_GRID_RES 256 |
Definition at line 216 of file implicit.h.
typedef struct ImplicitSolverResult ImplicitSolverResult |
BLI_INLINE void implicit_print_matrix_elem | ( | float | v | ) |
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] | ||
) |
Definition at line 351 of file hair_volume.cpp.
References HairGridVert::density, HairGrid::gmax, HairGrid::gmin, hair_grid_point_valid(), hair_grid_weights(), HairGrid::inv_cellsize, madd_v3_v3fl(), offset, HairGrid::res, v, HairGridVert::velocity, HairGrid::verts, and x.
Referenced by cloth_continuum_fill_grid().
struct HairGrid* SIM_hair_volume_create_vertex_grid | ( | float | cellsize, |
const float | gmin[3], | ||
const float | gmax[3] | ||
) |
Definition at line 1103 of file hair_volume.cpp.
References HairGrid::cellsize, copy_v3_v3(), float(), floor_int(), HairGrid::gmax, HairGrid::gmin, hair_grid_size(), HairGrid::inv_cellsize, MAX_HAIR_GRID_RES, MEM_callocN, HairGrid::res, size(), sub_v3_v3v3(), and HairGrid::verts.
Referenced by cloth_continuum_step().
Definition at line 1160 of file hair_volume.cpp.
References MEM_freeN, and HairGrid::verts.
Referenced by cloth_continuum_step().
Definition at line 280 of file hair_volume.cpp.
References HairGridVert::density, hair_grid_size(), HairGrid::res, HairGridVert::samples, size(), HairGridVert::velocity, HairGridVert::velocity_smooth, HairGrid::verts, and zero_v3().
void SIM_hair_volume_grid_geometry | ( | struct HairGrid * | grid, |
float * | cellsize, | ||
int | res[3], | ||
float | gmin[3], | ||
float | gmax[3] | ||
) |
Definition at line 1170 of file hair_volume.cpp.
References HairGrid::cellsize, copy_v3_v3(), copy_v3_v3_int(), HairGrid::gmax, HairGrid::gmin, and HairGrid::res.
Referenced by cloth_continuum_fill_grid(), and cloth_continuum_step().
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] | ||
) |
Definition at line 233 of file hair_volume.cpp.
References usdtokens::density(), HairGrid::gmin, hair_grid_interpolate(), HairGrid::inv_cellsize, HairGrid::res, HairGrid::verts, and x.
Referenced by cloth_continuum_step().
void SIM_hair_volume_grid_velocity | ( | struct HairGrid * | grid, |
const float | x[3], | ||
const float | v[3], | ||
float | fluid_factor, | ||
float | r_v[3] | ||
) |
Effect of fluid simulation grid on velocities. fluid_factor controls blending between PIC (Particle-in-Cell) and FLIP (Fluid-Implicit-Particle) methods (0 = only PIC, 1 = only FLIP)
Definition at line 253 of file hair_volume.cpp.
References add_v3_v3(), copy_v3_v3(), HairGrid::gmin, hair_grid_interpolate(), interp_v3_v3v3(), HairGrid::inv_cellsize, HairGrid::res, sub_v3_v3v3(), v, HairGrid::verts, and x.
Referenced by cloth_continuum_step().
Definition at line 674 of file hair_volume.cpp.
References usdtokens::density(), HairGridVert::density, hair_grid_size(), mul_v3_fl(), HairGrid::res, size(), HairGridVert::velocity, and HairGrid::verts.
Referenced by cloth_continuum_fill_grid().
bool SIM_hair_volume_solve_divergence | ( | struct HairGrid * | grid, |
float | dt, | ||
float | target_density, | ||
float | target_strength | ||
) |
Definition at line 704 of file hair_volume.cpp.
References A, add_v3_v3v3(), B, BKE_sim_debug_data_add_circle, BKE_sim_debug_data_add_dot, BKE_sim_debug_data_add_vector, BLI_assert, HairGrid::cellsize, CLAMPIS, col, usdtokens::density(), HairGridVert::density, density_threshold, float(), HairGrid::gmin, grid_to_world(), hair_volume_density_divergence(), interp_v3_v3v3(), MARGIN_i0, MARGIN_i1, MARGIN_j0, MARGIN_j1, MARGIN_k0, MARGIN_k1, mul_v3_fl(), NEIGHBOR_MARGIN_i0, NEIGHBOR_MARGIN_i1, NEIGHBOR_MARGIN_j0, NEIGHBOR_MARGIN_j1, NEIGHBOR_MARGIN_k0, NEIGHBOR_MARGIN_k1, offset, HairGrid::res, sub_v3_v3v3(), HairGridVert::velocity, HairGridVert::velocity_smooth, HairGrid::verts, and zero_v3().
Referenced by cloth_continuum_step().
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] | ||
) |
WARNING: expressing grid effects on velocity as a force is not very stable, due to discontinuities in interpolated values! Better use hybrid approaches such as described in "Detail Preserving Continuum Simulation of Straight Hair" (McAdams, Selle 2009)
Definition at line 194 of file hair_volume.cpp.
References HairGrid::gmin, hair_grid_interpolate(), I, HairGrid::inv_cellsize, madd_v3_v3fl(), mul_m3_fl(), mul_v3_fl(), mul_v3_v3fl(), normalize_v3(), HairGrid::res, sub_m3_m3m3(), sub_v3_v3(), v, HairGrid::verts, x, zero_m3(), and zero_v3().
void SIM_mass_spring_add_constraint_ndof0 | ( | struct Implicit_Data * | data, |
int | index, | ||
const float | dV[3] | ||
) |
Definition at line 1299 of file implicit_blender.c.
References data, world_to_root_v3(), and zero_m3().
Referenced by cloth_setup_constraints().
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] | ||
) |
Definition at line 1306 of file implicit_blender.c.
References add_v3_v3(), copy_m3_m3(), data, I, mul_fvectorT_fvector(), sub_m3_m3m3(), and world_to_root_v3().
void SIM_mass_spring_add_constraint_ndof2 | ( | struct Implicit_Data * | data, |
int | index, | ||
const float | c1[3], | ||
const float | dV[3] | ||
) |
Definition at line 1327 of file implicit_blender.c.
References add_v3_v3(), copy_m3_m3(), data, I, mul_fvectorT_fvector(), sub_m3_m3m3(), and world_to_root_v3().
void SIM_mass_spring_apply_result | ( | struct Implicit_Data * | data | ) |
Definition at line 1185 of file implicit_blender.c.
References cp_lfvector(), and data.
Referenced by SIM_cloth_solve().
void SIM_mass_spring_clear_constraints | ( | struct Implicit_Data * | data | ) |
Definition at line 1290 of file implicit_blender.c.
References data, unit_m3(), and zero_v3().
Referenced by cloth_setup_constraints().
void SIM_mass_spring_clear_forces | ( | struct Implicit_Data * | data | ) |
Clear the force vector at the beginning of the time step.
Definition at line 1345 of file implicit_blender.c.
References data, init_bfmatrix(), ZERO, and zero_lfvector().
Referenced by SIM_cloth_solve().
void SIM_mass_spring_force_drag | ( | struct Implicit_Data * | data, |
float | drag | ||
) |
Global drag force (velocity damping).
Definition at line 1420 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().
void SIM_mass_spring_force_edge_wind | ( | struct Implicit_Data * | data, |
int | v1, | ||
int | v2, | ||
float | radius1, | ||
float | radius2, | ||
const float(*) | winvec[3] | ||
) |
Wind force, acting on an edge.
Definition at line 1617 of file implicit_blender.c.
References add_v3_v3(), data, edge_wind_vertex(), blender::math::length(), normalize_v3(), sub_v3_v3v3(), v1, v2, and world_to_root_v3().
Referenced by cloth_calc_force().
void SIM_mass_spring_force_extern | ( | struct Implicit_Data * | data, |
int | i, | ||
const float | f[3], | ||
float | dfdx[3][3], | ||
float | dfdv[3][3] | ||
) |
Custom external force.
Definition at line 1435 of file implicit_blender.c.
References add_m3_m3m3(), add_v3_v3(), data, world_to_root_m3(), and world_to_root_v3().
void SIM_mass_spring_force_face_extern | ( | struct Implicit_Data * | data, |
int | v1, | ||
int | v2, | ||
int | v3, | ||
const float(*) | forcevec[3] | ||
) |
Arbitrary per-unit-area vector force field acting on a face..
Definition at line 1505 of file implicit_blender.c.
References add_v3_v3(), blender::compositor::area(), calc_nor_area_tri(), data, mul_v3_fl(), nor, v1, v2, world_to_root_v3(), and zero_v3().
Referenced by cloth_calc_force().
void SIM_mass_spring_force_face_wind | ( | struct Implicit_Data * | data, |
int | v1, | ||
int | v2, | ||
int | v3, | ||
const float(*) | winvec[3] | ||
) |
Wind force, acting on a face (only generates pressure from the normal component).
Definition at line 1462 of file implicit_blender.c.
References blender::compositor::area(), calc_nor_area_tri(), data, dot_v3v3(), madd_v3_v3fl(), mul_v3_fl(), nor, v1, v2, and world_to_root_v3().
Referenced by cloth_calc_force().
void SIM_mass_spring_force_gravity | ( | struct Implicit_Data * | data, |
int | index, | ||
float | mass, | ||
const float | g[3] | ||
) |
Simple uniform gravity force.
Definition at line 1410 of file implicit_blender.c.
References add_v3_v3(), data, usdtokens::g(), mul_v3_fl(), and world_to_root_v3().
Referenced by cloth_calc_force().
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] | ||
) |
Definition at line 1549 of file implicit_blender.c.
References blender::compositor::area(), calc_nor_area_tri(), copy_v3_fl3(), data, madd_v3_v3fl(), mul_v3_fl(), nor, v1, v2, and zero_v3().
Referenced by cloth_calc_force().
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 | ||
) |
Fictitious forces introduced by moving coordinate systems.
Definition at line 1355 of file implicit_blender.c.
References add_m3_m3m3(), add_v3_v3(), copy_m3_m3(), cross_m3_v3m3(), cross_v3_identity(), cross_v3_v3v3(), data, mul_m3_fl(), mul_v3_fl(), negate_m3(), sub_v3_v3(), sub_v3_v3v3(), void, w(), and world_to_root_v3().
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 | ||
) |
Angular spring force between two polygons.
Definition at line 1948 of file implicit_blender.c.
References add_v3_v3(), add_v3_v3v3(), angle(), data, dot_v3v3(), mul_v3_v3fl(), spring_angle(), sub_v3_v3(), and x.
Referenced by cloth_calc_spring_force().
bool SIM_mass_spring_force_spring_bending | ( | struct Implicit_Data * | data, |
int | i, | ||
int | j, | ||
float | restlen, | ||
float | kb, | ||
float | cb | ||
) |
Bending force, forming a triangle at the base of two structural springs.
Definition at line 1842 of file implicit_blender.c.
References apply_spring(), data, fbstar(), fbstar_jacobi(), blender::math::length(), mul_m3_fl(), mul_v3_v3fl(), outerproduct(), spring_length(), and zero_m3().
Referenced by cloth_calc_spring_force().
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 | ||
) |
Angular bending force based on local target vectors.
Definition at line 2166 of file implicit_blender.c.
References add_m3_m3m3(), add_v3_v3(), copy_m3_m3(), copy_v3_v3(), data, dot_v3v3(), I, madd_m3_m3fl(), madd_v3_v3fl(), madd_v3_v3v3fl(), mul_v3_v3fl(), negate_m3(), negate_v3_v3(), SIM_mass_spring_add_block(), spring_grad_dir(), spring_hairbend_estimate_dfdv(), spring_hairbend_estimate_dfdx(), spring_hairbend_forces(), sub_m3_m3m3(), sub_v3_v3(), sub_v3_v3v3(), world_to_root_v3(), zero_m3(), and zero_v3().
Referenced by cloth_calc_spring_force().
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 | ||
) |
Global goal spring.
Definition at line 2318 of file implicit_blender.c.
References add_m3_m3m3(), add_v3_v3(), ALMOST_ZERO, data, dfdv_damp(), dfdx_spring(), dot_v3v3(), blender::math::length(), madd_v3_v3fl(), mul_v3_v3fl(), normalize_v3_v3(), sub_v3_v3v3(), and world_to_root_v3().
Referenced by cloth_calc_force().
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 | ||
) |
Linear spring force between two points.
Definition at line 1782 of file implicit_blender.c.
References apply_spring(), data, dfdv_damp(), dfdx_spring(), dot_v3v3(), fbstar(), fbstar_jacobi(), blender::math::length(), madd_v3_v3fl(), mul_m3_fl(), mul_v3_v3fl(), outerproduct(), and spring_length().
Referenced by cloth_calc_spring_force().
void SIM_mass_spring_force_vertex_wind | ( | struct Implicit_Data * | data, |
int | v, | ||
float | radius, | ||
const float(*) | winvec[3] | ||
) |
Wind force, acting on a vertex.
Referenced by cloth_calc_force().
void SIM_mass_spring_get_motion_state | ( | struct Implicit_Data * | data, |
int | index, | ||
float | x[3], | ||
float | v[3] | ||
) |
Definition at line 1227 of file implicit_blender.c.
References data, root_to_world_v3(), v, and x.
Referenced by cloth_calc_force(), cloth_calc_spring_force(), hair_get_boundbox(), and SIM_cloth_solve().
void SIM_mass_spring_get_new_position | ( | struct Implicit_Data * | data, |
int | index, | ||
float | x[3] | ||
) |
Definition at line 1250 of file implicit_blender.c.
References data, root_to_world_v3(), and x.
Referenced by cloth_solve_collisions().
void SIM_mass_spring_get_new_velocity | ( | struct Implicit_Data * | data, |
int | index, | ||
float | v[3] | ||
) |
Definition at line 1260 of file implicit_blender.c.
References data, root_to_world_v3(), and v.
Referenced by cloth_calc_average_acceleration(), cloth_continuum_step(), cloth_get_grid_location(), and cloth_solve_collisions().
void SIM_mass_spring_get_position | ( | struct Implicit_Data * | data, |
int | index, | ||
float | x[3] | ||
) |
Definition at line 1240 of file implicit_blender.c.
References data, root_to_world_v3(), and x.
Referenced by cloth_calc_pressure_gradient(), cloth_continuum_step(), and cloth_get_grid_location().
void SIM_mass_spring_get_velocity | ( | struct Implicit_Data * | data, |
int | index, | ||
float | v[3] | ||
) |
Definition at line 1245 of file implicit_blender.c.
References data, root_to_world_v3(), and v.
Referenced by cloth_calc_average_acceleration().
void SIM_mass_spring_set_motion_state | ( | struct Implicit_Data * | data, |
int | index, | ||
const float | x[3], | ||
const float | v[3] | ||
) |
Definition at line 1208 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().
void SIM_mass_spring_set_new_position | ( | struct Implicit_Data * | data, |
int | index, | ||
const float | x[3] | ||
) |
Definition at line 1255 of file implicit_blender.c.
References data, world_to_root_v3(), and x.
void SIM_mass_spring_set_new_velocity | ( | struct Implicit_Data * | data, |
int | index, | ||
const float | v[3] | ||
) |
Definition at line 1265 of file implicit_blender.c.
References data, v, and world_to_root_v3().
Referenced by cloth_continuum_step(), and cloth_solve_collisions().
void SIM_mass_spring_set_position | ( | struct Implicit_Data * | data, |
int | index, | ||
const float | x[3] | ||
) |
Definition at line 1217 of file implicit_blender.c.
References data, world_to_root_v3(), and x.
Referenced by SIM_cloth_solve().
void SIM_mass_spring_set_rest_transform | ( | struct Implicit_Data * | data, |
int | index, | ||
float | tfm[3][3] | ||
) |
Definition at line 1198 of file implicit_blender.c.
References copy_m3_m3(), data, unit_m3(), and void.
Referenced by SIM_cloth_solver_set_positions().
void SIM_mass_spring_set_velocity | ( | struct Implicit_Data * | data, |
int | index, | ||
const float | v[3] | ||
) |
Definition at line 1222 of file implicit_blender.c.
References data, v, and world_to_root_v3().
Referenced by SIM_cloth_solve().
void SIM_mass_spring_set_vertex_mass | ( | struct Implicit_Data * | data, |
int | index, | ||
float | mass | ||
) |
Definition at line 1192 of file implicit_blender.c.
References data, mul_m3_fl(), and unit_m3().
Referenced by SIM_mass_spring_set_implicit_vertex_mass().
bool SIM_mass_spring_solve_positions | ( | struct Implicit_Data * | data, |
float | dt | ||
) |
Definition at line 1175 of file implicit_blender.c.
References add_lfvector_lfvectorS(), and data.
Referenced by cloth_solve_collisions(), and SIM_cloth_solve().
bool SIM_mass_spring_solve_velocities | ( | struct Implicit_Data * | data, |
float | dt, | ||
struct ImplicitSolverResult * | result | ||
) |
Definition at line 1138 of file implicit_blender.c.
References add_lfvector_lfvector(), add_lfvectorS_lfvectorS(), cg_filtered(), cp_bfmatrix(), create_lfvector(), data, del_lfvector(), mul_bfmatrix_lfvector(), PIL_check_seconds_timer(), result, SIM_SOLVER_SUCCESS, subadd_bfmatrixS_bfmatrixS(), and zero_lfvector().
Referenced by SIM_cloth_solve().
float SIM_tri_area | ( | struct Implicit_Data * | data, |
int | v1, | ||
int | v2, | ||
int | v3 | ||
) |
Definition at line 1542 of file implicit_blender.c.
References calc_nor_area_tri(), data, nor, v1, and v2.
Referenced by cloth_calc_average_pressure().
float SIM_tri_tetra_volume_signed_6x | ( | struct Implicit_Data * | data, |
int | v1, | ||
int | v2, | ||
int | v3 | ||
) |
Definition at line 1536 of file implicit_blender.c.
References data, v1, v2, and volume_tri_tetrahedron_signed_v3_6x().
Referenced by cloth_calc_volume().