Blender V4.3
implicit_blender.cc File Reference
#include "implicit.h"
#include "MEM_guardedalloc.h"
#include "DNA_object_force_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_texture_types.h"
#include "BLI_math_geom.h"
#include "BLI_math_matrix.h"
#include "BLI_math_vector.h"
#include "BLI_utildefines.h"
#include "BKE_cloth.hh"
#include "BKE_collision.h"
#include "BKE_effect.h"
#include "SIM_mass_spring.h"

Go to the source code of this file.

Classes

struct  fmatrix3x3
 
struct  Implicit_Data
 

Typedefs

typedef float lfVector[3]
 

Functions

DO_INLINE void mul_fvector_S (float to[3], const float from[3], float scalar)
 
DO_INLINE void mul_fvectorT_fvector (float to[3][3], const float vectorA[3], const float vectorB[3])
 
DO_INLINE void mul_fvectorT_fvectorS (float to[3][3], float vectorA[3], float vectorB[3], float aS)
 
DO_INLINE lfVectorcreate_lfvector (uint verts)
 
DO_INLINE void del_lfvector (float(*fLongVector)[3])
 
DO_INLINE void cp_lfvector (float(*to)[3], float(*from)[3], uint verts)
 
DO_INLINE void init_lfvector (float(*fLongVector)[3], const float vector[3], uint verts)
 
DO_INLINE void zero_lfvector (float(*to)[3], uint verts)
 
DO_INLINE void mul_lfvectorS (float(*to)[3], float(*fLongVector)[3], float scalar, uint verts)
 
DO_INLINE void submul_lfvectorS (float(*to)[3], float(*fLongVector)[3], float scalar, uint verts)
 
DO_INLINE float dot_lfvector (float(*fLongVectorA)[3], float(*fLongVectorB)[3], uint verts)
 
DO_INLINE void add_lfvector_lfvector (float(*to)[3], float(*fLongVectorA)[3], float(*fLongVectorB)[3], uint verts)
 
DO_INLINE void add_lfvector_lfvectorS (float(*to)[3], float(*fLongVectorA)[3], float(*fLongVectorB)[3], float bS, uint verts)
 
DO_INLINE void add_lfvectorS_lfvectorS (float(*to)[3], float(*fLongVectorA)[3], float aS, float(*fLongVectorB)[3], float bS, uint verts)
 
DO_INLINE void sub_lfvector_lfvectorS (float(*to)[3], float(*fLongVectorA)[3], float(*fLongVectorB)[3], float bS, uint verts)
 
DO_INLINE void sub_lfvector_lfvector (float(*to)[3], float(*fLongVectorA)[3], float(*fLongVectorB)[3], uint verts)
 
DO_INLINE void cp_fmatrix (float to[3][3], const float from[3][3])
 
DO_INLINE void initdiag_fmatrixS (float to[3][3], float aS)
 
DO_INLINE void mul_fmatrix_S (float matrix[3][3], float scalar)
 
DO_INLINE void mul_fvector_fmatrix (float *to, const float *from, const float matrix[3][3])
 
DO_INLINE void mul_fmatrix_fvector (float *to, const float matrix[3][3], const float from[3])
 
DO_INLINE void add_fmatrix_fmatrix (float to[3][3], const float matrixA[3][3], const float matrixB[3][3])
 
DO_INLINE void subadd_fmatrixS_fmatrixS (float to[3][3], const float matrixA[3][3], float aS, const float matrixB[3][3], float bS)
 
DO_INLINE void sub_fmatrix_fmatrix (float to[3][3], const float matrixA[3][3], const float matrixB[3][3])
 
DO_INLINE void muladd_fmatrix_fvector (float to[3], const float matrix[3][3], const float from[3])
 
DO_INLINE void muladd_fmatrixT_fvector (float to[3], const float matrix[3][3], const float from[3])
 
BLI_INLINE void outerproduct (float r[3][3], const float a[3], const float b[3])
 
BLI_INLINE void cross_m3_v3m3 (float r[3][3], const float v[3], const float m[3][3])
 
BLI_INLINE void cross_v3_identity (float r[3][3], const float v[3])
 
BLI_INLINE void madd_m3_m3fl (float r[3][3], const float m[3][3], float f)
 
BLI_INLINE void init_fmatrix (fmatrix3x3 *matrix, int r, int c)
 
DO_INLINE fmatrix3x3create_bfmatrix (uint verts, uint springs)
 
DO_INLINE void del_bfmatrix (fmatrix3x3 *matrix)
 
DO_INLINE void cp_bfmatrix (fmatrix3x3 *to, fmatrix3x3 *from)
 
DO_INLINE void init_bfmatrix (fmatrix3x3 *matrix, float m3[3][3])
 
DO_INLINE void initdiag_bfmatrix (fmatrix3x3 *matrix, float m3[3][3])
 
DO_INLINE void mul_bfmatrix_lfvector (float(*to)[3], fmatrix3x3 *from, lfVector *fLongVector)
 
DO_INLINE void subadd_bfmatrixS_bfmatrixS (fmatrix3x3 *to, fmatrix3x3 *from, float aS, fmatrix3x3 *matrix, float bS)
 
