1. The Artisan of Glimmith
  2. News
  3. A small performance fix that should help with crashes on low-end hardware

A small performance fix that should help with crashes on low-end hardware

[p]So we've pushed a patch this afternoon. The changes are pretty simple:[/p]
  • [p]Fixed a dumb bug that caused the game to use 200MB more video memory than it should[/p]
  • [p]Made further optimizations to save another ~100MB of video memory[/p]
[p]But the dumb bug has a really funny story.[/p][p][/p][h2]The Investigation[/h2][p]It started yesterday when, after the patch, we got a few reports of crashes. Usually this means the patch has a programming error that needs to be fixed, but the reports were quite sparse (we only ended up getting around 7 of them in 24 hours). And when we looked further, the crashes were... weird.[/p][p][/p][p]Normally if the crash is caused by a bug in our code, it's triggered whenever players do a very specific thing. But in this case, the crashes were happening at seemingly random times. And moreover, they didn't just crash The Artisan of Glimmith... they sometimes crashed players' entire computers![/p][p][/p][p]When we looked at the hardware of the players having problems, we noticed something in common... these players were all running machines with Intel Iris Xe Graphics. This is an integrated GPU that ships with many low-end laptops, and it's not really meant to run high-end Unreal Engine games. In fact, it scores only 2608 on G3D Mark, and our minimum system requirements (a 1050Ti or similar) scores 6360.[/p][p][/p][p]However, it's used in about 1% of systems on Steam, which is still a lot:[/p][p]https://store.steampowered.com/hwsurvey/Steam-Hardware-Software-Survey-Welcome-to-Steam[/p][p][/p][p]To be honest, I was surprised that these systems were able to run Glimmith in the first place with only 40% of the minimum required graphics power, but apparently they had been able to play reasonably comfortably with a good degree of stability... until yesterday's patch![/p][p][/p][p]We peeked at the error messages and callstacks from the crashes, which revealed a whole slew of random crashes deep in Unreal's engine code, often relating to DirectX. Usually this means that the video card is out of memory and refusing to allocate more VRAM.[/p][p][/p][p]Sure enough, I checked in the task manager and discovered that the new build was using around 220MB more VRAM, which is about 10% more on LOW settings. We knew it would go up a little bit for all the new features we added (tutorial messages, area counter, progression tracking, etc.), but it didn't make any sense... there's no way those things would add up to 220MB.[/p][p][/p][p]So we ran a memreport and compared it to one from the previous build. And what I saw left me scratching my head even more. Starting from the March 27th patch, Glimmith now had a random 196MB 3D sky texture loaded into video memory. And I had never seen it before. It was called 01.01.[/p][p][/p][p]For reference, 196MB is absolutely massive for a texture, like this was a gorgeous 3D skybox for a high-end video game that wraps fully around you in all directions. And Glimmith wasn't using 01.01 at all. It was just... there. And it was wasting a ton of video memory (likely acting as the straw that broke the camel's back for machines with GPUs way below our minimum spec).[/p][p][/p][h2]WTF?[/h2][p][/p][p]We checked for all references to the object and found our culprit here:[/p][p][/p][p]Buried deep in the UI widgets, there was the tutorial image box—a feature we added to support those new hand-drawn graphics you'll find in some of the game's tutorial boxes. It also happened to be a feature that went live in yesterday's patch![/p][p][/p][p]The image box was set up with 01.01 as its default image. This was totally irrelevant to the game's functionality, because the default image is never used for this image box at all (our code immediately replaces it with the correct image). But Unreal had no way of knowing that, so 01.01 got packaged into the game and loaded into video memory all the time, at full quality, totally needlessly.[/p][p][/p][p]Why did 01.01 end up there as the default? Because 01.01 is the first texture alphabetically in the list of all textures in our library (which includes a bunch of asset packs and other files). If you create an image box and don't pick a default image, Unreal might just pick one for you.[/p][p][/p][p]After fixing this problem, we also poked around to see if we could find other VRAM optimizations. After all, if there were players with really low-end hardware that was just barely teetering on the verge of playability, a small change in VRAM requirements might create a massive improvement in stability for them.[/p][p][/p][p]We managed to find another 100MB of savings without much effort, mostly by compressing textures that were way higher quality than they needed to be. We'd have made these changes much sooner if we knew they would actually make a difference for players! (But our goal was to stay under 3GB of VRAM so we could run on 4GB cards, and we were already way below 3GB).[/p][p][/p][p]In any case, you shouldn't notice any visual differences as a result of the changes. If you do, please let us know.[/p][p][/p][h2]One other thing... [/h2][p]We also got reports from a couple of players who had much more powerful GPUs than the Intel Iris Xe Graphics, but were still suffering from the same instability.[/p][p][/p][p]In all such cases, it turned out that they were running laptops with both integrated GPUs (the Iris Xe) and discrete Nvidia GPUs, and their systems were choosing to run Glimmith using the integrated graphics (definitely not a good idea if you want the best possible performance in the game)! This is likely because Nvidia just hasn't yet learned that Glimmith benefits from the more powerful GPU (likely because it's not particularly demanding).[/p][p][/p][p]So if anyone out there is not getting the performance out of the game that they think they should, check if this might be the problem![/p][p][/p][p]To fix this issue, you need to override your system's assignment of which GPU is used for which program. For Nvidia users, you can use the NVIDIA Control Panel app to create overrides. Just go to Manage 3D settings -> Program Settings, and add Geri.exe (typically located at C:\\Program Files (x86)\\Steam\\steamapps\\common\\Geri\\) and set it to use the NVidia GPU.[/p][p][/p][p]Thanks again to all the players who shared their crash reports and system specs with us to help us identify the problem. Please try the main build on Steam again and let us know if you have any further issues.[/p][p][/p][p]Happy puzzling![/p][p][/p][p]~ Elyot Grant[/p][p]CEO and Game Director, Lunarch Studios[/p][p][/p][p][/p][p][/p]