Cara Menguasai Asset Stripping pada Unreal Engine Dedicated Server (Langkah demi Langkah)
Anda menjalankan Unreal Engine dedicated server yang baru saja dikompilasi, mengharapkan proses headless yang ringan. Anda memeriksa memory profile, dan di sanalah mereka: ribuan objek UMaterial, UTexture, dan USoundWave memadati RAM server Anda.
Dokumentasi resmi menyatakan bahwa server headless tidak merender visual. Jadi mengapa server Anda menimbun megabyte data tekstur?
Setiap pengembang indie tahu saat di mana biaya hosting server mulai mengancam kelangsungan proyek. Ketika sebuah mesin bare-metal hanya bisa menampung 10 instance game Anda, alih-alih 50 karena memory bloat, arsitektur backend Anda sedang terkompromi.
Dalam pembahasan mendalam ini, kita akan membedah bagaimana unreal engine dedicated server asset stripping sebenarnya bekerja, mengapa ghost assets tetap ada di memori, dan bagaimana Anda dapat merancang C++ dan Blueprints Anda untuk memusnahkannya sepenuhnya.
Anatomi "Ghost Asset" pada Dedicated Server
Untuk memperbaiki masalah ini, Anda harus memahami apa yang dilakukan Unreal Automation Tool (UAT) saat melakukan cook untuk target Server.
Unreal Engine memisahkan aset menjadi dua bagian:
- UObject Wrapper: Metadata, properti, dan data refleksi.
- Bulk Data: Payload berat yang sebenarnya (data piksel terkompresi DXT untuk tekstur, vertex buffers untuk mesh, data PCM untuk audio).
Saat melakukan cook dedicated server, cooker berhasil melakukan stripping pada bulk data. Data rendering hilang. Namun, UObject wrapper tetap ada.
Jika sebuah Blueprint Class Default Object (CDO) memiliki hard reference ke UTexture2D, server harus menginstansiasi UObject UTexture2D tersebut untuk memenuhi sistem refleksi dan mencegah crash. Meskipun bulk data telah dihapus dan tekstur mungkin hanya memakan 1KB alih-alih 10MB, overhead dari menginstansiasi 50.000 UObject ini menyebabkan memory bloat yang signifikan dan beban pada Garbage Collection.
Apakah Audio dan Particles Mengikuti Logika yang Sama?
Ya. Jika ada hard reference ke USoundCue atau UNiagaraSystem, server akan memuat UObject tersebut. Data audio PCM yang berat dihapus, tetapi objeknya tetap ada. Pada sistem partikel, ini berbahaya; jika mengandung logika CPU, server mungkin tetap menjalankan tick pada logika tersebut, membuang siklus CPU yang berharga.
Langkah 1: Profiling Memory Bloat Server
Anda tidak bisa mengoptimalkan apa yang tidak bisa Anda ukur. Jalankan server dengan argumen:
-LLM -LLMCSV -memoryprofiler
Di konsol server, jalankan memreport -full. Cari Obj List pada laporan yang dihasilkan untuk melihat penggunaan RAM per kelas.
Langkah 2: Memutus Hard References dengan Soft Pointers
Penyebab utama ghost assets adalah hard references. Di C++, gunakan TSoftObjectPtr. Soft references hanya menyimpan path aset, dan UObject tidak akan dimuat ke memori kecuali Anda memanggil LoadSynchronous() (yang seharusnya hanya dilakukan di client).
BAIK: Soft Reference (Server Tetap Bersih)
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI")
TSoftObjectPtr<UTexture2D> HeroPortraitSoft;
Langkah 3: Memaksa NeedsLoadForServer
Anda dapat memberitahu sistem pengemasan untuk mengabaikan komponen visual sepenuhnya di server dengan meng-override fungsi NeedsLoadForServer dan mengembalikan nilai false.
Langkah 4: Stripping Audio dan Partikel via Konfigurasi
Di DefaultEngine.ini, Anda bisa mengecualikan folder tertentu dari proses cook menggunakan +DirectoriesToNeverCook. Selain itu, di file *.Target.cs server, Anda bisa menonaktifkan audio engine dengan bDisableAudio = true;.
Best Practices Optimasi Memori Dedicated Server
- Pisahkan Collision Mesh dari Visual Mesh: Gunakan
UStaticMeshyang disederhanakan untuk server. - Audit Construction Scripts: Gunakan
Switch Has Authorityagar server melewatkan instansiasi visual. - Isolasi Data Assets: Pisahkan data statistik (server/client) dari data visual (client-only).
- Otomatisasi Profiling di CI/CD: Periksa penggunaan memori pada setiap build.
Menskalakan Backend yang Dioptimalkan
Mengurangi penggunaan memori server dari 800MB ke 180MB adalah kemenangan teknis besar. Anda bisa menampung 4-5 kali lebih banyak instance pada hardware yang sama, mengurangi biaya AWS atau Google Cloud secara drastis.
Daripada menghabiskan waktu berbulan-bulan membangun infrastruktur orkestrasi sendiri, cobalah horizOn. Unggah build Linux Anda, dan horizOn akan menangani manajemen armada global dan auto-scaling.
Kesimpulan
Asset stripping di Unreal Engine sangat bergantung pada arsitektur Anda. Dengan beralih ke soft pointers dan memisahkan data visual dari logika game, Anda akan mencapai performa tinggi yang dibutuhkan game multiplayer.
Siap untuk menskalakan backend Anda? Coba horizOn secara gratis atau pelajari dokumentasi API kami.