Implicit_DataSIM_mass_spring_solver_create (int numverts, int numsprings)
 
void SIM_mass_spring_solver_free (Implicit_Data *id)
 
BLI_INLINE void world_to_root_v3 (Implicit_Data *data, int index, float r[3], const float v[3])
 
BLI_INLINE void root_to_world_v3 (Implicit_Data *data, int index, float r[3], const float v[3])
 
BLI_INLINE void world_to_root_m3 (Implicit_Data *data, int index, float r[3][3], const float m[3][3])
 
BLI_INLINE void root_to_world_m3 (Implicit_Data *data, int index, float r[3][3], const float m[3][3])
 
DO_INLINE void filter (lfVector *V, fmatrix3x3 *S)
 
static int cg_filtered (lfVector *ldV, fmatrix3x3 *lA, lfVector *lB, lfVector *z, fmatrix3x3 *S, ImplicitSolverResult *result)
 
bool SIM_mass_spring_solve_velocities (Implicit_Data *data, float dt, ImplicitSolverResult *result)
 
bool SIM_mass_spring_solve_positions (Implicit_Data *data, float dt)
 
void SIM_mass_spring_apply_result (Implicit_Data *data)
 
void SIM_mass_spring_set_vertex_mass (Implicit_Data *data, int index, float mass)
 
void SIM_mass_spring_set_rest_transform (Implicit_Data *data, int index, float tfm[3][3])
 
void SIM_mass_spring_set_motion_state (Implicit_Data *data, int index, const float x[3], const float v[3])
 
void SIM_mass_spring_set_position (Implicit_Data *data, int index, const float x[3])
 
void SIM_mass_spring_set_velocity (Implicit_Data *data, int index, const float v[3])
 
void SIM_mass_spring_get_motion_state (Implicit_Data *data, int index, float x[3], float v[3])
 
void SIM_mass_spring_get_position (Implicit_Data *data, int index, float x[3])
 
void SIM_mass_spring_get_velocity (Implicit_Data *data, int index, float v[3])
 
void SIM_mass_spring_get_new_position (Implicit_Data *data, int index, float x[3])
 
void SIM_mass_spring_set_new_position (Implicit_Data *data, int index, const float x[3])
 
void SIM_mass_spring_get_new_velocity (Implicit_Data *data, int index, float v[3])
 
void SIM_mass_spring_set_new_velocity (Implicit_Data *data, int index, const float v[3])
 
static int SIM_mass_spring_add_block (Implicit_Data *data, int v1, int v2)
 
void SIM_mass_spring_clear_constraints (Implicit_Data *data)
 
void SIM_mass_spring_add_constraint_ndof0 (Implicit_Data *data, int index, const float dV[3])
 
void SIM_mass_spring_add_constraint_ndof1 (Implicit_Data *data, int index, const float c1[3], const float c2[3], const float dV[3])
 
void SIM_mass_spring_add_constraint_ndof2 (Implicit_Data *data, int index, const float c1[3], const float dV[3])
 
void SIM_mass_spring_clear_forces (Implicit_Data *data)
 
