From f0ba02684dbf4722afa2dcfd491d56921162182a Mon Sep 17 00:00:00 2001 From: hgn Date: Mon, 22 Jan 2024 17:52:08 +0000 Subject: [PATCH] rigidbody math corrections & ragdoll tweaks for stability --- maps_src/dev_flatworld/main.mdl | Bin 2484744 -> 2485320 bytes models_src/ch_none.mdl | Bin 1040016 -> 1040016 bytes player_glide.c | 1 - player_ragdoll.c | 32 ++++--- rigidbody.h | 156 +++++++++++++++++++++++++------- skaterift.c | 3 + testing.c | 43 +++++++++ vehicle.c | 2 +- world_gen.c | 2 +- world_routes.c | 2 +- 10 files changed, 189 insertions(+), 52 deletions(-) create mode 100644 testing.c diff --git a/maps_src/dev_flatworld/main.mdl b/maps_src/dev_flatworld/main.mdl index 10619c573fcd1a44dd0c286a8c788ef22b577b70..f9c326c23a11b9d075b46f34f7c6a37b42530e59 100644 GIT binary patch delta 51335 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 z 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%0DGx9$)8moHYz0%lt?3Uai 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 a5DbI>9f43F3 diff --git a/models_src/ch_none.mdl b/models_src/ch_none.mdl index 5dacbe1085cbb8375cfc519e8d0a0641b2517d0f..82927ff4a0dca3d575aa2727c24a4e5b95e391ce 100644 GIT binary patch delta 94 zcmbQR*M7oY`wcJngt@LO@9R1Abto_local, balance, balance ); - vg_info( PRINTF_v3f( balance ) ); v3f Fw = { steer[1]*k_glide_steer - balance[2], diff --git a/player_ragdoll.c b/player_ragdoll.c index e334580..e1231bc 100644 --- a/player_ragdoll.c +++ b/player_ragdoll.c @@ -116,7 +116,7 @@ static void player_init_ragdoll_bone_collider( struct skeleton_bone *bone, v3_add( rp->collider_mtx[3], bone->co, rp->obj.rb.co ); v3_zero( rp->obj.rb.v ); v3_zero( rp->obj.rb.w ); - rb_init_object( &rp->obj ); + rb_init_object( &rp->obj, 4.0f ); } /* @@ -453,14 +453,26 @@ static void player_ragdoll_iter( struct player_ragdoll *rd ){ * SOLVE CONSTRAINTS & Integrate */ if( run_sim ){ - for( int i=0; i<12; i++ ){ - rb_solve_contacts( rb_contact_buffer, rb_contact_count ); - rb_solve_swingtwist_constraints( rd->cone_constraints, - rd->cone_constraints_count ); + /* the solver is not very quickly converging so... */ + for( int i=0; i<40; i++ ){ + if( i<20 ){ + rb_solve_contacts( rb_contact_buffer, rb_contact_count ); + rb_solve_swingtwist_constraints( rd->cone_constraints, + rd->cone_constraints_count ); + rb_postsolve_swingtwist_constraints( rd->cone_constraints, + rd->cone_constraints_count ); + } rb_solve_position_constraints( rd->position_constraints, rd->position_constraints_count ); } + rb_correct_position_constraints( rd->position_constraints, + rd->position_constraints_count, + k_ragdoll_correction * 0.5f ); + rb_correct_swingtwist_constraints( rd->cone_constraints, + rd->cone_constraints_count, + k_ragdoll_correction * 0.25f ); + for( int i=0; ipart_count; i++ ){ rb_iter( &rd->parts[i].obj.rb ); @@ -475,16 +487,6 @@ static void player_ragdoll_iter( struct player_ragdoll *rd ){ for( int i=0; ipart_count; i++ ) rb_update_transform( &rd->parts[i].obj.rb ); - - for( int i=0; i<5; i ++ ){ - rb_correct_swingtwist_constraints( rd->cone_constraints, - rd->cone_constraints_count, - k_ragdoll_correction * 0.25f ); - - rb_correct_position_constraints( rd->position_constraints, - rd->position_constraints_count, - k_ragdoll_correction * 0.5f ); - } } rb_ct *stress = NULL; diff --git a/rigidbody.h b/rigidbody.h index a69e4af..992bdba 100644 --- a/rigidbody.h +++ b/rigidbody.h @@ -31,7 +31,7 @@ static const float k_damp_linear = 0.1f, /* scale velocity 1/(1+x) */ k_damp_angular = 0.1f, /* scale angular 1/(1+x) */ k_penetration_slop = 0.01f, - k_inertia_scale = 8.0f, + k_inertia_scale = 4.0f, k_phys_baumgarte = 0.2f, k_gravity = 9.6f; @@ -81,7 +81,6 @@ struct rigidbody{ float inv_mass; /* inertia model and inverse world tensor */ - v3f I; m3x3f iI, iIw; m4x3f to_world, to_local; }; @@ -139,6 +138,8 @@ struct rb_constr_swingtwist{ float conet; float tangent_mass, axis_mass; + + f32 conv_tangent, conv_axis; }; /* @@ -206,8 +207,10 @@ static void rb_update_transform( rigidbody *rb ) v3_copy( rb->co, rb->to_world[3] ); m4x3_invert_affine( rb->to_world, rb->to_local ); - m3x3_mul( rb->iI, rb->to_local, rb->iIw ); - m3x3_mul( rb->to_world, rb->iIw, rb->iIw ); + + /* I = R I_0 R^T */ + m3x3_mul( rb->to_world, rb->iI, rb->iIw ); + m3x3_mul( rb->iIw, rb->to_local, rb->iIw ); rb_update_bounds( rb ); } @@ -240,7 +243,7 @@ static void rb_extrapolate( rigidbody *rb, v3f co, v4f q ) /* * Initialize rigidbody and calculate masses, inertia */ -static void rb_init_object( rb_object *obj ){ +static void rb_init_object( rb_object *obj, f32 inertia_scale ){ float volume = 1.0f; int inert = 0; @@ -271,32 +274,62 @@ static void rb_init_object( rb_object *obj ){ if( inert ){ obj->rb.inv_mass = 0.0f; - v3_zero( obj->rb.I ); m3x3_zero( obj->rb.iI ); } else{ - float mass = 2.0f*volume; + f32 mass = 8.0f*volume; obj->rb.inv_mass = 1.0f/mass; - v3f extent; + v3f extent, com; v3_sub( obj->rb.bbx[1], obj->rb.bbx[0], extent ); - v3_muls( extent, 0.5f, extent ); + v3_muladds( obj->rb.bbx[0], extent, 0.5f, com ); /* local intertia tensor */ - float scale = k_inertia_scale; - float ex2 = scale*extent[0]*extent[0], - ey2 = scale*extent[1]*extent[1], - ez2 = scale*extent[2]*extent[2]; - - obj->rb.I[0] = ((1.0f/12.0f) * mass * (ey2+ez2)); - obj->rb.I[1] = ((1.0f/12.0f) * mass * (ex2+ez2)); - obj->rb.I[2] = ((1.0f/12.0f) * mass * (ex2+ey2)); - - m3x3_identity( obj->rb.iI ); - obj->rb.iI[0][0] = obj->rb.I[0]; - obj->rb.iI[1][1] = obj->rb.I[1]; - obj->rb.iI[2][2] = obj->rb.I[2]; - m3x3_inv( obj->rb.iI, obj->rb.iI ); + f32 ex2 = extent[0]*extent[0], + ey2 = extent[1]*extent[1], + ez2 = extent[2]*extent[2]; + + /* compute inertia tensor */ + v3f I; + + if( obj->type == k_rb_shape_box ){ + I[0] = inertia_scale * (ey2+ez2) * mass * (1.0f/12.0f); + I[1] = inertia_scale * (ex2+ez2) * mass * (1.0f/12.0f); + I[2] = inertia_scale * (ex2+ey2) * mass * (1.0f/12.0f); + } + else if( obj->type == k_rb_shape_sphere ){ + f32 r = obj->inf.sphere.radius; + v3_fill( I, inertia_scale * r*r * mass * (2.0f/5.0f) ); + } + else if( obj->type == k_rb_shape_capsule ){ + f32 r = obj->inf.capsule.radius; + I[1] = inertia_scale * r*r * mass * (2.0f/5.0f); + I[0] = inertia_scale * (ey2+ez2) * mass * (1.0f/12.0f); + I[2] = inertia_scale * (ey2+ex2) * mass * (1.0f/12.0f); + } + else { + vg_fatal_error( "" ); + } + + m3x3f i; + m3x3_identity( i ); + m3x3_setdiagonalv3( i, I ); + + /* compute translation */ + m3x3f i_t, i_t_outer, i_t_scale; + m3x3_diagonal( i_t, v3_dot(com,com) ); + m3x3_outer_product( i_t_outer, com, com ); + m3x3_sub( i_t, i_t_outer, i_t ); + m3x3_diagonal( i_t_scale, mass ); + m3x3_mul( i_t_scale, i_t, i_t ); + + /* TODO: compute rotation */ + + /* add Ic and Ict */ + m3x3_add( i, i_t, i ); + + /* store as inverted */ + m3x3_inv( i, obj->rb.iI ); } rb_update_transform( &obj->rb ); @@ -1221,7 +1254,7 @@ static rb_ct *rb_global_ct(void){ } static void rb_prepare_contact( rb_ct *ct, float timestep ){ - ct->bias = -0.2f * (timestep*3600.0f) + ct->bias = -k_phys_baumgarte * (timestep*3600.0f) * vg_minf( 0.0f, -ct->p+k_penetration_slop ); v3_tangent_basis( ct->n, ct->t[0], ct->t[1] ); @@ -1405,8 +1438,6 @@ static void rb_debug_position_constraints( rb_constr_pos *buffer, int len ){ static void rb_presolve_swingtwist_constraints( rb_constr_swingtwist *buf, int len ){ - float size = 0.12f; - for( int i=0; iaxis_violation ){ + st->conv_axis = 0.0f; + continue; + } + + f32 rv = v3_dot( st->axis, st->rbb->w ) - + v3_dot( st->axis, st->rba->w ); + + if( rv * (f32)st->axis_violation > 0.0f ) + st->conv_axis = 0.0f; + else + st->conv_axis = rv; + } + + for( int i=0; itangent_violation ){ + st->conv_tangent = 0.0f; + continue; + } + + f32 rv = v3_dot( st->tangent_axis, st->rbb->w ) - + v3_dot( st->tangent_axis, st->rba->w ); + + if( rv > 0.0f ) + st->conv_tangent = 0.0f; + else + st->conv_tangent = rv; + } +} + static void rb_solve_constr_angle( rigidbody *rba, rigidbody *rbb, v3f ra, v3f rb ){ m3x3f ssra, ssrb, ssrat, ssrbt; @@ -1764,8 +1831,16 @@ static void rb_correct_position_constraints( rb_constr_pos *buf, int len, v3_add( rbb->co, p1, p1 ); v3_sub( p1, p0, d ); +#if 1 v3_muladds( rbb->co, d, -1.0f * amt, rbb->co ); rb_update_transform( rbb ); +#else + f32 mt = 1.0f/(rba->inv_mass+rbb->inv_mass), + a = mt * (k_phys_baumgarte/k_rb_delta); + + v3_muladds( rba->v, d, a* rba->inv_mass, rba->v ); + v3_muladds( rbb->v, d, a*-rbb->inv_mass, rbb->v ); +#endif } } @@ -1780,16 +1855,23 @@ static void rb_correct_swingtwist_constraints( rb_constr_swingtwist *buf, v3f va; m3x3_mulv( st->rbb->to_world, st->coneva, va ); - float angle = v3_dot( va, st->tangent_target ); + f32 angle = v3_dot( va, st->tangent_target ); if( fabsf(angle) < 0.9999f ){ v3f axis; v3_cross( va, st->tangent_target, axis ); - +#if 1 + angle = acosf(angle) * amt; v4f correction; - q_axis_angle( correction, axis, acosf(angle) * amt ); + q_axis_angle( correction, axis, angle ); q_mul( correction, st->rbb->q, st->rbb->q ); rb_update_transform( st->rbb ); +#else + f32 mt = 1.0f/(st->rba->inv_mass+st->rbb->inv_mass), + wa = mt * acosf(angle) * (k_phys_baumgarte/k_rb_delta); + //v3_muladds( st->rba->w, axis, wa*-st->rba->inv_mass, st->rba->w ); + v3_muladds( st->rbb->w, axis, wa* st->rbb->inv_mass, st->rbb->w ); +#endif } } @@ -1802,16 +1884,24 @@ static void rb_correct_swingtwist_constraints( rb_constr_swingtwist *buf, v3f vxb; m3x3_mulv( st->rbb->to_world, st->conevxb, vxb ); - float angle = v3_dot( vxb, st->axis_target ); + f32 angle = v3_dot( vxb, st->axis_target ); if( fabsf(angle) < 0.9999f ){ v3f axis; v3_cross( vxb, st->axis_target, axis ); +#if 1 + angle = acosf(angle) * amt; v4f correction; - q_axis_angle( correction, axis, acosf(angle) * amt ); + q_axis_angle( correction, axis, angle ); q_mul( correction, st->rbb->q, st->rbb->q ); rb_update_transform( st->rbb ); +#else + f32 mt = 1.0f/(st->rba->inv_mass+st->rbb->inv_mass), + wa = mt * acosf(angle) * (k_phys_baumgarte/k_rb_delta); + //v3_muladds( st->rba->w, axis, wa*-0.5f, st->rba->w ); + v3_muladds( st->rbb->w, axis, wa* st->rbb->inv_mass, st->rbb->w ); +#endif } } } diff --git a/skaterift.c b/skaterift.c index be4084e..a1a6157 100644 --- a/skaterift.c +++ b/skaterift.c @@ -57,6 +57,7 @@ #include "particle.c" #include "player_effects.c" #include "freecam.c" +#include "testing.c" static int k_tools_mode = 0; @@ -230,6 +231,7 @@ static void vg_load(void){ vg_loader_step( workshop_init, NULL ); vg_loader_step( skateshop_init, NULL ); vg_loader_step( ent_tornado_init, NULL ); + vg_loader_step( testing_init, NULL ); vg_loader_step( skaterift_load_player_content, NULL ); @@ -325,6 +327,7 @@ static void vg_fixed_update(void){ world_routes_fixedupdate( world_current_instance() ); player__update(); vehicle_update_fixed(); + testing_update(); } static void vg_post_update(void){ diff --git a/testing.c b/testing.c new file mode 100644 index 0000000..b5b4cec --- /dev/null +++ b/testing.c @@ -0,0 +1,43 @@ +#include "rigidbody.h" + +static rb_object baller = { + .type = k_rb_shape_box, + .rb.bbx = {{ -0.1f, -0.2f, -0.1f }, + { 0.1f, 1.0f, 0.1f }}, + .rb.q = { 0,0,0,1 }, +}; + +static void testing_update(void){ + if( vg_getkey( SDLK_9 ) ){ + v3_add( localplayer.rb.co, (v3f){0,1,0}, baller.rb.co ); + v3_zero( baller.rb.w ); + v3_zero( baller.rb.v ); + q_identity( baller.rb.q ); + rb_update_transform( &baller.rb ); + } + rb_object_debug( &baller, VG__RED ); + + world_instance *world = world_current_instance(); + + rb_solver_reset(); + rb_ct *buf = rb_global_buffer(); + rb_contact_count += rb_box__scene( baller.rb.to_world, baller.rb.bbx, + NULL, &world->rb_geo.inf.scene, buf, + k_material_flag_ghosts ); + for( u32 j=0; jrb_geo.rb; + } + + rb_presolve_contacts( rb_contact_buffer, rb_contact_count ); + + for( u32 i=0; i<8; i ++ ) + rb_solve_contacts( rb_contact_buffer, rb_contact_count ); + + rb_iter( &baller.rb ); + rb_update_transform( &baller.rb ); +} + +static void testing_init(void){ + rb_init_object( &baller, 1.0f ); +} diff --git a/vehicle.c b/vehicle.c index 3d68d11..b367a1c 100644 --- a/vehicle.c +++ b/vehicle.c @@ -36,7 +36,7 @@ static void vehicle_init(void) v3_zero( gzoomer.obj.rb.w ); v3_zero( gzoomer.obj.rb.v ); v3_zero( gzoomer.obj.rb.co ); - rb_init_object( &gzoomer.obj ); + rb_init_object( &gzoomer.obj, 1.0f ); VG_VAR_F32( k_car_spring, flags=VG_VAR_PERSISTENT ); VG_VAR_F32( k_car_spring_damp, flags=VG_VAR_PERSISTENT ); diff --git a/world_gen.c b/world_gen.c index e2ec14a..b86c5cf 100644 --- a/world_gen.c +++ b/world_gen.c @@ -277,7 +277,7 @@ static void world_gen_generate_meshes( world_instance *world ){ world->rb_geo.type = k_rb_shape_scene; world->rb_geo.inf.scene.bh_scene = world->geo_bh; - rb_init_object( &world->rb_geo ); + rb_init_object( &world->rb_geo, 0.0f ); /* * Generate scene: non-collidable geometry diff --git a/world_routes.c b/world_routes.c index b80e68e..daba459 100644 --- a/world_routes.c +++ b/world_routes.c @@ -897,7 +897,7 @@ static void world_routes_fracture( world_instance *world, ent_gate *gate, particle->obj.type = k_rb_shape_sphere; particle->obj.inf.sphere.radius = r*0.6f; - rb_init_object( &particle->obj ); + rb_init_object( &particle->obj, 1.0f ); } offset[0] += glyph->size[0]; } -- 2.25.1