100,000+ live bullets. Real ballistics. No actor per bullet.
Mass Projectile Subsystem is a projectile runtime built on Unreal Engine's Mass Entity system. Every shot is a few dozen bytes of state simulated on worker threads, with no actor, component or Niagara emitter per bullet. One scene can hold 100,000+ live rounds while frame time stays flat.
βΆ Trailer: https://youtu.be/ivrcg7fTqmY
π Documentation: https://darkmatestudio.vercel.app/docs/mass-projectile-subsystem
π¬ Support (Discord): https://discord.gg/CsFsXjxxGG
β‘ SCALE
β’ 100,000+ simultaneous projectiles, simulated in batches on worker threads
β’ Budgeted swept collision traces: cost stays bounded and nothing tunnels
β’ Adaptive tracer budget and cull radius keep GPU and game-thread cost flat
β’ Per-device tuning through console variables and device profiles
π― BALLISTICS
β’ Gravity, quadratic air drag and wind, frame-rate independent
β’ Penetration per surface: V50 ballistic limit against the real thickness along the shot
β’ LambertβJonas exit speed: every wall bleeds speed, and slow exits drop under gravity
β’ Ricochet by impact angle and surface hardness
β’ Physics impulses on hits and near misses
π₯ IMPACTS
β’ Hole decals on entry and exit, plus a bore decal on both faces of a through-shot
β’ Per-surface impact sounds and Niagara bursts with debris
β’ Authority-only On Projectile Hit event with impact type (Stop, Ricochet, Penetration Enter/Exit), ready for Apply Damage
π FLYBY AND NEAR MISSES
β’ A spatial whiz plays at the closest point when a round passes near the camera
β’ Louder the closer it passes, with random pitch per round
β’ Per-type sound (SoundWave, SoundCue or MetaSound), radius, minimum speed and volume
β’ Budgeted, so a 20,000-round volley stays readable instead of noisy
β’ Your own shots never whiz past you; every client hears everyone else's
β’ A near-miss air wake nudges light physics bodies the round never touched
β’ Rifle, shell and plasma whizzes included
π MULTIPLAYER
β’ No per-projectile replication: shots travel as compact, seeded fire events (~40 bytes)
β’ One event can carry a 20,000-round volley for its whole lifetime
β’ Client prediction, server validation, latency fast-forward and late-join catch-up
β’ Server-authoritative damage; dedicated servers simulate hits without visuals or audio
β¨ VISUALS
β’ Pluggable visualizer: the included Niagara visualizer draws tracers, impact bursts and lingering smoke trails
β’ Documented Niagara user-parameter contract, plus a guide for converting your own VFX
β’ Swap in your own C++ visualizer if you don't use Niagara
π§© BLUEPRINT-FIRST
β’ Spawn Projectiles node, Mass Projectile Fire component (RPM, spread, pellets, muzzle) and Mass Projectile Hit component
β’ Projectile types are data assets (Rifle, Shell, Plasma included) with Ballistics, Visual, Audio and Surface FX traits
β’ Every asset is assigned in Project Settings and nothing is hardcoded; everything referenced is packaged automatically
π DEBUGGING
β’ proj.DebugPaths draws every path coloured by speed, with markers for impacts, ricochets and exits
β’ proj.DebugHits labels each impact with event, surface, actor and speed
β’ proj.Stats and a periodic PERF line report live cost
π¦ INCLUDED
β’ Full C++ source: three modules (Runtime, Niagara visualizer, Editor tools)
β’ Three projectile types, six physical surfaces (concrete, dirt, glass, metal, water, wood) and breachable wall materials
β’ Blueprint demo map with a flying shooter pawn: fire, switch types, 20,000-round stress volley
β’ 15 pages of documentation with step-by-step tutorials: installation, firing from Blueprint, weapons, damage, multiplayer, Niagara, performance, API
π³οΈ COMING SOON: PROJECTILE HOLES
Real holes cut through the mesh itself, not just decals. Boolean cuts run on background threads, and damaged walls split into pieces. Coming soon to Fab as a separate add-on for Mass Projectile Subsystem.
π οΈ REQUIREMENTS
β’ Unreal Engine 5.8
β’ Epic's Mass Gameplay plugin, which Epic marks Experimental. It ships with the engine; the editor shows an experimental-feature notice when you enable it.
β’ A Projectile collision channel (a two-minute setup, covered in the Installation guide)