Performance improvement is an activity we undertake constantly, but it is a bit like prospecting for gold in that it can be a lot of work with no outcome. This week, we have some specific performance improvements for late-game hitching.
We’re rolling out the late-game hitching fix we’ve been discussing for the last two weeks after some rigorous testing. Simply-put, this will reduce or eliminate the hitching when traversing the map in open worlds that you've been playing on for a while.
Why don't we do performance every week? People often say this in comments. In fact, we work on performance constantly at significant project expense. This work is very exploratory. In this case, our solution was extremely complex and risky. It involved redeveloping our custom voxel mesh generation to be multithreaded, combining several of the most complex areas of programming together. Results in performance optimizations don't come in a straight line, so we can't promise performance optimization work comes out constantly.
This reworks how the game loads the states of mined rock voxels, splitting these onto a separate thread so it takes the strain off the main game thread.
We’ve also got an update on our next task, converting over some more of the Styx and Olympus missions into Open World Operations.
Jump in and have a read.
Notable Improvements
- The destroy button while examining the player's loadout in space will now destroy items as intended, allowing players to remove unwanted items from their space loadout
- Cats and other animals will no longer revert to their base coloring when they are sent up to and retrieved from space (Black cats will now stay black)
- Updated Hyena Bait to require Gamey Meat instead of Fatty T-bone, so requires Antelope or Deer kills instead of Bears
- Fixed Deep Ore Drills from not scaling their speed correctly and updated the UI to reflect the new value
- Terrenus will no longer spawn on easy Outposts making them a safer environment and added Buffalo spawns to Forest Outposts
- Balance pass on Crossbow prices as they were not priced correctly. They have been brought in line with other workshop items and earlier ones have had a massive price reduction
- When obtaining Seeds from Crop Plots they no longer come with the “Grown By Prospector” Stat meaning they can be stacked with Wild Seeds
- Adding allow lists on water and food troughs so you can mark nearby animals as allowed to drink / eat from
This Week: Late Game Hitching Fix
Last week we talked about the improvements we wished to make to the ‘state’ of the mined stone deposits around the map. This was a project we were aiming to include in last week's patch but it was pulled out because of some unresolved issues that came up during testing. This week, it passed the internal testing phase and is ready for the public branch.
What is Late Game? Over time a prospect contains more and more "data" that is a delta from the base map data. Originally the game as developed for temporary prospects, and so a lot of the systems were not constructed for the scale Open World ends up with. So when we talk about Late Game, we mean after a number of hours in an Open World prospect, or even a long running mission.
What is hitching? Hitching can be caused by many reasons and we have progressively released fixes for many of these, but there have still been the occasional source of hitches. The end result looks the same, so it can be frustrating for users when we say we have fixed a source of hitching - but it appears not to be because they still experience it. Simply put, hitching is when the game "runs out of time" when preparing what to show on the screen. So to solve this, we need to offload the work somewhere. This specific instance of hitching occurred because as you ran around, voxels that had been mined would be loaded in - but their meshes generated on the main thread and were not multithreaded. Now they are and so the hitching is avoided.
For those who may have not read our last two posts, check out this excerpt from last week's blog:
The change we’re implementing is to do with how objects are loaded and unloaded. When these objects are loaded in, it happens simultaneously with all other objects in the area. As you traverse the map, you load different zones which then require all objects in that area to load. The process we’re specifically looking at here is loading in previously mined stone deposits in the state the player left them (that is every pickaxe swing that was done on the object). Due to the fact all of this loading (it could be in the thousands of instances) happens in one frame, it can cause hitches. This is especially bad at some points across the three different maps - and depending on where you are - you can constantly be loading and unloading these objects due to their relevancy range.The change involves placing all this ‘logic of loading’ on a separate thread allowing these objects to load in the background while you are playing rather than in a single instance on the main game thread. One of the interesting things about splitting things out to be on separate threads is that you can’t have the main thread or separate threads interacting with the same object simultaneously, otherwise, the data becomes corrupted and can be forced into bad states.This improvement will now be rolled out to all players, and we’ll still be looking at feedback and bug reports to make sure there are no other issues that may have slipped through. We’ll also be looking at performance reports, and analyzing the impact on late-game hitches across a range of different prospects.
Coming Soon: New Operations We are currently in the third phase of converting over missions on Styx and Olympus to ‘Operations’ that can be played in Open World.
Why aren't the Missions all Operations? Simply, time and complexity. Certain missions weren’t converted over to operations due to many reasons, including suitability to an Open World format, but also some requiring complete rebuilding to work in the new Operation system. We also wanted time to see how we needed to adjust our game in general, including and perhaps especially performance in Open World. Now things are more stable, we can look at moving more and more missions to Operations.
These ‘trickier’ missions are currently the ones receiving this work to convert them into Operations, and due to the extent of the reworking required, these will take some time to do. There will also be a robust testing process, as these changes will require them to be treated as ‘new operations’ and all steps and stages will have to go through the trial phase again.
The aim of this project is to provide more operations for people to play in Open World, and to make it so all content can be enjoyed in whatever format players prefer to play it in.
However, certain ‘exploration’ missions just do not work in an Open World game. Ultimately this is because these missions were developed to provide an exploration experience before there even was an Open World mode. Now that you can travel anywhere without limits, those missions are now pointless.
Currently, these are unlocked automatically in the mission tree when you complete the prior mission, and these may even be removed in the future if we feel they are more of a roadblock than content for players.
Next Week: Laika & Pug We mentioned last week that we were going to deliver Laika and the Pug this week, but the extent of the performance improvements meant we focused our entire effort on that instead. We have pushed these two new pooches to next week so we can spend some more time testing them out.
Your support makes these updates possible.
https://store.steampowered.com/bundle/40692/Icarus_Pets_Bundle/https://store.steampowered.com/bundle/35727/Icarus_Complete_the_Set/
Changelog v2.2.4.123130
New Content[expand type=details]
- Added various optimisations to voxel initialisation
- Voxel initialisation is now asynchronous - should reduce hitching when moving around level containing partially mined voxels
- Food and Water troughs now support 'allowlists' to only let certain NPCs interact with them, configure these lists by interacting with the deployed troughs
- Fixed issue where dog would sometimes just sit there barking at you, waiting for stick to be thrown, even though you'd already thrown it
- Added dynamic movement to dog tails
- Dogs should correctly turn to face you while waiting for you to throw the stick
[/expand]
Fixed[expand type=details]
- Update Mammoth Tusk item material to use bone hit effects instead of flesh
- Swapped added the bool stat to the mount to adding a modifier to the mount so theres a visual representation
- Update solo tree infobox to clarify that normal talents still apply when solo
- Add translatable string to solo tree inactive text
- Quick pass over talent placement to ensure consistent height / placement of benches and crafts
- Adding activate and deactivate audio for carts so the player knows when the state has been changed. Audio, event and replicated BP imp
- Add a check before the spawn location check to prevent autonomous spawns (Kea, Dreadwing, Drifters) from spawning if the player is within range of a spawn blocker
- Added Buffalo to Forest outposts
- Fixing single wall light trying to deploy the ceiling light instead
- Fixing single wall light on/off texture swaps as it was swapping out the wrong material slot
- Removed Item.Medicine from Medicine Bag (so it doesn't go inside itself)
- Added Any_Bag and Any_Backpack to sign icon options
- Fixed Deep Ore drills not scaling with their speed stat
- Updated drill UI to reflect area level scalling added recently
- Fixed chat box expanding with mount hp
- Fixed drop mesh for farming carts
- Fixed Seeding Cart icon
- Update Hyena Bait to require Gamey Meat instead of Fatty Tbone, so requires Antelope or Deer kills instead of Bears
- Fixed bug where cats and other animals would reset back to default colouring when retrieved from space
- Increase visible loadout slots and increased width of grid
- Added translatable strings to Orbital Exchange Interface
- Added extra functionality to water/food troughs to only allow creatures that have been whitelisted to interact
- Fix a guard condition when performing async voxel init
- Fixed new, consumption-related bug where AI combat behaviour wasn't being set correctly
- Added in extra logging to help track down issue with disappearing tames/mounts. Added validation to prevent instance of crash inside ProcessingComponent. Removed Styx_D_Escort debug sphere
- Changed the focused item to be the saddle youre sitting on along with its active state if it has an active state
- Scaled Dog_D down to 0.75x, adjusted locomotion set, adjusted max speed stat
- Removed editor-only flag check to fix build from failing
- Ensure no longer thrown for Mounts that haven't begun play yet
- Ensure no longer thrown for EditorPreviewActor mounts
- Removing Seeds 'grown by' stat so they can be stacked no matter what source they are obtained from
- Fixed stuttering movement on clients with Dog_C and D
- Resave crossbow workshop positioning
- Fixed bad movement setup on tamed Boar, resulting in significantly more movement speed than before
- Fixing Workshop Costs for the crossbows - the prices had not been balanced, the 2 earlier crossbows have had a dramatic price reduction, while the two later ones have been reorganised in the tree, one increased in price slightly and the other reduced
- TEMPEST: Fixed Stalker being named Striker
- Prevent placement of extractors on depleted exotic deposits
[/expand]
Future Content[expand type=details]
- Added stats for CHAC brand of workshop firearms
- Added text for CHAC rifle
- Adding Butchery and Advanced Butchery Bench
- Initial eagle setup checkin with base assets and anim bp, proper behavior tree to follow
- Added BLD_Railing_Thatch_Gate, BLD_Railing_Wood_INT_Gate, BLD_Railing_Reinforced_Wood_Gate, BLD_Railing_Iron_Gate, BLD_Railing_Concrete_Gate with animations
- Fix CHAC pistol muzzle flash position
- Slight resize and reposition of turret ammo indicator
- Turret player communications / visual pass: added light below the turret to signify ammo and target acquisition and added bars for ammo capacity to frame
- Fixed Pug fur not displaying correctly on NPC or Corpse. Reduced foot sliding in Pug AnimBP. Reduced Pug's default movement speed. Fixed Pug physics asset. Fixed Pug NPC using the wrong base class
- Fixed missing texture information on the bottom of the feet of the pug mesh, for both the regular and carcass textures
- Added 'Any_medicine' to the list of queries to put on the signs. Added item.medicine to the medical bag so it also counts as a medical item for sign use
- Basic Pass of Laika and Pug Item Setup
- Changed Terrenus to spawn based on the Bear spawn stat, this means they won't spawn on Easy Outposts and will have reduced spawn chance on easy difficulty missions/open world. This is a placeholder until new spawnstats are added
- Adding Pug Trophy
- Adding in base setup for Laika Assets, as well as harness model for future use, awaiting carcass textures
- Added functionality to the destroy button in hab loadouts
- Adding laika dog data table setup and adjustments to generic hand feed cre sound and updated correct feed water sound. Spacializer settings changes to pug and laika
- Added Laika corpse, more improvements to physics asset, cleaned up laika asset redirectors
- Improved Dog_D physics asset. Added asset validation for invalid NPC capsules
- Added 2 trophies for Laika as well as the carcass textures and materials on behalf of Marcos
- Adding Laika Trophies, Jumpsuit item icons, and recipes
- Added Laika harness and support for non-ridable tame equipment not inheriting from SeatBase
- Fixed Laika carcass name
- Small adjustment to laika and pug dog volumes of flinch and death
- Added new AnimBP for Dog_B
- Added extra movement to dog tails (some breeds more than others). Dogs will now wag their tails faster if they're looking at you
- Fixed issue where dog would sometimes just sit there barking at you, waiting for stick to be thrown, even though you'd already thrown it
- Added small amount of blended physics simulation to dog tails (and Laika's ears). Dogs should correctly turn to face you while waiting for you to throw the stick
- Adding Icons for Laika's Jumpsuit and adjusted recipe costs
- Feature locked new dog talents and recipes, pending future release
[/expand]