void SIM_mass_spring_force_reference_frame (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 (Implicit_Data *data, int index, float mass, const float g[3])
 
void SIM_mass_spring_force_drag (Implicit_Data *data, float drag)
 
void SIM_mass_spring_force_extern (Implicit_Data *data, int i, const float f[3], float dfdx[3][3], float dfdv[3][3])
 
static float calc_nor_area_tri (float nor[3], const float v1[3], const float v2[3], const float v3[3])
 
void SIM_mass_spring_force_face_wind (Implicit_Data *data, int v1, int v2, int v3, const float(*winvec)[3])
 
void SIM_mass_spring_force_face_extern (Implicit_Data *data, int v1, int v2, int v3, const float(*forcevec)[3])
 
float SIM_tri_tetra_volume_signed_6x (Implicit_Data *data, int v1, int v2, int v3)
 
float SIM_tri_area (Implicit_Data *data, int v1, int v2, int v3)
 
void SIM_mass_spring_force_pressure (Implicit_Data *data, int v1, int v2, int v3, float common_pressure, const float *vertex_pressure, const float weights[3])
 
static void edge_wind_vertex (const float dir[3], float length, float radius, const float wind[3], float f[3], float[3][3], float[3][3])
 
void SIM_mass_spring_force_edge_wind (Implicit_Data *data, int v1, int v2, float radius1, float radius2, const float(*winvec)[3])
 
void SIM_mass_spring_force_vertex_wind (Implicit_Data *data, int v, float, const float(*winvec)[3])
 
BLI_INLINE void dfdx_spring (float to[3][3], const float dir[3], float length, float L, float k)
 
BLI_INLINE void dfdv_damp (float to[3][3], const float dir[3], float damping)
 
BLI_INLINE float fb (float length, float L)
 
BLI_INLINE float fbderiv (float length, float L)
 
BLI_INLINE float fbstar (float length, float L, float kb, float cb)
 
BLI_INLINE float fbstar_jacobi (float length, float L, float kb, float cb)
 
BLI_INLINE bool spring_length (Implicit_Data *data, int i, int j, float r_extent[3], float r_dir[3], float *r_length, float r_vel[3])
 
BLI_INLINE void apply_spring (Implicit_Data *data, int i, int j, const float f[3], const float dfdx[3][3], const float dfdv[3][3])
 
bool SIM_mass_spring_force_spring_linear (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_bending (Implicit_Data *data, int i, int j, float restlen, float kb, float cb)
 
BLI_INLINE void poly_avg (lfVector *data, const int *inds, int len, float r_avg[3])
 
BLI_INLINE void poly_norm (lfVector *data, int i, int j, int *inds, int len, float r_dir[3])
 
BLI_INLINE void edge_avg (lfVector *data, int i, int j, float r_avg[3])
 
BLI_INLINE void edge_norm (lfVector *data, int i, int j, float r_dir[3])
 
BLI_INLINE float bend_angle (const float dir_a[3], const float dir_b[3], const float dir_e[3])
 
BLI_INLINE void spring_angle (Implicit_Data *data, int i, int j, int *i_a, int *i_b, int len_a, int len_b, float r_dir_a[3], float r_dir_b[3], float *r_angle, float r_vel_a[3], float r_vel_b[3])
 
bool SIM_mass_spring_force_spring_angular (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)
 
BLI_INLINE void spring_grad_dir (Implicit_Data *data, int i, int j, float edge[3], float dir[3], float grad_dir[3][3])
 
BLI_INLINE void spring_hairbend_forces (Implicit_Data *data, int i, int j, int k, const float goal[3], float stiffness, float damping, int q, const float dx[3], const float dv[3], float r_f[3])
 
BLI_INLINE void spring_hairbend_estimate_dfdx (Implicit_Data *data, int i, int j, int k, const float goal[3], float stiffness, float damping, int q, float dfdx[3][3])
 
BLI_INLINE void spring_hairbend_estimate_dfdv (Implicit_Data *data, int i, int j, int k, const float goal[3], float stiffness, float damping, int q, float dfdv[3][3])
 
bool SIM_mass_spring_force_spring_bending_hair (Implicit_Data *data, int i, int j, int k, const float target[3], float stiffness, float damping)
 
bool SIM_mass_spring_force_spring_goal (Implicit_Data *data, int i, const float goal_x[3], const float goal_v[3], float stiffness, float damping)
 

Variables

static float I [3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}
 
static float ZERO [3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}
 

Typedef Documentation

◆ lfVector

typedef float lfVector[3]

Definition at line 62 of file implicit_blender.cc.

Function Documentation

◆ add_fmatrix_fmatrix()

DO_INLINE void add_fmatrix_fmatrix ( float to[3][3],
const float matrixA[3][3],
const float matrixB[3][3] )

Definition at line 419 of file implicit_blender.cc.

References add_v3_v3v3().

◆ add_lfvector_lfvector()

DO_INLINE void add_lfvector_lfvector ( float(*) to[3],
float(*) fLongVectorA[3],
float(*) fLongVectorB[3],
uint verts )

Definition at line 189 of file implicit_blender.cc.

References add_v3_v3v3(), and verts.

Referenced by mul_bfmatrix_lfvector(), and SIM_mass_spring_solve_velocities().

◆ add_lfvector_lfvectorS()

DO_INLINE void add_lfvector_lfvectorS ( float(*) to[3],
float(*) fLongVectorA[3],
float(*) fLongVectorB[3],
float bS,
uint verts )

Definition at line 201 of file implicit_blender.cc.

References VECADDS, and verts.

Referenced by cg_filtered(), and SIM_mass_spring_solve_positions().

◆ add_lfvectorS_lfvectorS()

DO_INLINE void add_lfvectorS_lfvectorS ( float(*) to[3],
float(*) fLongVectorA[3],
float aS,
float(*) fLongVectorB[3],
float bS,
uint verts )

Definition at line 211 of file implicit_blender.cc.

References VECADDSS, and verts.

Referenced by SIM_mass_spring_solve_velocities().

◆ apply_spring()

BLI_INLINE void apply_spring ( Implicit_Data * data,
int i,
int j,
const float f[3],
const float dfdx[3][3],
const float dfdv[3][3] )

◆ bend_angle()

BLI_INLINE float bend_angle ( const float dir_a[3],
const float dir_b[3],
const float dir_e[3] )

Definition at line 1887 of file implicit_blender.cc.

References atan2f, cos(), cross_v3_v3v3(), and dot_v3v3().

Referenced by spring_angle().

◆ calc_nor_area_tri()

static float calc_nor_area_tri ( float nor[3],
const float v1[3],
const float v2[3],
const float v3[3] )
static

◆ cg_filtered()

◆ cp_bfmatrix()

DO_INLINE void cp_bfmatrix ( fmatrix3x3 * to,
fmatrix3x3 * from )

Definition at line 553 of file implicit_blender.cc.

Referenced by SIM_mass_spring_solve_velocities().

◆ cp_fmatrix()

DO_INLINE void cp_fmatrix ( float to[3][3],
const float from[3][3] )

Definition at line 335 of file implicit_blender.cc.

References copy_v3_v3().

Referenced by init_bfmatrix(), initdiag_bfmatrix(), and initdiag_fmatrixS().

◆ cp_lfvector()

DO_INLINE void cp_lfvector ( float(*) to[3],
float(*) from[3],
uint verts )

Definition at line 138 of file implicit_blender.cc.

References verts.

Referenced by cg_filtered(), and SIM_mass_spring_apply_result().

◆ create_bfmatrix()

DO_INLINE fmatrix3x3 * create_bfmatrix ( uint verts,
uint springs )

◆ create_lfvector()

◆ cross_m3_v3m3()

BLI_INLINE void cross_m3_v3m3 ( float r[3][3],
const float v[3],
const float m[3][3] )

Definition at line 470 of file implicit_blender.cc.

References cross_v3_v3v3(), and v.

Referenced by SIM_mass_spring_force_reference_frame().

◆ cross_v3_identity()

BLI_INLINE void cross_v3_identity ( float r[3][3],
const float v[3] )

Definition at line 477 of file implicit_blender.cc.

References v.

Referenced by SIM_mass_spring_force_reference_frame().

◆ del_bfmatrix()

DO_INLINE void del_bfmatrix ( fmatrix3x3 * matrix)

Definition at line 545 of file implicit_blender.cc.

References MEM_freeN().

Referenced by SIM_mass_spring_solver_free().

◆ del_lfvector()

DO_INLINE void del_lfvector ( float(*) fLongVector[3])

◆ dfdv_damp()

BLI_INLINE void dfdv_damp ( float to[3][3],
const float dir[3],
float damping )

◆ dfdx_spring()

BLI_INLINE void dfdx_spring ( float to[3][3],
const float dir[3],
float length,
float L,
float k )

◆ dot_lfvector()

DO_INLINE float dot_lfvector ( float(*) fLongVectorA[3],
float(*) fLongVectorB[3],
uint verts )

Definition at line 174 of file implicit_blender.cc.

References dot_v3v3(), and verts.

Referenced by cg_filtered().

◆ edge_avg()

BLI_INLINE void edge_avg ( lfVector * data,
int i,
int j,
float r_avg[3] )

Definition at line 1874 of file implicit_blender.cc.

Referenced by spring_angle().

◆ edge_norm()

BLI_INLINE void edge_norm ( lfVector * data,
int i,
int j,
float r_dir[3] )

Definition at line 1881 of file implicit_blender.cc.

References normalize_v3(), and sub_v3_v3v3().

Referenced by spring_angle().

◆ edge_wind_vertex()

static void edge_wind_vertex ( const float dir[3],
float length,
float radius,
const float wind[3],
float f[3],
float [3][3],
float [3][3] )
static

Definition at line 1574 of file implicit_blender.cc.

References dot_v3v3(), float, len_v3(), M_PI, mul_v3_v3fl(), sqrtf, and zero_v3().

Referenced by SIM_mass_spring_force_edge_wind().

◆ fb()

BLI_INLINE float fb ( float length,
float L )

Definition at line 1668 of file implicit_blender.cc.

References L, and x.

Referenced by blender::gpu::Texture::attach_to(), EPA< btConvexTemplate >::bind(), gjkepa2_impl::EPA::bind(), BM_edge_calc_rotate(), BM_edge_rotate(), BM_edge_rotate_check(), BPyGPUFrameBuffer_CreatePyObject(), buf_rectfill_area(), blender::gpu::GLTexture::check_feedback_loop(), blender::gpu::GLTexture::clear(), blender::gpu::MTLTexture::clear(), convertJoints(), blender::gpu::Texture::detach_from(), blender::gpu::detect_mip_render_workaround(), ED_region_do_draw(), edbm_edge_rotate_selected_exec(), blender::gpu::MTLContext::ensure_depth_stencil_state(), blender::draw::command::Clear::execute(), blender::draw::command::ClearMulti::execute(), blender::workbench::StencilViewWorkaround::extract(), fbstar(), fbstar_jacobi(), GPU_framebuffer_bind_loadstore(), GPU_framebuffer_clear_color(), GPU_framebuffer_clear_color_depth(), GPU_framebuffer_clear_color_depth_stencil(), GPU_framebuffer_clear_depth(), GPU_framebuffer_clear_depth_stencil(), GPU_framebuffer_clear_stencil(), GPU_framebuffer_config_array(), GPU_framebuffer_push(), GPU_framebuffer_texture_attach(), GPU_framebuffer_texture_cubeface_attach(), GPU_framebuffer_texture_detach(), GPU_framebuffer_texture_layer_attach(), GPU_offscreen_bind(), GPU_offscreen_create(), GPU_offscreen_unbind(), gpu_select_pick_load_id(), blender::gpu::tests::gpu_shader_lib_test(), GPU_viewport_bind_from_offscreen(), internalInitMultipleJoints(), lineart_bounding_area_triangle_intersect(), pygpu_framebuffer_free_if_possible(), pygpu_framebuffer_stack_pop_and_restore_or_error(), pygpu_framebuffer_stack_push_and_bind_or_error(), pygpu_state_active_framebuffer_get(), blender::gpu::MTLRenderPassState::reset_state(), sequencer_ibuf_get(), blender::draw::test_draw_pass_all_commands(), blender::gpu::tests::ShaderSpecializationConst::validate(), write_render_color_output(), write_render_z_output(), and writeBackJoints().

◆ fbderiv()

BLI_INLINE float fbderiv ( float length,
float L )

Definition at line 1677 of file implicit_blender.cc.

References L, and x.

Referenced by fbstar_jacobi().

◆ fbstar()

BLI_INLINE float fbstar ( float length,
float L,
float kb,
float cb )

Definition at line 1685 of file implicit_blender.cc.

References fb(), and L.

Referenced by SIM_mass_spring_force_spring_bending(), and SIM_mass_spring_force_spring_linear().

◆ fbstar_jacobi()

BLI_INLINE float fbstar_jacobi ( float length,
float L,
float kb,
float cb )

◆ filter()

DO_INLINE void filter ( lfVector * V,
fmatrix3x3 * S )

Definition at line 743 of file implicit_blender.cc.

References mul_m3_v3(), V, and fmatrix3x3::vcount.

Referenced by achannel_setting_flush_widget_cb(), actkeys_channels_get_selected_extents(), actkeys_framejump_exec(), actkeys_mselect_channel_only(), actkeys_mselect_column(), actkeys_mselect_single(), actkeys_select_leftright(), actkeys_select_linked_exec(), ANIM_editkeyframes_refresh(), ANIM_sync_animchannels_to_data(), animchannels_clean_empty_exec(), animchannels_delete_exec(), animchannels_enable_exec(), animchannels_group_exec(), animchannels_rearrange_exec(), animchannels_ungroup_exec(), bake_action_keys(), bake_graph_keys(), box_select_action(), box_select_anim_channels(), cg_filtered(), clean_action_keys(), clean_graph_keys(), blender::deg::clear_id_nodes_conditional(), columnselect_action_keys(), columnselect_graph_keys(), convert_keys_to_samples(), copy_action_keys(), copy_graph_keys(), create_ghost_curves(), createTransActionData(), createTransGraphEditData(), createTransNlaData(), delete_action_keys(), delete_graph_keys(), deselect_action_keys(), deselect_graph_keys(), duplicate_action_keys(), duplicate_graph_keys(), ED_gpencil_anim_copybuf_copy(), ED_gpencil_anim_copybuf_paste(), filelist_setfilter_options(), blender::compositor::DenoiseOperation::generate_denoise(), get_graph_keyframe_extents(), get_keyframe_extents(), get_nearest_fcurve_verts_list(), glow_blur_bitmap(), graph_draw_curves(), graph_driver_delete_invalid_exec(), graph_fmodifier_add_exec(), graph_fmodifier_paste_exec(), graph_refresh_fcurve_colors(), graphkeys_mselect_column(), graphkeys_select_leftright(), graphkeys_select_linked_exec(), graphkeys_smooth_exec(), graphop_editable_keyframes_poll(), graphop_selected_fcurve_poll(), graphop_visible_keyframes_poll(), graphview_curves_hide_exec(), graphview_curves_reveal_exec(), IMB_filter_extend(), initialize_animdata_selection_filter(), insert_action_keys(), insert_graph_keys(), markers_selectkeys_between(), markers_selectkeys_between(), mirror_action_keys(), mirror_graph_keys(), mouse_anim_channels(), ob_keyframes_loop(), paste_action_keys(), paste_graph_keys(), posttrans_action_clean(), rearrange_gpencil_channels(), recalcData_actedit(), recalcData_graphedit(), region_select_action_keys(), rename_anim_channels(), scene_keyframes_loop(), select_anim_channel_keys(), select_moreless_action_keys(), select_moreless_graph_keys(), seteasing_graph_keys(), setexpo_action_keys(), setexpo_graph_keys(), setflag_anim_channels(), sethandles_action_keys(), sethandles_graph_keys(), setipo_graph_keys(), setkeytype_action_keys(), snap_action_keys(), snap_graph_keys(), sum_selected_keyframes(), summary_keyframes_loop(), and ui_template_id().

◆ init_bfmatrix()

DO_INLINE void init_bfmatrix ( fmatrix3x3 * matrix,
float m3[3][3] )

Definition at line 561 of file implicit_blender.cc.

References cp_fmatrix().

Referenced by SIM_mass_spring_clear_forces().

◆ init_fmatrix()

BLI_INLINE void init_fmatrix ( fmatrix3x3 * matrix,
int r,
int c )

Definition at line 520 of file implicit_blender.cc.

Referenced by create_bfmatrix(), and SIM_mass_spring_add_block().

◆ init_lfvector()

DO_INLINE void init_lfvector ( float(*) fLongVector[3],
const float vector[3],
uint verts )

Definition at line 143 of file implicit_blender.cc.

References copy_v3_v3(), and verts.

◆ initdiag_bfmatrix()

DO_INLINE void initdiag_bfmatrix ( fmatrix3x3 * matrix,
float m3[3][3] )

Definition at line 572 of file implicit_blender.cc.

References cp_fmatrix().

Referenced by SIM_mass_spring_solver_create().

◆ initdiag_fmatrixS()

DO_INLINE void initdiag_fmatrixS ( float to[3][3],
float aS )

Definition at line 344 of file implicit_blender.cc.

References cp_fmatrix(), and ZERO.

◆ madd_m3_m3fl()

BLI_INLINE void madd_m3_m3fl ( float r[3][3],
const float m[3][3],
float f )

Definition at line 490 of file implicit_blender.cc.

Referenced by SIM_mass_spring_force_spring_bending_hair().

◆ mul_bfmatrix_lfvector()

DO_INLINE void mul_bfmatrix_lfvector ( float(*) to[3],
fmatrix3x3 * from,
lfVector * fLongVector )

◆ mul_fmatrix_fvector()

DO_INLINE void mul_fmatrix_fvector ( float * to,
const float matrix[3][3],
const float from[3] )

Definition at line 412 of file implicit_blender.cc.

References dot_v3v3().

◆ mul_fmatrix_S()

DO_INLINE void mul_fmatrix_S ( float matrix[3][3],
float scalar )

Definition at line 394 of file implicit_blender.cc.

References mul_fvector_S().

◆ mul_fvector_fmatrix()

DO_INLINE void mul_fvector_fmatrix ( float * to,
const float * from,
const float matrix[3][3] )

Definition at line 403 of file implicit_blender.cc.

◆ mul_fvector_S()

DO_INLINE void mul_fvector_S ( float to[3],
const float from[3],
float scalar )

◆ mul_fvectorT_fvector()

DO_INLINE void mul_fvectorT_fvector ( float to[3][3],
const float vectorA[3],
const float vectorB[3] )

◆ mul_fvectorT_fvectorS()

DO_INLINE void mul_fvectorT_fvectorS ( float to[3][3],
float vectorA[3],
float vectorB[3],
float aS )

Definition at line 93 of file implicit_blender.cc.

References mul_fvector_S(), and mul_fvectorT_fvector().

◆ mul_lfvectorS()

DO_INLINE void mul_lfvectorS ( float(*) to[3],
float(*) fLongVector[3],
float scalar,
uint verts )

Definition at line 156 of file implicit_blender.cc.

References mul_fvector_S(), and verts.

◆ muladd_fmatrix_fvector()

DO_INLINE void muladd_fmatrix_fvector ( float to[3],
const float matrix[3][3],
const float from[3] )

Definition at line 449 of file implicit_blender.cc.

References dot_v3v3().

Referenced by mul_bfmatrix_lfvector().

◆ muladd_fmatrixT_fvector()

DO_INLINE void muladd_fmatrixT_fvector ( float to[3],
const float matrix[3][3],
const float from[3] )

Definition at line 456 of file implicit_blender.cc.

Referenced by mul_bfmatrix_lfvector().

◆ outerproduct()

BLI_INLINE void outerproduct ( float r[3][3],
const float a[3],
const float b[3] )

◆ poly_avg()

BLI_INLINE void poly_avg ( lfVector * data,
const int * inds,
int len,
float r_avg[3] )

Definition at line 1854 of file implicit_blender.cc.

References float, len, madd_v3_v3fl(), and zero_v3().

Referenced by poly_norm(), and spring_angle().

◆ poly_norm()

BLI_INLINE void poly_norm ( lfVector * data,
int i,
int j,
int * inds,
int len,
float r_dir[3] )

Definition at line 1865 of file implicit_blender.cc.

References len, normal_tri_v3(), and poly_avg().

Referenced by spring_angle().

◆ root_to_world_m3()

BLI_INLINE void root_to_world_m3 ( Implicit_Data * data,
int index,
float r[3][3],
const float m[3][3] )

Definition at line 733 of file implicit_blender.cc.

References mul_m3_m3m3().

◆ root_to_world_v3()

◆ SIM_mass_spring_add_block()

static int SIM_mass_spring_add_block ( Implicit_Data * data,
int v1,
int v2 )
static

Definition at line 1254 of file implicit_blender.cc.

References BLI_assert, init_fmatrix(), M, and v2.

Referenced by apply_spring(), and SIM_mass_spring_force_spring_bending_hair().

◆ SIM_mass_spring_add_constraint_ndof0()

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

Definition at line 1281 of file implicit_blender.cc.

References 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 ( 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 ( Implicit_Data * data,
int index,
const float c1[3],
const float dV[3] )

◆ SIM_mass_spring_apply_result()

void SIM_mass_spring_apply_result ( Implicit_Data * data)

Definition at line 1170 of file implicit_blender.cc.

References cp_lfvector().

Referenced by SIM_cloth_solve().

◆ SIM_mass_spring_clear_constraints()

void SIM_mass_spring_clear_constraints ( Implicit_Data * data)

Definition at line 1272 of file implicit_blender.cc.

References 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)

Clear the force vector at the beginning of the time step.

Definition at line 1327 of file implicit_blender.cc.

References 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 )

Global drag force (velocity damping).

Definition at line 1402 of file implicit_blender.cc.

References add_m3_m3m3(), copy_m3_m3(), 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] )

