Terug naar Blog

Mastering Unreal Engine Dedicated Server Asset Stripping (Stap-voor-stap)

Gepubliceerd op 17 maart 2026
Mastering Unreal Engine Dedicated Server Asset Stripping (Stap-voor-stap)

Je start je vers gecompileerde Unreal Engine dedicated server op, in de verwachting een slank, headless proces te zien. Je draait een memory profile en daar zijn ze: duizenden UMaterial, UTexture en USoundWave objecten in het RAM van je server.

De officiële documentatie stelt dat een headless server geen visuals rendert. Waarom houdt je server dan megabytes aan texture-data vast?

Elke indie-developer kent het moment waarop de hostingkosten hun runway bedreigen. Wanneer een bare-metal machine slechts 10 instances van je game kan hosten in plaats van 50 door memory bloat, is je backend-architectuur in gevaar.

In deze deep dive analyseren we hoe unreal engine dedicated server asset stripping onder de motorkap werkt, waarom ghost assets in het geheugen blijven en hoe je je C++ en Blueprints kunt inrichten om ze volledig te elimineren.

De anatomie van een "Ghost Asset" op een Dedicated Server

Om dit op te lossen, moet je begrijpen wat de Unreal Automation Tool (UAT) doet tijdens het cooken voor de Server target.

Wanneer een developer UTexture of UMaterial ziet in een memory profile, is de eerste aanname vaak dat de engine de asset niet heeft gestript. Dit is slechts deels waar.

Unreal Engine scheidt assets in twee delen:

  1. De UObject Wrapper: De metadata, properties en reflection data.
  2. De Bulk Data: De eigenlijke zware payloads (DXT gecomprimeerde pixeldata voor textures, vertex buffers voor meshes, PCM-data voor audio).

Bij het cooken van een dedicated server stript de cooker de bulk data succesvol. De rendering-data is weg. Echter, de UObject wrapper blijft bestaan.

Als een Blueprint Class Default Object (CDO) een hard reference heeft naar een UTexture2D, moet de server het UTexture2D UObject instantiëren voor het reflection-systeem om crashes te voorkomen. Hoewel de bulk data gestript is en de texture misschien maar 1KB verbruikt in plaats van 10MB, zorgt de overhead van 50.000 van deze UObjects voor aanzienlijke memory bloat en Garbage Collection overhead.

Volgen Audio en Particles dezelfde logica?

Ja. Bij een hard reference naar een USoundCue of UNiagaraSystem laadt de server het UObject. De zware PCM-audiodata is weg, maar het object bestaat.

Bij particle systems is dit gevaarlijk. Hoewel rendering wordt overgeslagen, kan de server CPU-logica (zoals complexe Niagara-simulaties) blijven uitvoeren als dit niet goed is geconfigureerd, wat kostbare CPU-cycli verbruikt.

Stap 1: Profiling van de Server Memory Bloat

Je kunt niet optimaliseren wat je niet kunt meten.

Start je dedicated server met:

-LLM -LLMCSV -memoryprofiler

Open de serverconsole en voer uit:

memreport -full

Zoek naar Obj List in het .memreport bestand. Je ziet waarschijnlijk zoiets:

Class UTexture2D: 1452 Objects, 1.25 MB
Class UMaterial: 840 Objects, 0.85 MB
Class USoundWave: 620 Objects, 0.45 MB

Door memory alignment en cascading dependencies kan een kleine visuele referentieketen een server opblazen van 150MB naar meer dan 600MB.

Lees meer over architecting zero-waste servers.

Stap 2: Hard References verbreken met Soft Pointers

De hoofdoorzaak van ghost assets zijn hard references. Gebruik TSoftObjectPtr in C++ om assets alleen te laden wanneer dat nodig is (op de client).

GOED: Soft Reference (Server blijft schoon)

UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI")
TSoftObjectPtr<UTexture2D> HeroPortraitSoft;

Stap 3: NeedsLoadForServer afdwingen

Overschrijf NeedsLoadForServer om componenten volledig te negeren op de server.

bool UMyVisualCustomizationComponent::NeedsLoadForServer() const
{
    return false; 
}

Stap 4: Stripping via Configuratie

Gebruik DefaultEngine.ini om mappen uit te sluiten van de cook:

[/Script/UnrealEd.ProjectPackagingSettings]
+DirectoriesToNeverCook=(Path="UI/Widgets")

Schakel de audio engine uit in YourGameServer.Target.cs:

bDisableAudio = true; 

Best Practices

  1. Scheid Collision van Visual Meshes: Gebruik een simpele UStaticMesh voor de server.
  2. Audit Construction Scripts: Gebruik Switch Has Authority om visuele logica op de server over te slaan.
  3. Isoleer Data Assets: Splits stats en visuele data.
  4. Automatiseer Profiling in CI/CD: Controleer memory footprint bij elke build.

Schalen van je Backend

Het verlagen van je server footprint van 800MB naar 180MB is een enorme overwinning. Je kunt nu 4-5 keer zoveel instances draaien op dezelfde hardware.

Het beheren van deze infrastructuur is echter complex. Met horizOn zijn deze services vooraf geconfigureerd. Upload je build en wij regelen de wereldwijde orchestratie en auto-scaling.

Conclusie

Asset stripping in Unreal Engine vereist een goede architectuur. Door soft pointers te gebruiken en visuele data te scheiden, krijg je de performance die multiplayer games nodig hebben.

Klaar om te schalen? Probeer horizOn gratis of bekijk onze API docs.


Bron: Stripping asset on dedicated server