|
Blender V5.0
|
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 | MAX_HAIR_GRID_RES 256 |
| #define CLOTH_FORCE_DRAG |
Definition at line 21 of file implicit.h.
| #define CLOTH_FORCE_GRAVITY |
Definition at line 20 of file implicit.h.
| #define CLOTH_FORCE_SPRING_BEND |
Definition at line 24 of file implicit.h.
| #define CLOTH_FORCE_SPRING_SHEAR |
Definition at line 23 of file implicit.h.
| #define CLOTH_FORCE_SPRING_STRUCTURAL |
Definition at line 22 of file implicit.h.
| #define CLOTH_ROOT_FRAME /* enable use of root frame coordinate transform */ |
Definition at line 18 of file implicit.h.
| #define IMPLICIT_SOLVER_BLENDER |
Definition at line 16 of file implicit.h.
| #define MAX_HAIR_GRID_RES 256 |
Definition at line 211 of file implicit.h.
Referenced by SIM_hair_volume_create_vertex_grid().
| BLI_INLINE void implicit_print_matrix_elem | ( | float | v | ) |
Definition at line 41 of file implicit.h.
References BLI_INLINE, printf, and v.
Referenced by print_lmatrix().
| 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 617 of file hair_volume.cc.
References float, floor_int(), hair_volume_eval_grid_vertex_sample(), i, interp_v3_v3v3(), HairGrid::inv_cellsize, max_ii(), min_ii(), HairGrid::res, v, v2, HairGrid::verts, and x.
Referenced by cloth_continuum_add_hair_segments().
Definition at line 348 of file hair_volume.cc.
References HairGridVert::density, HairGrid::gmax, HairGrid::gmin, hair_grid_point_valid(), hair_grid_weights(), HairGrid::inv_cellsize, madd_v3_v3fl(), 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 1100 of file hair_volume.cc.
References HairGrid::cellsize, copy_v3_v3(), float, floor_int(), HairGrid::gmax, HairGrid::gmin, hair_grid_size(), i, HairGrid::inv_cellsize, MAX_HAIR_GRID_RES, MEM_calloc_arrayN(), MEM_callocN(), HairGrid::res, size(), sub_v3_v3v3(), and HairGrid::verts.
Referenced by cloth_continuum_step().
| void SIM_hair_volume_free_vertex_grid | ( | struct HairGrid * | grid | ) |
Definition at line 1157 of file hair_volume.cc.
References MEM_freeN(), and HairGrid::verts.
Referenced by cloth_continuum_step().
| void SIM_hair_volume_grid_clear | ( | struct HairGrid * | grid | ) |
Definition at line 277 of file hair_volume.cc.
References HairGridVert::density, hair_grid_size(), i, 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 1167 of file hair_volume.cc.
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 230 of file hair_volume.cc.
References 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 250 of file hair_volume.cc.
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().
| void SIM_hair_volume_normalize_vertex_grid | ( | struct HairGrid * | grid | ) |
Definition at line 671 of file hair_volume.cc.
References HairGridVert::density, hair_grid_size(), i, 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 701 of file hair_volume.cc.
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, col, HairGridVert::density, density_threshold, float, HairGrid::gmin, grid_to_world(), hair_volume_density_divergence(), i, 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, 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 191 of file hair_volume.cc.
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 1282 of file implicit_blender.cc.
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 1289 of file implicit_blender.cc.
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 1310 of file implicit_blender.cc.
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 1171 of file implicit_blender.cc.
References cp_lfvector(), and data.
Referenced by SIM_cloth_solve().
| void SIM_mass_spring_clear_constraints | ( | struct Implicit_Data * | data | ) |
Definition at line 1273 of file implicit_blender.cc.
References data, i, 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 1328 of file implicit_blender.cc.
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 1403 of file implicit_blender.cc.
References add_m3_m3m3(), copy_m3_m3(), data, I, 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 1600 of file implicit_blender.cc.
References add_v3_v3(), data, edge_wind_vertex(), length(), normalize_v3(), sub_v3_v3v3(), 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 1418 of file implicit_blender.cc.
References add_m3_m3m3(), add_v3_v3(), data, i, 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 1488 of file implicit_blender.cc.
References add_v3_v3(), calc_nor_area_tri(), data, i, mul_v3_fl(), nor, 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 1445 of file implicit_blender.cc.
References calc_nor_area_tri(), data, dot_v3v3(), i, madd_v3_v3fl(), mul_v3_fl(), nor, 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 1393 of file implicit_blender.cc.
References add_v3_v3(), data, 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 1532 of file implicit_blender.cc.
References calc_nor_area_tri(), copy_v3_fl3(), data, madd_v3_v3fl(), mul_v3_fl(), nor, 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 1338 of file implicit_blender.cc.
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(), 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 1932 of file implicit_blender.cc.
References add_v3_v3(), add_v3_v3v3(), angle(), data, dot_v3v3(), i, 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 1826 of file implicit_blender.cc.
References apply_spring(), data, fbstar(), fbstar_jacobi(), i, 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 2150 of file implicit_blender.cc.
References add_m3_m3m3(), add_v3_v3(), copy_m3_m3(), copy_v3_v3(), data, dot_v3v3(), I, 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 2302 of file implicit_blender.cc.
References add_m3_m3m3(), add_v3_v3(), ALMOST_ZERO, data, dfdv_damp(), dfdx_spring(), dot_v3v3(), i, 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 1766 of file implicit_blender.cc.
References apply_spring(), data, dfdv_damp(), dfdx_spring(), dot_v3v3(), fbstar(), fbstar_jacobi(), i, 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.
Definition at line 1618 of file implicit_blender.cc.
References add_v3_v3(), data, mul_v3_v3fl(), v, and world_to_root_v3().
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 1213 of file implicit_blender.cc.
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 1233 of file implicit_blender.cc.
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 1243 of file implicit_blender.cc.
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 1223 of file implicit_blender.cc.
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 1228 of file implicit_blender.cc.
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 1194 of file implicit_blender.cc.
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 1238 of file implicit_blender.cc.
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 1248 of file implicit_blender.cc.
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 1203 of file implicit_blender.cc.
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 1184 of file implicit_blender.cc.
References copy_m3_m3(), data, and unit_m3().
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 1208 of file implicit_blender.cc.
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 1178 of file implicit_blender.cc.
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 1161 of file implicit_blender.cc.
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 1124 of file implicit_blender.cc.
References add_lfvector_lfvector(), add_lfvectorS_lfvectorS(), BLI_time_now_seconds(), cg_filtered(), cp_bfmatrix(), create_lfvector(), data, del_lfvector(), mul_bfmatrix_lfvector(), printf, 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 1525 of file implicit_blender.cc.
References calc_nor_area_tri(), data, nor, 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 1519 of file implicit_blender.cc.
References data, v2, and volume_tri_tetrahedron_signed_v3_6x().
Referenced by cloth_calc_volume().