Wind force, acting on an edge.

Definition at line 1599 of file implicit_blender.cc.

References add_v3_v3(), edge_wind_vertex(), length(), normalize_v3(), sub_v3_v3v3(), v2, and world_to_root_v3().

Referenced by cloth_calc_force().

◆ 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] )

Custom external force.

Definition at line 1417 of file implicit_blender.cc.

References add_m3_m3m3(), add_v3_v3(), world_to_root_m3(), and world_to_root_v3().

◆ 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] )

Arbitrary per-unit-area vector force field acting on a face..

Definition at line 1487 of file implicit_blender.cc.

References add_v3_v3(), calc_nor_area_tri(), mul_v3_fl(), nor, v2, world_to_root_v3(), and zero_v3().

Referenced by cloth_calc_force().

◆ 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] )

Wind force, acting on a face (only generates pressure from the normal component).

Definition at line 1444 of file implicit_blender.cc.

References calc_nor_area_tri(), dot_v3v3(), madd_v3_v3fl(), mul_v3_fl(), nor, v2, and world_to_root_v3().

Referenced by cloth_calc_force().

◆ SIM_mass_spring_force_gravity()

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 1392 of file implicit_blender.cc.

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

Referenced by cloth_calc_force().

◆ SIM_mass_spring_force_pressure()

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

