Bloga Dön

Unreal Engine Dedicated Server Asset Stripping Rehberi (Adım Adım)

Yayınlanma tarihi 17 Mart 2026
Unreal Engine Dedicated Server Asset Stripping Rehberi (Adım Adım)

Yeni derlediğiniz Unreal Engine dedicated server'ınızı hafif bir headless süreç beklentisiyle başlatıyorsunuz. Bir memory profile alıyorsunuz ve o da ne: sunucunuzun RAM'inde binlerce UMaterial, UTexture ve USoundWave nesnesi duruyor.

Resmi dokümantasyon, headless bir sunucunun görselleri render etmediğini belirtir. Öyleyse sunucunuz neden megabaytlarca texture verisi depoluyor?

Her indie geliştirici, sunucu barındırma maliyetlerinin bütçeyi tehdit etmeye başladığı o anı bilir. Bir bare-metal makine, memory bloat nedeniyle 50 yerine sadece 10 oyun instance'ı barındırabildiğinde, backend mimariniz tehlikeye girer.

Bu teknik incelemede, unreal engine dedicated server asset stripping işleminin perde arkasında nasıl çalıştığını, ghost assets (hayalet varlıkların) neden bellekte kaldığını ve bunları tamamen yok etmek için C++ ve Blueprints yapınızı nasıl kurmanız gerektiğini analiz edeceğiz.

Dedicated Server Üzerindeki "Ghost Asset" Anatomisi

Sorunu çözmek için önce Unreal Automation Tool (UAT) aracının Server hedefi için cook yaparken ne yaptığını anlamalısınız.

Unreal Engine, assetleri iki ayrı parçaya ayırır:

  1. UObject Wrapper: Metadata, özellikler ve reflection verileri.
  2. Bulk Data: Asıl ağır yükler (texture'lar için DXT sıkıştırılmış piksel verileri, mesh'ler için vertex buffers, ses için PCM verileri).

dedicated server cook ederken, cooker bulk data kısmını başarıyla stripler (ayıklar). Rendering verileri gider. Ancak UObject wrapper kalır.

Eğer bir Blueprint Class Default Object (CDO), bir UTexture2D nesnesine hard reference (sert referans) içeriyorsa, sunucu reflection sistemini tatmin etmek ve null pointer çökmelerini önlemek için o UTexture2D nesnesini instantiate etmek zorundadır. Bulk data silinmiş olsa ve texture 10MB yerine sadece 1KB kaplasa bile, 50.000 bu tarz nesnenin oluşturulma maliyeti ciddi bir memory bloat ve Garbage Collection yüküne yol açar.

Ses ve Partiküller de Aynı Mantığı mı İzler?

Evet. Bir USoundCue veya UNiagaraSystem için hard reference varsa, sunucu UObject'i yükler. Ağır PCM ses verileri ayıklanır ancak nesne varlığını sürdürür. Partikül sistemlerinde bu durum tehlikelidir; eğer CPU üzerinde çalışan bir mantık (karmaşık Niagara simülasyonları gibi) içeriyorsa, sunucu bu mantığı tick edebilir ve CPU döngülerini boşa harcayabilir.

Adım 1: Sunucu Memory Bloat Profilleme

Ölçemediğiniz şeyi optimize edemezsiniz. Sunucunuzu şu argümanlarla başlatın:

-LLM -LLMCSV -memoryprofiler

Sunucu konsolunda memreport -full komutunu çalıştırın. Oluşan raporda Obj List kısmını aratarak hangi sınıfların ne kadar RAM tükettiğini görebilirsiniz.

Adım 2: Soft Pointers ile Sert Referansları Kesmek

Ghost asset'lerin en yaygın nedeni hard references kullanımıdır. C++ tarafında TSoftObjectPtr kullanın. Soft references sadece asset yolunu tutar ve siz açıkça LoadSynchronous() çağırmadıkça (ki bunu sadece client'ta yapmalısınız) UObject belleğe yüklenmez.

İYİ: Soft Reference (Sunucu Temiz Kalır)

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

Adım 3: NeedsLoadForServer Kullanımı

NeedsLoadForServer fonksiyonunu override edip false döndürerek, belirli görsel bileşenlerin sunucuda hiç oluşturulmamasını sağlayabilirsiniz.

Adım 4: Yapılandırma Yoluyla Ayıklama

DefaultEngine.ini dosyasında +DirectoriesToNeverCook kullanarak belirli klasörlerin sunucu için cook edilmesini engelleyebilirsiniz. Ayrıca sunucu *.Target.cs dosyasında bDisableAudio = true; ayarıyla ses motorunu tamamen kapatabilirsiniz.

Dedicated Server Bellek Optimizasyonu İçin En İyi Pratikler

  1. Collision ve Visual Mesh'leri Ayırın: Sunucu için basitleştirilmiş bir UStaticMesh kullanın.
  2. Construction Scripts Denetimi: Sunucunun görsel oluşturma işlemlerini atlaması için Switch Has Authority kullanın.
  3. Data Assets İzolasyonu: İstatistik verilerini ve görsel verileri farklı DataAsset'lere bölün.
  4. CI/CD Sürecinde Profilleme: Her build'de bellek kullanımını otomatik kontrol edin.

Optimize Edilmiş Backend'inizi Ölçeklendirin

Sunucu bellek kullanımını 800MB'tan 180MB'a düşürmek büyük bir teknik başarıdır. Bu, aynı donanımda 4-5 kat daha fazla instance çalıştırmanıza ve hosting maliyetlerini düşürmenize olanak tanır.

Ancak bu sunucuları orkestre etmek zordur. horizOn ile bu hizmetler hazır gelir. Optimize edilmiş Linux build'inizi yükleyin, horizOn küresel filo yönetimini ve auto-scaling işlemlerini halletsin.

Sonuç

Unreal Engine'in asset stripping özelliği güçlüdür ancak mimarinize dayanır. Soft pointers kullanarak ve görsel verileri oyun mantığından ayırarak, multiplayer oyunların gerektirdiği yüksek performansı elde edebilirsiniz.

Backend'inizi ölçeklendirmeye hazır mısınız? horizOn'u ücretsiz deneyin veya API dokümanlarımıza göz atın.


Kaynak: Stripping asset on dedicated server