Wars of Prasia: Optimization in UE4 for Massive Sieges and Cross-Play

Published on May 30, 2026 | Translated from Spanish

Wars of Prasia, the MMO from Nexon developed under the codename Project: ER, represents a major technical challenge by integrating castle sieges with hundreds of players in real time. Its engine, Unreal Engine 4, manages a dynamic day/night cycle through global illumination, while Maya and Substance Suite tools define an asset pipeline designed for efficiency on both PC and mobile devices.

Wars of Prasia massive siege Unreal Engine 4 optimization cross-play pipeline Maya Substance

Asset pipeline and dynamic global illumination system 🎨

The Nexon team uses Maya to create high-quality polygonal models, which are then processed in Substance Painter and Substance Designer to generate textures with normal maps and ambient occlusion. These assets go through an optimization process where LODs (levels of detail) are reduced and a texture streaming system is implemented. Dynamic global illumination, key for the day/night cycle, relies on Lightmass for baking static lights and Distance Field Shadows for real-time shadows during sieges. For cross-play, dynamic resolution scaling and vertex shading are applied on mobile, while PC maintains screen-space reflections and full post-processing.

Performance management in massive multiplayer sieges ⚔️

The biggest technical challenge is maintaining stable 30 FPS with hundreds of players on screen. Wars of Prasia uses mesh instancing for walls and catapults, occlusion culling through precomputed volumes, and a character prioritization system that reduces animation update frequency for distant avatars. On mobile, particles and dynamic shadows are disabled, and a simplified shader is used for the terrain, thus achieving a unified experience without sacrificing strategic gameplay.

What optimization techniques in Unreal Engine 4 did the Wars of Prasia team implement to maintain stable performance during massive sieges of up to one hundred simultaneous players, also considering the synchronization required for cross-play between platforms?

(PS: shaders are like mayonnaise: if they break, you start all over again)