Definition at line 1531 of file implicit_blender.cc.

References calc_nor_area_tri(), copy_v3_fl3(), madd_v3_v3fl(), mul_v3_fl(), nor, v2, and zero_v3().

Referenced by cloth_calc_force().

◆ 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 )

Fictitious forces introduced by moving coordinate systems.

Definition at line 1337 of file implicit_blender.cc.

References add_m3_m3m3(), add_v3_v3(), copy_m3_m3(), cross_m3_v3m3(), cross_v3_identity(), cross_v3_v3v3(), mul_m3_fl(), mul_v3_fl(), negate_m3(), sub_v3_v3(), sub_v3_v3v3(), w(), and world_to_root_v3().

◆ 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 )

Angular spring force between two polygons.

Definition at line 1931 of file implicit_blender.cc.

References add_v3_v3(), add_v3_v3v3(), angle(), dot_v3v3(), mul_v3_v3fl(), spring_angle(), sub_v3_v3(), and x.

Referenced by cloth_calc_spring_force().

◆ 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 )

Bending force, forming a triangle at the base of two structural springs.

Definition at line 1825 of file implicit_blender.cc.

References apply_spring(), fbstar(), fbstar_jacobi(), length(), mul_m3_fl(), mul_v3_v3fl(), outerproduct(), spring_length(), and zero_m3().

