Our goal with Conqueror's Blade is to create a world in which you can fulfil your dreams of conquering lands and achieving victory in battle. To this end, we've created vast areas, walls that zigzag the land, and battles where thousands of soldiers charge, clash, fire arrows, and let loose with artillery fire.
The Difficulty of Massive Battles
Huge maps, plentiful characters, items, and special effects require an astonishing amount of calculation in the game’s backend. Over the three years since we launched, we've continued to implement new content, units, and bigger maps, as well as a series of graphical improvements. All of these put a strain on both software and hardware alike.
The interfaces for Units, Heroes, and maps are all connected to highly complex systems. All of this working at once during the heat of battle puts a heavy strain on the CPU. To improve FPS, we've done plenty of work to enable as many algorithms as possible to process in parallel and get as much as possible out of multi-core CPUs. This combined has led to the game utilising much of the CPU and straining the GPU's rendering capabilities. Add to that the sheer amount of high-quality textures that need to be processed, meaning that most players have little GPU memory to spare. On the other hand, as the game interface, combat, and scene effects are improved, GPUs face higher demands during rendering. Games that use a large number of high-resolution textures also increase the demand for video memory. These factors lead to games requiring more GPU computing resources and video memory during operation. Therefore, in future game development, we will pay more attention to optimising the GPU to ensure smooth gameplay experiences.
Furthermore, huge scenes and massive numbers of characters add significant pressure on memory usage. Often times we have to increase our memory consumption in favour of processing performance. However, we admit there are shortcomings in our current management strategy for algorithm optimisation with this being one of our key targets.
As we continue to create and add new content, we also receive more feedback regarding frame drops, lag, and performance issues. We know full well how important performance is. Even so, in the end, we must try to find the sweet spot where performance and graphics meet.
Let’s go into more detail on what we've done to improve performance and share our plans for the future.
What We've Done in Eternal
Every action of every Unit, be that moving, attacking or using skills, occupy system resources based on the quality of its special effects. When special effects are displayed, how much it strains the systems depends on how many particles it includes. Therefore, the number of particles is the most intuitive way to measure the performance impact of special effects. We will reduce the original overly high number of special effect particles to a reasonable range without compromising the overall game experience, thereby improving game performance.
Units & Combat
Many players are experiencing frame drops when the Zykalian Militia throw their explosive canisters which is a result of their skill's special effect using too many particles.
To improve performance across the board while still ensuring good visual effects, we have with the Eternal Season reduced the number of particles of many skills' effects, including explosions. This has directly improved performance. The following are before and after particle counts for some skills.
- Silahdars' Decapitate - now 410 particles (was 1,200)
- Silahdars' Deathstrike - now 890 particles (was 1,120)
- Grayhair Garrison's Last Stand - now 420 particles (was 1,120)
- Shenji Grenadiers' Throw Grenades - now 210 particles (was 580)
- Zykalian Militia - now 118 particles (was 310)
- Grapeshot Cannon (Rare) - now 2,700 particles (was 6,400)
- Berserkers' Frenzy state - now 370 particles (was 1,050)
- Special effect of units affected by the Glaive's God of Battles - now 240 (was 410)
Weather & Objects
The vast number of objects on each map adds to the immersion and affects strategic choices too. Every wall, obstacle, and piece of vegetation breathes life into the map. Naturally, plentiful objects and large concentrations of Units are demanding, which has resulted in low frame rates during many battles.
To remedy this, we've made improvements to the management of dynamic object performance for areas that are often home to large battles, greatly reducing rendering delay. This will lead to a much more stable FPS in these circumstances.
Future Performance Optimisations
We've already made performance improvements to many areas of the game which has led to a slight overall increase in FPS. Naturally, certain problematic areas still exist and many of these exist at key points, something that affects the gameplay experience adversely.
We are currently performing large tests in an effort to do more targeted optimisations, and we're planning on doing the following:
- Optimise the underlying interface algorithms to avoid complex ones reducing performance and worsening memory usage. Some of these include the mini-map, skill bars, and Unit info.
- Rendering fidelity affects how things appear in-game, and in most cases, the rendering of different layers does not have to be on the same fidelity level. For example, while battling on the walls of A at Wall Fort, you don't need to have the perfect view of the base flag as that would lower performance. The current rendering fidelity does not cover all situations, however, so we will be adding more rendering layers based on the distance to objects on the map. For example, we can give objects 100m away a rendering fidelity of 1, objects 50m away a fidelity of 2, objects 10m away a fidelity of 3, and objects 5m away a fidelity of 4. This will reduce rendering calculations and therefore GPU usage.
- Re-create the code of cloth and physics simulations to optimise the performance of many smaller modules such as hair, spear tassels, robe hems, capes, etc.
- Continue to reduce the number of special effect particles to better balance graphics and performance.
- Create a better distribution of texture quality to find a balance between that and performance to further reduce memory usage.
- Improve graphics settings by adding more options and configurations, while also better recognising hardware to improve the default settings.
Each one of the aforementioned improvements is complex and will take a long time to complete. As we continue to add more content, we also add more unknown variables to the equation. Even so, we're happy to share and discuss these issues with you all. We've been battling these issues and receiving these questions for a long time and we want to show our answer with actions and concrete results. We know that battling performance issues will take time, but even so, we will continue to improve one issue at a time. We're in this for the long haul!
We also want to invite you all to work on this with us. We're thinking of testing the results of our optimisations via open, alpha, and beta tests. We'll reveal more about how these will work soon! We’ll also be adding info on how things are going with our performance optimisations in future Development Blogs, too.