reducing draw calls from ~2500 to ~1500 at the bad frames and occlusion queries
Check out how we reduced draw calls from ~2500 to ~1500 at the bad frames and successfully removed the spikes on level streaming.
Case: Brigada Games ported the game, which was originally developed for PC/Console, to iOS, which allowed a developer and a publisher to tap into a new mobile games audience.
Process description:
The optimization work was conducted on the IOS platform and past generation consoles.
Our goal was to reduce draw calls & occlusion queries by minimizing Constructor's level of descreteness.
The challenge was to create the perfect balance between object counts on each scene & the number of original meshes. A high object count gave us a high draw call value, while larger original meshes created a memory overhead and a large build size.
We use a variety of tools & technologies to analyze and optimize the performance of our games, such as analyzing Stat Unit/RHI, Statistic Window on the editor, HLOD, Proxy meshes for balance, better performance and draw distance.
We improved performance by baking HLODs without baking new textures for far distances and using proxy meshes for clusters of buildings to replace original constructors with high numbers of identical meshes. We created a custom streaming system for better draw distance control for not baked on HLODs meshes.
Our studio optimizes game resources and memory by using original materials. We don't bake new textures assets for HLODs, which reduces the memory impact. We use a high level of hand work with HLOD baking settings to reduce polycount and size of HLODs meshes. This allows to draw HLODs closer to original meshes with minimal performance costs and same visual quality.
To evaluate the optimization success, we measure performance metrics and indicators such as draw calls & triangles counts. We observe spikes in performance while travelling at high speeds.
Our team optimized a gaming experience by reducing GPU time for frames, CPU time while streaming a large, highly saturated part of the world. This led to a great improvement in players' gaming experience.
QA plays an integral part in the optimization. We conduct testing and debugging by having them set up tasks that involve providing videos with repeatable gameplay and Stat Unit/FPS. We check Unreal Insight captures to keep an eye out for spikes in timing.
We strive to reduce draw calls with ISM/HISM, HLODS, proxies. Testing showed this approach was better due to realization time, memory, and visual quality. It would've been easier to implement this approach if budget constraints had been determined during preproduction. Unfortunately, we weren't brought onto the project until later, so we worked with the existing content.