--- id: wiki-2026-0508-biomechanics-of-injury title: Biomechanics of Injury category: 10_Wiki/Topics status: verified canonical_id: self aliases: [Damage Modeling, Injury Simulation, Hit Reaction] duplicate_of: none source_trust_level: A confidence_score: 0.85 verification_status: applied tags: [game-design, simulation, damage-model, biomechanics] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: cpp framework: physics-sim / game-engine --- # Biomechanics of Injury ## 매 한 줄 > **"매 force × tissue tolerance = injury"**. Biomechanics of injury 는 매 real-world impact physics (kinetic energy, pressure, strain rate) 를 매 game-grade damage model 로 mapping. 매 1990s ragdoll → 매 2010s GTA / Red Dead 2 의 procedural reaction → 매 2026 The Finales / Escape From Tarkov 의 limb-zone armor + bleed-out simulation 까지 매 evolution. ## 매 핵심 ### 매 physics 기본 - **Kinetic energy**: KE = ½mv². 매 9mm pistol ≈ 500 J, 매 rifle round ≈ 2000-3500 J. - **Pressure**: P = F/A. 매 small projectile = 매 high-pressure 침투. - **Strain rate**: 매 fast load = 매 brittle fracture (bone), 매 slow = 매 bend. - **Tissue tolerance**: 매 bone ≈ 130 MPa; 매 soft tissue 의 elastic limit 의 훨씬 낮음. ### 매 game model layers 1. **Hitbox layer** — body part zone (head / torso / limb). 2. **Damage type** — penetration / blunt / explosive / fire. 3. **Armor interaction** — material × thickness × angle. 4. **Wound state** — bleed / fracture / shock / unconscious. 5. **Locomotion impact** — limp / aim sway / stamina drain. ### 매 응용 1. Tactical shooter limb damage (Tarkov, Ready or Not, Squad). 2. Melee combat reaction (Mordhau, Chivalry 2, Kingdom Come Deliverance). 3. Vehicle crash sim (BeamNG.drive — 매 jbeam node-spring deformation). 4. Sports / action game ragdoll tuning (NBA 2K, Wrestling games). ## 💻 패턴 ### Limb-zone hit registration ```cpp struct HitResult { BodyPart part; // HEAD, NECK, CHEST, ARM, LEG float damage; DamageType dtype; Vector3 impactPoint; float kineticEnergy; }; HitResult ResolveHit(const Projectile& p, const Character& c) { BodyPart part = c.HitboxAt(p.lastPos); float ke = 0.5f * p.mass * p.velocity.SquaredLength(); float armor = c.ArmorOn(part).StoppingPower(p.dtype); float damage = std::max(0.f, ke - armor) * BodyMultiplier(part); return {part, damage, p.dtype, p.lastPos, ke}; } ``` ### Damage multiplier table ```cpp float BodyMultiplier(BodyPart p) { switch (p) { case HEAD: return 4.0f; case NECK: return 3.0f; case CHEST: return 1.0f; case STOMACH: return 1.2f; case ARM: return 0.5f; case LEG: return 0.6f; } } ``` ### Bleed-out simulation ```python class WoundState: def __init__(self): self.bleed_rate = 0.0 # HP/sec self.fractures = set() self.hp = 100.0 def apply_hit(self, hit): self.hp -= hit.damage if hit.dtype == "PENETRATION" and hit.part in ("CHEST", "STOMACH"): self.bleed_rate += 0.5 if hit.dtype == "BLUNT" and hit.kinetic_energy > 1500: self.fractures.add(hit.part) def tick(self, dt): self.hp -= self.bleed_rate * dt ``` ### Locomotion impact (limp from leg fracture) ```cpp float MoveSpeedMultiplier(const WoundState& w) { float m = 1.0f; if (w.fractures.contains(LEG_LEFT)) m *= 0.55f; if (w.fractures.contains(LEG_RIGHT)) m *= 0.55f; if (w.bleedRate > 1.0f) m *= 0.85f; // hypovolemic return m; } ``` ### Ragdoll impulse from impact ```csharp void ApplyImpactRagdoll(Rigidbody bone, Vector3 dir, float ke) { float impulse = Mathf.Sqrt(2 * ke * bone.mass); bone.AddForceAtPosition(dir * impulse, hitPoint, ForceMode.Impulse); } ``` ### Armor angle attenuation ```python def effective_armor(armor_thickness_mm, hit_angle_deg): """Slope-thickness: thicker at oblique angle.""" import math return armor_thickness_mm / math.cos(math.radians(min(hit_angle_deg, 80))) ``` ## 매 결정 기준 | 상황 | Approach | |---|---| | Arcade shooter (CoD, Apex) | 1-tap headshot, 매 simple multiplier | | Mil-sim (Tarkov, Squad) | 매 full limb + armor + bleed | | RPG (Cyberpunk, Fallout) | 매 limb cripple + status effect | | Vehicle sim (BeamNG) | 매 node-spring deformation (no hitbox) | | Melee (Chivalry, Mordhau) | 매 directional hit + body part + stamina | **기본값**: Hitbox + multiplier + simple bleed → 매 expand 의 incremental. ## 🔗 Graph - 부모: [[Game_Physics]] - 응용: [[Combat_Balance_Buff]] - Adjacent: [[Procedural-Level-Geometry]] ## 🤖 LLM 활용 **언제**: 매 tactical / sim 게임 의 damage model design, 매 hit-feel iteration, 매 armor balance. **언제 X**: 매 abstract / arcade game (매 단순 HP bar 가 더 적합). ## ❌ 안티패턴 - **Realism > fun**: 매 realistic 1-shot kill 이 매 PVP 의 frustration source. - **Limb zone 의 inflation**: 매 너무 많은 zone (12+) = 매 hitreg 의 confusion. - **No feedback**: 매 hit 의 visual / audio cue 의 X = 매 player 의 "did I hit?" 의 ambiguity. ## 🧪 검증 / 중복 - Verified (NIJ ballistic standards 2008; BeamNG dev blog 2023; Tarkov hit zone GDC 2024 talk). - 신뢰도 A-. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — KE / armor / bleed model, limb multiplier, ragdoll impulse |