Skip to content

Memory and capacity guide

Mass Forge keeps gameplay state in fixed-capacity Mass fragments. It does not require one UObject, Actor, Actor Component, Ability object, Effect object, targeting object, or debugger object per entity. Definition Data Assets and project provider objects are shared; inspection snapshots are built only when requested.

Nested population accounting layers separating allocated, active or simulated, represented, animated, and visible or rendered entities

These counts answer different questions and must be reported separately. Allocation proves that Mass entities exist; active simulation proves gameplay work; representation, animation, and visibility describe progressively narrower presentation workloads.

Use Get Mass Forge Memory Footprint in Blueprint or C++ to obtain the native fragment sizes for the exact running build. The same values are included in Copy Support Report. The node is world-independent and allocates only its returned diagnostic array; it never adds state to an entity.

Verified Win64 fragment payloads

The following Unreal reflected structure sizes are the Mass allocation payloads. Plain C++ sizeof is not authoritative for inherited USTRUCT fragments and can be smaller. Automation checks every reported value against the running engine's reflected size and fails if a Mass Forge fragment is added without entering the report. The cross-version values below are considered verified only after the full Unreal Engine 5.6.1, 5.7.1, and 5.8.2 matrix passes.

FragmentAdded or required byStorage scopeBytes
MF_VitalAttributesFragmentMass Forge Attributes TraitPer entity64
MF_CombatAttributesFragmentMass Forge Attributes TraitPer entity192
MF_SupportAttributesFragmentMass Forge Attributes TraitPer entity128
MF_GameplayTagFragmentMass Forge Gameplay Tag TraitPer entity420
MF_PersistentEffectsFragmentMass Forge Persistent Effects TraitPer entity1,288
MF_PersistentAttributeModifiersFragmentMass Forge Persistent Effects TraitPer entity1,736
MF_AbilityFragmentMass Forge Ability TraitPer entity472
MF_RegenerationFragmentMass Forge Regeneration TraitPer entity260
MF_HighVolumeEffectCommandFragmentMass Forge High Volume Effects TraitPer entity16
MF_ProjectileFragmentMass Forge Projectile TraitPer projectile entity144
MF_DerivedAttributesSharedFragmentMass Forge Derived Attributes TraitPer archetype676
MF_HighVolumeEffectSetSharedFragmentMass Forge High Volume Effects TraitPer archetype2,388

The Derived Attributes graph and high-volume effect table are const-shared fragments. Matching entities in an archetype share one compiled 676-byte maximum-capacity derived graph and, when opted in, one 2,388-byte maximum-capacity effect table. Neither repeats its compiled rules per entity. Their required Vital, Combat, and Support attribute bags are already counted under the Attributes Trait.

Configuration totals

These totals are exact Mass Forge-owned native payload sums, not estimates of complete process memory.

ConfigurationIncluded Mass Forge stateBytes/entity10,000 entities100,000 entities1,000,000 entities
Attributes Only wizard presetVital + Combat + Support3843.66 MiB36.62 MiB366.21 MiB
Combat Ready wizard presetAttributes + counted tags + persistent timers/modifiers + abilities4,30041.01 MiB410.08 MiB4.00 GiB
Full example configurationCombat Ready + Regeneration + high-volume command mailbox4,57643.64 MiB436.40 MiB4.26 GiB
Actorless projectileProjectile motion/impact state1441.37 MiB13.73 MiB137.33 MiB

Formula: Mass Forge payload = entity count × selected per-entity fragment bytes. Projectile entities normally occupy a separate 144-byte Mass Forge archetype rather than carrying the 4,576-byte combatant preset. Add 676 bytes for each distinct maximum-capacity Derived Attributes graph/archetype and 2,388 bytes for each distinct maximum-capacity High Volume Effects table/archetype.

These figures deliberately exclude Mass entity/chunk metadata, alignment between structure-of-arrays regions, allocator slack, transforms, representation, LOD, navigation, collision, movement, project fragments, rendering, animation, assets, queues, world subsystems, and engine overhead. Measure the packaged project to obtain total resident memory.

Choosing a scalable archetype

  • Use Attributes Only for populations that need stats but no active ability/effect state.
  • Add Gameplay Tags or Abilities only to archetypes that execute those features.
  • The Persistent Effects Trait adds both timer-instance and reversible-modifier storage. Do not attach it to background populations that never receive duration-based effects.
  • Add Regeneration only where passive rules are required. A project can instead schedule lower-frequency aggregate updates for distant or dormant populations when its gameplay permits that approximation.
  • Derived Attributes are appropriate for large matching populations because their compiled rules are shared per archetype.
  • High Volume Effects adds one 16-byte command/completion mailbox per opted-in entity; its Apply/Remove table is shared per archetype. Use it only when a C++ producer can consume its explicit bounded workflow.
  • Target selection reads existing transforms/representation and uses bounded world-level providers; it adds no Mass Forge fragment.
  • Entity inspection is on-demand; custom providers are bounded, weak world-level references rather than per-entity storage.

A million-entity headline is not equivalent to a million fully featured combatants. On Win64, Mass Forge's Full Example payload alone is about 4.26 GiB before any engine or project state. A credible high-count design separates total simulated entities, entities carrying combat features, entities represented or animated, and entities updated during a frame.

Profiling workflow

  1. Call Get Mass Forge Memory Footprint in the packaged target and record its totals with the engine, platform, and plugin version.
  2. Count entities by actual archetype, not by the largest possible configuration.
  3. Estimate the Mass Forge payload from each archetype's selected fragments.
  4. Measure process memory before spawning, after spawning and settling, and at the peak gameplay population.
  5. Subtract the baseline only as a diagnostic comparison; keep the absolute peak in release evidence.
  6. Record total, represented, visible, animated, and actively processed populations separately.
  7. Capture average and worst-frame game-thread, worker-thread, rendering, and memory figures on named hardware.

This guide records storage only. It does not claim 10k, 100k, or 1M throughput; those benchmark results remain a separate roadmap gate until measured in packaged benchmark maps on documented reference hardware.

Mass Forge documentation — generated from the shipping Markdown source.