Referenced by cloth_calc_spring_force().

◆ SIM_mass_spring_force_spring_bending_hair()

◆ 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] )

Wind force, acting on a vertex.

Definition at line 1617 of file implicit_blender.cc.

References add_v3_v3(), mul_v3_v3fl(), v, and world_to_root_v3().

Referenced by cloth_calc_force().

◆ SIM_mass_spring_get_motion_state()

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

◆ SIM_mass_spring_get_new_position()

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

Definition at line 1232 of file implicit_blender.cc.

References root_to_world_v3().

Referenced by cloth_solve_collisions().

◆ SIM_mass_spring_get_new_velocity()

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

◆ SIM_mass_spring_get_position()

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

◆ SIM_mass_spring_get_velocity()

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

Definition at line 1227 of file implicit_blender.cc.

References 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 ( Implicit_Data * data,
int index,
const float x[3],
const float v[3] )

Definition at line 1193 of file implicit_blender.cc.

References v, and world_to_root_v3().

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 ( Implicit_Data * data,
int index,
const float x[3] )

Definition at line 1237 of file implicit_blender.cc.

References world_to_root_v3().

◆ SIM_mass_spring_set_new_velocity()

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

Definition at line 1247 of file implicit_blender.cc.

References 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 ( Implicit_Data * data,
int index,
const float x[3] )

