Performance & Quality Patch
Author: indiefoldcreator
Date:
Sun, 07 Jan 2024
Game: Cloudbuilt
The previous patch focused on adding new features, but this one is more focused on improving the game's performance and quality, with some significant updates.
We've gone through and cleaned up the game's memory usage, fixing multiple larger leaks on level loads, and reducing long-term leaks. This should alleviate issues where the game would crash, due to memory running out, after playing many levels in a row.
This update significantly improves the game's performance, particularly in areas that were previously heavier than usual. On our test machines we saw gains all over, but an over 3x performance gain in those especially heavy areas. This includes the Steam Deck, which went from 20 FPS to well above 60 FPS on a heavy section in the Battle Challenge 1 level. We achieved this by fixing some rendering settings and adding more parallel processing in various demanding areas.
We've made significant improvements to physics processing by simulating it more in parallel with the whole game update. This is a bit technical, but to be more specific; If the game runs faster than the target tick rate for the physics, it is no longer running a smaller set of sub steps every frame. Instead it runs the full number of sub steps on a parallel thread throughout potentially multiple frames, not forcing any frequent sync points, but only syncing once when the results are actually expected.
This change can potentially cause a dynamic physics object to appear 1 frame behind compared to before, but the impact of that will be very small as very little game logic actually relies on the dynamic physics simulation. As the performance gains from this change are quite huge, and the frame times are more consistent with this fix, we deem this minor potential drawback well worth it.
We've improved sound processing by moving it into its own separate thread. Now, 90% of the sound update is removed from the game update process and runs parallel with rendering. We also saw issues with just initiating sound assets taking time, and have moved to buffer more of them, which should help to improve frame rate consistency with the small sound updating that is still in the game loop. Additionally, we've added a system to detect and filter out sound effects in areas with a lot of enemies that could cause an overload of similar sound effects, which improves performance and makes the soundscape a little less messy.
We've rewritten and introduced new systems to give more event frame times, particularly when using VSync. We're detecting the monitor refresh rate and ensuring that the game updates to match with extra layers of manual systems, instead of relying on the graphics API call to achieve the frame lock. If you are hitting the expected frame rate consistently, the game will now be able to use an absolute time that perfectly matches the refresh rate, resulting in everything being significantly smoother.
When not using V-Sync, a similar system is in place that can detect when a frame barely missed an update window, and let the system try to run the next frame slightly faster. If that succeeds, the frame time use will be kept consistent, resulting in even time steps for the game logic. But unlike the V-Sync system, this is made to be very intolerant for this, and will go back to regular variable time steps as soon as there is an indication of your system not hitting the target FPS. Overall this means there is no real change for the cases where you are not achieving your target frame rate, but in the cases that you are, a more even frame time will be used, free from minor inaccuracies.
As this is a very new system that depends on the hardware and your machine a lot, it is a bit hard for us to test on scale, so please let us know if you experience any issues.
We've added a hotkey (CTRL-SHIFT-F) to display graphs overlays in the game, allowing players to monitor frame times, player movement, and camera movement consistency.
Image illustrates this new UI when running the game with V-Sync. The red graph is the raw frame time, the white completely flat line is the corrected frame time.
We've added a new crosshair option that allows players to adjust its size. I have for a long time felt like it was a bit too big, so I scaled it down a bit and made that the default setting. You can however go back to how it used to be by changing this setting in the legacy settings menu.
Some other bugs were also addressed:
Overall, this patch improves the game's performance and quality while also fixing several bugs and adding new features. If you experience any issues with this update, please let us know.
Memory
We've gone through and cleaned up the game's memory usage, fixing multiple larger leaks on level loads, and reducing long-term leaks. This should alleviate issues where the game would crash, due to memory running out, after playing many levels in a row.
Performance
This update significantly improves the game's performance, particularly in areas that were previously heavier than usual. On our test machines we saw gains all over, but an over 3x performance gain in those especially heavy areas. This includes the Steam Deck, which went from 20 FPS to well above 60 FPS on a heavy section in the Battle Challenge 1 level. We achieved this by fixing some rendering settings and adding more parallel processing in various demanding areas.
Parallel Physics & Sync
We've made significant improvements to physics processing by simulating it more in parallel with the whole game update. This is a bit technical, but to be more specific; If the game runs faster than the target tick rate for the physics, it is no longer running a smaller set of sub steps every frame. Instead it runs the full number of sub steps on a parallel thread throughout potentially multiple frames, not forcing any frequent sync points, but only syncing once when the results are actually expected.
This change can potentially cause a dynamic physics object to appear 1 frame behind compared to before, but the impact of that will be very small as very little game logic actually relies on the dynamic physics simulation. As the performance gains from this change are quite huge, and the frame times are more consistent with this fix, we deem this minor potential drawback well worth it.
Optimized Sounds
We've improved sound processing by moving it into its own separate thread. Now, 90% of the sound update is removed from the game update process and runs parallel with rendering. We also saw issues with just initiating sound assets taking time, and have moved to buffer more of them, which should help to improve frame rate consistency with the small sound updating that is still in the game loop. Additionally, we've added a system to detect and filter out sound effects in areas with a lot of enemies that could cause an overload of similar sound effects, which improves performance and makes the soundscape a little less messy.
Frame Timing Consistency
We've rewritten and introduced new systems to give more event frame times, particularly when using VSync. We're detecting the monitor refresh rate and ensuring that the game updates to match with extra layers of manual systems, instead of relying on the graphics API call to achieve the frame lock. If you are hitting the expected frame rate consistently, the game will now be able to use an absolute time that perfectly matches the refresh rate, resulting in everything being significantly smoother.
When not using V-Sync, a similar system is in place that can detect when a frame barely missed an update window, and let the system try to run the next frame slightly faster. If that succeeds, the frame time use will be kept consistent, resulting in even time steps for the game logic. But unlike the V-Sync system, this is made to be very intolerant for this, and will go back to regular variable time steps as soon as there is an indication of your system not hitting the target FPS. Overall this means there is no real change for the cases where you are not achieving your target frame rate, but in the cases that you are, a more even frame time will be used, free from minor inaccuracies.
As this is a very new system that depends on the hardware and your machine a lot, it is a bit hard for us to test on scale, so please let us know if you experience any issues.
New Performance UI
We've added a hotkey (CTRL-SHIFT-F) to display graphs overlays in the game, allowing players to monitor frame times, player movement, and camera movement consistency.
Image illustrates this new UI when running the game with V-Sync. The red graph is the raw frame time, the white completely flat line is the corrected frame time.
Crosshair
We've added a new crosshair option that allows players to adjust its size. I have for a long time felt like it was a bit too big, so I scaled it down a bit and made that the default setting. You can however go back to how it used to be by changing this setting in the legacy settings menu.
Bug Fixes
Some other bugs were also addressed:
- Intel GPU Crash Fix.As the explanation here is quite long, I will be writing it in a comment bellow for those interested, just to not bloat this post too much.
- Rush mode music issues fixed
- Rush mode level hash authentication issues fixed
- Rush Mode Crash fix
- Mouse over info for some custom level buttons were fixed. Most significantly the game mode name is now displayed when using the gamepad.
- Photo mode menu is now limited to just the bottom level pause menu
- Damage indicators are now reset on checkpoint and level loads more properly
Overall, this patch improves the game's performance and quality while also fixing several bugs and adding new features. If you experience any issues with this update, please let us know.
Write your comment!