Definition at line 1202 of file implicit_blender.cc.

References world_to_root_v3().

Referenced by SIM_cloth_solve().

◆ SIM_mass_spring_set_rest_transform()

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

Definition at line 1183 of file implicit_blender.cc.

References copy_m3_m3(), and unit_m3().

Referenced by SIM_cloth_solver_set_positions().

◆ SIM_mass_spring_set_velocity()

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

Definition at line 1207 of file implicit_blender.cc.

References v, and world_to_root_v3().

Referenced by SIM_cloth_solve().

◆ SIM_mass_spring_set_vertex_mass()

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

Definition at line 1177 of file implicit_blender.cc.

References mul_m3_fl(), and unit_m3().

Referenced by SIM_mass_spring_set_implicit_vertex_mass().

◆ SIM_mass_spring_solve_positions()

bool SIM_mass_spring_solve_positions ( Implicit_Data * data,
float dt )

Definition at line 1160 of file implicit_blender.cc.

References add_lfvector_lfvectorS().

Referenced by cloth_solve_collisions(), and SIM_cloth_solve().

◆ SIM_mass_spring_solve_velocities()

◆ SIM_mass_spring_solver_create()

Implicit_Data * SIM_mass_spring_solver_create ( int numverts,
int numsprings )

◆ SIM_mass_spring_solver_free()

void SIM_mass_spring_solver_free ( Implicit_Data * id)

Definition at line 685 of file implicit_blender.cc.

References del_bfmatrix(), del_lfvector(), and MEM_freeN().

Referenced by SIM_cloth_solver_free().

◆ SIM_tri_area()

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

Definition at line 1524 of file implicit_blender.cc.

References calc_nor_area_tri(), nor, and v2.

Referenced by cloth_calc_average_pressure().

◆ SIM_tri_tetra_volume_signed_6x()

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

Definition at line 1518 of file implicit_blender.cc.

References v2, and volume_tri_tetrahedron_signed_v3_6x().

Referenced by cloth_calc_volume().

◆ spring_angle()

BLI_INLINE void spring_angle ( Implicit_Data * data,
int i,
int j,
int * i_a,
int * i_b,
int len_a,
int len_b,
float r_dir_a[3],
float r_dir_b[3],
float * r_angle,
float r_vel_a[3],
float r_vel_b[3] )

◆ spring_grad_dir()

BLI_INLINE void spring_grad_dir ( Implicit_Data * data,
int i,
int j,
float edge[3],
float dir[3],
float grad_dir[3][3] )

◆ spring_hairbend_estimate_dfdv()

BLI_INLINE void spring_hairbend_estimate_dfdv ( Implicit_Data * data,
int i,
int j,
int k,
const float goal[3],
float stiffness,
float damping,
int q,
float dfdv[3][3] )

◆ spring_hairbend_estimate_dfdx()

BLI_INLINE void spring_hairbend_estimate_dfdx ( Implicit_Data * data,
int i,
int j,
int k,
const float goal[3],
float stiffness,
float damping,
int q,
float dfdx[3][3] )

◆ spring_hairbend_forces()

BLI_INLINE void spring_hairbend_forces ( Implicit_Data * data,
int i,
int j,
int k,
const float goal[3],
float stiffness,
float damping,
int q,
const float dx[3],
const float dv[3],
float r_f[3] )

◆ spring_length()

BLI_INLINE bool spring_length ( Implicit_Data * data,
int i,
int j,
float r_extent[3],
float r_dir[3],
float * r_length,
float r_vel[3] )

◆ sub_fmatrix_fmatrix()

DO_INLINE void sub_fmatrix_fmatrix ( float to[3][3],
const float matrixA[3][3],
const float matrixB[3][3] )

Definition at line 436 of file implicit_blender.cc.

References sub_v3_v3v3().

◆ sub_lfvector_lfvector()

DO_INLINE void sub_lfvector_lfvector ( float(*) to[3],
float(*) fLongVectorA[3],
float(*) fLongVectorB[3],
uint verts )

Definition at line 234 of file implicit_blender.cc.

References sub_v3_v3v3(), and verts.

Referenced by cg_filtered().

◆ sub_lfvector_lfvectorS()

DO_INLINE void sub_lfvector_lfvectorS ( float(*) to[3],
float(*) fLongVectorA[3],
float(*) fLongVectorB[3],
float bS,
uint verts )

Definition at line 225 of file implicit_blender.cc.

References VECSUBS, and verts.

◆ subadd_bfmatrixS_bfmatrixS()

DO_INLINE void subadd_bfmatrixS_bfmatrixS ( fmatrix3x3 * to,
fmatrix3x3 * from,
float aS,
fmatrix3x3 * matrix,
float bS )

Definition at line 619 of file implicit_blender.cc.

References subadd_fmatrixS_fmatrixS().

Referenced by SIM_mass_spring_solve_velocities().

◆ subadd_fmatrixS_fmatrixS()

DO_INLINE void subadd_fmatrixS_fmatrixS ( float to[3][3],
const float matrixA[3][3],
float aS,
const float matrixB[3][3],
float bS )

Definition at line 428 of file implicit_blender.cc.

References VECSUBADDSS.

Referenced by subadd_bfmatrixS_bfmatrixS().

◆ submul_lfvectorS()

DO_INLINE void submul_lfvectorS ( float(*) to[3],
float(*) fLongVector[3],
float scalar,
uint verts )

Definition at line 166 of file implicit_blender.cc.

References VECSUBMUL, and verts.

◆ world_to_root_m3()

BLI_INLINE void world_to_root_m3 ( Implicit_Data * data,
int index,
float r[3][3],
const float m[3][3] )

Definition at line 722 of file implicit_blender.cc.

References copy_m3_m3(), mul_m3_m3m3(), and transpose_m3().

Referenced by SIM_mass_spring_force_extern().

◆ world_to_root_v3()

◆ zero_lfvector()

DO_INLINE void zero_lfvector ( float(*) to[3],
uint verts )

Variable Documentation

◆ I

◆ ZERO

float ZERO[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}
static

Definition at line 46 of file implicit_blender.cc.

Referenced by initdiag_fmatrixS(), and SIM_mass_spring_clear_forces().